@bnsights/bbsf-admin-portal 1.0.26 → 1.0.28
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 +3 -3
- package/bnsights-bbsf-admin-portal-1.0.28.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +234 -24
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/ActiveDirectories/active-directory/active-directory.component.js +1 -2
- package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js +1 -2
- package/esm2015/lib/Pages/authentication/auth-callback/auth-callback.component.js +1 -2
- package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +3 -2
- package/esm2015/lib/Pages/providers/provider/provider.component.js +95 -5
- package/esm2015/lib/Pages/sectors/sector/sector.component.js +1 -2
- package/esm2015/lib/Pages/shared/Enums/ProviderType.js +7 -0
- package/esm2015/lib/Pages/shared/Services/provider.service.js +7 -1
- package/esm2015/lib/Pages/shared/config/environment.js +2 -2
- package/esm2015/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.js +3 -0
- package/esm2015/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.js +3 -0
- package/esm2015/lib/Pages/users/users.component.js +1 -2
- package/esm2015/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.js +1 -2
- package/esm2015/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.js +1 -2
- package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +1 -2
- package/fesm2015/bnsights-bbsf-admin-portal.js +222 -24
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/providers/provider/provider.component.d.ts +23 -1
- package/lib/Pages/shared/Enums/ProviderType.d.ts +5 -0
- package/lib/Pages/shared/Services/provider.service.d.ts +4 -0
- package/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.d.ts +7 -0
- package/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.d.ts +6 -0
- package/package.json +3 -3
- package/bnsights-bbsf-admin-portal-1.0.26.tgz +0 -0
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { Component, ViewChild } from '@angular/core';
|
|
3
3
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import { CheckBoxOptions, ControlLayout, DropdownOptions, FilterItem, FilterType, InputType, PagingOptions, RadioButtonOptions, TextAreaOptions, TextBoxOptions, RadioButtonItem, FormOptions, ConfirmationModalOptions, PagingActionMode } from '@bnsights/bbsf-controls';
|
|
4
|
+
import { CheckBoxOptions, ControlLayout, DropdownOptions, FilterItem, FilterType, InputType, PagingOptions, RadioButtonOptions, TextAreaOptions, TextBoxOptions, RadioButtonItem, FormOptions, ConfirmationModalOptions, PagingActionMode, PhoneOptions } from '@bnsights/bbsf-controls';
|
|
5
5
|
import { ProviderModel } from '../../shared/models/ProviderModels/ProviderModel';
|
|
6
6
|
import { ProviderAttributeModel } from '../../shared/models/ProviderModels/ProviderAttributeModel';
|
|
7
7
|
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
8
8
|
import { saveAs } from 'file-saver';
|
|
9
|
+
import { ProviderType } from '../../shared/Enums/ProviderType';
|
|
10
|
+
import { EmailProviderTesterModel } from '../../shared/models/ProviderModels/EmailProviderTesterModel';
|
|
11
|
+
import { SMSProviderTesterModel } from '../../shared/models/ProviderModels/SMSProviderTesterModel';
|
|
9
12
|
import * as i0 from "@angular/core";
|
|
10
13
|
import * as i1 from "../../shared/Services/provider.service";
|
|
11
14
|
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
@@ -59,6 +62,13 @@ export class ProviderComponent {
|
|
|
59
62
|
//Select Default Providers
|
|
60
63
|
this.DefaultProviderForm = new FormGroup({});
|
|
61
64
|
this.DefaultProviders = [];
|
|
65
|
+
//Test Provider functions
|
|
66
|
+
this.emailProviderType = ProviderType.Emails;
|
|
67
|
+
this.smsProviderType = ProviderType.SMS;
|
|
68
|
+
//Test Email Model controls
|
|
69
|
+
this.testEmailForm = new FormGroup({});
|
|
70
|
+
//Test SMS Model controls
|
|
71
|
+
this.testSMSForm = new FormGroup({});
|
|
62
72
|
this.getAddProviderModel = () => {
|
|
63
73
|
let paramArray = [];
|
|
64
74
|
let ResultModel = this.AddProviderForm.value;
|
|
@@ -141,6 +151,40 @@ export class ProviderComponent {
|
|
|
141
151
|
this.getDefaultProviderFunction = (DefaultProviderModel) => {
|
|
142
152
|
return this.ProviderService.SubmitDefaultProviders(DefaultProviderModel);
|
|
143
153
|
};
|
|
154
|
+
this.getTestEmailModel = () => {
|
|
155
|
+
let paramArray = [];
|
|
156
|
+
let resultModel = this.testEmailForm.value;
|
|
157
|
+
let testEmailModel = new EmailProviderTesterModel();
|
|
158
|
+
testEmailModel.ProviderID = Number(this.testEmailProviderId);
|
|
159
|
+
testEmailModel.ProviderName = this.testEmailProviderName;
|
|
160
|
+
testEmailModel.ToEmail = resultModel.emailTo;
|
|
161
|
+
testEmailModel.Subject = resultModel.emailSubject;
|
|
162
|
+
testEmailModel.Body = resultModel.emailBody;
|
|
163
|
+
paramArray.push(testEmailModel);
|
|
164
|
+
return paramArray;
|
|
165
|
+
};
|
|
166
|
+
this.getTestEmailFunction = (testEmailModel) => {
|
|
167
|
+
return this.ProviderService.TestEmail(testEmailModel);
|
|
168
|
+
};
|
|
169
|
+
this.getTestSMSModel = () => {
|
|
170
|
+
let paramArray = [];
|
|
171
|
+
let resultModel = this.testSMSForm.value;
|
|
172
|
+
let testSMSModel = new SMSProviderTesterModel();
|
|
173
|
+
let internationalNumber = null;
|
|
174
|
+
if (resultModel.smsTo != null) {
|
|
175
|
+
internationalNumber = resultModel.smsTo.internationalNumber;
|
|
176
|
+
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
177
|
+
}
|
|
178
|
+
testSMSModel.ProviderID = Number(this.testSMSProviderId);
|
|
179
|
+
testSMSModel.ProviderName = this.testSMSProviderName;
|
|
180
|
+
testSMSModel.ToMobileNumber = internationalNumber;
|
|
181
|
+
testSMSModel.Message = resultModel.smsBody;
|
|
182
|
+
paramArray.push(testSMSModel);
|
|
183
|
+
return paramArray;
|
|
184
|
+
};
|
|
185
|
+
this.getTestSMSFunction = (testSMSModel) => {
|
|
186
|
+
return this.ProviderService.TestSMS(testSMSModel);
|
|
187
|
+
};
|
|
144
188
|
}
|
|
145
189
|
ngOnInit() {
|
|
146
190
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -262,7 +306,6 @@ export class ProviderComponent {
|
|
|
262
306
|
});
|
|
263
307
|
}
|
|
264
308
|
setEditProviderAttributes(typeFullName) {
|
|
265
|
-
debugger;
|
|
266
309
|
this.ProviderService.GetProviderAttributes(typeFullName).subscribe((result) => {
|
|
267
310
|
var resultObj = result;
|
|
268
311
|
//Set Provider type id on type change
|
|
@@ -307,7 +350,6 @@ export class ProviderComponent {
|
|
|
307
350
|
return [attributesOptions, attributesCount];
|
|
308
351
|
}
|
|
309
352
|
deleteAttribute(deletedAttribute, isAdd) {
|
|
310
|
-
debugger;
|
|
311
353
|
if (isAdd) {
|
|
312
354
|
let deletedAttrIndex = this.ProviderAttributesOptions.indexOf(deletedAttribute);
|
|
313
355
|
if (deletedAttrIndex !== -1) {
|
|
@@ -493,13 +535,61 @@ export class ProviderComponent {
|
|
|
493
535
|
window.location.reload();
|
|
494
536
|
});
|
|
495
537
|
}
|
|
538
|
+
//Test Email functions
|
|
539
|
+
showTestEmailModal(providerID, providerName, testEMailModal) {
|
|
540
|
+
this.utilityService.startBlockUI();
|
|
541
|
+
this.testEmailProviderId = providerID;
|
|
542
|
+
this.testEmailProviderName = providerName;
|
|
543
|
+
this.testEmailForm = new FormGroup({});
|
|
544
|
+
this.testEmailFormOptions = new FormOptions();
|
|
545
|
+
this.testEmailFormOptions.FormGroup = this.testEmailForm;
|
|
546
|
+
this.testEmailFormOptions.GetModelFunction = this.getTestEmailModel;
|
|
547
|
+
this.testEmailFormOptions.ServiceSubmitFunction = this.getTestEmailFunction;
|
|
548
|
+
this.emailTo = new TextBoxOptions();
|
|
549
|
+
this.emailTo.Name = "emailTo";
|
|
550
|
+
this.emailTo.LabelKey = "To";
|
|
551
|
+
this.emailTo.Type = InputType.Email;
|
|
552
|
+
this.emailTo.IsRequired = true;
|
|
553
|
+
this.emailSubject = new TextBoxOptions();
|
|
554
|
+
this.emailSubject.Name = "emailSubject";
|
|
555
|
+
this.emailSubject.LabelKey = "EmailSubject";
|
|
556
|
+
this.emailSubject.Type = InputType.Text;
|
|
557
|
+
this.emailSubject.IsRequired = true;
|
|
558
|
+
this.emailBody = new TextAreaOptions();
|
|
559
|
+
this.emailBody.Name = "emailBody";
|
|
560
|
+
this.emailBody.LabelKey = "EmailBody";
|
|
561
|
+
this.emailBody.IsRequired = true;
|
|
562
|
+
this.modalService.open(testEMailModal);
|
|
563
|
+
this.utilityService.stopBlockUI();
|
|
564
|
+
}
|
|
565
|
+
//Test SMS functions
|
|
566
|
+
showTestSMSModal(providerID, providerName, testSMSModal) {
|
|
567
|
+
this.utilityService.startBlockUI();
|
|
568
|
+
this.testSMSProviderId = providerID;
|
|
569
|
+
this.testSMSProviderName = providerName;
|
|
570
|
+
this.testSMSForm = new FormGroup({});
|
|
571
|
+
this.testSMSFormOptions = new FormOptions();
|
|
572
|
+
this.testSMSFormOptions.FormGroup = this.testSMSForm;
|
|
573
|
+
this.testSMSFormOptions.GetModelFunction = this.getTestSMSModel;
|
|
574
|
+
this.testSMSFormOptions.ServiceSubmitFunction = this.getTestSMSFunction;
|
|
575
|
+
this.smsTo = new PhoneOptions();
|
|
576
|
+
this.smsTo.Name = "smsTo";
|
|
577
|
+
this.smsTo.LabelKey = "To";
|
|
578
|
+
this.smsTo.IsRequired = true;
|
|
579
|
+
this.smsBody = new TextAreaOptions();
|
|
580
|
+
this.smsBody.Name = "smsBody";
|
|
581
|
+
this.smsBody.LabelKey = "SMS";
|
|
582
|
+
this.smsBody.IsRequired = true;
|
|
583
|
+
this.modalService.open(testSMSModal);
|
|
584
|
+
this.utilityService.stopBlockUI();
|
|
585
|
+
}
|
|
496
586
|
//On destroy
|
|
497
587
|
ngOnDestroy() {
|
|
498
588
|
this.requestHandlerService.destroyHandler();
|
|
499
589
|
}
|
|
500
590
|
}
|
|
501
591
|
ProviderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ProviderComponent, deps: [{ token: i1.ProviderService }, { token: i2.NgbModal }, { token: i3.AuthService }, { token: i3.BBSFTranslateService }, { token: i3.UtilityService }, { token: i4.PageInfoService }, { token: i3.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
502
|
-
ProviderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ProviderComponent, selector: "lib-provider", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ProviderPagingViewElement"], descendants: true }, { propertyName: "providerTypesDDL", first: true, predicate: ["providerTypesDDL"], descendants: true }, { propertyName: "sortingFilterDDL", first: true, predicate: ["sortingFilterDDL"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div *ngIf=\"ShowPageContent\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ProviderForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ProviderForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"ProviderForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #providerTypesDDL [options]=\"providerTypesFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #sortingFilterDDL [options]=\"sortingFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" d=\"applyFiltersBtn\"\r\n (click)=\"resetFilters()\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button href=\"javascript:;\" (click)=\"generateProviderJson()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\">\r\n <i class=\"fas fa-file-export me-1\"></i>\r\n {{utilityService.getResourceValue(\"GenerateProviderJson\")}}\r\n </button>\r\n\r\n <button type=\"button\" title='utilityService.getResourceValue(\"SelectDefaultProvider\")' class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showDefaultProviderModal(DefaultProviderModal)\">\r\n <i class=\"fas fa-hand-pointer me-1\"></i>\r\n {{utilityService.getResourceValue(\"SelectDefaultProvider\")}}\r\n </button>\r\n <button type=\"button\" title='utilityService.getResourceValue(\"Add\")' class=\"btn btn-sm btn-primary\" (click)=\"showAddProviderModal(AddProviderModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button> <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Default\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" *ngFor=\"let providerGroup of clientSidePagingResult\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let provider of providerGroup.providers\">\r\n <td>\r\n <div class=\"text-dark\">{{provider.providerName}}</div>\r\n <div>{{provider.description}}</div>\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-primary\" *ngIf=\"provider.isRunning;else other_content\">\r\n {{utilityService.getResourceValue(\"Running\")}}\r\n </span>\r\n <ng-template #other_content>\r\n <span class=\"badge badge-light-danger\">\r\n {{utilityService.getResourceValue(\"Stopped\")}}\r\n </span>\r\n </ng-template>\r\n\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-success fw-bolder\" *ngIf=\"provider.isDefault;else default_no\">\r\n {{utilityService.getResourceValue(\"Yes\")}}\r\n </span>\r\n <ng-template #default_no>\r\n <span class=\"badge badge-light fw-bolder\">\r\n {{utilityService.getResourceValue(\"No\")}}\r\n </span>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditProviderModal(provider.id,provider.idEncrypted , EditProviderModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteProviderModal(provider.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"providerGroup.providers.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tbody *ngIf=\"clientSidePagingResult.length == 0\">\r\n <tr>\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProviderListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ProviderPaging\" [group]=\"ProviderForm\" #ProviderPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!--end::Providers list-->\r\n</div>\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddProviderFormOptions\">\r\n\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextArea [options]=\"AddDescription\" [group]=\"AddProviderForm\">\r\n </BBSF-TextArea>\r\n <BBSF-DropdownList [options]=\"AddOrganizationOptions\" [group]=\"AddProviderForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddProviderForm\" (OnChange)=\"setAddProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n <div *ngIf=\"IsAttributesLoaded\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of ProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"AddProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseProviderModal id=\"CloseAddProviderModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Edit model -->\r\n<ng-template #EditProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditName\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescription\" [group]=\"EditProviderForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditTypeOptions\" [group]=\"EditProviderForm\" (OnChange)=\"setEditProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of EditProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"EditProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"EditProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditProviderModal id=\"CloseEditProviderModal\" type=\"button\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Default Provider Modal-->\r\n<ng-template #DefaultProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SelectDefaultProvider\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"DefaultProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let defProvider of DefaultProviders;let i=index;\">\r\n <h3 class=\"text-muted mb-4 fw-boldest\">{{defProvider.Name}}</h3>\r\n <input type=\"hidden\" value=\"{{defProvider.ID}}\" />\r\n <BBSF-RadioButton [options]=\"defProvider.ProvidersOption\" [group]=\"DefaultProviderForm\"></BBSF-RadioButton>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDefaultProviderModal id=\"CloseDefaultProviderModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.FormComponent, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { type: i6.RadioButtonComponent, selector: "BBSF-RadioButton", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display", "dropdownClass"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
592
|
+
ProviderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ProviderComponent, selector: "lib-provider", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ProviderPagingViewElement"], descendants: true }, { propertyName: "providerTypesDDL", first: true, predicate: ["providerTypesDDL"], descendants: true }, { propertyName: "sortingFilterDDL", first: true, predicate: ["sortingFilterDDL"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div *ngIf=\"ShowPageContent\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ProviderForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ProviderForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"ProviderForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #providerTypesDDL [options]=\"providerTypesFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #sortingFilterDDL [options]=\"sortingFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" d=\"applyFiltersBtn\"\r\n (click)=\"resetFilters()\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button href=\"javascript:;\" (click)=\"generateProviderJson()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\">\r\n <i class=\"fas fa-file-export me-1\"></i>\r\n {{utilityService.getResourceValue(\"GenerateProviderJson\")}}\r\n </button>\r\n\r\n <button type=\"button\" title='utilityService.getResourceValue(\"SelectDefaultProvider\")' class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showDefaultProviderModal(DefaultProviderModal)\">\r\n <i class=\"fas fa-hand-pointer me-1\"></i>\r\n {{utilityService.getResourceValue(\"SelectDefaultProvider\")}}\r\n </button>\r\n <button type=\"button\" title='utilityService.getResourceValue(\"Add\")' class=\"btn btn-sm btn-primary\" (click)=\"showAddProviderModal(AddProviderModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button> <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Default\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" *ngFor=\"let providerGroup of clientSidePagingResult\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let provider of providerGroup.providers\">\r\n <td>\r\n <div class=\"text-dark\">{{provider.providerName}}</div>\r\n <div>{{provider.description}}</div>\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-primary\" *ngIf=\"provider.isRunning;else other_content\">\r\n {{utilityService.getResourceValue(\"Running\")}}\r\n </span>\r\n <ng-template #other_content>\r\n <span class=\"badge badge-light-danger\">\r\n {{utilityService.getResourceValue(\"Stopped\")}}\r\n </span>\r\n </ng-template>\r\n\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-success fw-bolder\" *ngIf=\"provider.isDefault;else default_no\">\r\n {{utilityService.getResourceValue(\"Yes\")}}\r\n </span>\r\n <ng-template #default_no>\r\n <span class=\"badge badge-light fw-bolder\">\r\n {{utilityService.getResourceValue(\"No\")}}\r\n </span>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditProviderModal(provider.id,provider.idEncrypted , EditProviderModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteProviderModal(provider.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.providerTypeItemID==emailProviderType\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestEmailModal(provider.id,provider.providerName,TestEmailModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestEmail\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.providerTypeItemID==smsProviderType\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestSMSModal(provider.id,provider.providerName,TestSMSModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestSMS\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"providerGroup.providers.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tbody *ngIf=\"clientSidePagingResult.length == 0\">\r\n <tr>\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProviderListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ProviderPaging\" [group]=\"ProviderForm\" #ProviderPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!--end::Providers list-->\r\n</div>\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddProviderFormOptions\">\r\n\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextArea [options]=\"AddDescription\" [group]=\"AddProviderForm\">\r\n </BBSF-TextArea>\r\n <BBSF-DropdownList [options]=\"AddOrganizationOptions\" [group]=\"AddProviderForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddProviderForm\" (OnChange)=\"setAddProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n <div *ngIf=\"IsAttributesLoaded\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of ProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"AddProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseProviderModal id=\"CloseAddProviderModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Edit model -->\r\n<ng-template #EditProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditName\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescription\" [group]=\"EditProviderForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditTypeOptions\" [group]=\"EditProviderForm\" (OnChange)=\"setEditProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of EditProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"EditProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"EditProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditProviderModal id=\"CloseEditProviderModal\" type=\"button\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Default Provider Modal-->\r\n<ng-template #DefaultProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SelectDefaultProvider\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"DefaultProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let defProvider of DefaultProviders;let i=index;\">\r\n <h3 class=\"text-muted mb-4 fw-boldest\">{{defProvider.Name}}</h3>\r\n <input type=\"hidden\" value=\"{{defProvider.ID}}\" />\r\n <BBSF-RadioButton [options]=\"defProvider.ProvidersOption\" [group]=\"DefaultProviderForm\"></BBSF-RadioButton>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDefaultProviderModal id=\"CloseDefaultProviderModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test Email Modal-->\r\n<ng-template #TestEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestEmailServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testEmailFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailTo\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailSubject\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"emailBody\" [group]=\"testEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test SMS Modal-->\r\n<ng-template #TestSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestSMSServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testSMSFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"smsTo\" [group]=\"testSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"smsBody\" [group]=\"testSMSForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.FormComponent, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { type: i6.RadioButtonComponent, selector: "BBSF-RadioButton", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.PhoneComponent, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["open", "placement", "container", "autoClose", "display", "dropdownClass"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
503
593
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ProviderComponent, decorators: [{
|
|
504
594
|
type: Component,
|
|
505
595
|
args: [{
|
|
@@ -519,4 +609,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
|
|
|
519
609
|
type: ViewChild,
|
|
520
610
|
args: ['ConfirmationModalControl', { static: false }]
|
|
521
611
|
}] } });
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzUSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBS3JGLE9BQU8sRUFBRSxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFRbkMsTUFBTSxPQUFPLGlCQUFpQjtJQXNFNUIsWUFFVSxlQUFnQyxFQUNoQyxZQUFzQixFQUN0QixXQUF3QixFQUN4QixvQkFBMEMsRUFDM0MsY0FBOEIsRUFDN0IsZUFBZ0MsRUFDaEMscUJBQTRDO1FBTjVDLG9CQUFlLEdBQWYsZUFB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QUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFrQ1Usd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGVja0JveE9wdGlvbnMsIENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBSYWRpb0J1dHRvbk9wdGlvbnMsIFRleHRBcmVhT3B0aW9ucywgVGV4dEJveE9wdGlvbnMsIFJhZGlvQnV0dG9uSXRlbSwgRm9ybU9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL3Byb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm92aWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9Qcm92aWRlck1vZGVsJztcclxuaW1wb3J0IHsgUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCc7XHJcbmltcG9ydCB7IERlZmF1bHRQcm92aWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9EZWZhdWx0UHJvdmlkZXJNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgc2F2ZUFzfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm92aWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3ZpZGVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvdmlkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBTaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vUHJvdmlkZXIvXCI7XHJcblxyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICBQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgcHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbjogRHJvcGRvd25PcHRpb25zO1xyXG4gIHByb3ZpZGVyVHlwZXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgc29ydGluZ0ZpbHRlck9wdGlvbjogRHJvcGRvd25PcHRpb25zO1xyXG4gIHNvcnRpbmdGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0ZpbHRlckRhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBQcm92aWRlclBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBQcm92aWRlclBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBjbGllbnRTaWRlUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEBWaWV3Q2hpbGQoJ1Byb3ZpZGVyUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFnaW5nRWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vUmVxdWlyZWQgbGlzdHNcclxuICBQcm92aWRlclR5cGVzRmlsdGVyTGlzdDogYW55W10gPSBbXTtcclxuICBTb3J0aW5nRmlsdGVyTGlzdDogYW55W10gPSBbXTtcclxuICBUeXBlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgTG9hZGVkUHJvdmlkZXJzOiBhbnlbXSA9IFtdO1xyXG4gIE9yZ2FuaXphdGlvbnNMaXN0ID0gW107XHJcbiAgQFZpZXdDaGlsZCgncHJvdmlkZXJUeXBlc0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcm92aWRlclR5cGVzRERMOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3NvcnRpbmdGaWx0ZXJEREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydGluZ0ZpbHRlckRETDogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gIC8vUHJvdmlkZXIgYXR0cmlidXRlc1xyXG4gIFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM6IGFueVtdID0gW107XHJcbiAgUHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ6bnVtYmVyPTA7XHJcbiAgSXNBdHRyaWJ1dGVzTG9hZGVkOmJvb2xlYW49ZmFsc2U7XHJcblxyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgQWRkTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkRGVzY3JpcHRpb246IFRleHRBcmVhT3B0aW9ucztcclxuICBBZGRPcmdhbml6YXRpb25PcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkVHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRQcm92aWRlclR5cGVJdGVtSUQ6IG51bWJlciA9IDA7XHJcblxyXG4gIC8vLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRQcm92aWRlckZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIEVkaXROYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0RGVzY3JpcHRpb246IFRleHRBcmVhT3B0aW9ucztcclxuICBFZGl0VHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0UHJvdmlkZXJUeXBlSXRlbUlEOiBudW1iZXIgPSAwO1xyXG4gIEVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEOiBudW1iZXI9MDtcclxuICBFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICBFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgUHJvdmlkZXJJZDogbnVtYmVyO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVQcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgLy9TZWxlY3QgRGVmYXVsdCBQcm92aWRlcnNcclxuICBEZWZhdWx0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgRGVmYXVsdFByb3ZpZGVyczogYW55W10gPSBbXTtcclxuICBEZWZhdWx0UHJvdmlkZXJzUmFkaW9CdG5PcHRpb25zOiBSYWRpb0J1dHRvbk9wdGlvbnNbXTtcclxuXHJcbiAgY29uc3RydWN0b3JcclxuICAgIChcclxuICAgIHByaXZhdGUgUHJvdmlkZXJTZXJ2aWNlOiBQcm92aWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG5cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICAvL1BhZ2UgaGVhZGVyIChicmVhZGNydW1iIGFuZCB0aXRsZSlcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGU9dGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VydmljZVByb3ZpZGVyc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icz1bXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIikgLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX1cclxuXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcblxyXG4gICAgLy9vbiBsYW5nIGNoYW5nZWRcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PWZhbHNlO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG5cclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvL0luaXRpYWxpemUgZmlsdGVycyBhbmQgcGFnaW5nXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lk5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgLy8gUHJvdmlkZXIgVHlwZXMgRmlsdGVyIEluaXQgICBcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbi5OYW1lID0gXCJwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uXCJcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbi5MYWJlbEtleSA9IFwiUHJvdmlkZXJUeXBlc1wiXHJcbiAgICB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb24uUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZXJ2aWNlUHJvdmlkZXJUeXBlXCIpO1xyXG5cclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uXCJcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJ0eXBlc1wiXHJcbiAgICB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcblxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyT3B0aW9uID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyT3B0aW9uLk5hbWUgPSBcInNvcnRpbmdGaWx0ZXJPcHRpb25cIlxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyT3B0aW9uLkxhYmVsS2V5ID0gXCJTb3J0XCJcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlck9wdGlvbi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyT3B0aW9uLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic29ydGluZ0ZpbHRlck9wdGlvblwiXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic29ydElEXCJcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcblxyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLkFjdGlvblBvc3RVUkwgPSAgdGhpcy5BcGlVcmwgKyAnR2V0UHJvdmlkZXJzQnlGaWx0ZXInO1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl07XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLkRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIiwgXCJzb3J0aW5nRmlsdGVyT3B0aW9uXCJdO1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyLCB0aGlzLnByb3ZpZGVyVHlwZXNGaWx0ZXIsIHRoaXMuc29ydGluZ0ZpbHRlcl1cclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vTG9hZCBmaWx0ZXJzIGxpc3RzXHJcbiAgbG9hZExpc3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBsZXQgRHJvcGRvd25MaXN0cyA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgICAvL3RoaXMuT3JnYW5pemF0aW9uc0xpc3QgPSBEcm9wZG93bkxpc3RzLm9yZ2FuaXphdGlvbnM7XHJcbiAgICAgICAgLy90aGlzLlR5cGVzTGlzdCA9IERyb3Bkb3duTGlzdHMucHJvdmlkZXJUeXBlcztcclxuICAgICAgICB0aGlzLlByb3ZpZGVyVHlwZXNGaWx0ZXJMaXN0ID0gRHJvcGRvd25MaXN0cy5wcm92aWRlclR5cGVzRmlsdGVyO1xyXG4gICAgICAgIHRoaXMuU29ydGluZ0ZpbHRlckxpc3QgPSBEcm9wZG93bkxpc3RzLnNvcnRpbmdGaWx0ZXJMaXN0O1xyXG5cclxuICAgICAgICBsZXQgcHJvdmlkZXJUeXBlc0VsZW1lbnQgPSB0aGlzLnByb3ZpZGVyVHlwZXNEREwgYXMgYW55O1xyXG4gICAgICAgIGxldCBzb3J0aW5nRmlsdGVyRWxlbWVudCA9IHRoaXMuc29ydGluZ0ZpbHRlckRETCBhcyBhbnk7XHJcblxyXG5cclxuICAgICAgICBwcm92aWRlclR5cGVzRWxlbWVudC5VcGRhdGVEYXRhU291cmNlKHRoaXMuUHJvdmlkZXJUeXBlc0ZpbHRlckxpc3QpO1xyXG5cclxuICAgICAgICBzb3J0aW5nRmlsdGVyRWxlbWVudC5VcGRhdGVEYXRhU291cmNlKHRoaXMuU29ydGluZ0ZpbHRlckxpc3QpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5Jc0ZpbHRlckRhdGFMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldFByb3ZpZGVyTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudD10cnVlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpXHJcbiAgfVxyXG4gIHJlc2V0RmlsdGVycygpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJGb3JtLmNvbnRyb2xzW1wicHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvblwiXS5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLlByb3ZpZGVyRm9ybS5jb250cm9sc1tcInNvcnRpbmdGaWx0ZXJPcHRpb25cIl0uc2V0VmFsdWUoW10pO1xyXG4gICAgdGhpcy5Qcm92aWRlckZvcm0uY29udHJvbHNbXCJzZWFyY2hUZXh0Qm94XCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcbiAgc2VhcmNoQ2xpZW50U2lkZShzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQuZmlsdGVyKFxyXG4gICAgICAgIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm92aWRlck5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9KVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLlByb3ZpZGVyUGFnaW5nUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy9BdHRyaWJ1dGVzRnVuY3Rpb25cclxuICBzZXRBZGRQcm92aWRlckF0dHJpYnV0ZXModHlwZUZ1bGxOYW1lKXtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdldFByb3ZpZGVyQXR0cmlidXRlcyh0eXBlRnVsbE5hbWUpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHZhciByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICAvL1NldCBQcm92aWRlciB0eXBlIGlkIG9uIHR5cGUgY2hhbmdlXHJcbiAgICAgIHRoaXMuTG9hZGVkUHJvdmlkZXJzID0gcmVzdWx0T2JqLmxvYWRlZFByb3ZpZGVycztcclxuICAgICAgbGV0IHNlbGVjdGVkUHJvdmlkZXJUeXBlID0gdGhpcy5Mb2FkZWRQcm92aWRlcnMuZmluZChvYmogPT4ge1xyXG4gICAgICAgIHJldHVybiBvYmouZnVsbE5hbWUgPT09IHR5cGVGdWxsTmFtZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5BZGRQcm92aWRlclR5cGVJdGVtSUQgPSBzZWxlY3RlZFByb3ZpZGVyVHlwZS5wcm92aWRlclR5cGU7XHJcblxyXG4gICAgICAvL1NldCBhdHRyaWJ1dGVzIGFuZCBjb3VudFxyXG4gICAgICBsZXQgYXR0cmlidXRlcyA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gW107XHJcbiAgICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLmdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMoYXR0cmlidXRlcywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGRhdGFbMF07XHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQgPSBkYXRhWzFdO1xyXG4gICAgICB0aGlzLklzQXR0cmlidXRlc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSk7XHJcbn1cclxuXHJcbiAgc2V0RWRpdFByb3ZpZGVyQXR0cmlidXRlcyh0eXBlRnVsbE5hbWUpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuR2V0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIC8vU2V0IFByb3ZpZGVyIHR5cGUgaWQgb24gdHlwZSBjaGFuZ2VcclxuICAgICAgdGhpcy5Mb2FkZWRQcm92aWRlcnMgPSByZXN1bHRPYmoubG9hZGVkUHJvdmlkZXJzO1xyXG4gICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlclR5cGUgPSB0aGlzLkxvYWRlZFByb3ZpZGVycy5maW5kKG9iaiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5mdWxsTmFtZSA9PT0gdHlwZUZ1bGxOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlclR5cGVJdGVtSUQgPSBzZWxlY3RlZFByb3ZpZGVyVHlwZS5wcm92aWRlclR5cGU7XHJcblxyXG4gICAgICAvL1NldCBhdHRyaWJ1dGVzIGFuZCBjb3VudFxyXG4gICAgICBsZXQgYXR0cmlidXRlcyA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IFtdO1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5nZXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zKGF0dHJpYnV0ZXMsIGZhbHNlKTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGRhdGFbMF07XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc0NvdW50ID0gZGF0YVsxXTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMocHJvdmlkZXJBdHRyaWJ1dGVzOiBhbnlbXSwgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBhdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBhdHRyaWJ1dGVzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgYWN0aW9uSW5kaWNhdGU6IHN0cmluZyA9IGlzQWRkID8gXCJBZGRcIiA6IFwiRWRpdFwiO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm92aWRlckF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIGxldCBvYmplY3RBdHRyaWJ1dGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgICBsZXQgaXNFbmNyeXB0ZWQ6IGJvb2xlYW4gPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0uaXNFbmNyeXB0ZWQ7XHJcblxyXG4gICAgICBsZXQgQXR0cmlidXRlTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiQXR0cmlidXRlTmFtZVwiICsgaTtcclxuICAgICAgQXR0cmlidXRlTmFtZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQXR0cmlidXRlTmFtZS5WYWx1ZSA9IHByb3ZpZGVyQXR0cmlidXRlc1tpXS5uYW1lO1xyXG5cclxuXHJcbiAgICAgIGxldCBBdHRyaWJ1dGVWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkF0dHJpYnV0ZVZhbHVlXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5UeXBlID0gaXNFbmNyeXB0ZWQgPyBJbnB1dFR5cGUuUGFzc3dvcmQgOiBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuVmFsdWUgPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0udmFsdWU7XHJcbiAgICAgIEF0dHJpYnV0ZVZhbHVlLlJlbW92ZURlZmF1bHRQYXNzd29yZFZhbGlkYXRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgbGV0IEF0dHJpYnV0ZUVuY3J5cHRlZCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgQXR0cmlidXRlRW5jcnlwdGVkLk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiQXR0cmlidXRlRW5jcnlwdGVkXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVFbmNyeXB0ZWQuVmFsdWUgPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0uaXNFbmNyeXB0ZWQ7XHJcblxyXG4gICAgICBvYmplY3RBdHRyaWJ1dGVPcHRpb25zLnB1c2goQXR0cmlidXRlTmFtZSwgQXR0cmlidXRlVmFsdWUsIEF0dHJpYnV0ZUVuY3J5cHRlZCk7XHJcbiAgICAgIGF0dHJpYnV0ZXNPcHRpb25zLnB1c2gob2JqZWN0QXR0cmlidXRlT3B0aW9ucyk7XHJcbiAgICAgIGF0dHJpYnV0ZXNDb3VudCArPSAxO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBbYXR0cmlidXRlc09wdGlvbnMsIGF0dHJpYnV0ZXNDb3VudF07XHJcbiAgfVxyXG5cclxuICBkZWxldGVBdHRyaWJ1dGUoZGVsZXRlZEF0dHJpYnV0ZTogYW55LCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgbGV0IGRlbGV0ZWRBdHRySW5kZXg6IG51bWJlciA9IHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRBdHRyaWJ1dGUpO1xyXG4gICAgICBpZiAoZGVsZXRlZEF0dHJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRBdHRySW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZEF0dHJpYnV0ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkQXR0cmlidXRlW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBkZWxldGVkQXR0ckluZGV4OiBudW1iZXIgPSB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLmluZGV4T2YoZGVsZXRlZEF0dHJpYnV0ZSk7XHJcbiAgICAgIGlmIChkZWxldGVkQXR0ckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRBdHRySW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZEF0dHJpYnV0ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtLnJlbW92ZUNvbnRyb2woZGVsZXRlZEF0dHJpYnV0ZVtpXS5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuY3J5cHRlZENoYW5nZShpc0NoZWNrZWQsIG9wdGlvbiwgaXNBZGQpIHtcclxuICAgIGxldCB2YWx1ZUF0dHJpYnV0ZUluZGljYXRvciA9IGlzQWRkID8gXCJBZGRBdHRyaWJ1dGVWYWx1ZVwiIDogXCJFZGl0QXR0cmlidXRlVmFsdWVcIjtcclxuICAgIGxldCByZWFsdGVkVmFsdWVPcHRpb24gPSBvcHRpb24uZmluZChvYmogPT4ge1xyXG4gICAgICByZXR1cm4gb2JqLk5hbWUuc3RhcnRzV2l0aCh2YWx1ZUF0dHJpYnV0ZUluZGljYXRvcilcclxuICAgIH0pO1xyXG4gICAgaWYgKGlzQ2hlY2tlZClcclxuICAgICAgcmVhbHRlZFZhbHVlT3B0aW9uLlR5cGUgPSBJbnB1dFR5cGUuUGFzc3dvcmQ7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlYWx0ZWRWYWx1ZU9wdGlvbi5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8vQWRkIHByb3ZpZGVyXHJcbiAgc2hvd0FkZFByb3ZpZGVyTW9kYWwoYWRkUHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLmxvYWRBZGREcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5Pcmdhbml6YXRpb25zTGlzdCA9IHJlc3VsdE9iai5vcmdhbml6YXRpb25zO1xyXG4gICAgICB0aGlzLlR5cGVzTGlzdCA9IHJlc3VsdE9iai5wcm92aWRlclR5cGVzO1xyXG5cclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLklzQXR0cmlidXRlc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG5cclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkFkZFByb3ZpZGVyRm9ybVxyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkUHJvdmlkZXJNb2RlbDtcclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkUHJvdmlkZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgICAgdGhpcy5BZGROYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5OYW1lID0gXCJBZGROYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5MYWJlbEtleSA9IFwiUHJvdmlkZXJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLk5hbWUgPSBcIkFkZERlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzY3JpcHRpb24uTGFiZWxLZXkgPSBcIlByb3ZpZGVyRGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbi5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5OYW1lID0gXCJBZGRPcmdhbml6YXRpb25PcHRpb25zXCJcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLkxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIlxyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuRGF0YVNvdXJjZSA9IHRoaXMuT3JnYW5pemF0aW9uc0xpc3RcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuTmFtZSA9IFwiQWRkVHlwZU9wdGlvbnNcIlxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkxhYmVsS2V5ID0gXCJQcm92aWRlclR5cGVcIlxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLlR5cGVzTGlzdFxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihhZGRQcm92aWRlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuXHJcbiAgfVxyXG4gIGdldEFkZFByb3ZpZGVyTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkUHJvdmlkZXJGb3JtLnZhbHVlO1xyXG4gICAgbGV0IEFkZE1vZGVsOiBQcm92aWRlck1vZGVsID0gbmV3IFByb3ZpZGVyTW9kZWwoKTtcclxuICAgIEFkZE1vZGVsLlByb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLkFkZE5hbWU7XHJcbiAgICBBZGRNb2RlbC5EZXNjcmlwdGlvbiA9IFJlc3VsdE1vZGVsLkFkZERlc2NyaXB0aW9uO1xyXG4gICAgbGV0IG9yZ0FyciA9IFJlc3VsdE1vZGVsLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnM7XHJcbiAgICBsZXQgb3JnYW5pemF0aW9uSUQ6IG51bWJlcjtcclxuICAgIG9yZ2FuaXphdGlvbklEID0gTnVtYmVyKG9yZ0Fycik7XHJcblxyXG4gICAgQWRkTW9kZWwuT3JnYW5pemF0aW9uSUQgPSBSZXN1bHRNb2RlbC5BZGRPcmdhbml6YXRpb25PcHRpb25zICE9IG51bGwgPyBvcmdhbml6YXRpb25JRCA6IG51bGw7XHJcbiAgICBBZGRNb2RlbC5Qcm92aWRlclR5cGVJdGVtSUQgPSB0aGlzLkFkZFByb3ZpZGVyVHlwZUl0ZW1JRDtcclxuICAgIEFkZE1vZGVsLlR5cGVGdWxsTmFtZSA9IFJlc3VsdE1vZGVsLkFkZFR5cGVPcHRpb25zO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc0NvdW50OyBqKyspIHtcclxuICAgICAgbGV0IGFkZEF0dHJpYnV0ZU5hbWUgPSBSZXN1bHRNb2RlbFtcIkFkZEF0dHJpYnV0ZU5hbWVcIiArIGpdO1xyXG4gICAgICBpZiAoYWRkQXR0cmlidXRlTmFtZSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgbGV0IGFkZEF0dHJpYnV0ZVZhbHVlID0gUmVzdWx0TW9kZWxbXCJBZGRBdHRyaWJ1dGVWYWx1ZVwiICsgal07XHJcbiAgICAgIGxldCBhZGRBdHRyaWJ1dGVFbmNyeXB0ZWQgPSBSZXN1bHRNb2RlbFtcIkFkZEF0dHJpYnV0ZUVuY3J5cHRlZFwiICsgal07XHJcblxyXG4gICAgICBsZXQgcHJvdmlkZXJBdHRyOiBQcm92aWRlckF0dHJpYnV0ZU1vZGVsID0gbmV3IFByb3ZpZGVyQXR0cmlidXRlTW9kZWwoKTtcclxuICAgICAgcHJvdmlkZXJBdHRyLk5hbWUgPSBhZGRBdHRyaWJ1dGVOYW1lO1xyXG4gICAgICBwcm92aWRlckF0dHIuVmFsdWUgPSBhZGRBdHRyaWJ1dGVWYWx1ZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLklzRW5jcnlwdGVkID0gYWRkQXR0cmlidXRlRW5jcnlwdGVkO1xyXG4gICAgICBBZGRNb2RlbC5Qcm92aWRlckF0dHJpYnV0ZXMucHVzaChwcm92aWRlckF0dHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZFByb3ZpZGVyRnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkFkZFByb3ZpZGVyKEFkZE1vZGVsKVxyXG4gIH1cclxuXHJcbiAvL0VkaXQgcHJvdmlkZXJcclxuICBzaG93RWRpdFByb3ZpZGVyTW9kYWwocHJvdmlkZXJJRDogbnVtYmVyLCBwcm92aWRlcklERW5jOiBzdHJpbmcsIGVkaXRQcm92aWRlck1vZGFsKSB7XHJcbiAgICB0aGlzLlByb3ZpZGVySWQgPSBwcm92aWRlcklEO1xyXG5cclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdldEVkaXRQcm92aWRlckRhdGEocHJvdmlkZXJJREVuYykuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCBwcm92aWRlciA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLlR5cGVzTGlzdCA9IGxpc3RzLnByb3ZpZGVyVHlwZXM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRWRpdFByb3ZpZGVyRm9ybVxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRQcm92aWRlck1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlXHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0TmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLk5hbWUgPSBcIkVkaXROYW1lXCI7ICBcclxuICAgICAgdGhpcy5FZGl0TmFtZS5MYWJlbEtleSA9IFwiUHJvdmlkZXJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXROYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLlZhbHVlID0gcHJvdmlkZXIucHJvdmlkZXJOYW1lO1xyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24gPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk5hbWUgPSBcIkVkaXREZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5MYWJlbEtleSA9IFwiRGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uVmFsdWUgPSBwcm92aWRlci5kZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgIGxldCBzZWxlY3RlZFByb3ZpZGVyVHlwZSA9IHRoaXMuVHlwZXNMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5rZXkgPT0gcHJvdmlkZXIudHlwZUZ1bGxOYW1lOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5OYW1lID0gXCJFZGl0VHlwZU9wdGlvbnNcIlxyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5MYWJlbEtleSA9IFwiUHJvdmlkZXJUeXBlXCJcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuRGF0YVNvdXJjZSA9IHRoaXMuVHlwZXNMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuU2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkUHJvdmlkZXJUeXBlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJUeXBlSXRlbUlEID0gcHJvdmlkZXIucHJvdmlkZXJUeXBlSXRlbUlEO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEID0gcHJvdmlkZXIub3JnYW5pemF0aW9uSUQ7XHJcblxyXG4gICAgICBsZXQgZWRpdEF0dHJpYnV0ZXNSZXN1bHQ6IGFueSA9IHRoaXMuZ2V0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyhwcm92aWRlci5wcm92aWRlckF0dHJpYnV0ZXMsIGZhbHNlKTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGVkaXRBdHRyaWJ1dGVzUmVzdWx0WzBdO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNDb3VudCA9IGVkaXRBdHRyaWJ1dGVzUmVzdWx0WzFdO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGVkaXRQcm92aWRlck1vZGFsKTtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBnZXRFZGl0UHJvdmlkZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0UHJvdmlkZXJGb3JtLnZhbHVlO1xyXG4gICAgbGV0IEVkaXRNb2RlbCA9IG5ldyBQcm92aWRlck1vZGVsKCk7XHJcblxyXG4gICAgRWRpdE1vZGVsLklEID0gTnVtYmVyKHRoaXMuUHJvdmlkZXJJZCk7XHJcbiAgICBFZGl0TW9kZWwuUHJvdmlkZXJOYW1lID0gUmVzdWx0TW9kZWwuRWRpdE5hbWU7IC8vKCMjMSlcclxuICAgIEVkaXRNb2RlbC5EZXNjcmlwdGlvbiA9IFJlc3VsdE1vZGVsLkVkaXREZXNjcmlwdGlvblxyXG4gICAgRWRpdE1vZGVsLlR5cGVGdWxsTmFtZSA9IFJlc3VsdE1vZGVsLkVkaXRUeXBlT3B0aW9ucztcclxuICAgIEVkaXRNb2RlbC5Qcm92aWRlclR5cGVJdGVtSUQgPSB0aGlzLkVkaXRQcm92aWRlclR5cGVJdGVtSUQ7XHJcbiAgICBFZGl0TW9kZWwuT3JnYW5pemF0aW9uSUQgPSB0aGlzLkVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEO1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ7IGorKykge1xyXG4gICAgICBsZXQgZWRpdEF0dHJpYnV0ZU5hbWUgPSBSZXN1bHRNb2RlbFtcIkVkaXRBdHRyaWJ1dGVOYW1lXCIgKyBqXTtcclxuICAgICAgLy8gaWYgKGlzVW5kZWZpbmVkKGVkaXRBdHRyaWJ1dGVOYW1lKSlcclxuICAgICAgLy8gICBjb250aW51ZTtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiRWRpdEF0dHJpYnV0ZVZhbHVlXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWQgPSBSZXN1bHRNb2RlbFtcIkVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWRcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IHByb3ZpZGVyQXR0cjogUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCA9IG5ldyBQcm92aWRlckF0dHJpYnV0ZU1vZGVsKCk7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5OYW1lID0gZWRpdEF0dHJpYnV0ZU5hbWU7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5WYWx1ZSA9IGVkaXRBdHRyaWJ1dGVWYWx1ZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLklzRW5jcnlwdGVkID0gZWRpdEF0dHJpYnV0ZUVuY3J5cHRlZDtcclxuICAgICAgRWRpdE1vZGVsLlByb3ZpZGVyQXR0cmlidXRlcy5wdXNoKHByb3ZpZGVyQXR0cik7XHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFByb3ZpZGVyRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5FZGl0UHJvdmlkZXIoRWRpdE1vZGVsKVxyXG4gIH1cclxuXHJcbiAgIC8vRGVsZXRlIHByb3ZpZGVyXHJcbiAgc2hvd0RlbGV0ZVByb3ZpZGVyTW9kYWwocHJvdmlkZXJJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRlbGV0ZVByb3ZpZGVySWQgPSBwcm92aWRlcklEO1xyXG5cclxuICAgIC8vYXJyYXkgc2VudCB0byBzZXJ2aWNlIGZ1bmN0aW9uXHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIHBhcmFtQXJyYXkucHVzaCh0aGlzLmRlbGV0ZVByb3ZpZGVySWQpO1xyXG5cclxuICAgIHRoaXMuRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmRlbGV0ZVByb3ZpZGVyO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUHJvdmlkZXIgPSAoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Qcm92aWRlclNlcnZpY2UuRGVsZXRlUHJvdmlkZXIoaWQpO1xyXG4gIH1cclxuXHJcbiAgLy9EZWZhdWx0IHByb3ZpZGVyXHJcbiAgc2hvd0RlZmF1bHRQcm92aWRlck1vZGFsKGRlZmF1bHRQcm92aWRlck1vZGFsKSB7XHJcbiAgICB0aGlzLkRlZmF1bHRQcm92aWRlcnMgPSBbXTtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdldERlZmF1bHRQcm92aWRlcnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgbGlzdCA9IHJlc3VsdCBhcyBhbnk7XHJcblxyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtXHJcbiAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFByb3ZpZGVyTW9kZWw7XHJcbiAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXREZWZhdWx0UHJvdmlkZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwcm92aWRlcjogYW55ID0gbGlzdFtpXTtcclxuXHJcbiAgICAgICAgbGV0IFByb3ZpZGVyT3B0aW9uID0gbmV3IFJhZGlvQnV0dG9uT3B0aW9ucygpO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLk5hbWUgPSBcInByb3ZpZGVyT3B0aW9uX1wiICsgcHJvdmlkZXIucHJvdmlkZXJUeXBlSXRlbUlEO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgbGV0IGl0ZW1zOiBSYWRpb0J1dHRvbkl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcHJvdmlkZXIucHJvdmlkZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBsZXQgcHJvdmlkZXJJdGVtID0gcHJvdmlkZXIucHJvdmlkZXJzW2pdO1xyXG4gICAgICAgICAgbGV0IGl0ZW0gPSBuZXcgUmFkaW9CdXR0b25JdGVtKCk7XHJcbiAgICAgICAgICBpdGVtLlRleHQgPSBwcm92aWRlckl0ZW0udGV4dDtcclxuICAgICAgICAgIGl0ZW0uVmFsdWUgPSBwcm92aWRlckl0ZW0udmFsdWU7XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgUHJvdmlkZXJPcHRpb24uSXRlbXM9aXRlbXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlciA9IHByb3ZpZGVyLnByb3ZpZGVycy5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0uc2VsZWN0ZWQgPT0gdHJ1ZTsgfSlbMF07XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uVmFsdWUgPSB7XHJcbiAgICAgICAgICBUZXh0OiBzZWxlY3RlZFByb3ZpZGVyLnRleHQsXHJcbiAgICAgICAgICBWYWx1ZTogc2VsZWN0ZWRQcm92aWRlci52YWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGRlZlByb3ZpZGVyID0ge1xyXG4gICAgICAgICAgTmFtZTogcHJvdmlkZXIucHJvdmlkZXJUeXBlSXRlbU5hbWUsXHJcbiAgICAgICAgICBJRDogcHJvdmlkZXIucHJvdmlkZXJUeXBlSXRlbUlELFxyXG4gICAgICAgICAgUHJvdmlkZXJzT3B0aW9uOiBQcm92aWRlck9wdGlvblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJzLnB1c2goZGVmUHJvdmlkZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZGVmYXVsdFByb3ZpZGVyTW9kYWwpO1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldERlZmF1bHRQcm92aWRlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm0udmFsdWU7XHJcbiAgICBsZXQgZGVmYXVsdFByb3ZpZGVyc01vZGVsOiBEZWZhdWx0UHJvdmlkZXJNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkRlZmF1bHRQcm92aWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3ZpZGVySUQgPSB0aGlzLkRlZmF1bHRQcm92aWRlcnNbaV0uSUQ7XHJcbiAgICAgIGxldCBzZWxlY3RlZERlZlByb3ZpZGVySUQgPSBSZXN1bHRNb2RlbFtcInByb3ZpZGVyT3B0aW9uX1wiICsgcHJvdmlkZXJJRF07XHJcbiAgICAgIGxldCBkZWZQcm92aWRlTW9kZWw6IERlZmF1bHRQcm92aWRlck1vZGVsID0ge1xyXG4gICAgICAgIFByb3ZpZGVyVHlwZUl0ZW1JRDogcHJvdmlkZXJJRCxcclxuICAgICAgICBTZWxlY3RlZFByb3ZpZGVySUQ6IE51bWJlcihzZWxlY3RlZERlZlByb3ZpZGVySUQpLFxyXG4gICAgICAgIFByb3ZpZGVyVHlwZUl0ZW1OYW1lOiBcIlwiLFxyXG4gICAgICAgIFByb3ZpZGVyczogW11cclxuICAgICAgfTtcclxuICAgICAgZGVmYXVsdFByb3ZpZGVyc01vZGVsLnB1c2goZGVmUHJvdmlkZU1vZGVsKTtcclxuXHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goZGVmYXVsdFByb3ZpZGVyc01vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFByb3ZpZGVyRnVuY3Rpb24gPSAoRGVmYXVsdFByb3ZpZGVyTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLlN1Ym1pdERlZmF1bHRQcm92aWRlcnMoRGVmYXVsdFByb3ZpZGVyTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL0dlbmVyYXRlIHByb3ZpZGVyIGpzb25cclxuICBnZW5lcmF0ZVByb3ZpZGVySnNvbigpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdlbmVyYXRlUHJvdmlkZXJKc29uKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgQmxvYihbRmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyc1wiKSArIFwiLmpzb25cIjtcclxuICAgICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggIFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6IFNob3dQYWdlQ29udGVudD09dHJ1ZT8nYmxvY2snOidub25lJ31cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZExpc3RzKClcIiBuZ2JEcm9wZG93blRvZ2dsZSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIgaWQ9XCJGaWx0ZXJzRHJvcGRvd25cIiB0aXRsZT1cIkZpbHRlclwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkZpbHRlclwiKX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiRmlsdGVyc0Ryb3Bkb3duXCIgY2xhc3M9XCIgZmlsdGVyLWNvbnRhaW5lciBtZW51IG1lbnUtc3ViIG1lbnUtc3ViLWRyb3Bkb3duIG1lbnUtY29sdW1uIG1lbnUtcm91bmRlZCBtZW51LWdyYXktODAwIG1lbnUtc3RhdGUtYmctbGlnaHQtcHJpbWFyeSAgdy0yNTBweCB3LW1kLTUwMHB4IGZ3LWJvbGQgcHktMyBcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIlByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTcgcHktNVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjcHJvdmlkZXJUeXBlc0RETCBbb3B0aW9uc109XCJwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uXCIgW2dyb3VwXT1cIlByb3ZpZGVyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNzb3J0aW5nRmlsdGVyRERMIFtvcHRpb25zXT1cInNvcnRpbmdGaWx0ZXJPcHRpb25cIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5IHB2LXJlc2V0IGJ0bi1zbVwiIGQ9XCJhcHBseUZpbHRlcnNCdG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSZXNldFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvbiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImdlbmVyYXRlUHJvdmlkZXJKc29uKClcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtMyBibnNpZ2h0cy1idG4tZXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUtZXhwb3J0IG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkdlbmVyYXRlUHJvdmlkZXJKc29uXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPSd1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VsZWN0RGVmYXVsdFByb3ZpZGVyXCIpJyBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtMyBcIiAoY2xpY2spPVwic2hvd0RlZmF1bHRQcm92aWRlck1vZGFsKERlZmF1bHRQcm92aWRlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1oYW5kLXBvaW50ZXIgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VsZWN0RGVmYXVsdFByb3ZpZGVyXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGl0bGU9J3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIiknIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzaG93QWRkUHJvdmlkZXJNb2RhbChBZGRQcm92aWRlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBlbmQ6OkhlYWRlciAtLT5cclxuICAgICAgPCEtLSBiZWdpbjo6Qm9keSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN0YXR1c1wiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVmYXVsdFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBwcm92aWRlckdyb3VwIG9mIGNsaWVudFNpZGVQYWdpbmdSZXN1bHRcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHByb3ZpZGVyIG9mIHByb3ZpZGVyR3JvdXAucHJvdmlkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3Byb3ZpZGVyLnByb3ZpZGVyTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+e3twcm92aWRlci5kZXNjcmlwdGlvbn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIiAqbmdJZj1cInByb3ZpZGVyLmlzUnVubmluZztlbHNlIG90aGVyX2NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSdW5uaW5nXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI290aGVyX2NvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN0b3BwZWRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MgZnctYm9sZGVyXCIgKm5nSWY9XCJwcm92aWRlci5pc0RlZmF1bHQ7ZWxzZSBkZWZhdWx0X25vXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiWWVzXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRfbm8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodCBmdy1ib2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5vXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwic2hvd0VkaXRQcm92aWRlck1vZGFsKHByb3ZpZGVyLmlkLHByb3ZpZGVyLmlkRW5jcnlwdGVkICwgRWRpdFByb3ZpZGVyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlUHJvdmlkZXJNb2RhbChwcm92aWRlci5pZEVuY3J5cHRlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cInByb3ZpZGVyR3JvdXAucHJvdmlkZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cImNsaWVudFNpZGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRQcm92aWRlckxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJQcm92aWRlclBhZ2luZ1wiIFtncm91cF09XCJQcm92aWRlckZvcm1cIiAjUHJvdmlkZXJQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS1lbmQ6OlByb3ZpZGVycyBsaXN0LS0+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBBZGQgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQWRkUHJvdmlkZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvdmlkZXJcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZFByb3ZpZGVyRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkTmFtZVwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkFkZERlc2NyaXB0aW9uXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRPcmdhbml6YXRpb25PcHRpb25zXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkVHlwZU9wdGlvbnNcIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCIgKE9uQ2hhbmdlKT1cInNldEFkZFByb3ZpZGVyQXR0cmlidXRlcygkZXZlbnQpXCI+XHJcbiAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJJc0F0dHJpYnV0ZXNMb2FkZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyQXR0cmlidXRlTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvdmlkZXJBdHRyaWJ1dGVWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW5jcnlwdGVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzBdXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIiAoT25DaGFuZ2UpPVwiZW5jcnlwdGVkQ2hhbmdlKCRldmVudCxvcHRpb24sdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZUF0dHJpYnV0ZShvcHRpb24sdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIiBmYSBmYS10cmFzaCBoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZVByb3ZpZGVyTW9kYWwgaWQ9XCJDbG9zZUFkZFByb3ZpZGVyTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPCEtLSBFZGl0IG1vZGVsIC0tPlxyXG48bmctdGVtcGxhdGUgI0VkaXRQcm92aWRlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvdmlkZXJcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRQcm92aWRlckZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCIgW2dyb3VwXT1cIkVkaXRQcm92aWRlckZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJFZGl0RGVzY3JpcHRpb25cIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFR5cGVPcHRpb25zXCIgW2dyb3VwXT1cIkVkaXRQcm92aWRlckZvcm1cIiAoT25DaGFuZ2UpPVwic2V0RWRpdFByb3ZpZGVyQXR0cmlidXRlcygkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvdmlkZXJBdHRyaWJ1dGVOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZVZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbmNyeXB0ZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIEVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zO2xldCBpPWluZGV4O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMF1cIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cIkVkaXRQcm92aWRlckZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJlbmNyeXB0ZWRDaGFuZ2UoJGV2ZW50LG9wdGlvbix0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlQXR0cmlidXRlKG9wdGlvbix0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRQcm92aWRlck1vZGFsIGlkPVwiQ2xvc2VFZGl0UHJvdmlkZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1kZWxldGUgTW9kYWwtLT5cclxuPEJCU0YtQ29uZmlybWF0aW9uTW9kYWwgKm5nSWY9XCJkZWxldGVDb250cm9sTG9hZGVkXCIgW29wdGlvbnNdPVwiRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uc1wiIGlkPVwiQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCIgI0NvbmZpcm1hdGlvbk1vZGFsQ29udHJvbD48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcblxyXG48IS0tRGVmYXVsdCBQcm92aWRlciAgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNEZWZhdWx0UHJvdmlkZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VsZWN0RGVmYXVsdFByb3ZpZGVyXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IGRlZlByb3ZpZGVyIG9mIERlZmF1bHRQcm92aWRlcnM7bGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LW11dGVkIG1iLTQgZnctYm9sZGVzdFwiPnt7ZGVmUHJvdmlkZXIuTmFtZX19PC9oMz5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9XCJ7e2RlZlByb3ZpZGVyLklEfX1cIiAvPlxyXG4gICAgICAgICAgPEJCU0YtUmFkaW9CdXR0b24gW29wdGlvbnNdPVwiZGVmUHJvdmlkZXIuUHJvdmlkZXJzT3B0aW9uXCIgW2dyb3VwXT1cIkRlZmF1bHRQcm92aWRlckZvcm1cIj48L0JCU0YtUmFkaW9CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRGVmYXVsdFByb3ZpZGVyTW9kYWwgaWQ9XCJDbG9zZURlZmF1bHRQcm92aWRlck1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIG1lLTMgXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuIl19
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQXFCLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVTLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFLckYsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPbkcsTUFBTSxPQUFPLGlCQUFpQjtJQXlGNUIsWUFFVSxlQUFnQyxFQUNoQyxZQUFzQixFQUN0QixXQUF3QixFQUN4QixvQkFBMEMsRUFDM0MsY0FBOEIsRUFDN0IsZUFBZ0MsRUFDaEMscUJBQTRDO1FBTjVDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzNDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM3QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQWhHdEQsbUJBQW1CO1FBQ25CLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLFdBQU0sR0FBRyxzQkFBc0IsQ0FBQztRQUVoQyw4QkFBOEI7UUFDOUIsaUJBQVksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU9qQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFcEMseUJBQW9CLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLDJCQUFzQixHQUFVLEVBQUUsQ0FBQztRQUduQyxnQkFBZ0I7UUFDaEIsNEJBQXVCLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQUM5QixjQUFTLEdBQVUsRUFBRSxDQUFDO1FBQ3RCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBQzVCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUt2QixxQkFBcUI7UUFDckIsOEJBQXlCLEdBQVUsRUFBRSxDQUFDO1FBQ3RDLDRCQUF1QixHQUFRLENBQUMsQ0FBQztRQUNqQyx1QkFBa0IsR0FBUyxLQUFLLENBQUM7UUFHakMsb0JBQW9CO1FBQ3BCLG9CQUFlLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFNcEMsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBRWxDLHVCQUF1QjtRQUN2QixxQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUtyQywyQkFBc0IsR0FBVyxDQUFDLENBQUM7UUFDbkMsK0JBQTBCLEdBQVMsQ0FBQyxDQUFDO1FBQ3JDLGtDQUE2QixHQUFVLEVBQUUsQ0FBQztRQUMxQyxnQ0FBMkIsR0FBVyxDQUFDLENBQUM7UUFNeEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBR3JDLDBCQUEwQjtRQUMxQix3QkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QyxxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFHN0IseUJBQXlCO1FBQ3pCLHNCQUFpQixHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQ25DLDJCQUEyQjtRQUMzQixrQkFBYSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBUWxDLHlCQUF5QjtRQUN6QixnQkFBVyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBb1RoQyx3QkFBbUIsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQzdDLElBQUksUUFBUSxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xELFFBQVEsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUM1QyxRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7WUFDbEQsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDO1lBQ2hELElBQUksY0FBc0IsQ0FBQztZQUMzQixjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWhDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDN0YsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUN6RCxRQUFRLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7WUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckQsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELElBQUksZ0JBQWdCLElBQUksU0FBUztvQkFDOUIsU0FBUztnQkFFWixJQUFJLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxxQkFBcUIsR0FBRyxXQUFXLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXJFLElBQUksWUFBWSxHQUEyQixJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3hFLFlBQVksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3ZDLFlBQVksQ0FBQyxXQUFXLEdBQUcscUJBQXFCLENBQUM7Z0JBQ2pELFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDaEQ7WUFFRCxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQTtRQUVELDJCQUFzQixHQUFHLENBQUMsUUFBUSxFQUFtQixFQUFFO1lBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkQsQ0FBQyxDQUFBO1FBdURELHlCQUFvQixHQUFHLEdBQUcsRUFBRTtZQUMxQixJQUFJLFVBQVUsR0FBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM5QyxJQUFJLFNBQVMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBRXBDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxTQUFTLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPO1lBQ3RELFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQTtZQUNuRCxTQUFTLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUM7WUFDckQsU0FBUyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUMzRCxTQUFTLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztZQUUzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6RCxJQUFJLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDN0Qsc0NBQXNDO2dCQUN0QyxjQUFjO2dCQUNkLElBQUksa0JBQWtCLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFdkUsSUFBSSxZQUFZLEdBQTJCLElBQUksc0JBQXNCLEVBQUUsQ0FBQztnQkFDeEUsWUFBWSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztnQkFDdEMsWUFBWSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQztnQkFDeEMsWUFBWSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQztnQkFDbEQsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNqRDtZQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFBO1FBRUQsNEJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQW1CLEVBQUU7WUFDdkQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNyRCxDQUFDLENBQUE7UUFxQkQsbUJBQWMsR0FBRyxDQUFDLEVBQVUsRUFBbUIsRUFBRTtZQUMvQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQTtRQW9ERCw0QkFBdUIsR0FBRyxHQUFHLEVBQUU7WUFDN0IsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7WUFDakQsSUFBSSxxQkFBcUIsR0FBMkIsRUFBRSxDQUFDO1lBRXZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxlQUFlLEdBQXlCO29CQUMxQyxrQkFBa0IsRUFBRSxVQUFVO29CQUM5QixrQkFBa0IsRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUM7b0JBQ2pELG9CQUFvQixFQUFFLEVBQUU7b0JBQ3hCLFNBQVMsRUFBRSxFQUFFO2lCQUNkLENBQUM7Z0JBQ0YscUJBQXFCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBRTdDO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQTtRQUVELCtCQUEwQixHQUFHLENBQUMsb0JBQW9CLEVBQW1CLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDMUUsQ0FBQyxDQUFBO1FBOENELHNCQUFpQixHQUFHLEdBQUcsRUFBRTtZQUN2QixJQUFJLFVBQVUsR0FBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDM0MsSUFBSSxjQUFjLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1lBRXBELGNBQWMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzdELGNBQWMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ3pELGNBQWMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQTtZQUM1QyxjQUFjLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFDbEQsY0FBYyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO1lBRTVDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEMsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFBO1FBRUQseUJBQW9CLEdBQUcsQ0FBQyxjQUFjLEVBQW1CLEVBQUU7WUFDekQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUN2RCxDQUFDLENBQUE7UUE2QkQsb0JBQWUsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3pDLElBQUksWUFBWSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUVoRCxJQUFJLG1CQUFtQixHQUFXLElBQUksQ0FBQztZQUN2QyxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUM3QixtQkFBbUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLG1CQUE2QixDQUFDO2dCQUN0RSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDckQsWUFBWSxDQUFDLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQTtZQUNqRCxZQUFZLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFFM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QixPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUE7UUFFRCx1QkFBa0IsR0FBRyxDQUFDLFlBQVksRUFBbUIsRUFBRTtZQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ25ELENBQUMsQ0FBQTtJQWhuQkksQ0FBQztJQUlBLFFBQVE7O1lBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsb0NBQW9DO1lBQ3BDLGVBQWUsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBQ2xGLGVBQWUsQ0FBQyxlQUFlLEdBQUM7Z0JBQzdCLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUcsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7Z0JBQ2hILEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQzthQUUzRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUMsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxlQUFlLEdBQUMsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUE7WUFFRixpQkFBaUI7WUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7S0FBQTtJQUVELCtCQUErQjtJQUMvQixjQUFjO1FBQ1osZUFBZTtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUE7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQTtRQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3JGLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtRQUVuQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFBO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFBO1FBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFBO1FBRXBELGdDQUFnQztRQUNoQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxHQUFHLDJCQUEyQixDQUFBO1FBQ2pFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFBO1FBQ3pELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXpHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsMkJBQTJCLENBQUE7UUFDdEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQTtRQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUE7UUFHN0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQTtRQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQTtRQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcscUJBQXFCLENBQUE7UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUE7UUFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFHeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUM7UUFDMUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsMkJBQTJCLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2xHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVsRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLFNBQVM7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3hELElBQUksYUFBYSxHQUFHLE1BQWEsQ0FBQTtnQkFDakMsdURBQXVEO2dCQUN2RCwrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxhQUFhLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUM7Z0JBRXpELElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGdCQUF1QixDQUFDO2dCQUN4RCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBdUIsQ0FBQztnQkFHeEQsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBRXBFLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUc5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHFCQUFxQixDQUFDLE1BQU07UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDbkMsQ0FBQztJQUNELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQW9CLENBQUM7UUFDeEMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELGdCQUFnQixDQUFDLFdBQVc7UUFDMUIsSUFBSSxXQUFXO1lBQ2IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQzlELFVBQVUsSUFBSTtnQkFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLENBQUMsQ0FBQyxDQUFBOztZQUVKLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDNUQsQ0FBQztJQUVELG9CQUFvQjtJQUNwQix3QkFBd0IsQ0FBQyxZQUFZO1FBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDNUUsSUFBSSxTQUFTLEdBQUcsTUFBYSxDQUFDO1lBQzlCLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUM7WUFDakQsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekQsT0FBTyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQTtZQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7WUFFL0QsMEJBQTBCO1lBQzFCLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLElBQUksR0FBUSxJQUFJLENBQUMsNEJBQTRCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRWpDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVDLHlCQUF5QixDQUFDLFlBQVk7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM1RSxJQUFJLFNBQVMsR0FBRyxNQUFhLENBQUM7WUFDOUIscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQztZQUNqRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFBO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixDQUFDLFlBQVksQ0FBQztZQUVoRSwwQkFBMEI7WUFDMUIsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLElBQUksSUFBSSxHQUFRLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDRCQUE0QixDQUFDLGtCQUF5QixFQUFFLEtBQWM7UUFDcEUsSUFBSSxpQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFDbEMsSUFBSSxlQUFlLEdBQVcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksY0FBYyxHQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUVsRCxJQUFJLHNCQUFzQixHQUFVLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFdBQVcsR0FBWSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFFN0QsSUFBSSxhQUFhLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN6QyxhQUFhLENBQUMsSUFBSSxHQUFHLGNBQWMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQzFELGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQy9CLGFBQWEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNwQyxhQUFhLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUdqRCxJQUFJLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQzFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUM1RCxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNoQyxjQUFjLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN4RSxjQUFjLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNuRCxjQUFjLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDO1lBRXRELElBQUksa0JBQWtCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUMvQyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsY0FBYyxHQUFHLG9CQUFvQixHQUFHLENBQUMsQ0FBQztZQUNwRSxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBRTdELHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDL0UsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDL0MsZUFBZSxJQUFJLENBQUMsQ0FBQztTQUV0QjtRQUNELE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZUFBZSxDQUFDLGdCQUFxQixFQUFFLEtBQWM7UUFDbkQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLGdCQUFnQixHQUFXLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN4RixJQUFJLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDOUQ7YUFDRjtTQUNGO2FBQ0k7WUFDSCxJQUFJLGdCQUFnQixHQUFXLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM1RixJQUFJLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvRDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSztRQUN0QyxJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1FBQ2pGLElBQUksa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFNBQVM7WUFDWCxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7WUFFN0Msa0JBQWtCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFFN0MsQ0FBQztJQUdELGNBQWM7SUFDZCxvQkFBb0IsQ0FBQyxnQkFBZ0I7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0QsSUFBSSxTQUFTLEdBQUcsTUFBYSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztZQUV6QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUVoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRXhDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQTtZQUM1RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQ3hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDaEYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFBO1lBRWhFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUcvQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcscUJBQXFCLENBQUM7WUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRWpDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUE7WUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUE7WUFDckQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUE7WUFDL0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNyRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUU5QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUE7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFBO1lBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBR0wsQ0FBQztJQXFDRixlQUFlO0lBQ2QscUJBQXFCLENBQUMsVUFBa0IsRUFBRSxhQUFxQixFQUFFLGlCQUFpQjtRQUNoRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QixJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNFLElBQUksU0FBUyxHQUFHLE1BQWEsQ0FBQztZQUM5QixJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQy9CLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBRXJDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtZQUM5RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQzFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7WUFDbEYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFBO1lBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUE7WUFHdkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7WUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztZQUU1QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFFbEQsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVySSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUE7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFBO1lBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7WUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUM7WUFFMUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztZQUMxRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUUxRCxJQUFJLG9CQUFvQixHQUFRLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEcsSUFBSSxDQUFDLDZCQUE2QixHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQywyQkFBMkIsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQWtDQSxpQkFBaUI7SUFDbEIsdUJBQXVCLENBQUMsVUFBa0I7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUVuQyxnQ0FBZ0M7UUFDaEMsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO1FBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzRSxJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBQy9ELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUVwRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQU1ELGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxvQkFBb0I7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUQsSUFBSSxJQUFJLEdBQUcsTUFBYSxDQUFDO1lBRXpCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUM1QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQTtZQUNwRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1lBQ2hGLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDeEYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFBO1lBRXBFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLFFBQVEsR0FBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTVCLElBQUksY0FBYyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDOUMsY0FBYyxDQUFDLElBQUksR0FBRyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3RFLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDakMsY0FBYyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUNuRCxJQUFJLEtBQUssR0FBc0IsRUFBRSxDQUFDO2dCQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2xELElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLElBQUksSUFBSSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO29CQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQixjQUFjLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQztpQkFDNUI7Z0JBRUQsSUFBSSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRyxjQUFjLENBQUMsS0FBSyxHQUFHO29CQUNyQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtvQkFDM0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7aUJBQzlCLENBQUM7Z0JBSUYsSUFBSSxXQUFXLEdBQUc7b0JBQ2hCLElBQUksRUFBRSxRQUFRLENBQUMsb0JBQW9CO29CQUNuQyxFQUFFLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjtvQkFDL0IsZUFBZSxFQUFFLGNBQWM7aUJBQ2hDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN6QztZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFL0MsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBMEJELHdCQUF3QjtJQUN4QixvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9ELElBQUksT0FBTyxHQUFHLE1BQWEsQ0FBQTtZQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUMzRSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0Qsc0JBQXNCO0lBQ3RCLGtCQUFrQixDQUFDLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxjQUFjO1FBQ3pFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWSxDQUFDO1FBRTFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFBO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDcEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUc1RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUUvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBcUJELG9CQUFvQjtJQUNwQixnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFlBQW9CLEVBQUUsWUFBWTtRQUNyRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQztRQUV4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtRQUNwRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBR3hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUU3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBeUJELFlBQVk7SUFDWixXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7OytHQXR0QlUsaUJBQWlCO21HQUFqQixpQkFBaUIscWZDdkI5QixzNnJCQWljQTs0RkQxYWEsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixXQUFXLEVBQUUsMkJBQTJCO2lCQUN6Qzt5UkFtQjRELGFBQWE7c0JBQXZFLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQVFQLGdCQUFnQjtzQkFBakUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUFqRSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFrQ1Usd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGVja0JveE9wdGlvbnMsIENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBSYWRpb0J1dHRvbk9wdGlvbnMsIFRleHRBcmVhT3B0aW9ucywgVGV4dEJveE9wdGlvbnMsIFJhZGlvQnV0dG9uSXRlbSwgRm9ybU9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSwgSHRtbEVkaXRvck9wdGlvbnMsIFBob25lT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL3Byb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm92aWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9Qcm92aWRlck1vZGVsJztcclxuaW1wb3J0IHsgUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCc7XHJcbmltcG9ydCB7IERlZmF1bHRQcm92aWRlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9EZWZhdWx0UHJvdmlkZXJNb2RlbCc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgc2F2ZUFzfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvdmlkZXJUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL0VudW1zL1Byb3ZpZGVyVHlwZSc7XHJcbmltcG9ydCB7IEVtYWlsUHJvdmlkZXJUZXN0ZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvRW1haWxQcm92aWRlclRlc3Rlck1vZGVsJztcclxuaW1wb3J0IHsgU01TUHJvdmlkZXJUZXN0ZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvU01TUHJvdmlkZXJUZXN0ZXJNb2RlbCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcHJvdmlkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm92aWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL1Byb3ZpZGVyL1wiO1xyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICBQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgcHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbjogRHJvcGRvd25PcHRpb25zO1xyXG4gIHByb3ZpZGVyVHlwZXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgc29ydGluZ0ZpbHRlck9wdGlvbjogRHJvcGRvd25PcHRpb25zO1xyXG4gIHNvcnRpbmdGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0ZpbHRlckRhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBQcm92aWRlclBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBQcm92aWRlclBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBjbGllbnRTaWRlUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEBWaWV3Q2hpbGQoJ1Byb3ZpZGVyUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGFnaW5nRWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vUmVxdWlyZWQgbGlzdHNcclxuICBQcm92aWRlclR5cGVzRmlsdGVyTGlzdDogYW55W10gPSBbXTtcclxuICBTb3J0aW5nRmlsdGVyTGlzdDogYW55W10gPSBbXTtcclxuICBUeXBlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgTG9hZGVkUHJvdmlkZXJzOiBhbnlbXSA9IFtdO1xyXG4gIE9yZ2FuaXphdGlvbnNMaXN0ID0gW107XHJcbiAgQFZpZXdDaGlsZCgncHJvdmlkZXJUeXBlc0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcm92aWRlclR5cGVzRERMOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3NvcnRpbmdGaWx0ZXJEREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgc29ydGluZ0ZpbHRlckRETDogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gIC8vUHJvdmlkZXIgYXR0cmlidXRlc1xyXG4gIFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM6IGFueVtdID0gW107XHJcbiAgUHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ6bnVtYmVyPTA7XHJcbiAgSXNBdHRyaWJ1dGVzTG9hZGVkOmJvb2xlYW49ZmFsc2U7XHJcblxyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgQWRkTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkRGVzY3JpcHRpb246IFRleHRBcmVhT3B0aW9ucztcclxuICBBZGRPcmdhbml6YXRpb25PcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkVHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRQcm92aWRlclR5cGVJdGVtSUQ6IG51bWJlciA9IDA7XHJcblxyXG4gIC8vLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRQcm92aWRlckZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIEVkaXROYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0RGVzY3JpcHRpb246IFRleHRBcmVhT3B0aW9ucztcclxuICBFZGl0VHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0UHJvdmlkZXJUeXBlSXRlbUlEOiBudW1iZXIgPSAwO1xyXG4gIEVkaXRQcm92aWRlck9yZ2FuaXphdGlvbklEOiBudW1iZXI9MDtcclxuICBFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICBFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgUHJvdmlkZXJJZDogbnVtYmVyO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVQcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgLy9TZWxlY3QgRGVmYXVsdCBQcm92aWRlcnNcclxuICBEZWZhdWx0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgRGVmYXVsdFByb3ZpZGVyczogYW55W10gPSBbXTtcclxuICBEZWZhdWx0UHJvdmlkZXJzUmFkaW9CdG5PcHRpb25zOiBSYWRpb0J1dHRvbk9wdGlvbnNbXTtcclxuXHJcbiAgLy9UZXN0IFByb3ZpZGVyIGZ1bmN0aW9uc1xyXG4gIGVtYWlsUHJvdmlkZXJUeXBlID0gUHJvdmlkZXJUeXBlLkVtYWlscztcclxuICBzbXNQcm92aWRlclR5cGUgPSBQcm92aWRlclR5cGUuU01TO1xyXG4gIC8vVGVzdCBFbWFpbCBNb2RlbCBjb250cm9sc1xyXG4gIHRlc3RFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICB0ZXN0RW1haWxGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICBlbWFpbFRvOiBUZXh0Qm94T3B0aW9ucztcclxuICBlbWFpbFN1YmplY3Q6IFRleHRCb3hPcHRpb25zO1xyXG4gIGVtYWlsQm9keTogVGV4dEFyZWFPcHRpb25zO1xyXG4gIHRlc3RFbWFpbFByb3ZpZGVySWQ6IG51bWJlcjtcclxuICB0ZXN0RW1haWxQcm92aWRlck5hbWU6IHN0cmluZztcclxuXHJcbiAgLy9UZXN0IFNNUyBNb2RlbCBjb250cm9sc1xyXG4gIHRlc3RTTVNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgdGVzdFNNU0Zvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIHNtc1RvOiBQaG9uZU9wdGlvbnM7XHJcbiAgc21zQm9keTogVGV4dEFyZWFPcHRpb25zO1xyXG4gIHRlc3RTTVNQcm92aWRlcklkOiBudW1iZXI7XHJcbiAgdGVzdFNNU1Byb3ZpZGVyTmFtZTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvclxyXG4gICAgKFxyXG4gICAgcHJpdmF0ZSBQcm92aWRlclNlcnZpY2U6IFByb3ZpZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2VcclxuICAgICkge31cclxuXHJcblxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIC8vUGFnZSBoZWFkZXIgKGJyZWFkY3J1bWIgYW5kIHRpdGxlKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZT10aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZXJ2aWNlUHJvdmlkZXJzXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzPVtcclxuICAgICAgIHt0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSAsIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlfSxcclxuICAgICAgIHt0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlfVxyXG5cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcbiAgICAvL29uIGxhbmcgY2hhbmdlZFxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9ZmFsc2U7XHJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIH0pXHJcblxyXG4gICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vSW5pdGlhbGl6ZSBmaWx0ZXJzIGFuZCBwYWdpbmdcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5IaWRlTGFiZWwgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICAvLyBQcm92aWRlciBUeXBlcyBGaWx0ZXIgSW5pdCAgIFxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uLk5hbWUgPSBcInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIlxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uLkxhYmVsS2V5ID0gXCJQcm92aWRlclR5cGVzXCJcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbi5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlcnZpY2VQcm92aWRlclR5cGVcIik7XHJcblxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIlxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInR5cGVzXCJcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uTmFtZSA9IFwic29ydGluZ0ZpbHRlck9wdGlvblwiXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uTGFiZWxLZXkgPSBcIlNvcnRcIlxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyT3B0aW9uLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzb3J0aW5nRmlsdGVyT3B0aW9uXCJcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzb3J0SURcIlxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuXHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuQWN0aW9uUG9zdFVSTCA9ICB0aGlzLkFwaVVybCArICdHZXRQcm92aWRlcnNCeUZpbHRlcic7XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiXTtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuRHJvcGRvd25GaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wicHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvblwiLCBcInNvcnRpbmdGaWx0ZXJPcHRpb25cIl07XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXIsIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlciwgdGhpcy5zb3J0aW5nRmlsdGVyXVxyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9Mb2FkIGZpbHRlcnMgbGlzdHNcclxuICBsb2FkTGlzdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuSXNGaWx0ZXJEYXRhTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBEcm9wZG93bkxpc3RzID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICAgIC8vdGhpcy5Pcmdhbml6YXRpb25zTGlzdCA9IERyb3Bkb3duTGlzdHMub3JnYW5pemF0aW9ucztcclxuICAgICAgICAvL3RoaXMuVHlwZXNMaXN0ID0gRHJvcGRvd25MaXN0cy5wcm92aWRlclR5cGVzO1xyXG4gICAgICAgIHRoaXMuUHJvdmlkZXJUeXBlc0ZpbHRlckxpc3QgPSBEcm9wZG93bkxpc3RzLnByb3ZpZGVyVHlwZXNGaWx0ZXI7XHJcbiAgICAgICAgdGhpcy5Tb3J0aW5nRmlsdGVyTGlzdCA9IERyb3Bkb3duTGlzdHMuc29ydGluZ0ZpbHRlckxpc3Q7XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlclR5cGVzRWxlbWVudCA9IHRoaXMucHJvdmlkZXJUeXBlc0RETCBhcyBhbnk7XHJcbiAgICAgICAgbGV0IHNvcnRpbmdGaWx0ZXJFbGVtZW50ID0gdGhpcy5zb3J0aW5nRmlsdGVyRERMIGFzIGFueTtcclxuXHJcblxyXG4gICAgICAgIHByb3ZpZGVyVHlwZXNFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5Qcm92aWRlclR5cGVzRmlsdGVyTGlzdCk7XHJcblxyXG4gICAgICAgIHNvcnRpbmdGaWx0ZXJFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5Tb3J0aW5nRmlsdGVyTGlzdCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9QYWdpbmcgZnVuY3Rpb25zXHJcbiAgc2V0UHJvdmlkZXJMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PXRydWU7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKClcclxuICB9XHJcbiAgcmVzZXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5Qcm92aWRlckZvcm0uY29udHJvbHNbXCJwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uXCJdLnNldFZhbHVlKFtdKTtcclxuICAgIHRoaXMuUHJvdmlkZXJGb3JtLmNvbnRyb2xzW1wic29ydGluZ0ZpbHRlck9wdGlvblwiXS5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLlByb3ZpZGVyRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMucGFnaW5nRWxlbWVudCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuICBzZWFyY2hDbGllbnRTaWRlKHNlYXJjaFZhbHVlKSB7XHJcbiAgICBpZiAoc2VhcmNoVmFsdWUpXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5maWx0ZXIoXHJcbiAgICAgICAgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgIHJldHVybiBpdGVtLnByb3ZpZGVyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuUHJvdmlkZXJQYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvL0F0dHJpYnV0ZXNGdW5jdGlvblxyXG4gIHNldEFkZFByb3ZpZGVyQXR0cmlidXRlcyh0eXBlRnVsbE5hbWUpe1xyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuR2V0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIC8vU2V0IFByb3ZpZGVyIHR5cGUgaWQgb24gdHlwZSBjaGFuZ2VcclxuICAgICAgdGhpcy5Mb2FkZWRQcm92aWRlcnMgPSByZXN1bHRPYmoubG9hZGVkUHJvdmlkZXJzO1xyXG4gICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlclR5cGUgPSB0aGlzLkxvYWRlZFByb3ZpZGVycy5maW5kKG9iaiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5mdWxsTmFtZSA9PT0gdHlwZUZ1bGxOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyVHlwZUl0ZW1JRCA9IHNlbGVjdGVkUHJvdmlkZXJUeXBlLnByb3ZpZGVyVHlwZTtcclxuXHJcbiAgICAgIC8vU2V0IGF0dHJpYnV0ZXMgYW5kIGNvdW50XHJcbiAgICAgIGxldCBhdHRyaWJ1dGVzID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMgPSBbXTtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IHRoaXMuZ2V0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyhhdHRyaWJ1dGVzLCB0cnVlKTtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gZGF0YVswXTtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNDb3VudCA9IGRhdGFbMV07XHJcbiAgICAgIHRoaXMuSXNBdHRyaWJ1dGVzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9KTtcclxufVxyXG5cclxuICBzZXRFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkge1xyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuR2V0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIC8vU2V0IFByb3ZpZGVyIHR5cGUgaWQgb24gdHlwZSBjaGFuZ2VcclxuICAgICAgdGhpcy5Mb2FkZWRQcm92aWRlcnMgPSByZXN1bHRPYmoubG9hZGVkUHJvdmlkZXJzO1xyXG4gICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlclR5cGUgPSB0aGlzLkxvYWRlZFByb3ZpZGVycy5maW5kKG9iaiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5mdWxsTmFtZSA9PT0gdHlwZUZ1bGxOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlclR5cGVJdGVtSUQgPSBzZWxlY3RlZFByb3ZpZGVyVHlwZS5wcm92aWRlclR5cGU7XHJcblxyXG4gICAgICAvL1NldCBhdHRyaWJ1dGVzIGFuZCBjb3VudFxyXG4gICAgICBsZXQgYXR0cmlidXRlcyA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IFtdO1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5nZXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zKGF0dHJpYnV0ZXMsIGZhbHNlKTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGRhdGFbMF07XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc0NvdW50ID0gZGF0YVsxXTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMocHJvdmlkZXJBdHRyaWJ1dGVzOiBhbnlbXSwgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBhdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBhdHRyaWJ1dGVzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgYWN0aW9uSW5kaWNhdGU6IHN0cmluZyA9IGlzQWRkID8gXCJBZGRcIiA6IFwiRWRpdFwiO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm92aWRlckF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIGxldCBvYmplY3RBdHRyaWJ1dGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgICBsZXQgaXNFbmNyeXB0ZWQ6IGJvb2xlYW4gPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0uaXNFbmNyeXB0ZWQ7XHJcblxyXG4gICAgICBsZXQgQXR0cmlidXRlTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiQXR0cmlidXRlTmFtZVwiICsgaTtcclxuICAgICAgQXR0cmlidXRlTmFtZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQXR0cmlidXRlTmFtZS5WYWx1ZSA9IHByb3ZpZGVyQXR0cmlidXRlc1tpXS5uYW1lO1xyXG5cclxuXHJcbiAgICAgIGxldCBBdHRyaWJ1dGVWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5OYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkF0dHJpYnV0ZVZhbHVlXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5UeXBlID0gaXNFbmNyeXB0ZWQgPyBJbnB1dFR5cGUuUGFzc3dvcmQgOiBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuVmFsdWUgPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0udmFsdWU7XHJcbiAgICAgIEF0dHJpYnV0ZVZhbHVlLlJlbW92ZURlZmF1bHRQYXNzd29yZFZhbGlkYXRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgbGV0IEF0dHJpYnV0ZUVuY3J5cHRlZCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgQXR0cmlidXRlRW5jcnlwdGVkLk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiQXR0cmlidXRlRW5jcnlwdGVkXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVFbmNyeXB0ZWQuVmFsdWUgPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0uaXNFbmNyeXB0ZWQ7XHJcblxyXG4gICAgICBvYmplY3RBdHRyaWJ1dGVPcHRpb25zLnB1c2goQXR0cmlidXRlTmFtZSwgQXR0cmlidXRlVmFsdWUsIEF0dHJpYnV0ZUVuY3J5cHRlZCk7XHJcbiAgICAgIGF0dHJpYnV0ZXNPcHRpb25zLnB1c2gob2JqZWN0QXR0cmlidXRlT3B0aW9ucyk7XHJcbiAgICAgIGF0dHJpYnV0ZXNDb3VudCArPSAxO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBbYXR0cmlidXRlc09wdGlvbnMsIGF0dHJpYnV0ZXNDb3VudF07XHJcbiAgfVxyXG5cclxuICBkZWxldGVBdHRyaWJ1dGUoZGVsZXRlZEF0dHJpYnV0ZTogYW55LCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGxldCBkZWxldGVkQXR0ckluZGV4OiBudW1iZXIgPSB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMuaW5kZXhPZihkZWxldGVkQXR0cmlidXRlKTtcclxuICAgICAgaWYgKGRlbGV0ZWRBdHRySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLnNwbGljZShkZWxldGVkQXR0ckluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRBdHRyaWJ1dGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtLnJlbW92ZUNvbnRyb2woZGVsZXRlZEF0dHJpYnV0ZVtpXS5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZGVsZXRlZEF0dHJJbmRleDogbnVtYmVyID0gdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRBdHRyaWJ1dGUpO1xyXG4gICAgICBpZiAoZGVsZXRlZEF0dHJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLnNwbGljZShkZWxldGVkQXR0ckluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRBdHRyaWJ1dGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRBdHRyaWJ1dGVbaV0uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmNyeXB0ZWRDaGFuZ2UoaXNDaGVja2VkLCBvcHRpb24sIGlzQWRkKSB7XHJcbiAgICBsZXQgdmFsdWVBdHRyaWJ1dGVJbmRpY2F0b3IgPSBpc0FkZCA/IFwiQWRkQXR0cmlidXRlVmFsdWVcIiA6IFwiRWRpdEF0dHJpYnV0ZVZhbHVlXCI7XHJcbiAgICBsZXQgcmVhbHRlZFZhbHVlT3B0aW9uID0gb3B0aW9uLmZpbmQob2JqID0+IHtcclxuICAgICAgcmV0dXJuIG9iai5OYW1lLnN0YXJ0c1dpdGgodmFsdWVBdHRyaWJ1dGVJbmRpY2F0b3IpXHJcbiAgICB9KTtcclxuICAgIGlmIChpc0NoZWNrZWQpXHJcbiAgICAgIHJlYWx0ZWRWYWx1ZU9wdGlvbi5UeXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgZWxzZVxyXG4gICAgICByZWFsdGVkVmFsdWVPcHRpb24uVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvL0FkZCBwcm92aWRlclxyXG4gIHNob3dBZGRQcm92aWRlck1vZGFsKGFkZFByb3ZpZGVyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHRoaXMuT3JnYW5pemF0aW9uc0xpc3QgPSByZXN1bHRPYmoub3JnYW5pemF0aW9ucztcclxuICAgICAgdGhpcy5UeXBlc0xpc3QgPSByZXN1bHRPYmoucHJvdmlkZXJUeXBlcztcclxuXHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IFtdO1xyXG4gICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc0NvdW50ID0gMDtcclxuICAgICAgdGhpcy5Jc0F0dHJpYnV0ZXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5BZGRQcm92aWRlckZvcm1cclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFByb3ZpZGVyTW9kZWw7XHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcbiAgICAgIHRoaXMuQWRkTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuTmFtZSA9IFwiQWRkTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuTGFiZWxLZXkgPSBcIlByb3ZpZGVyTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZE5hbWUuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbiA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbi5OYW1lID0gXCJBZGREZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLkxhYmVsS2V5ID0gXCJQcm92aWRlckRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzY3JpcHRpb24uVmFsdWUgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuTmFtZSA9IFwiQWRkT3JnYW5pemF0aW9uT3B0aW9uc1wiXHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5MYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uXCJcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLk9yZ2FuaXphdGlvbnNMaXN0XHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLk5hbWUgPSBcIkFkZFR5cGVPcHRpb25zXCJcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5MYWJlbEtleSA9IFwiUHJvdmlkZXJUeXBlXCJcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5EYXRhU291cmNlID0gdGhpcy5UeXBlc0xpc3RcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oYWRkUHJvdmlkZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG4gICAgXHJcblxyXG4gIH1cclxuICBnZXRBZGRQcm92aWRlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFByb3ZpZGVyRm9ybS52YWx1ZTtcclxuICAgIGxldCBBZGRNb2RlbDogUHJvdmlkZXJNb2RlbCA9IG5ldyBQcm92aWRlck1vZGVsKCk7XHJcbiAgICBBZGRNb2RlbC5Qcm92aWRlck5hbWUgPSBSZXN1bHRNb2RlbC5BZGROYW1lO1xyXG4gICAgQWRkTW9kZWwuRGVzY3JpcHRpb24gPSBSZXN1bHRNb2RlbC5BZGREZXNjcmlwdGlvbjtcclxuICAgIGxldCBvcmdBcnIgPSBSZXN1bHRNb2RlbC5BZGRPcmdhbml6YXRpb25PcHRpb25zO1xyXG4gICAgbGV0IG9yZ2FuaXphdGlvbklEOiBudW1iZXI7XHJcbiAgICBvcmdhbml6YXRpb25JRCA9IE51bWJlcihvcmdBcnIpO1xyXG5cclxuICAgIEFkZE1vZGVsLk9yZ2FuaXphdGlvbklEID0gUmVzdWx0TW9kZWwuQWRkT3JnYW5pemF0aW9uT3B0aW9ucyAhPSBudWxsID8gb3JnYW5pemF0aW9uSUQgOiBudWxsO1xyXG4gICAgQWRkTW9kZWwuUHJvdmlkZXJUeXBlSXRlbUlEID0gdGhpcy5BZGRQcm92aWRlclR5cGVJdGVtSUQ7XHJcbiAgICBBZGRNb2RlbC5UeXBlRnVsbE5hbWUgPSBSZXN1bHRNb2RlbC5BZGRUeXBlT3B0aW9ucztcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNDb3VudDsgaisrKSB7XHJcbiAgICAgIGxldCBhZGRBdHRyaWJ1dGVOYW1lID0gUmVzdWx0TW9kZWxbXCJBZGRBdHRyaWJ1dGVOYW1lXCIgKyBqXTtcclxuICAgICAgaWYgKGFkZEF0dHJpYnV0ZU5hbWUgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRBdHRyaWJ1dGVWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkQXR0cmlidXRlVmFsdWVcIiArIGpdO1xyXG4gICAgICBsZXQgYWRkQXR0cmlidXRlRW5jcnlwdGVkID0gUmVzdWx0TW9kZWxbXCJBZGRBdHRyaWJ1dGVFbmNyeXB0ZWRcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IHByb3ZpZGVyQXR0cjogUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCA9IG5ldyBQcm92aWRlckF0dHJpYnV0ZU1vZGVsKCk7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5OYW1lID0gYWRkQXR0cmlidXRlTmFtZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLlZhbHVlID0gYWRkQXR0cmlidXRlVmFsdWU7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5Jc0VuY3J5cHRlZCA9IGFkZEF0dHJpYnV0ZUVuY3J5cHRlZDtcclxuICAgICAgQWRkTW9kZWwuUHJvdmlkZXJBdHRyaWJ1dGVzLnB1c2gocHJvdmlkZXJBdHRyKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRQcm92aWRlckZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5BZGRQcm92aWRlcihBZGRNb2RlbClcclxuICB9XHJcblxyXG4gLy9FZGl0IHByb3ZpZGVyXHJcbiAgc2hvd0VkaXRQcm92aWRlck1vZGFsKHByb3ZpZGVySUQ6IG51bWJlciwgcHJvdmlkZXJJREVuYzogc3RyaW5nLCBlZGl0UHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy5Qcm92aWRlcklkID0gcHJvdmlkZXJJRDtcclxuXHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5HZXRFZGl0UHJvdmlkZXJEYXRhKHByb3ZpZGVySURFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgcHJvdmlkZXIgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIGxldCBsaXN0cyA9IHJlc3VsdE9iai5saXN0cztcclxuICAgICAgdGhpcy5UeXBlc0xpc3QgPSBsaXN0cy5wcm92aWRlclR5cGVzO1xyXG5cclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkVkaXRQcm92aWRlckZvcm1cclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0UHJvdmlkZXJNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRQcm92aWRlckZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLlBhZ2luZ0FjdGlvbk1vZGUgPSBQYWdpbmdBY3Rpb25Nb2RlLlVwZGF0ZVxyXG5cclxuXHJcbiAgICAgIHRoaXMuRWRpdE5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5OYW1lID0gXCJFZGl0TmFtZVwiOyAgXHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTGFiZWxLZXkgPSBcIlByb3ZpZGVyTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5WYWx1ZSA9IHByb3ZpZGVyLnByb3ZpZGVyTmFtZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uID0gbmV3IFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5OYW1lID0gXCJFZGl0RGVzY3JpcHRpb25cIjtcclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24uTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLlZhbHVlID0gcHJvdmlkZXIuZGVzY3JpcHRpb247XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlclR5cGUgPSB0aGlzLlR5cGVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IHByb3ZpZGVyLnR5cGVGdWxsTmFtZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcblxyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuTmFtZSA9IFwiRWRpdFR5cGVPcHRpb25zXCJcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuTGFiZWxLZXkgPSBcIlByb3ZpZGVyVHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLlR5cGVzTGlzdFxyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFByb3ZpZGVyVHlwZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyVHlwZUl0ZW1JRCA9IHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRDtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJPcmdhbml6YXRpb25JRCA9IHByb3ZpZGVyLm9yZ2FuaXphdGlvbklEO1xyXG5cclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVzUmVzdWx0OiBhbnkgPSB0aGlzLmdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMocHJvdmlkZXIucHJvdmlkZXJBdHRyaWJ1dGVzLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMgPSBlZGl0QXR0cmlidXRlc1Jlc3VsdFswXTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQgPSBlZGl0QXR0cmlidXRlc1Jlc3VsdFsxXTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0UHJvdmlkZXJNb2RhbCk7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgZ2V0RWRpdFByb3ZpZGVyTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFByb3ZpZGVyRm9ybS52YWx1ZTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgUHJvdmlkZXJNb2RlbCgpO1xyXG5cclxuICAgIEVkaXRNb2RlbC5JRCA9IE51bWJlcih0aGlzLlByb3ZpZGVySWQpO1xyXG4gICAgRWRpdE1vZGVsLlByb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLkVkaXROYW1lOyAvLygjIzEpXHJcbiAgICBFZGl0TW9kZWwuRGVzY3JpcHRpb24gPSBSZXN1bHRNb2RlbC5FZGl0RGVzY3JpcHRpb25cclxuICAgIEVkaXRNb2RlbC5UeXBlRnVsbE5hbWUgPSBSZXN1bHRNb2RlbC5FZGl0VHlwZU9wdGlvbnM7XHJcbiAgICBFZGl0TW9kZWwuUHJvdmlkZXJUeXBlSXRlbUlEID0gdGhpcy5FZGl0UHJvdmlkZXJUeXBlSXRlbUlEO1xyXG4gICAgRWRpdE1vZGVsLk9yZ2FuaXphdGlvbklEID0gdGhpcy5FZGl0UHJvdmlkZXJPcmdhbml6YXRpb25JRDtcclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc0NvdW50OyBqKyspIHtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVOYW1lID0gUmVzdWx0TW9kZWxbXCJFZGl0QXR0cmlidXRlTmFtZVwiICsgal07XHJcbiAgICAgIC8vIGlmIChpc1VuZGVmaW5lZChlZGl0QXR0cmlidXRlTmFtZSkpXHJcbiAgICAgIC8vICAgY29udGludWU7XHJcbiAgICAgIGxldCBlZGl0QXR0cmlidXRlVmFsdWUgPSBSZXN1bHRNb2RlbFtcIkVkaXRBdHRyaWJ1dGVWYWx1ZVwiICsgal07XHJcbiAgICAgIGxldCBlZGl0QXR0cmlidXRlRW5jcnlwdGVkID0gUmVzdWx0TW9kZWxbXCJFZGl0QXR0cmlidXRlRW5jcnlwdGVkXCIgKyBqXTtcclxuXHJcbiAgICAgIGxldCBwcm92aWRlckF0dHI6IFByb3ZpZGVyQXR0cmlidXRlTW9kZWwgPSBuZXcgUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCgpO1xyXG4gICAgICBwcm92aWRlckF0dHIuTmFtZSA9IGVkaXRBdHRyaWJ1dGVOYW1lO1xyXG4gICAgICBwcm92aWRlckF0dHIuVmFsdWUgPSBlZGl0QXR0cmlidXRlVmFsdWU7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5Jc0VuY3J5cHRlZCA9IGVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWQ7XHJcbiAgICAgIEVkaXRNb2RlbC5Qcm92aWRlckF0dHJpYnV0ZXMucHVzaChwcm92aWRlckF0dHIpO1xyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRQcm92aWRlckZ1bmN0aW9uID0gKEVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Qcm92aWRlclNlcnZpY2UuRWRpdFByb3ZpZGVyKEVkaXRNb2RlbClcclxuICB9XHJcblxyXG4gICAvL0RlbGV0ZSBwcm92aWRlclxyXG4gIHNob3dEZWxldGVQcm92aWRlck1vZGFsKHByb3ZpZGVySUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVQcm92aWRlcklkID0gcHJvdmlkZXJJRDtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVQcm92aWRlcklkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVQcm92aWRlcjtcclxuICAgIHRoaXMuRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUNvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVByb3ZpZGVyID0gKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkRlbGV0ZVByb3ZpZGVyKGlkKTtcclxuICB9XHJcblxyXG4gIC8vRGVmYXVsdCBwcm92aWRlclxyXG4gIHNob3dEZWZhdWx0UHJvdmlkZXJNb2RhbChkZWZhdWx0UHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJzID0gW107XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5HZXREZWZhdWx0UHJvdmlkZXJzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGxpc3QgPSByZXN1bHQgYXMgYW55O1xyXG5cclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybVxyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldERlZmF1bHRQcm92aWRlck1vZGVsO1xyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJvdmlkZXI6IGFueSA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgIGxldCBQcm92aWRlck9wdGlvbiA9IG5ldyBSYWRpb0J1dHRvbk9wdGlvbnMoKTtcclxuICAgICAgICBQcm92aWRlck9wdGlvbi5OYW1lID0gXCJwcm92aWRlck9wdGlvbl9cIiArIHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRDtcclxuICAgICAgICBQcm92aWRlck9wdGlvbi5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG4gICAgICAgIGxldCBpdGVtczogUmFkaW9CdXR0b25JdGVtW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHByb3ZpZGVyLnByb3ZpZGVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgbGV0IHByb3ZpZGVySXRlbSA9IHByb3ZpZGVyLnByb3ZpZGVyc1tqXTtcclxuICAgICAgICAgIGxldCBpdGVtID0gbmV3IFJhZGlvQnV0dG9uSXRlbSgpO1xyXG4gICAgICAgICAgaXRlbS5UZXh0ID0gcHJvdmlkZXJJdGVtLnRleHQ7XHJcbiAgICAgICAgICBpdGVtLlZhbHVlID0gcHJvdmlkZXJJdGVtLnZhbHVlO1xyXG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgIFByb3ZpZGVyT3B0aW9uLkl0ZW1zPWl0ZW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkUHJvdmlkZXIgPSBwcm92aWRlci5wcm92aWRlcnMuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLnNlbGVjdGVkID09IHRydWU7IH0pWzBdO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLlZhbHVlID0ge1xyXG4gICAgICAgICAgVGV4dDogc2VsZWN0ZWRQcm92aWRlci50ZXh0LFxyXG4gICAgICAgICAgVmFsdWU6IHNlbGVjdGVkUHJvdmlkZXIudmFsdWVcclxuICAgICAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgICAgIGxldCBkZWZQcm92aWRlciA9IHtcclxuICAgICAgICAgIE5hbWU6IHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1OYW1lLFxyXG4gICAgICAgICAgSUQ6IHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRCxcclxuICAgICAgICAgIFByb3ZpZGVyc09wdGlvbjogUHJvdmlkZXJPcHRpb25cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVycy5wdXNoKGRlZlByb3ZpZGVyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGRlZmF1bHRQcm92aWRlck1vZGFsKTtcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXREZWZhdWx0UHJvdmlkZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtLnZhbHVlO1xyXG4gICAgbGV0IGRlZmF1bHRQcm92aWRlcnNNb2RlbDogRGVmYXVsdFByb3ZpZGVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5EZWZhdWx0UHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwcm92aWRlcklEID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJzW2ldLklEO1xyXG4gICAgICBsZXQgc2VsZWN0ZWREZWZQcm92aWRlcklEID0gUmVzdWx0TW9kZWxbXCJwcm92aWRlck9wdGlvbl9cIiArIHByb3ZpZGVySURdO1xyXG4gICAgICBsZXQgZGVmUHJvdmlkZU1vZGVsOiBEZWZhdWx0UHJvdmlkZXJNb2RlbCA9IHtcclxuICAgICAgICBQcm92aWRlclR5cGVJdGVtSUQ6IHByb3ZpZGVySUQsXHJcbiAgICAgICAgU2VsZWN0ZWRQcm92aWRlcklEOiBOdW1iZXIoc2VsZWN0ZWREZWZQcm92aWRlcklEKSxcclxuICAgICAgICBQcm92aWRlclR5cGVJdGVtTmFtZTogXCJcIixcclxuICAgICAgICBQcm92aWRlcnM6IFtdXHJcbiAgICAgIH07XHJcbiAgICAgIGRlZmF1bHRQcm92aWRlcnNNb2RlbC5wdXNoKGRlZlByb3ZpZGVNb2RlbCk7XHJcblxyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKGRlZmF1bHRQcm92aWRlcnNNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldERlZmF1bHRQcm92aWRlckZ1bmN0aW9uID0gKERlZmF1bHRQcm92aWRlck1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5TdWJtaXREZWZhdWx0UHJvdmlkZXJzKERlZmF1bHRQcm92aWRlck1vZGVsKVxyXG4gIH1cclxuXHJcbiAgLy9HZW5lcmF0ZSBwcm92aWRlciBqc29uXHJcbiAgZ2VuZXJhdGVQcm92aWRlckpzb24oKSB7XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5HZW5lcmF0ZVByb3ZpZGVySnNvbigpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBGaWxlRFRPID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiIH0pO1xyXG4gICAgICBsZXQgZmlsZU5hbWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlcnNcIikgKyBcIi5qc29uXCI7XHJcbiAgICAgIHNhdmVBcyhmaWxlLCBmaWxlTmFtZSk7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vVGVzdCBFbWFpbCBmdW5jdGlvbnNcclxuICBzaG93VGVzdEVtYWlsTW9kYWwocHJvdmlkZXJJRDogbnVtYmVyLCBwcm92aWRlck5hbWU6IHN0cmluZywgdGVzdEVNYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRlc3RFbWFpbFByb3ZpZGVySWQgPSBwcm92aWRlcklEO1xyXG4gICAgdGhpcy50ZXN0RW1haWxQcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWU7XHJcblxyXG4gICAgdGhpcy50ZXN0RW1haWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLnRlc3RFbWFpbEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLnRlc3RFbWFpbEZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMudGVzdEVtYWlsRm9ybVxyXG4gICAgdGhpcy50ZXN0RW1haWxGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0RW1haWxNb2RlbDtcclxuICAgIHRoaXMudGVzdEVtYWlsRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0RW1haWxGdW5jdGlvbjtcclxuXHJcblxyXG4gICAgdGhpcy5lbWFpbFRvID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLmVtYWlsVG8uTmFtZSA9IFwiZW1haWxUb1wiO1xyXG4gICAgdGhpcy5lbWFpbFRvLkxhYmVsS2V5ID0gXCJUb1wiO1xyXG4gICAgdGhpcy5lbWFpbFRvLlR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICB0aGlzLmVtYWlsVG8uSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5lbWFpbFN1YmplY3QgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1haWxTdWJqZWN0Lk5hbWUgPSBcImVtYWlsU3ViamVjdFwiO1xyXG4gICAgdGhpcy5lbWFpbFN1YmplY3QuTGFiZWxLZXkgPSBcIkVtYWlsU3ViamVjdFwiO1xyXG4gICAgdGhpcy5lbWFpbFN1YmplY3QuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5lbWFpbFN1YmplY3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5lbWFpbEJvZHkgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICB0aGlzLmVtYWlsQm9keS5OYW1lID0gXCJlbWFpbEJvZHlcIjtcclxuICAgIHRoaXMuZW1haWxCb2R5LkxhYmVsS2V5ID0gXCJFbWFpbEJvZHlcIjtcclxuICAgIHRoaXMuZW1haWxCb2R5LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGVzdEVNYWlsTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVzdEVtYWlsTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCByZXN1bHRNb2RlbCA9IHRoaXMudGVzdEVtYWlsRm9ybS52YWx1ZTtcclxuICAgIGxldCB0ZXN0RW1haWxNb2RlbCA9IG5ldyBFbWFpbFByb3ZpZGVyVGVzdGVyTW9kZWwoKTtcclxuXHJcbiAgICB0ZXN0RW1haWxNb2RlbC5Qcm92aWRlcklEID0gTnVtYmVyKHRoaXMudGVzdEVtYWlsUHJvdmlkZXJJZCk7XHJcbiAgICB0ZXN0RW1haWxNb2RlbC5Qcm92aWRlck5hbWUgPSB0aGlzLnRlc3RFbWFpbFByb3ZpZGVyTmFtZTtcclxuICAgIHRlc3RFbWFpbE1vZGVsLlRvRW1haWwgPSByZXN1bHRNb2RlbC5lbWFpbFRvXHJcbiAgICB0ZXN0RW1haWxNb2RlbC5TdWJqZWN0ID0gcmVzdWx0TW9kZWwuZW1haWxTdWJqZWN0O1xyXG4gICAgdGVzdEVtYWlsTW9kZWwuQm9keSA9IHJlc3VsdE1vZGVsLmVtYWlsQm9keTtcclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2godGVzdEVtYWlsTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0RW1haWxGdW5jdGlvbiA9ICh0ZXN0RW1haWxNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Qcm92aWRlclNlcnZpY2UuVGVzdEVtYWlsKHRlc3RFbWFpbE1vZGVsKVxyXG4gIH1cclxuXHJcbiAgLy9UZXN0IFNNUyBmdW5jdGlvbnNcclxuICBzaG93VGVzdFNNU01vZGFsKHByb3ZpZGVySUQ6IG51bWJlciwgcHJvdmlkZXJOYW1lOiBzdHJpbmcsIHRlc3RTTVNNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudGVzdFNNU1Byb3ZpZGVySWQgPSBwcm92aWRlcklEO1xyXG4gICAgdGhpcy50ZXN0U01TUHJvdmlkZXJOYW1lID0gcHJvdmlkZXJOYW1lO1xyXG5cclxuICAgIHRoaXMudGVzdFNNU0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMudGVzdFNNU0Zvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLnRlc3RTTVNGb3JtXHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0U01TTW9kZWw7XHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFRlc3RTTVNGdW5jdGlvbjtcclxuXHJcblxyXG4gICAgdGhpcy5zbXNUbyA9IG5ldyBQaG9uZU9wdGlvbnMoKTtcclxuICAgIHRoaXMuc21zVG8uTmFtZSA9IFwic21zVG9cIjtcclxuICAgIHRoaXMuc21zVG8uTGFiZWxLZXkgPSBcIlRvXCI7XHJcbiAgICB0aGlzLnNtc1RvLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuc21zQm9keSA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgIHRoaXMuc21zQm9keS5OYW1lID0gXCJzbXNCb2R5XCI7XHJcbiAgICB0aGlzLnNtc0JvZHkuTGFiZWxLZXkgPSBcIlNNU1wiO1xyXG4gICAgdGhpcy5zbXNCb2R5LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGVzdFNNU01vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcblxyXG4gIGdldFRlc3RTTVNNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IHJlc3VsdE1vZGVsID0gdGhpcy50ZXN0U01TRm9ybS52YWx1ZTtcclxuICAgIGxldCB0ZXN0U01TTW9kZWwgPSBuZXcgU01TUHJvdmlkZXJUZXN0ZXJNb2RlbCgpO1xyXG5cclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKHJlc3VsdE1vZGVsLnNtc1RvICE9IG51bGwpIHtcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IHJlc3VsdE1vZGVsLnNtc1RvLmludGVybmF0aW9uYWxOdW1iZXIgYXMgc3RyaW5nO1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGVzdFNNU01vZGVsLlByb3ZpZGVySUQgPSBOdW1iZXIodGhpcy50ZXN0U01TUHJvdmlkZXJJZCk7XHJcbiAgICB0ZXN0U01TTW9kZWwuUHJvdmlkZXJOYW1lID0gdGhpcy50ZXN0U01TUHJvdmlkZXJOYW1lO1xyXG4gICAgdGVzdFNNU01vZGVsLlRvTW9iaWxlTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlclxyXG4gICAgdGVzdFNNU01vZGVsLk1lc3NhZ2UgPSByZXN1bHRNb2RlbC5zbXNCb2R5O1xyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaCh0ZXN0U01TTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0U01TRnVuY3Rpb24gPSAodGVzdFNNU01vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5UZXN0U01TKHRlc3RTTVNNb2RlbClcclxuICB9XHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJQcm92aWRlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpNZW51IC0tPlxyXG4gICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogU2hvd1BhZ2VDb250ZW50PT10cnVlPydibG9jayc6J25vbmUnfVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTGlzdHMoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBpZD1cIkZpbHRlcnNEcm9wZG93blwiIHRpdGxlPVwiRmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRmlsdGVyXCIpfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJGaWx0ZXJzRHJvcGRvd25cIiBjbGFzcz1cIiBmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5ICB3LTI1MHB4IHctbWQtNTAwcHggZnctYm9sZCBweS0zIFwiPlxyXG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNwcm92aWRlclR5cGVzRERMIFtvcHRpb25zXT1cInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI3NvcnRpbmdGaWx0ZXJEREwgW29wdGlvbnNdPVwic29ydGluZ0ZpbHRlck9wdGlvblwiIFtncm91cF09XCJQcm92aWRlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnkgcHYtcmVzZXQgYnRuLXNtXCIgZD1cImFwcGx5RmlsdGVyc0J0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0XCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwiZ2VuZXJhdGVQcm92aWRlckpzb24oKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zIGJuc2lnaHRzLWJ0bi1leHBvcnRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsZS1leHBvcnQgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiR2VuZXJhdGVQcm92aWRlckpzb25cIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGl0bGU9J3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWxlY3REZWZhdWx0UHJvdmlkZXJcIiknIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zIFwiIChjbGljayk9XCJzaG93RGVmYXVsdFByb3ZpZGVyTW9kYWwoRGVmYXVsdFByb3ZpZGVyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWhhbmQtcG9pbnRlciBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWxlY3REZWZhdWx0UHJvdmlkZXJcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT0ndXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKScgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNob3dBZGRQcm92aWRlck1vZGFsKEFkZFByb3ZpZGVyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgPCEtLSBlbmQ6Ok1lbnUgLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGVuZDo6SGVhZGVyIC0tPlxyXG4gICAgICA8IS0tIGJlZ2luOjpCb2R5IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3RhdHVzXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWZhdWx0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgKm5nRm9yPVwibGV0IHByb3ZpZGVyR3JvdXAgb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcHJvdmlkZXJHcm91cC5wcm92aWRlcnNcIj5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFya1wiPnt7cHJvdmlkZXIucHJvdmlkZXJOYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj57e3Byb3ZpZGVyLmRlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiICpuZ0lmPVwicHJvdmlkZXIuaXNSdW5uaW5nO2Vsc2Ugb3RoZXJfY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJ1bm5pbmdcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3RoZXJfY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3RvcHBlZFwiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBmdy1ib2xkZXJcIiAqbmdJZj1cInByb3ZpZGVyLmlzRGVmYXVsdDtlbHNlIGRlZmF1bHRfbm9cIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJZZXNcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdF9ubz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0IGZ3LWJvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTm9cIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJzaG93RWRpdFByb3ZpZGVyTW9kYWwocHJvdmlkZXIuaWQscHJvdmlkZXIuaWRFbmNyeXB0ZWQgLCBFZGl0UHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVQcm92aWRlck1vZGFsKHByb3ZpZGVyLmlkRW5jcnlwdGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cInByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRD09ZW1haWxQcm92aWRlclR5cGVcIiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Rlc3RFbWFpbE1vZGFsKHByb3ZpZGVyLmlkLHByb3ZpZGVyLnByb3ZpZGVyTmFtZSxUZXN0RW1haWxNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RFbWFpbFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJwcm92aWRlci5wcm92aWRlclR5cGVJdGVtSUQ9PXNtc1Byb3ZpZGVyVHlwZVwiIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVzdFNNU01vZGFsKHByb3ZpZGVyLmlkLHByb3ZpZGVyLnByb3ZpZGVyTmFtZSxUZXN0U01TTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0U01TXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwicHJvdmlkZXJHcm91cC5wcm92aWRlcnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPHRib2R5ICpuZ0lmPVwiY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFByb3ZpZGVyTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlByb3ZpZGVyUGFnaW5nXCIgW2dyb3VwXT1cIlByb3ZpZGVyRm9ybVwiICNQcm92aWRlclBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLWVuZDo6UHJvdmlkZXJzIGxpc3QtLT5cclxuPC9kaXY+XHJcblxyXG48IS0tIEFkZCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNBZGRQcm92aWRlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiQWRkUHJvdmlkZXJGb3JtT3B0aW9uc1wiPlxyXG5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGROYW1lXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEFyZWEgW29wdGlvbnNdPVwiQWRkRGVzY3JpcHRpb25cIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZE9yZ2FuaXphdGlvbk9wdGlvbnNcIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRUeXBlT3B0aW9uc1wiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIiAoT25DaGFuZ2UpPVwic2V0QWRkUHJvdmlkZXJBdHRyaWJ1dGVzKCRldmVudClcIj5cclxuICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPGRpdiAqbmdJZj1cIklzQXR0cmlidXRlc0xvYWRlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvdmlkZXJBdHRyaWJ1dGVOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZVZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbmNyeXB0ZWRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zO2xldCBpPWluZGV4O1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMF1cIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJlbmNyeXB0ZWRDaGFuZ2UoJGV2ZW50LG9wdGlvbix0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlciBidG4tc21cIiAoY2xpY2spPVwiZGVsZXRlQXR0cmlidXRlKG9wdGlvbix0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlUHJvdmlkZXJNb2RhbCBpZD1cIkNsb3NlQWRkUHJvdmlkZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tIEVkaXQgbW9kZWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdE5hbWVcIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkVkaXREZXNjcmlwdGlvblwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VHlwZU9wdGlvbnNcIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJzZXRFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzKCRldmVudClcIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZU5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyQXR0cmlidXRlVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuY3J5cHRlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCIgKE9uQ2hhbmdlKT1cImVuY3J5cHRlZENoYW5nZSgkZXZlbnQsb3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVBdHRyaWJ1dGUob3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdFByb3ZpZGVyTW9kYWwgaWQ9XCJDbG9zZUVkaXRQcm92aWRlck1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLWRlbGV0ZSBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJEZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIiAjQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcbjwhLS1EZWZhdWx0IFByb3ZpZGVyICBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI0RlZmF1bHRQcm92aWRlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWxlY3REZWZhdWx0UHJvdmlkZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdGb3I9XCJsZXQgZGVmUHJvdmlkZXIgb2YgRGVmYXVsdFByb3ZpZGVycztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtbXV0ZWQgbWItNCBmdy1ib2xkZXN0XCI+e3tkZWZQcm92aWRlci5OYW1lfX08L2gzPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cInt7ZGVmUHJvdmlkZXIuSUR9fVwiIC8+XHJcbiAgICAgICAgICA8QkJTRi1SYWRpb0J1dHRvbiBbb3B0aW9uc109XCJkZWZQcm92aWRlci5Qcm92aWRlcnNPcHRpb25cIiBbZ3JvdXBdPVwiRGVmYXVsdFByb3ZpZGVyRm9ybVwiPjwvQkJTRi1SYWRpb0J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VEZWZhdWx0UHJvdmlkZXJNb2RhbCBpZD1cIkNsb3NlRGVmYXVsdFByb3ZpZGVyTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gbWUtMyBcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1UZXN0IEVtYWlsIE1vZGFsLS0+XHJcbjxuZy10ZW1wbGF0ZSAjVGVzdEVtYWlsTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RFbWFpbFNlcnZpY2VQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwidGVzdEVtYWlsRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiZW1haWxUb1wiIFtncm91cF09XCJ0ZXN0RW1haWxGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImVtYWlsU3ViamVjdFwiIFtncm91cF09XCJ0ZXN0RW1haWxGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJlbWFpbEJvZHlcIiBbZ3JvdXBdPVwidGVzdEVtYWlsRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tVGVzdCBTTVMgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNUZXN0U01TTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RTTVNTZXJ2aWNlUHJvdmlkZXJcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cInRlc3RTTVNGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtUGhvbmUgW29wdGlvbnNdPVwic21zVG9cIiBbZ3JvdXBdPVwidGVzdFNNU0Zvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1QaG9uZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJzbXNCb2R5XCIgW2dyb3VwXT1cInRlc3RTTVNGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuIl19
|