@bnsights/bbsf-admin-portal 1.1.63 → 1.1.65

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 CHANGED
@@ -4,7 +4,11 @@ BBSF Admin Portal package is part of BBSF 3 packages. It hosts all the angular m
4
4
 
5
5
  For more info please visit [BBSF documentation](https://bnsightsprojects.visualstudio.com/BBSF%203/_wiki/wikis/BBSF-3.wiki/65/BBSF-Documentation)
6
6
 
7
- ## 1.1.63 / 6-5-2025
7
+ ## 1.1.65 / 21-07-2025
8
+ =====================
9
+ - Update UAEPass configuration screen
10
+
11
+ ## 1.1.64 / 6-5-2025
8
12
  =====================
9
13
  -Update Controls version package
10
14
 
@@ -28,6 +28,7 @@ export class EditAuthConfigurationComponent extends AppBaseComponent {
28
28
  this.permissionsList = [];
29
29
  this.showUserTypePermissionsMapping = false;
30
30
  this.showUserTypeLinkingMapping = false;
31
+ this.showImportingNewUserMapping = false;
31
32
  this.uaePassUserTypeList = [];
32
33
  this.selectedAccessLevels = [];
33
34
  this.getAddModel = () => {
@@ -93,100 +94,7 @@ export class EditAuthConfigurationComponent extends AppBaseComponent {
93
94
  this.editFormOptions.onSuccessHandler = this.onSuccessHandler;
94
95
  switch (mode) {
95
96
  case AuthenticationMode.UAEPass:
96
- this.uaePassConfigurationModel = authConfigObject.uaePassConfig;
97
- this.baseURLTextBox = new TextBoxOptions();
98
- this.baseURLTextBox.name = "baseUrl";
99
- this.baseURLTextBox.labelKey = "BaseUrl";
100
- this.baseURLTextBox.type = InputType.Text;
101
- this.baseURLTextBox.viewType = ControlLayout.Vertical;
102
- this.baseURLTextBox.value = this.uaePassConfigurationModel.baseUrl;
103
- this.clientIdTextBox = new TextBoxOptions();
104
- this.clientIdTextBox.name = "clientID";
105
- this.clientIdTextBox.labelKey = "ClientID";
106
- this.clientIdTextBox.type = InputType.Text;
107
- this.clientIdTextBox.viewType = ControlLayout.Vertical;
108
- this.clientIdTextBox.value = this.uaePassConfigurationModel.clientID;
109
- this.secretKeyTextBox = new TextBoxOptions();
110
- this.secretKeyTextBox.name = "secretKey";
111
- this.secretKeyTextBox.labelKey = "SecretKey";
112
- this.secretKeyTextBox.type = InputType.Text;
113
- this.secretKeyTextBox.viewType = ControlLayout.Vertical;
114
- this.secretKeyTextBox.value = this.uaePassConfigurationModel.secretKey;
115
- this.redirectURLTextBox = new TextBoxOptions();
116
- this.redirectURLTextBox.name = "redirectUrl";
117
- this.redirectURLTextBox.labelKey = "RedirectUrl";
118
- this.redirectURLTextBox.type = InputType.Text;
119
- this.redirectURLTextBox.viewType = ControlLayout.Vertical;
120
- this.redirectURLTextBox.value = this.uaePassConfigurationModel.redirectUrl;
121
- this.accessLevelDropdown = new DropdownOptions();
122
- this.accessLevelDropdown.name = "accessLevels";
123
- this.accessLevelDropdown.labelKey = "AccessLevel";
124
- this.accessLevelDropdown.singleSelection = false;
125
- this.accessLevelDropdown.selectedItems = this.uaePassConfigurationModel.accessLevels;
126
- this.accessLevelDropdown.dataSource = this.loadUAEPassUserTypes();
127
- this.linkingModeDropdown = new DropdownOptions();
128
- this.linkingModeDropdown.name = "linkingMode";
129
- this.linkingModeDropdown.labelKey = "LinkingMode";
130
- this.linkingModeDropdown.singleSelection = true;
131
- this.linkingModeDropdown.selectedItems = this.uaePassConfigurationModel.linkingMode;
132
- this.linkingModeDropdown.dataSource = this.loadUAEPassLinkingMode();
133
- this.sopPermissionMappingToggle = new ToggleSlideOptions();
134
- this.sopPermissionMappingToggle.name = "sopPermissionMapping";
135
- this.sopPermissionMappingToggle.labelKey = "SOPPermissionMapping";
136
- this.sopPermissionMappingToggle.value = this.uaePassConfigurationModel.enableSOPPermissionMapping;
137
- this.linkingExistingUsersToggle = new ToggleSlideOptions();
138
- this.linkingExistingUsersToggle.name = "linkingExistingUsers";
139
- this.linkingExistingUsersToggle.labelKey = "LinkingExistingUsers";
140
- this.linkingExistingUsersToggle.value = this.uaePassConfigurationModel.enableLinkingExistingUsers;
141
- this.importingNewUserToggle = new ToggleSlideOptions();
142
- this.importingNewUserToggle.name = "importingNewUser";
143
- this.importingNewUserToggle.labelKey = "ImportingNewUser";
144
- this.importingNewUserToggle.value = this.uaePassConfigurationModel.enableImportingNewUser;
145
- this.updateUserInformationOnLoginToggle = new ToggleSlideOptions();
146
- this.updateUserInformationOnLoginToggle.name = "updateUserInformationOnLogin";
147
- this.updateUserInformationOnLoginToggle.labelKey = "UpdateUserInformationOnLogin";
148
- this.updateUserInformationOnLoginToggle.value = this.uaePassConfigurationModel.enableUpdateUserInformationOnLogin;
149
- this.userPermissionSetDropdown = new DropdownOptions();
150
- this.userPermissionSetDropdown.name = "PermissionSets";
151
- this.userPermissionSetDropdown.labelKey = "PermissionSets";
152
- this.userPermissionSetDropdown.selectedItems = this.uaePassConfigurationModel.defaultPermissionSet;
153
- this.userPermissionSetDropdown.singleSelection = true;
154
- this.userPermissionSetDropdown.allowSearchFilter = true;
155
- this.userPermissionSetDropdown.isRequired = true;
156
- this.nameArCheckbox = new CheckBoxOptions();
157
- this.nameArCheckbox.name = "nameAr";
158
- this.nameArCheckbox.labelKey = "NameAR";
159
- this.nameArCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.nameAR;
160
- this.nameEnCheckbox = new CheckBoxOptions();
161
- this.nameEnCheckbox.name = "nameEn";
162
- this.nameEnCheckbox.labelKey = "NameEN";
163
- this.nameEnCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.nameEN;
164
- this.emailCheckbox = new CheckBoxOptions();
165
- this.emailCheckbox.name = "email";
166
- this.emailCheckbox.labelKey = "Email";
167
- this.emailCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.email;
168
- this.eIdCheckbox = new CheckBoxOptions();
169
- this.eIdCheckbox.name = "eId";
170
- this.eIdCheckbox.labelKey = "EID";
171
- this.eIdCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.EID;
172
- this.mobileCheckbox = new CheckBoxOptions();
173
- this.mobileCheckbox.name = "mobile";
174
- this.mobileCheckbox.labelKey = "Mobile";
175
- this.mobileCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.mobile;
176
- this.nationalityCheckbox = new CheckBoxOptions();
177
- this.nationalityCheckbox.name = "nationality";
178
- this.nationalityCheckbox.labelKey = "Nationality";
179
- this.nationalityCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.nationality;
180
- this.genderCheckbox = new CheckBoxOptions();
181
- this.genderCheckbox.name = "gender";
182
- this.genderCheckbox.labelKey = "Gender";
183
- this.genderCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.gender;
184
- this.getPermissionSets();
185
- this.onChangeSOPPermissionToggleValue(this.uaePassConfigurationModel.enableSOPPermissionMapping);
186
- this.onLinkingExistingUsersToggleValue(this.uaePassConfigurationModel.enableLinkingExistingUsers);
187
- this.onChangeAccessLevels(this.uaePassConfigurationModel.accessLevels);
188
- if (this.uaePassConfigurationModel.defaultPermissionSet)
189
- this.changePermissionSet(this.uaePassConfigurationModel.defaultPermissionSet);
97
+ this.initializeUAEPassForm(authConfigObject);
190
98
  break;
191
99
  case AuthenticationMode.AzureAD:
192
100
  break;
@@ -195,6 +103,105 @@ export class EditAuthConfigurationComponent extends AppBaseComponent {
195
103
  }
196
104
  this.modalService.open(this.modal, { size: 'xl' });
197
105
  }
106
+ initializeUAEPassForm(authConfigObject) {
107
+ this.uaePassConfigurationModel = authConfigObject.uaePassConfig;
108
+ this.baseURLTextBox = new TextBoxOptions();
109
+ this.baseURLTextBox.name = "baseUrl";
110
+ this.baseURLTextBox.labelKey = "BaseUrl";
111
+ this.baseURLTextBox.type = InputType.Text;
112
+ this.baseURLTextBox.viewType = ControlLayout.Vertical;
113
+ this.baseURLTextBox.value = this.uaePassConfigurationModel.baseUrl;
114
+ this.clientIdTextBox = new TextBoxOptions();
115
+ this.clientIdTextBox.name = "clientID";
116
+ this.clientIdTextBox.labelKey = "ClientID";
117
+ this.clientIdTextBox.type = InputType.Text;
118
+ this.clientIdTextBox.viewType = ControlLayout.Vertical;
119
+ this.clientIdTextBox.value = this.uaePassConfigurationModel.clientID;
120
+ this.secretKeyTextBox = new TextBoxOptions();
121
+ this.secretKeyTextBox.name = "secretKey";
122
+ this.secretKeyTextBox.labelKey = "SecretKey";
123
+ this.secretKeyTextBox.type = InputType.Text;
124
+ this.secretKeyTextBox.viewType = ControlLayout.Vertical;
125
+ this.secretKeyTextBox.value = this.uaePassConfigurationModel.secretKey;
126
+ this.redirectURLTextBox = new TextBoxOptions();
127
+ this.redirectURLTextBox.name = "redirectUrl";
128
+ this.redirectURLTextBox.labelKey = "RedirectUrl";
129
+ this.redirectURLTextBox.type = InputType.Text;
130
+ this.redirectURLTextBox.viewType = ControlLayout.Vertical;
131
+ this.redirectURLTextBox.value = this.uaePassConfigurationModel.redirectUrl;
132
+ this.accessLevelDropdown = new DropdownOptions();
133
+ this.accessLevelDropdown.name = "accessLevels";
134
+ this.accessLevelDropdown.labelKey = "AccessLevel";
135
+ this.accessLevelDropdown.singleSelection = false;
136
+ this.accessLevelDropdown.selectedItems = this.uaePassConfigurationModel.accessLevels;
137
+ this.accessLevelDropdown.dataSource = this.loadUAEPassUserTypes();
138
+ this.linkingModeDropdown = new DropdownOptions();
139
+ this.linkingModeDropdown.name = "linkingMode";
140
+ this.linkingModeDropdown.labelKey = "LinkingMode";
141
+ this.linkingModeDropdown.singleSelection = true;
142
+ this.linkingModeDropdown.selectedItems = this.uaePassConfigurationModel.linkingMode;
143
+ this.linkingModeDropdown.dataSource = this.loadUAEPassLinkingMode();
144
+ this.sopPermissionMappingToggle = new ToggleSlideOptions();
145
+ this.sopPermissionMappingToggle.name = "sopPermissionMapping";
146
+ this.sopPermissionMappingToggle.labelKey = "SOPPermissionMapping";
147
+ this.sopPermissionMappingToggle.value = this.uaePassConfigurationModel.enableSOPPermissionMapping;
148
+ this.onChangeSOPPermissionToggleValue(this.uaePassConfigurationModel.enableSOPPermissionMapping);
149
+ this.linkingExistingUsersToggle = new ToggleSlideOptions();
150
+ this.linkingExistingUsersToggle.name = "linkingExistingUsers";
151
+ this.linkingExistingUsersToggle.labelKey = "EnableLinkingExistingUsers";
152
+ this.linkingExistingUsersToggle.value = this.uaePassConfigurationModel.enableLinkingExistingUsers;
153
+ this.onLinkingExistingUsersToggleValue(this.uaePassConfigurationModel.enableLinkingExistingUsers);
154
+ this.importingNewUserToggle = new ToggleSlideOptions();
155
+ this.importingNewUserToggle.name = "importingNewUser";
156
+ this.importingNewUserToggle.labelKey = "EnableImportingNewUser";
157
+ this.importingNewUserToggle.value = this.uaePassConfigurationModel.enableImportingNewUser;
158
+ this.onChangeImportingNewUserToggle(this.uaePassConfigurationModel.enableImportingNewUser, true);
159
+ this.updateUserInformationOnLoginToggle = new ToggleSlideOptions();
160
+ this.updateUserInformationOnLoginToggle.name = "updateUserInformationOnLogin";
161
+ this.updateUserInformationOnLoginToggle.labelKey = "EnableUpdateUserInformationOnLogin";
162
+ this.updateUserInformationOnLoginToggle.value = this.uaePassConfigurationModel.enableUpdateUserInformationOnLogin;
163
+ this.userPermissionSetDropdown = new DropdownOptions();
164
+ this.userPermissionSetDropdown.name = "PermissionSets";
165
+ this.userPermissionSetDropdown.labelKey = "PermissionSets";
166
+ this.userPermissionSetDropdown.selectedItems = this.uaePassConfigurationModel.defaultPermissionSet;
167
+ this.userPermissionSetDropdown.singleSelection = true;
168
+ this.userPermissionSetDropdown.allowSearchFilter = true;
169
+ this.userPermissionSetDropdown.isRequired = true;
170
+ this.nameArCheckbox = new CheckBoxOptions();
171
+ this.nameArCheckbox.name = "nameAr";
172
+ this.nameArCheckbox.labelKey = "NameAR";
173
+ this.nameArCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.nameAR;
174
+ this.nameEnCheckbox = new CheckBoxOptions();
175
+ this.nameEnCheckbox.name = "nameEn";
176
+ this.nameEnCheckbox.labelKey = "NameEN";
177
+ this.nameEnCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.nameEN;
178
+ this.emailCheckbox = new CheckBoxOptions();
179
+ this.emailCheckbox.name = "email";
180
+ this.emailCheckbox.labelKey = "Email";
181
+ this.emailCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.email;
182
+ this.eIdCheckbox = new CheckBoxOptions();
183
+ this.eIdCheckbox.name = "eId";
184
+ this.eIdCheckbox.labelKey = "EID";
185
+ this.eIdCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.eid;
186
+ this.mobileCheckbox = new CheckBoxOptions();
187
+ this.mobileCheckbox.name = "mobile";
188
+ this.mobileCheckbox.labelKey = "Mobile";
189
+ this.mobileCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.mobile;
190
+ this.nationalityCheckbox = new CheckBoxOptions();
191
+ this.nationalityCheckbox.name = "nationality";
192
+ this.nationalityCheckbox.labelKey = "Nationality";
193
+ this.nationalityCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.nationality;
194
+ this.genderCheckbox = new CheckBoxOptions();
195
+ this.genderCheckbox.name = "gender";
196
+ this.genderCheckbox.labelKey = "Gender";
197
+ this.genderCheckbox.value = this.uaePassConfigurationModel.userInfoMapping.gender;
198
+ this.getPermissionSets();
199
+ this.onChangeSOPPermissionToggleValue(this.uaePassConfigurationModel.enableSOPPermissionMapping);
200
+ this.onLinkingExistingUsersToggleValue(this.uaePassConfigurationModel.enableLinkingExistingUsers);
201
+ this.onChangeAccessLevels(this.uaePassConfigurationModel.accessLevels);
202
+ if (this.uaePassConfigurationModel.defaultPermissionSet)
203
+ this.changePermissionSet(this.uaePassConfigurationModel.defaultPermissionSet);
204
+ }
198
205
  buildUAEPassConfigObject(formValue) {
199
206
  return {
200
207
  baseUrl: formValue[this.baseURLTextBox.name],
@@ -217,7 +224,7 @@ export class EditAuthConfigurationComponent extends AppBaseComponent {
217
224
  nameEN: formValue[this.nameEnCheckbox.name],
218
225
  nameAR: formValue[this.nameArCheckbox.name],
219
226
  email: formValue[this.emailCheckbox.name],
220
- EID: formValue[this.eIdCheckbox.name],
227
+ eid: formValue[this.eIdCheckbox.name],
221
228
  mobile: formValue[this.mobileCheckbox.name],
222
229
  nationality: formValue[this.nationalityCheckbox.name],
223
230
  gender: formValue[this.genderCheckbox.name]
@@ -243,6 +250,20 @@ export class EditAuthConfigurationComponent extends AppBaseComponent {
243
250
  else
244
251
  this.removeRequiredValidation([this.linkingModeDropdown], this.editForm, this.editFormOptions);
245
252
  }
253
+ onChangeImportingNewUserToggle(value, isInit = false) {
254
+ this.showImportingNewUserMapping = value;
255
+ if (isInit)
256
+ return;
257
+ if (this.showImportingNewUserMapping) {
258
+ this.addRequiredValidation([this.userPermissionSetDropdown], this.editForm, this.editFormOptions);
259
+ }
260
+ else {
261
+ this.selectedAccessLevels.forEach(level => {
262
+ this.removeControl(`permissions-user-type-${level}`, this.editForm);
263
+ });
264
+ this.removeRequiredValidation([this.userPermissionSetDropdown], this.editForm, this.editFormOptions);
265
+ }
266
+ }
246
267
  onChangeSOPPermissionToggleValue(value) {
247
268
  this.showUserTypePermissionsMapping = value;
248
269
  if (!this.showUserTypePermissionsMapping) {
@@ -292,33 +313,33 @@ export class EditAuthConfigurationComponent extends AppBaseComponent {
292
313
  //#region validation actions
293
314
  addRequiredValidation(customControlOption, form, formOptions) {
294
315
  customControlOption.forEach(control => {
295
- if (form.get(control.Name))
296
- this.addRequiredRule(form.get(control.Name), formOptions);
316
+ if (form.get(control.name))
317
+ this.addRequiredRule(form.get(control.name), formOptions);
297
318
  else
298
319
  control.IsRequired = true;
299
320
  });
300
321
  }
301
322
  removeRequiredValidation(customControlOption, form, formOptions) {
302
323
  customControlOption.forEach(control => {
303
- if (form.get(control.Name))
304
- this.removeRequiredRule(form.get(control.Name), formOptions);
324
+ if (form.get(control.name))
325
+ this.removeRequiredRule(form.get(control.name), formOptions);
305
326
  else
306
327
  control.IsRequired = false;
307
328
  });
308
329
  }
309
330
  resetFormControlsValue(customControlsOptions, form) {
310
331
  customControlsOptions.forEach(option => {
311
- let formControl = form.get(option.Name);
332
+ let formControl = form.get(option.name);
312
333
  if (formControl)
313
334
  formControl.reset();
314
335
  });
315
336
  }
316
337
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditAuthConfigurationComponent, deps: [{ token: i0.Injector }, { token: i1.MasterLayoutService }, { token: i2.ConfigurationsService }, { token: i3.UserService }], target: i0.ɵɵFactoryTarget.Component }); }
317
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EditAuthConfigurationComponent, selector: "auth-configuration-edit", inputs: { pagingElement: "pagingElement", onSuccessTakePenaltyHandler: "onSuccessTakePenaltyHandler" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["editModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #editModal let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">\r\n {{ translate('EditAuthConfiguration') }}\r\n </h4>\r\n <button type=\"button\" data-dismiss=\"modal\" class=\"btn btn-icon btn-sm\" (click)=\"modal.dismiss()\">\r\n <div class=\"svg-icon svg-icon-4 svg-icon-hover-brand\" [inlineSVG]=\"'/assets/images/close-modal.svg'\"></div>\r\n </button>\r\n </div>\r\n <BBSF-Form [options]=\"editFormOptions\">\r\n <div class=\"modal-body\">\r\n <ng-container *ngIf=\"modeId == authenticationModeEnumValue.UAEPass\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"baseURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"clientIdTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"secretKeyTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"redirectURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"onChangeAccessLevels($event)\" [options]=\"accessLevelDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event)\" [options]=\"userPermissionSetDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide\r\n (onChange)=\"onChangeSOPPermissionToggleValue($event)\"\r\n [options]=\"sopPermissionMappingToggle\"\r\n [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide\r\n [options]=\"linkingExistingUsersToggle\"\r\n (onChange)=\"onLinkingExistingUsersToggleValue($event)\"\r\n [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide [options]=\"importingNewUserToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide [options]=\"updateUserInformationOnLoginToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n\r\n <div class=\"configuration-header\" *ngIf=\"showUserTypePermissionsMapping\">\r\n <h5>{{ translate('AccessLevelsPermissionMapping') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let level of selectedAccessLevels\">\r\n <BBSF-DropdownList [options]=\"initDropDownOptions(level)\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showUserTypeLinkingMapping\">\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let level of selectedAccessLevels\">\r\n <BBSF-DropdownList [options]=\"linkingModeDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingAttributesOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameArCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameEnCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"emailCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"eIdCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"mobileCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nationalityCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"genderCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"row\" *ngIf=\"modeId == authenticationModeEnumValue.AzureAD\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" (click)=\"modal.dismiss()\">\r\n {{ translate('Cancel') }}\r\n </button>\r\n <button appPreventDoubleClick type=\"submit\" class=\"btn btn-sm btn-brand\">\r\n {{ translate('Save') }}\r\n </button>\r\n </div>\r\n </BBSF-Form>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i5.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i5.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i5.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i5.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "directive", type: i6.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] }); }
338
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EditAuthConfigurationComponent, selector: "auth-configuration-edit", inputs: { pagingElement: "pagingElement", onSuccessTakePenaltyHandler: "onSuccessTakePenaltyHandler" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["editModal"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #editModal let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">\r\n {{ translate('EditAuthConfiguration') }}\r\n </h4>\r\n <button type=\"button\" data-dismiss=\"modal\" class=\"btn btn-icon btn-sm\" (click)=\"modal.dismiss()\">\r\n <div class=\"svg-icon svg-icon-4 svg-icon-hover-brand\" [inlineSVG]=\"'/assets/images/close-modal.svg'\"></div>\r\n </button>\r\n </div>\r\n <BBSF-Form [options]=\"editFormOptions\">\r\n <div class=\"modal-body\">\r\n <ng-container *ngIf=\"modeId == authenticationModeEnumValue.UAEPass\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"baseURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"clientIdTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"secretKeyTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"redirectURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"onChangeAccessLevels($event)\" [options]=\"accessLevelDropdown\"\r\n [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <BBSF-Toggleslide [options]=\"importingNewUserToggle\" [group]=\"editForm\"\r\n (onChange)=\"onChangeImportingNewUserToggle($event)\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <BBSF-Toggleslide [options]=\"linkingExistingUsersToggle\"\r\n (onChange)=\"onLinkingExistingUsersToggleValue($event)\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <BBSF-Toggleslide [options]=\"updateUserInformationOnLoginToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"showImportingNewUserMapping\">\r\n <div class=\"row\">\r\n <fieldset\r\n style=\"border: 2px solid #007bff; border-radius: 8px; padding: 1rem; margin-bottom: 1rem; position: relative;\">\r\n <legend\r\n style=\"font-size: 1rem; font-weight: 600; color: #007bff; width: auto; padding: 0 10px; margin-bottom: 0;\">\r\n {{ translate('EnableImportingNewUser') }}</legend>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event)\" [options]=\"userPermissionSetDropdown\"\r\n [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide (onChange)=\"onChangeSOPPermissionToggleValue($event)\"\r\n [options]=\"sopPermissionMappingToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"configuration-header\" *ngIf=\"showUserTypePermissionsMapping\">\r\n <h5>{{ translate('AccessLevelsPermissionMapping') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let level of selectedAccessLevels\">\r\n <BBSF-DropdownList [options]=\"initDropDownOptions(level)\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showUserTypeLinkingMapping\">\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList [options]=\"linkingModeDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingAttributesOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameArCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameEnCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"emailCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"eIdCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"mobileCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nationalityCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"genderCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"row\" *ngIf=\"modeId == authenticationModeEnumValue.AzureAD\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" (click)=\"modal.dismiss()\">\r\n {{ translate('Cancel') }}\r\n </button>\r\n <button appPreventDoubleClick type=\"submit\" class=\"btn btn-sm btn-brand\">\r\n {{ translate('Save') }}\r\n </button>\r\n </div>\r\n </BBSF-Form>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i5.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i5.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i5.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i5.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "directive", type: i6.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] }); }
318
339
  }
319
340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditAuthConfigurationComponent, decorators: [{
320
341
  type: Component,
321
- args: [{ selector: 'auth-configuration-edit', template: "<ng-template #editModal let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">\r\n {{ translate('EditAuthConfiguration') }}\r\n </h4>\r\n <button type=\"button\" data-dismiss=\"modal\" class=\"btn btn-icon btn-sm\" (click)=\"modal.dismiss()\">\r\n <div class=\"svg-icon svg-icon-4 svg-icon-hover-brand\" [inlineSVG]=\"'/assets/images/close-modal.svg'\"></div>\r\n </button>\r\n </div>\r\n <BBSF-Form [options]=\"editFormOptions\">\r\n <div class=\"modal-body\">\r\n <ng-container *ngIf=\"modeId == authenticationModeEnumValue.UAEPass\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"baseURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"clientIdTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"secretKeyTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"redirectURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"onChangeAccessLevels($event)\" [options]=\"accessLevelDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event)\" [options]=\"userPermissionSetDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide\r\n (onChange)=\"onChangeSOPPermissionToggleValue($event)\"\r\n [options]=\"sopPermissionMappingToggle\"\r\n [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide\r\n [options]=\"linkingExistingUsersToggle\"\r\n (onChange)=\"onLinkingExistingUsersToggleValue($event)\"\r\n [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide [options]=\"importingNewUserToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide [options]=\"updateUserInformationOnLoginToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n\r\n <div class=\"configuration-header\" *ngIf=\"showUserTypePermissionsMapping\">\r\n <h5>{{ translate('AccessLevelsPermissionMapping') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let level of selectedAccessLevels\">\r\n <BBSF-DropdownList [options]=\"initDropDownOptions(level)\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showUserTypeLinkingMapping\">\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let level of selectedAccessLevels\">\r\n <BBSF-DropdownList [options]=\"linkingModeDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingAttributesOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameArCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameEnCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"emailCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"eIdCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"mobileCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nationalityCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"genderCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"row\" *ngIf=\"modeId == authenticationModeEnumValue.AzureAD\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" (click)=\"modal.dismiss()\">\r\n {{ translate('Cancel') }}\r\n </button>\r\n <button appPreventDoubleClick type=\"submit\" class=\"btn btn-sm btn-brand\">\r\n {{ translate('Save') }}\r\n </button>\r\n </div>\r\n </BBSF-Form>\r\n</ng-template>\r\n" }]
342
+ args: [{ selector: 'auth-configuration-edit', template: "<ng-template #editModal let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">\r\n {{ translate('EditAuthConfiguration') }}\r\n </h4>\r\n <button type=\"button\" data-dismiss=\"modal\" class=\"btn btn-icon btn-sm\" (click)=\"modal.dismiss()\">\r\n <div class=\"svg-icon svg-icon-4 svg-icon-hover-brand\" [inlineSVG]=\"'/assets/images/close-modal.svg'\"></div>\r\n </button>\r\n </div>\r\n <BBSF-Form [options]=\"editFormOptions\">\r\n <div class=\"modal-body\">\r\n <ng-container *ngIf=\"modeId == authenticationModeEnumValue.UAEPass\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"baseURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"clientIdTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"secretKeyTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"redirectURLTextBox\" [group]=\"editForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"onChangeAccessLevels($event)\" [options]=\"accessLevelDropdown\"\r\n [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <BBSF-Toggleslide [options]=\"importingNewUserToggle\" [group]=\"editForm\"\r\n (onChange)=\"onChangeImportingNewUserToggle($event)\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <BBSF-Toggleslide [options]=\"linkingExistingUsersToggle\"\r\n (onChange)=\"onLinkingExistingUsersToggleValue($event)\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <BBSF-Toggleslide [options]=\"updateUserInformationOnLoginToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"showImportingNewUserMapping\">\r\n <div class=\"row\">\r\n <fieldset\r\n style=\"border: 2px solid #007bff; border-radius: 8px; padding: 1rem; margin-bottom: 1rem; position: relative;\">\r\n <legend\r\n style=\"font-size: 1rem; font-weight: 600; color: #007bff; width: auto; padding: 0 10px; margin-bottom: 0;\">\r\n {{ translate('EnableImportingNewUser') }}</legend>\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event)\" [options]=\"userPermissionSetDropdown\"\r\n [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-Toggleslide (onChange)=\"onChangeSOPPermissionToggleValue($event)\"\r\n [options]=\"sopPermissionMappingToggle\" [group]=\"editForm\"></BBSF-Toggleslide>\r\n </div>\r\n <div class=\"configuration-header\" *ngIf=\"showUserTypePermissionsMapping\">\r\n <h5>{{ translate('AccessLevelsPermissionMapping') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let level of selectedAccessLevels\">\r\n <BBSF-DropdownList [options]=\"initDropDownOptions(level)\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showUserTypeLinkingMapping\">\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-DropdownList [options]=\"linkingModeDropdown\" [group]=\"editForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"configuration-header\">\r\n <h5>{{ translate('LinkingAttributesOptions') }}</h5>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameArCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nameEnCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"emailCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"eIdCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"mobileCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"nationalityCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <BBSF-CheckBox [options]=\"genderCheckbox\" [group]=\"editForm\"></BBSF-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"row\" *ngIf=\"modeId == authenticationModeEnumValue.AzureAD\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" (click)=\"modal.dismiss()\">\r\n {{ translate('Cancel') }}\r\n </button>\r\n <button appPreventDoubleClick type=\"submit\" class=\"btn btn-sm btn-brand\">\r\n {{ translate('Save') }}\r\n </button>\r\n </div>\r\n </BBSF-Form>\r\n</ng-template>" }]
322
343
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.MasterLayoutService }, { type: i2.ConfigurationsService }, { type: i3.UserService }], propDecorators: { pagingElement: [{
323
344
  type: Input
324
345
  }], onSuccessTakePenaltyHandler: [{
@@ -327,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
327
348
  type: ViewChild,
328
349
  args: ["editModal", { static: false }]
329
350
  }] } });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jb25maWd1cmF0aW9uLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9jb25maWd1cmF0aW9ucy9hdXRoLWNvbmZpZ3VyYXRpb24vYXV0aC1jb25maWd1cmF0aW9uLWVkaXQvYXV0aC1jb25maWd1cmF0aW9uLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9jb25maWd1cmF0aW9ucy9hdXRoLWNvbmZpZ3VyYXRpb24vYXV0aC1jb25maWd1cmF0aW9uLWVkaXQvYXV0aC1jb25maWd1cmF0aW9uLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBd0IsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHeEssT0FBTyxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixFQUFxRCxNQUFNLCtEQUErRCxDQUFDO0FBQ3pMLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDOzs7Ozs7OztBQVM1SSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsZ0JBQWdCO0lBK0NsRSxZQUFZO0lBRVosWUFBWTtJQUVaLFlBQ1UsUUFBa0IsRUFDbEIsbUJBQXdDLEVBQ3hDLHFCQUE0QyxFQUM1QyxXQUF3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O2dCQUlxQyxLQUFLO3NCQUEvQyxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50LCBDaGVja0JveE9wdGlvbnMsIENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRm9ybU9wdGlvbnMsIElucHV0VHlwZSwgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgTWFzdGVyTGF5b3V0U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQkJTRkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiwgVUFFUGFzc0NvbmZpZ3VyYXRpb24sIFVBRVBhc3NVc2VySW5mb01hcHBpbmcsIFVBRVBhc3NVc2VyVHlwZVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL0NvbmZpZ3VyYXRpb25Nb2RlbHMvQ29uZmlndXJhdGlvbk1vZGVsJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlLCBVQUVQYXNzTGlua2luZ01vZGUsIFVBRVBhc3NVc2VyVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvRW51bXMvY29uZmlndXJhdGlvbi9hdXRoZW50ZWNhdGlvbi1jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL0NvbmZpZ3VyYXRpb25zU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWxPcHRpb25zIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy91c2VyU2VydmljZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXV0aC1jb25maWd1cmF0aW9uLWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLWNvbmZpZ3VyYXRpb24tZWRpdC5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0QXV0aENvbmZpZ3VyYXRpb25Db21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBwYWdpbmdFbGVtZW50O1xyXG4gIEBJbnB1dCgpIG9uU3VjY2Vzc1Rha2VQZW5hbHR5SGFuZGxlcjogRnVuY3Rpb247XHJcblxyXG4gIGVkaXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZWRpdEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRNb2RhbFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgbW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG4gIG1vZGVJZDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG4gIGF1dGhlbnRpY2F0aW9uTW9kZUVudW1WYWx1ZSA9IEF1dGhlbnRpY2F0aW9uTW9kZTtcclxuXHJcbiAgLy8jcmVnaW9uIHVhZSBwYXNzIHByb3BzXHJcbiAgYmFzZVVSTFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGNsaWVudElkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgc2VjcmV0S2V5VGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgcmVkaXJlY3RVUkxUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBhY2Nlc3NMZXZlbERyb3Bkb3duOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgbGlua2luZ01vZGVEcm9wZG93bjogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICBsaW5raW5nRXhpc3RpbmdVc2Vyc1RvZ2dsZTogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIGltcG9ydGluZ05ld1VzZXJUb2dnbGU6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICB1cGRhdGVVc2VySW5mb3JtYXRpb25PbkxvZ2luVG9nZ2xlOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgc29wUGVybWlzc2lvbk1hcHBpbmdUb2dnbGU6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuXHJcbiAgdXNlclBlcm1pc3Npb25TZXREcm9wZG93bjogRHJvcGRvd25PcHRpb25zO1xyXG4gIHVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICB1YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsOiBVQUVQYXNzQ29uZmlndXJhdGlvbiA9IG5ldyBVQUVQYXNzQ29uZmlndXJhdGlvbigpO1xyXG5cclxuICBwZXJtaXNzaW9uU2V0TGlzdCA9IFtdO1xyXG4gIHBlcm1pc3Npb25zTGlzdCA9IFtdO1xyXG5cclxuICBzaG93VXNlclR5cGVQZXJtaXNzaW9uc01hcHBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93VXNlclR5cGVMaW5raW5nTWFwcGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHVhZVBhc3NVc2VyVHlwZUVudW06IFVBRVBhc3NVc2VyVHlwZXM7XHJcbiAgdWFlUGFzc1VzZXJUeXBlTGlzdDogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEFjY2Vzc0xldmVsczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8jcmVnaW9uIGxpbmtpbmcgbWFwcGluZ1xyXG4gIG5hbWVBckNoZWNrYm94OiBDaGVja0JveE9wdGlvbnM7XHJcbiAgbmFtZUVuQ2hlY2tib3g6IENoZWNrQm94T3B0aW9ucztcclxuICBlbWFpbENoZWNrYm94OiBDaGVja0JveE9wdGlvbnM7XHJcbiAgZUlkQ2hlY2tib3g6IENoZWNrQm94T3B0aW9ucztcclxuICBtb2JpbGVDaGVja2JveDogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIG5hdGlvbmFsaXR5Q2hlY2tib3g6IENoZWNrQm94T3B0aW9ucztcclxuICBnZW5kZXJDaGVja2JveDogQ2hlY2tCb3hPcHRpb25zO1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIG1hc3RlckxheW91dFNlcnZpY2U6IE1hc3RlckxheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25zU2VydmljZTogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcbiAgLy8jcmVnaW9uIGhlbHBlclxyXG5cclxuICB0cmFuc2xhdGUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShrZXkpO1xyXG4gIH1cclxuXHJcbiAgbG9hZFVBRVBhc3NVc2VyVHlwZXMoKSB7XHJcbiAgICBsZXQgbGlzdDogYW55W10gPSBbXTtcclxuICAgIGZvciAodmFyIGl0ZW0gaW4gVUFFUGFzc1VzZXJUeXBlcykge1xyXG4gICAgICBpZiAocGFyc2VJbnQoaXRlbSkpXHJcbiAgICAgICAgbGlzdC5wdXNoKHtcclxuICAgICAgICAgIGtleTogK2l0ZW0sXHJcbiAgICAgICAgICB2YWx1ZTogVUFFUGFzc1VzZXJUeXBlc1tpdGVtXVxyXG4gICAgICAgIH0gYXMgYW55KTtcclxuICAgIH1cclxuICAgIHRoaXMudWFlUGFzc1VzZXJUeXBlTGlzdCA9IGxpc3Q7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIGxvYWRVQUVQYXNzTGlua2luZ01vZGUoKSB7XHJcbiAgICBsZXQgbGlzdDogYW55W10gPSBbXTtcclxuICAgIGZvciAodmFyIGl0ZW0gaW4gVUFFUGFzc0xpbmtpbmdNb2RlKSB7XHJcbiAgICAgIGlmIChwYXJzZUludChpdGVtKSlcclxuICAgICAgICBsaXN0LnB1c2goe1xyXG4gICAgICAgICAga2V5OiAraXRlbSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLnRyYW5zbGF0ZShVQUVQYXNzTGlua2luZ01vZGVbaXRlbV0pXHJcbiAgICAgICAgfSBhcyBhbnkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbiAgfVxyXG5cclxuICBnZXRVQUVQYXNzVXNlclR5cGVWYWx1ZShrZXk6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMudWFlUGFzc1VzZXJUeXBlTGlzdC5maW5kKGkgPT4gaS5rZXkgPT0ga2V5KS52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBzaG93TW9kYWwobW9kZTogQXV0aGVudGljYXRpb25Nb2RlLCBhdXRoQ29uZmlnT2JqZWN0OiBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKSB7XHJcbiAgICB0aGlzLm1vZGVJZCA9IG1vZGU7XHJcbiAgICBpZiAodGhpcy5lZGl0Rm9ybSkge1xyXG4gICAgICB0aGlzLmVkaXRGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgdGhpcy5lZGl0Rm9ybS5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZWRpdEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLmVkaXRGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLmVkaXRGb3JtIGFzIGFueTtcclxuICAgIHRoaXMuZWRpdEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuZWRpdEZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZE1vZGVsO1xyXG4gICAgdGhpcy5lZGl0Rm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRTdWJtaXRGdW5jdGlvbjtcclxuICAgIHRoaXMuZWRpdEZvcm1PcHRpb25zLmRpc2FibGVTdWNjZXNzTm90aWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmVkaXRGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Y2Nlc3NIYW5kbGVyO1xyXG5cclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIEF1dGhlbnRpY2F0aW9uTW9kZS5VQUVQYXNzOlxyXG4gICAgICAgIHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbCA9IGF1dGhDb25maWdPYmplY3QudWFlUGFzc0NvbmZpZztcclxuXHJcbiAgICAgICAgdGhpcy5iYXNlVVJMVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuYmFzZVVSTFRleHRCb3gubmFtZSA9IFwiYmFzZVVybFwiO1xyXG4gICAgICAgIHRoaXMuYmFzZVVSTFRleHRCb3gubGFiZWxLZXkgPSBcIkJhc2VVcmxcIjtcclxuICAgICAgICB0aGlzLmJhc2VVUkxUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLmJhc2VVUkxUZXh0Qm94LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgICB0aGlzLmJhc2VVUkxUZXh0Qm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmJhc2VVcmw7XHJcblxyXG4gICAgICAgIHRoaXMuY2xpZW50SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZFRleHRCb3gubmFtZSA9IFwiY2xpZW50SURcIjtcclxuICAgICAgICB0aGlzLmNsaWVudElkVGV4dEJveC5sYWJlbEtleSA9IFwiQ2xpZW50SURcIjtcclxuICAgICAgICB0aGlzLmNsaWVudElkVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZFRleHRCb3gudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWRUZXh0Qm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmNsaWVudElEO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3JldEtleVRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNlY3JldEtleVRleHRCb3gubmFtZSA9IFwic2VjcmV0S2V5XCI7XHJcbiAgICAgICAgdGhpcy5zZWNyZXRLZXlUZXh0Qm94LmxhYmVsS2V5ID0gXCJTZWNyZXRLZXlcIjtcclxuICAgICAgICB0aGlzLnNlY3JldEtleVRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgIHRoaXMuc2VjcmV0S2V5VGV4dEJveC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgdGhpcy5zZWNyZXRLZXlUZXh0Qm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLnNlY3JldEtleTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdFVSTFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VVJMVGV4dEJveC5uYW1lID0gXCJyZWRpcmVjdFVybFwiO1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RVUkxUZXh0Qm94LmxhYmVsS2V5ID0gXCJSZWRpcmVjdFVybFwiO1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3RVUkxUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VVJMVGV4dEJveC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdFVSTFRleHRCb3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwucmVkaXJlY3RVcmw7XHJcblxyXG4gICAgICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmFjY2Vzc0xldmVsRHJvcGRvd24ubmFtZSA9IFwiYWNjZXNzTGV2ZWxzXCI7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NMZXZlbERyb3Bkb3duLmxhYmVsS2V5ID0gXCJBY2Nlc3NMZXZlbFwiO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFjY2Vzc0xldmVsRHJvcGRvd24uc2VsZWN0ZWRJdGVtcyA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5hY2Nlc3NMZXZlbHM7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NMZXZlbERyb3Bkb3duLmRhdGFTb3VyY2UgPSB0aGlzLmxvYWRVQUVQYXNzVXNlclR5cGVzKCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlua2luZ01vZGVEcm9wZG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd24ubmFtZSA9IFwibGlua2luZ01vZGVcIjtcclxuICAgICAgICB0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd24ubGFiZWxLZXkgPSBcIkxpbmtpbmdNb2RlXCI7XHJcbiAgICAgICAgdGhpcy5saW5raW5nTW9kZURyb3Bkb3duLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5saW5raW5nTW9kZURyb3Bkb3duLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwubGlua2luZ01vZGU7XHJcbiAgICAgICAgdGhpcy5saW5raW5nTW9kZURyb3Bkb3duLmRhdGFTb3VyY2UgPSB0aGlzLmxvYWRVQUVQYXNzTGlua2luZ01vZGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLnNvcFBlcm1pc3Npb25NYXBwaW5nVG9nZ2xlLm5hbWUgPSBcInNvcFBlcm1pc3Npb25NYXBwaW5nXCI7XHJcbiAgICAgICAgdGhpcy5zb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZS5sYWJlbEtleSA9IFwiU09QUGVybWlzc2lvbk1hcHBpbmdcIjtcclxuICAgICAgICB0aGlzLnNvcFBlcm1pc3Npb25NYXBwaW5nVG9nZ2xlLnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmVuYWJsZVNPUFBlcm1pc3Npb25NYXBwaW5nO1xyXG5cclxuICAgICAgICB0aGlzLmxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMubGlua2luZ0V4aXN0aW5nVXNlcnNUb2dnbGUubmFtZSA9IFwibGlua2luZ0V4aXN0aW5nVXNlcnNcIjtcclxuICAgICAgICB0aGlzLmxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlLmxhYmVsS2V5ID0gXCJMaW5raW5nRXhpc3RpbmdVc2Vyc1wiO1xyXG4gICAgICAgIHRoaXMubGlua2luZ0V4aXN0aW5nVXNlcnNUb2dnbGUudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwuZW5hYmxlTGlua2luZ0V4aXN0aW5nVXNlcnM7XHJcblxyXG4gICAgICAgIHRoaXMuaW1wb3J0aW5nTmV3VXNlclRvZ2dsZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmltcG9ydGluZ05ld1VzZXJUb2dnbGUubmFtZSA9IFwiaW1wb3J0aW5nTmV3VXNlclwiO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0aW5nTmV3VXNlclRvZ2dsZS5sYWJlbEtleSA9IFwiSW1wb3J0aW5nTmV3VXNlclwiO1xyXG4gICAgICAgIHRoaXMuaW1wb3J0aW5nTmV3VXNlclRvZ2dsZS52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5lbmFibGVJbXBvcnRpbmdOZXdVc2VyO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5Ub2dnbGUgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVc2VySW5mb3JtYXRpb25PbkxvZ2luVG9nZ2xlLm5hbWUgPSBcInVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5cIjtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5Ub2dnbGUubGFiZWxLZXkgPSBcIlVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5cIjtcclxuICAgICAgICB0aGlzLnVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5Ub2dnbGUudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwuZW5hYmxlVXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpbjtcclxuXHJcbiAgICAgICAgdGhpcy51c2VyUGVybWlzc2lvblNldERyb3Bkb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bi5uYW1lID0gXCJQZXJtaXNzaW9uU2V0c1wiO1xyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bi5sYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24uc2VsZWN0ZWRJdGVtcyA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5kZWZhdWx0UGVybWlzc2lvblNldDtcclxuICAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24uc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24uYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lQXJDaGVja2JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLm5hbWVBckNoZWNrYm94Lm5hbWUgPSBcIm5hbWVBclwiO1xyXG4gICAgICAgIHRoaXMubmFtZUFyQ2hlY2tib3gubGFiZWxLZXkgPSBcIk5hbWVBUlwiO1xyXG4gICAgICAgIHRoaXMubmFtZUFyQ2hlY2tib3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlckluZm9NYXBwaW5nLm5hbWVBUjtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lRW5DaGVja2JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLm5hbWVFbkNoZWNrYm94Lm5hbWUgPSBcIm5hbWVFblwiO1xyXG4gICAgICAgIHRoaXMubmFtZUVuQ2hlY2tib3gubGFiZWxLZXkgPSBcIk5hbWVFTlwiO1xyXG4gICAgICAgIHRoaXMubmFtZUVuQ2hlY2tib3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlckluZm9NYXBwaW5nLm5hbWVFTjtcclxuXHJcbiAgICAgICAgdGhpcy5lbWFpbENoZWNrYm94ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuZW1haWxDaGVja2JveC5uYW1lID0gXCJlbWFpbFwiO1xyXG4gICAgICAgIHRoaXMuZW1haWxDaGVja2JveC5sYWJlbEtleSA9IFwiRW1haWxcIjtcclxuICAgICAgICB0aGlzLmVtYWlsQ2hlY2tib3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlckluZm9NYXBwaW5nLmVtYWlsO1xyXG5cclxuICAgICAgICB0aGlzLmVJZENoZWNrYm94ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuZUlkQ2hlY2tib3gubmFtZSA9IFwiZUlkXCI7XHJcbiAgICAgICAgdGhpcy5lSWRDaGVja2JveC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgICAgdGhpcy5lSWRDaGVja2JveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC51c2VySW5mb01hcHBpbmcuRUlEO1xyXG5cclxuICAgICAgICB0aGlzLm1vYmlsZUNoZWNrYm94ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMubW9iaWxlQ2hlY2tib3gubmFtZSA9IFwibW9iaWxlXCI7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVDaGVja2JveC5sYWJlbEtleSA9IFwiTW9iaWxlXCI7XHJcbiAgICAgICAgdGhpcy5tb2JpbGVDaGVja2JveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC51c2VySW5mb01hcHBpbmcubW9iaWxlO1xyXG5cclxuICAgICAgICB0aGlzLm5hdGlvbmFsaXR5Q2hlY2tib3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5uYXRpb25hbGl0eUNoZWNrYm94Lm5hbWUgPSBcIm5hdGlvbmFsaXR5XCI7XHJcbiAgICAgICAgdGhpcy5uYXRpb25hbGl0eUNoZWNrYm94LmxhYmVsS2V5ID0gXCJOYXRpb25hbGl0eVwiO1xyXG4gICAgICAgIHRoaXMubmF0aW9uYWxpdHlDaGVja2JveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC51c2VySW5mb01hcHBpbmcubmF0aW9uYWxpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2VuZGVyQ2hlY2tib3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5nZW5kZXJDaGVja2JveC5uYW1lID0gXCJnZW5kZXJcIjtcclxuICAgICAgICB0aGlzLmdlbmRlckNoZWNrYm94LmxhYmVsS2V5ID0gXCJHZW5kZXJcIjtcclxuICAgICAgICB0aGlzLmdlbmRlckNoZWNrYm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLnVzZXJJbmZvTWFwcGluZy5nZW5kZXI7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0UGVybWlzc2lvblNldHMoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlU09QUGVybWlzc2lvblRvZ2dsZVZhbHVlKHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5lbmFibGVTT1BQZXJtaXNzaW9uTWFwcGluZyk7XHJcbiAgICAgICAgdGhpcy5vbkxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlVmFsdWUodGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmVuYWJsZUxpbmtpbmdFeGlzdGluZ1VzZXJzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQWNjZXNzTGV2ZWxzKHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5hY2Nlc3NMZXZlbHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmRlZmF1bHRQZXJtaXNzaW9uU2V0KVxyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VQZXJtaXNzaW9uU2V0KHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5kZWZhdWx0UGVybWlzc2lvblNldCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEF1dGhlbnRpY2F0aW9uTW9kZS5BenVyZUFEOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5tb2RhbCwgeyBzaXplOiAneGwnIH0gYXMgTmdiTW9kYWxPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldEFkZE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHJlc3VsdE1vZGVsID0gdGhpcy5lZGl0Rm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgZWRpdE1vZGVsOiBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uID0gbmV3IEJCU0ZBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oKTtcclxuICAgIGVkaXRNb2RlbC5tb2RlSWQgPSB0aGlzLm1vZGVJZDtcclxuICAgIGVkaXRNb2RlbC51YWVQYXNzQ29uZmlnID0gdGhpcy5idWlsZFVBRVBhc3NDb25maWdPYmplY3QocmVzdWx0TW9kZWwpO1xyXG4gICAgcmV0dXJuIEFycmF5KGVkaXRNb2RlbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0U3VibWl0RnVuY3Rpb24gPSAoZWRpdE1vZGVsOiBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS51cGRhdGVBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb25EYXRhKGVkaXRNb2RlbCk7XHJcbiAgfTtcclxuXHJcbiAgb25TdWNjZXNzSGFuZGxlciA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMubWFzdGVyTGF5b3V0U2VydmljZS5yZWxvYWRDb21wb25lbnQoKTtcclxuICB9O1xyXG5cclxuICBidWlsZFVBRVBhc3NDb25maWdPYmplY3QoZm9ybVZhbHVlOiBhbnkpOiBVQUVQYXNzQ29uZmlndXJhdGlvbiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiYXNlVXJsOiBmb3JtVmFsdWVbdGhpcy5iYXNlVVJMVGV4dEJveC5uYW1lXSxcclxuICAgICAgY2xpZW50SUQ6IGZvcm1WYWx1ZVt0aGlzLmNsaWVudElkVGV4dEJveC5uYW1lXSxcclxuICAgICAgc2VjcmV0S2V5OiBmb3JtVmFsdWVbdGhpcy5zZWNyZXRLZXlUZXh0Qm94Lm5hbWVdLFxyXG4gICAgICByZWRpcmVjdFVybDogZm9ybVZhbHVlW3RoaXMucmVkaXJlY3RVUkxUZXh0Qm94Lm5hbWVdLFxyXG4gICAgICBhY2Nlc3NMZXZlbHM6IGZvcm1WYWx1ZVt0aGlzLmFjY2Vzc0xldmVsRHJvcGRvd24ubmFtZV0sXHJcbiAgICAgIGVuYWJsZUxpbmtpbmdFeGlzdGluZ1VzZXJzOiBmb3JtVmFsdWVbdGhpcy5saW5raW5nRXhpc3RpbmdVc2Vyc1RvZ2dsZS5uYW1lXSxcclxuICAgICAgZW5hYmxlSW1wb3J0aW5nTmV3VXNlcjogZm9ybVZhbHVlW3RoaXMuaW1wb3J0aW5nTmV3VXNlclRvZ2dsZS5uYW1lXSxcclxuICAgICAgZW5hYmxlVXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpbjogZm9ybVZhbHVlW3RoaXMudXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpblRvZ2dsZS5uYW1lXSxcclxuICAgICAgZGVmYXVsdFBlcm1pc3Npb25TZXQ6IGZvcm1WYWx1ZVt0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24ubmFtZV0sXHJcbiAgICAgIGVuYWJsZVNPUFBlcm1pc3Npb25NYXBwaW5nOiBmb3JtVmFsdWVbdGhpcy5zb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZS5uYW1lXSxcclxuICAgICAgdXNlclR5cGVQZXJtaXNzaW9uczogdGhpcy5idWlsZFVzZXJUeXBlUGVybWlzc2lvbigpLFxyXG4gICAgICB1c2VySW5mb01hcHBpbmc6IHRoaXMuYnVpbGRVc2VySW5mb01hcHBpbmcoZm9ybVZhbHVlKSxcclxuICAgICAgbGlua2luZ01vZGU6IGZvcm1WYWx1ZVt0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd24ubmFtZV0sXHJcbiAgICB9IGFzIFVBRVBhc3NDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRVc2VySW5mb01hcHBpbmcoZm9ybVZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWVFTjogZm9ybVZhbHVlW3RoaXMubmFtZUVuQ2hlY2tib3gubmFtZV0sXHJcbiAgICAgIG5hbWVBUjogZm9ybVZhbHVlW3RoaXMubmFtZUFyQ2hlY2tib3gubmFtZV0sXHJcbiAgICAgIGVtYWlsOiBmb3JtVmFsdWVbdGhpcy5lbWFpbENoZWNrYm94Lm5hbWVdLFxyXG4gICAgICBFSUQ6IGZvcm1WYWx1ZVt0aGlzLmVJZENoZWNrYm94Lm5hbWVdLFxyXG4gICAgICBtb2JpbGU6IGZvcm1WYWx1ZVt0aGlzLm1vYmlsZUNoZWNrYm94Lm5hbWVdLFxyXG4gICAgICBuYXRpb25hbGl0eTogZm9ybVZhbHVlW3RoaXMubmF0aW9uYWxpdHlDaGVja2JveC5uYW1lXSxcclxuICAgICAgZ2VuZGVyOiBmb3JtVmFsdWVbdGhpcy5nZW5kZXJDaGVja2JveC5uYW1lXVxyXG4gICAgfSBhcyBVQUVQYXNzVXNlckluZm9NYXBwaW5nO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRVc2VyVHlwZVBlcm1pc3Npb24oKTogVUFFUGFzc1VzZXJUeXBlUGVybWlzc2lvbltdIHtcclxuICAgIGxldCByZXNMaXN0OiBVQUVQYXNzVXNlclR5cGVQZXJtaXNzaW9uW10gPSBbXTtcclxuICAgIGlmICh0aGlzLnNob3dVc2VyVHlwZVBlcm1pc3Npb25zTWFwcGluZykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWNjZXNzTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4ge1xyXG4gICAgICAgIHJlc0xpc3QucHVzaCh7XHJcbiAgICAgICAgICB1c2VyVHlwZTogbGV2ZWwsXHJcbiAgICAgICAgICBwZXJtaXNzaW9uczogdGhpcy5lZGl0Rm9ybS5jb250cm9sc1tgcGVybWlzc2lvbnMtdXNlci10eXBlLSR7bGV2ZWx9YF0/LnZhbHVlLFxyXG4gICAgICAgIH0gYXMgVUFFUGFzc1VzZXJUeXBlUGVybWlzc2lvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFVBRSBQYXNzIEZ1bmN0aW9uc1xyXG5cclxuICBvbkxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zaG93VXNlclR5cGVMaW5raW5nTWFwcGluZyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuc2hvd1VzZXJUeXBlTGlua2luZ01hcHBpbmcpXHJcbiAgICAgIHRoaXMuYWRkUmVxdWlyZWRWYWxpZGF0aW9uKFt0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd25dLCB0aGlzLmVkaXRGb3JtLCB0aGlzLmVkaXRGb3JtT3B0aW9ucyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMucmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKFt0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd25dLCB0aGlzLmVkaXRGb3JtLCB0aGlzLmVkaXRGb3JtT3B0aW9ucyk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VTT1BQZXJtaXNzaW9uVG9nZ2xlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zaG93VXNlclR5cGVQZXJtaXNzaW9uc01hcHBpbmcgPSB2YWx1ZTtcclxuICAgIGlmICghdGhpcy5zaG93VXNlclR5cGVQZXJtaXNzaW9uc01hcHBpbmcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjY2Vzc0xldmVscy5mb3JFYWNoKGxldmVsID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNvbnRyb2woYHBlcm1pc3Npb25zLXVzZXItdHlwZS0ke2xldmVsfWAsIHRoaXMuZWRpdEZvcm0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVBlcm1pc3Npb25TZXQoaWQ6IGFueSkge1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGlkcyA9IEFycmF5KGlkKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZFBlcm1pc3Npb25zRHJvcERvd24oaWRzKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFBlcm1pc3Npb25TZXRzKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5nZXRQZXJtaXNzaW9uU2V0c0xpc3QoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IHJlcy5wZXJtZXNzaW9uc2V0cztcclxuICAgICAgdGhpcy51c2VyUGVybWlzc2lvblNldERyb3Bkb3duLmRhdGFTb3VyY2UgPSB0aGlzLnBlcm1pc3Npb25TZXRMaXN0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0RHJvcERvd25PcHRpb25zKHVzZXJUeXBlOiBhbnkpIHtcclxuICAgIHZhciBwZXJtaXNzaW9uRHJvcERvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucy5uYW1lID0gYHBlcm1pc3Npb25zLXVzZXItdHlwZS0ke3VzZXJUeXBlfWA7XHJcbiAgICBwZXJtaXNzaW9uRHJvcERvd25PcHRpb25zLmxhYmVsVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZShVQUVQYXNzVXNlclR5cGVzW3VzZXJUeXBlXSkgKyBcIi1cIiArIHRoaXMudHJhbnNsYXRlKFwiUGVybWlzc2lvbnNcIik7XHJcbiAgICBwZXJtaXNzaW9uRHJvcERvd25PcHRpb25zLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIHBlcm1pc3Npb25Ecm9wRG93bk9wdGlvbnMudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucy5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uc0xpc3Q7XHJcbiAgICBwZXJtaXNzaW9uRHJvcERvd25PcHRpb25zLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNldFBlcm1pc3Npb25Gb3JVQUVQYXNzVXNlclR5cGVzKHVzZXJUeXBlKTtcclxuXHJcbiAgICByZXR1cm4gcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucztcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlQWNjZXNzTGV2ZWxzKHNlbGVjdGVkSXRlbXM6IGFueSkge1xyXG4gICAgbGV0IHVzZXJUeXBlc0tleXMgPSB0aGlzLnVhZVBhc3NVc2VyVHlwZUxpc3QubWFwKGl0ZW0gPT4geyByZXR1cm4gaXRlbS5rZXk7IH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZEFjY2Vzc0xldmVscyA9IHNlbGVjdGVkSXRlbXM7XHJcblxyXG4gICAgbGV0IG5vdFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEFjY2Vzc0xldmVscy5maWx0ZXIoaXRlbSA9PiB1c2VyVHlwZXNLZXlzLmluZGV4T2YoaXRlbSkgPCAwKTtcclxuICAgIG5vdFNlbGVjdGVkLmZvckVhY2goaSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29udHJvbChgcGVybWlzc2lvbnMtdXNlci10eXBlLSR7aX1gLCB0aGlzLmVkaXRGb3JtKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHNldFBlcm1pc3Npb25Gb3JVQUVQYXNzVXNlclR5cGVzKHVzZXJUeXBlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlclR5cGVQZXJtaXNzaW9ucy5maW5kKGkgPT4gaS51c2VyVHlwZSA9PSB1c2VyVHlwZSk/LnBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiB2YWxpZGF0aW9uIGFjdGlvbnNcclxuXHJcbiAgYWRkUmVxdWlyZWRWYWxpZGF0aW9uKGN1c3RvbUNvbnRyb2xPcHRpb246IGFueVtdLCBmb3JtOiBGb3JtR3JvdXAsIGZvcm1PcHRpb25zOiBGb3JtT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgY3VzdG9tQ29udHJvbE9wdGlvbi5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICBpZiAoZm9ybS5nZXQoY29udHJvbC5OYW1lKSlcclxuICAgICAgICB0aGlzLmFkZFJlcXVpcmVkUnVsZShmb3JtLmdldChjb250cm9sLk5hbWUpLCBmb3JtT3B0aW9ucyk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb250cm9sLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oY3VzdG9tQ29udHJvbE9wdGlvbjogYW55W10sIGZvcm06IEZvcm1Hcm91cCwgZm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zKTogdm9pZCB7XHJcbiAgICBjdXN0b21Db250cm9sT3B0aW9uLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChmb3JtLmdldChjb250cm9sLk5hbWUpKVxyXG4gICAgICAgIHRoaXMucmVtb3ZlUmVxdWlyZWRSdWxlKGZvcm0uZ2V0KGNvbnRyb2wuTmFtZSksIGZvcm1PcHRpb25zKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGNvbnRyb2wuSXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZvcm1Db250cm9sc1ZhbHVlKGN1c3RvbUNvbnRyb2xzT3B0aW9uczogYW55W10sIGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgY3VzdG9tQ29udHJvbHNPcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgbGV0IGZvcm1Db250cm9sID0gZm9ybS5nZXQob3B0aW9uLk5hbWUpO1xyXG4gICAgICBpZiAoZm9ybUNvbnRyb2wpXHJcbiAgICAgICAgZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuXHJcblxyXG4iLCI8bmctdGVtcGxhdGUgI2VkaXRNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cclxuICAgICAge3sgdHJhbnNsYXRlKCdFZGl0QXV0aENvbmZpZ3VyYXRpb24nKSB9fVxyXG4gICAgPC9oND5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tNCBzdmctaWNvbi1ob3Zlci1icmFuZFwiIFtpbmxpbmVTVkddPVwiJy9hc3NldHMvaW1hZ2VzL2Nsb3NlLW1vZGFsLnN2ZydcIj48L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiZWRpdEZvcm1PcHRpb25zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZUlkID09IGF1dGhlbnRpY2F0aW9uTW9kZUVudW1WYWx1ZS5VQUVQYXNzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiYmFzZVVSTFRleHRCb3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiY2xpZW50SWRUZXh0Qm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlY3JldEtleVRleHRCb3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwicmVkaXJlY3RVUkxUZXh0Qm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlQWNjZXNzTGV2ZWxzKCRldmVudClcIiBbb3B0aW9uc109XCJhY2Nlc3NMZXZlbERyb3Bkb3duXCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAob25DaGFuZ2UpPVwiY2hhbmdlUGVybWlzc2lvblNldCgkZXZlbnQpXCIgW29wdGlvbnNdPVwidXNlclBlcm1pc3Npb25TZXREcm9wZG93blwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZVxyXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZVNPUFBlcm1pc3Npb25Ub2dnbGVWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJzb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGVcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJsaW5raW5nRXhpc3RpbmdVc2Vyc1RvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGlua2luZ0V4aXN0aW5nVXNlcnNUb2dnbGVWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJpbXBvcnRpbmdOZXdVc2VyVG9nZ2xlXCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwidXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpblRvZ2dsZVwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJhdGlvbi1oZWFkZXJcIiAqbmdJZj1cInNob3dVc2VyVHlwZVBlcm1pc3Npb25zTWFwcGluZ1wiPlxyXG4gICAgICAgICAgPGg1Pnt7IHRyYW5zbGF0ZSgnQWNjZXNzTGV2ZWxzUGVybWlzc2lvbk1hcHBpbmcnKSB9fTwvaDU+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBsZXZlbCBvZiBzZWxlY3RlZEFjY2Vzc0xldmVsc1wiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJpbml0RHJvcERvd25PcHRpb25zKGxldmVsKVwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dVc2VyVHlwZUxpbmtpbmdNYXBwaW5nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGg1Pnt7IHRyYW5zbGF0ZSgnTGlua2luZ09wdGlvbnMnKSB9fTwvaDU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdGb3I9XCJsZXQgbGV2ZWwgb2Ygc2VsZWN0ZWRBY2Nlc3NMZXZlbHNcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJsaW5raW5nTW9kZURyb3Bkb3duXCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWd1cmF0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8aDU+e3sgdHJhbnNsYXRlKCdMaW5raW5nQXR0cmlidXRlc09wdGlvbnMnKSB9fTwvaDU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm5hbWVBckNoZWNrYm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwibmFtZUVuQ2hlY2tib3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJlbWFpbENoZWNrYm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiZUlkQ2hlY2tib3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJtb2JpbGVDaGVja2JveFwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm5hdGlvbmFsaXR5Q2hlY2tib3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJnZW5kZXJDaGVja2JveFwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJtb2RlSWQgPT0gYXV0aGVudGljYXRpb25Nb2RlRW51bVZhbHVlLkF6dXJlQURcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHRyYW5zbGF0ZSgnQ2FuY2VsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gYXBwUHJldmVudERvdWJsZUNsaWNrIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWJyYW5kXCI+XHJcbiAgICAgICAge3sgdHJhbnNsYXRlKCdTYXZlJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L0JCU0YtRm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jb25maWd1cmF0aW9uLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9jb25maWd1cmF0aW9ucy9hdXRoLWNvbmZpZ3VyYXRpb24vYXV0aC1jb25maWd1cmF0aW9uLWVkaXQvYXV0aC1jb25maWd1cmF0aW9uLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9jb25maWd1cmF0aW9ucy9hdXRoLWNvbmZpZ3VyYXRpb24vYXV0aC1jb25maWd1cmF0aW9uLWVkaXQvYXV0aC1jb25maWd1cmF0aW9uLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBd0IsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHeEssT0FBTyxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixFQUFxRCxNQUFNLCtEQUErRCxDQUFDO0FBQ3pMLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDOzs7Ozs7OztBQVM1SSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsZ0JBQWdCO0lBK0NsRSxZQUFZO0lBRVosWUFBWTtJQUVaLFlBQ1UsUUFBa0IsRUFDbEIsbUJBQXdDLEVBQ3hDLHFCQUE0QyxFQUM1QyxXQUF3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Q0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDOztnQkFFMUQsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsbUJBQTBCLEVBQUUsSUFBZSxFQUFFLFdBQXdCO1FBQzVGLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDOztnQkFFN0QsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMscUJBQTRCLEVBQUUsSUFBZTtRQUNsRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxXQUFXO2dCQUNiLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBaGFVLDhCQUE4QjttR0FBOUIsOEJBQThCLGtTQ2YzQyxtK0xBeUhjOzs0RkQxR0QsOEJBQThCO2tCQUoxQyxTQUFTOytCQUNFLHlCQUF5Qjs2S0FJMUIsYUFBYTtzQkFBckIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSXFDLEtBQUs7c0JBQS9DLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQsIENoZWNrQm94T3B0aW9ucywgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBNYXN0ZXJMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uLCBVQUVQYXNzQ29uZmlndXJhdGlvbiwgVUFFUGFzc1VzZXJJbmZvTWFwcGluZywgVUFFUGFzc1VzZXJUeXBlUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvQ29uZmlndXJhdGlvbk1vZGVscy9Db25maWd1cmF0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIFVBRVBhc3NMaW5raW5nTW9kZSwgVUFFUGFzc1VzZXJUeXBlcyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9FbnVtcy9jb25maWd1cmF0aW9uL2F1dGhlbnRlY2F0aW9uLWNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvU2VydmljZXMvQ29uZmlndXJhdGlvbnNTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbE9wdGlvbnMgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL3VzZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdXRoLWNvbmZpZ3VyYXRpb24tZWRpdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dGgtY29uZmlndXJhdGlvbi1lZGl0LmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRBdXRoQ29uZmlndXJhdGlvbkNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHBhZ2luZ0VsZW1lbnQ7XHJcbiAgQElucHV0KCkgb25TdWNjZXNzVGFrZVBlbmFsdHlIYW5kbGVyOiBGdW5jdGlvbjtcclxuXHJcbiAgZWRpdEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBlZGl0Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICBAVmlld0NoaWxkKFwiZWRpdE1vZGFsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBtb2RhbDogRWxlbWVudFJlZjtcclxuXHJcbiAgbW9kZUlkOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcbiAgYXV0aGVudGljYXRpb25Nb2RlRW51bVZhbHVlID0gQXV0aGVudGljYXRpb25Nb2RlO1xyXG5cclxuICAvLyNyZWdpb24gdWFlIHBhc3MgcHJvcHNcclxuICBiYXNlVVJMVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgY2xpZW50SWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBzZWNyZXRLZXlUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICByZWRpcmVjdFVSTFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGFjY2Vzc0xldmVsRHJvcGRvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBsaW5raW5nTW9kZURyb3Bkb3duOiBEcm9wZG93bk9wdGlvbnM7XHJcblxyXG4gIGxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgaW1wb3J0aW5nTmV3VXNlclRvZ2dsZTogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIHVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5Ub2dnbGU6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBzb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZTogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG5cclxuICB1c2VyUGVybWlzc2lvblNldERyb3Bkb3duOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgdXNlclBlcm1pc3Npb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcblxyXG4gIHVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWw6IFVBRVBhc3NDb25maWd1cmF0aW9uID0gbmV3IFVBRVBhc3NDb25maWd1cmF0aW9uKCk7XHJcblxyXG4gIHBlcm1pc3Npb25TZXRMaXN0ID0gW107XHJcbiAgcGVybWlzc2lvbnNMaXN0ID0gW107XHJcblxyXG4gIHNob3dVc2VyVHlwZVBlcm1pc3Npb25zTWFwcGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dVc2VyVHlwZUxpbmtpbmdNYXBwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0ltcG9ydGluZ05ld1VzZXJNYXBwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdWFlUGFzc1VzZXJUeXBlRW51bTogVUFFUGFzc1VzZXJUeXBlcztcclxuICB1YWVQYXNzVXNlclR5cGVMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQWNjZXNzTGV2ZWxzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyNyZWdpb24gbGlua2luZyBtYXBwaW5nXHJcbiAgbmFtZUFyQ2hlY2tib3g6IENoZWNrQm94T3B0aW9ucztcclxuICBuYW1lRW5DaGVja2JveDogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIGVtYWlsQ2hlY2tib3g6IENoZWNrQm94T3B0aW9ucztcclxuICBlSWRDaGVja2JveDogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIG1vYmlsZUNoZWNrYm94OiBDaGVja0JveE9wdGlvbnM7XHJcbiAgbmF0aW9uYWxpdHlDaGVja2JveDogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIGdlbmRlckNoZWNrYm94OiBDaGVja0JveE9wdGlvbnM7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBtYXN0ZXJMYXlvdXRTZXJ2aWNlOiBNYXN0ZXJMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uc1NlcnZpY2U6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBoZWxwZXJcclxuXHJcbiAgdHJhbnNsYXRlKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoa2V5KTtcclxuICB9XHJcblxyXG4gIGxvYWRVQUVQYXNzVXNlclR5cGVzKCkge1xyXG4gICAgbGV0IGxpc3Q6IGFueVtdID0gW107XHJcbiAgICBmb3IgKHZhciBpdGVtIGluIFVBRVBhc3NVc2VyVHlwZXMpIHtcclxuICAgICAgaWYgKHBhcnNlSW50KGl0ZW0pKVxyXG4gICAgICAgIGxpc3QucHVzaCh7XHJcbiAgICAgICAgICBrZXk6ICtpdGVtLFxyXG4gICAgICAgICAgdmFsdWU6IFVBRVBhc3NVc2VyVHlwZXNbaXRlbV1cclxuICAgICAgICB9IGFzIGFueSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVhZVBhc3NVc2VyVHlwZUxpc3QgPSBsaXN0O1xyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbiAgfVxyXG5cclxuICBsb2FkVUFFUGFzc0xpbmtpbmdNb2RlKCkge1xyXG4gICAgbGV0IGxpc3Q6IGFueVtdID0gW107XHJcbiAgICBmb3IgKHZhciBpdGVtIGluIFVBRVBhc3NMaW5raW5nTW9kZSkge1xyXG4gICAgICBpZiAocGFyc2VJbnQoaXRlbSkpXHJcbiAgICAgICAgbGlzdC5wdXNoKHtcclxuICAgICAgICAgIGtleTogK2l0ZW0sXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy50cmFuc2xhdGUoVUFFUGFzc0xpbmtpbmdNb2RlW2l0ZW1dKVxyXG4gICAgICAgIH0gYXMgYW55KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0VUFFUGFzc1VzZXJUeXBlVmFsdWUoa2V5OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLnVhZVBhc3NVc2VyVHlwZUxpc3QuZmluZChpID0+IGkua2V5ID09IGtleSkudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgc2hvd01vZGFsKG1vZGU6IEF1dGhlbnRpY2F0aW9uTW9kZSwgYXV0aENvbmZpZ09iamVjdDogQkJTRkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbikge1xyXG4gICAgdGhpcy5tb2RlSWQgPSBtb2RlO1xyXG4gICAgaWYgKHRoaXMuZWRpdEZvcm0pIHtcclxuICAgICAgdGhpcy5lZGl0Rm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIHRoaXMuZWRpdEZvcm0ucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVkaXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLmVkaXRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy5lZGl0Rm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5lZGl0Rm9ybSBhcyBhbnk7XHJcbiAgICB0aGlzLmVkaXRGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcbiAgICB0aGlzLmVkaXRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRNb2RlbDtcclxuICAgIHRoaXMuZWRpdEZvcm1PcHRpb25zLnNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0U3VibWl0RnVuY3Rpb247XHJcbiAgICB0aGlzLmVkaXRGb3JtT3B0aW9ucy5kaXNhYmxlU3VjY2Vzc05vdGlmaWNhdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZGl0Rm9ybU9wdGlvbnMub25TdWNjZXNzSGFuZGxlciA9IHRoaXMub25TdWNjZXNzSGFuZGxlcjtcclxuXHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBBdXRoZW50aWNhdGlvbk1vZGUuVUFFUGFzczpcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVVQUVQYXNzRm9ybShhdXRoQ29uZmlnT2JqZWN0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBBdXRoZW50aWNhdGlvbk1vZGUuQXp1cmVBRDpcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5tb2RhbCwgeyBzaXplOiAneGwnIH0gYXMgTmdiTW9kYWxPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVVQUVQYXNzRm9ybShhdXRoQ29uZmlnT2JqZWN0OiBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKSB7XHJcbiAgICB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwgPSBhdXRoQ29uZmlnT2JqZWN0LnVhZVBhc3NDb25maWc7XHJcblxyXG4gICAgdGhpcy5iYXNlVVJMVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5iYXNlVVJMVGV4dEJveC5uYW1lID0gXCJiYXNlVXJsXCI7XHJcbiAgICB0aGlzLmJhc2VVUkxUZXh0Qm94LmxhYmVsS2V5ID0gXCJCYXNlVXJsXCI7XHJcbiAgICB0aGlzLmJhc2VVUkxUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuYmFzZVVSTFRleHRCb3gudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgdGhpcy5iYXNlVVJMVGV4dEJveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5iYXNlVXJsO1xyXG5cclxuICAgIHRoaXMuY2xpZW50SWRUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLmNsaWVudElkVGV4dEJveC5uYW1lID0gXCJjbGllbnRJRFwiO1xyXG4gICAgdGhpcy5jbGllbnRJZFRleHRCb3gubGFiZWxLZXkgPSBcIkNsaWVudElEXCI7XHJcbiAgICB0aGlzLmNsaWVudElkVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLmNsaWVudElkVGV4dEJveC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICB0aGlzLmNsaWVudElkVGV4dEJveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5jbGllbnRJRDtcclxuXHJcbiAgICB0aGlzLnNlY3JldEtleVRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VjcmV0S2V5VGV4dEJveC5uYW1lID0gXCJzZWNyZXRLZXlcIjtcclxuICAgIHRoaXMuc2VjcmV0S2V5VGV4dEJveC5sYWJlbEtleSA9IFwiU2VjcmV0S2V5XCI7XHJcbiAgICB0aGlzLnNlY3JldEtleVRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5zZWNyZXRLZXlUZXh0Qm94LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgIHRoaXMuc2VjcmV0S2V5VGV4dEJveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5zZWNyZXRLZXk7XHJcblxyXG4gICAgdGhpcy5yZWRpcmVjdFVSTFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMucmVkaXJlY3RVUkxUZXh0Qm94Lm5hbWUgPSBcInJlZGlyZWN0VXJsXCI7XHJcbiAgICB0aGlzLnJlZGlyZWN0VVJMVGV4dEJveC5sYWJlbEtleSA9IFwiUmVkaXJlY3RVcmxcIjtcclxuICAgIHRoaXMucmVkaXJlY3RVUkxUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMucmVkaXJlY3RVUkxUZXh0Qm94LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgIHRoaXMucmVkaXJlY3RVUkxUZXh0Qm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLnJlZGlyZWN0VXJsO1xyXG5cclxuICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93bi5uYW1lID0gXCJhY2Nlc3NMZXZlbHNcIjtcclxuICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93bi5sYWJlbEtleSA9IFwiQWNjZXNzTGV2ZWxcIjtcclxuICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93bi5zZWxlY3RlZEl0ZW1zID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmFjY2Vzc0xldmVscztcclxuICAgIHRoaXMuYWNjZXNzTGV2ZWxEcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5sb2FkVUFFUGFzc1VzZXJUeXBlcygpO1xyXG5cclxuICAgIHRoaXMubGlua2luZ01vZGVEcm9wZG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMubGlua2luZ01vZGVEcm9wZG93bi5uYW1lID0gXCJsaW5raW5nTW9kZVwiO1xyXG4gICAgdGhpcy5saW5raW5nTW9kZURyb3Bkb3duLmxhYmVsS2V5ID0gXCJMaW5raW5nTW9kZVwiO1xyXG4gICAgdGhpcy5saW5raW5nTW9kZURyb3Bkb3duLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd24uc2VsZWN0ZWRJdGVtcyA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5saW5raW5nTW9kZTtcclxuICAgIHRoaXMubGlua2luZ01vZGVEcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5sb2FkVUFFUGFzc0xpbmtpbmdNb2RlKCk7XHJcblxyXG4gICAgdGhpcy5zb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgIHRoaXMuc29wUGVybWlzc2lvbk1hcHBpbmdUb2dnbGUubmFtZSA9IFwic29wUGVybWlzc2lvbk1hcHBpbmdcIjtcclxuICAgIHRoaXMuc29wUGVybWlzc2lvbk1hcHBpbmdUb2dnbGUubGFiZWxLZXkgPSBcIlNPUFBlcm1pc3Npb25NYXBwaW5nXCI7XHJcbiAgICB0aGlzLnNvcFBlcm1pc3Npb25NYXBwaW5nVG9nZ2xlLnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmVuYWJsZVNPUFBlcm1pc3Npb25NYXBwaW5nO1xyXG4gICAgdGhpcy5vbkNoYW5nZVNPUFBlcm1pc3Npb25Ub2dnbGVWYWx1ZSh0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwuZW5hYmxlU09QUGVybWlzc2lvbk1hcHBpbmcpO1xyXG5cclxuICAgIHRoaXMubGlua2luZ0V4aXN0aW5nVXNlcnNUb2dnbGUgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICB0aGlzLmxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlLm5hbWUgPSBcImxpbmtpbmdFeGlzdGluZ1VzZXJzXCI7XHJcbiAgICB0aGlzLmxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlLmxhYmVsS2V5ID0gXCJFbmFibGVMaW5raW5nRXhpc3RpbmdVc2Vyc1wiO1xyXG4gICAgdGhpcy5saW5raW5nRXhpc3RpbmdVc2Vyc1RvZ2dsZS52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5lbmFibGVMaW5raW5nRXhpc3RpbmdVc2VycztcclxuICAgIHRoaXMub25MaW5raW5nRXhpc3RpbmdVc2Vyc1RvZ2dsZVZhbHVlKHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5lbmFibGVMaW5raW5nRXhpc3RpbmdVc2Vycyk7XHJcblxyXG4gICAgdGhpcy5pbXBvcnRpbmdOZXdVc2VyVG9nZ2xlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgdGhpcy5pbXBvcnRpbmdOZXdVc2VyVG9nZ2xlLm5hbWUgPSBcImltcG9ydGluZ05ld1VzZXJcIjtcclxuICAgIHRoaXMuaW1wb3J0aW5nTmV3VXNlclRvZ2dsZS5sYWJlbEtleSA9IFwiRW5hYmxlSW1wb3J0aW5nTmV3VXNlclwiO1xyXG4gICAgdGhpcy5pbXBvcnRpbmdOZXdVc2VyVG9nZ2xlLnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmVuYWJsZUltcG9ydGluZ05ld1VzZXI7XHJcbiAgICB0aGlzLm9uQ2hhbmdlSW1wb3J0aW5nTmV3VXNlclRvZ2dsZSh0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwuZW5hYmxlSW1wb3J0aW5nTmV3VXNlciwgdHJ1ZSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVVc2VySW5mb3JtYXRpb25PbkxvZ2luVG9nZ2xlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgdGhpcy51cGRhdGVVc2VySW5mb3JtYXRpb25PbkxvZ2luVG9nZ2xlLm5hbWUgPSBcInVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5cIjtcclxuICAgIHRoaXMudXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpblRvZ2dsZS5sYWJlbEtleSA9IFwiRW5hYmxlVXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpblwiO1xyXG4gICAgdGhpcy51cGRhdGVVc2VySW5mb3JtYXRpb25PbkxvZ2luVG9nZ2xlLnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmVuYWJsZVVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW47XHJcblxyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvblNldERyb3Bkb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvblNldERyb3Bkb3duLm5hbWUgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24ubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICB0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24uc2VsZWN0ZWRJdGVtcyA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5kZWZhdWx0UGVybWlzc2lvblNldDtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvblNldERyb3Bkb3duLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm5hbWVBckNoZWNrYm94ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5uYW1lQXJDaGVja2JveC5uYW1lID0gXCJuYW1lQXJcIjtcclxuICAgIHRoaXMubmFtZUFyQ2hlY2tib3gubGFiZWxLZXkgPSBcIk5hbWVBUlwiO1xyXG4gICAgdGhpcy5uYW1lQXJDaGVja2JveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC51c2VySW5mb01hcHBpbmcubmFtZUFSO1xyXG5cclxuICAgIHRoaXMubmFtZUVuQ2hlY2tib3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLm5hbWVFbkNoZWNrYm94Lm5hbWUgPSBcIm5hbWVFblwiO1xyXG4gICAgdGhpcy5uYW1lRW5DaGVja2JveC5sYWJlbEtleSA9IFwiTmFtZUVOXCI7XHJcbiAgICB0aGlzLm5hbWVFbkNoZWNrYm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLnVzZXJJbmZvTWFwcGluZy5uYW1lRU47XHJcblxyXG4gICAgdGhpcy5lbWFpbENoZWNrYm94ID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5lbWFpbENoZWNrYm94Lm5hbWUgPSBcImVtYWlsXCI7XHJcbiAgICB0aGlzLmVtYWlsQ2hlY2tib3gubGFiZWxLZXkgPSBcIkVtYWlsXCI7XHJcbiAgICB0aGlzLmVtYWlsQ2hlY2tib3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlckluZm9NYXBwaW5nLmVtYWlsO1xyXG5cclxuICAgIHRoaXMuZUlkQ2hlY2tib3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLmVJZENoZWNrYm94Lm5hbWUgPSBcImVJZFwiO1xyXG4gICAgdGhpcy5lSWRDaGVja2JveC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICB0aGlzLmVJZENoZWNrYm94LnZhbHVlID0gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLnVzZXJJbmZvTWFwcGluZy5laWQ7XHJcblxyXG4gICAgdGhpcy5tb2JpbGVDaGVja2JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHRoaXMubW9iaWxlQ2hlY2tib3gubmFtZSA9IFwibW9iaWxlXCI7XHJcbiAgICB0aGlzLm1vYmlsZUNoZWNrYm94LmxhYmVsS2V5ID0gXCJNb2JpbGVcIjtcclxuICAgIHRoaXMubW9iaWxlQ2hlY2tib3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlckluZm9NYXBwaW5nLm1vYmlsZTtcclxuXHJcbiAgICB0aGlzLm5hdGlvbmFsaXR5Q2hlY2tib3ggPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLm5hdGlvbmFsaXR5Q2hlY2tib3gubmFtZSA9IFwibmF0aW9uYWxpdHlcIjtcclxuICAgIHRoaXMubmF0aW9uYWxpdHlDaGVja2JveC5sYWJlbEtleSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgIHRoaXMubmF0aW9uYWxpdHlDaGVja2JveC52YWx1ZSA9IHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC51c2VySW5mb01hcHBpbmcubmF0aW9uYWxpdHk7XHJcblxyXG4gICAgdGhpcy5nZW5kZXJDaGVja2JveCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZ2VuZGVyQ2hlY2tib3gubmFtZSA9IFwiZ2VuZGVyXCI7XHJcbiAgICB0aGlzLmdlbmRlckNoZWNrYm94LmxhYmVsS2V5ID0gXCJHZW5kZXJcIjtcclxuICAgIHRoaXMuZ2VuZGVyQ2hlY2tib3gudmFsdWUgPSB0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwudXNlckluZm9NYXBwaW5nLmdlbmRlcjtcclxuXHJcbiAgICB0aGlzLmdldFBlcm1pc3Npb25TZXRzKCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlU09QUGVybWlzc2lvblRvZ2dsZVZhbHVlKHRoaXMudWFlUGFzc0NvbmZpZ3VyYXRpb25Nb2RlbC5lbmFibGVTT1BQZXJtaXNzaW9uTWFwcGluZyk7XHJcbiAgICB0aGlzLm9uTGlua2luZ0V4aXN0aW5nVXNlcnNUb2dnbGVWYWx1ZSh0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwuZW5hYmxlTGlua2luZ0V4aXN0aW5nVXNlcnMpO1xyXG4gICAgdGhpcy5vbkNoYW5nZUFjY2Vzc0xldmVscyh0aGlzLnVhZVBhc3NDb25maWd1cmF0aW9uTW9kZWwuYWNjZXNzTGV2ZWxzKTtcclxuXHJcbiAgICBpZiAodGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmRlZmF1bHRQZXJtaXNzaW9uU2V0KVxyXG4gICAgICB0aGlzLmNoYW5nZVBlcm1pc3Npb25TZXQodGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLmRlZmF1bHRQZXJtaXNzaW9uU2V0KTtcclxuICB9XHJcblxyXG4gIGdldEFkZE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHJlc3VsdE1vZGVsID0gdGhpcy5lZGl0Rm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgZWRpdE1vZGVsOiBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uID0gbmV3IEJCU0ZBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oKTtcclxuICAgIGVkaXRNb2RlbC5tb2RlSWQgPSB0aGlzLm1vZGVJZDtcclxuICAgIGVkaXRNb2RlbC51YWVQYXNzQ29uZmlnID0gdGhpcy5idWlsZFVBRVBhc3NDb25maWdPYmplY3QocmVzdWx0TW9kZWwpO1xyXG4gICAgcmV0dXJuIEFycmF5KGVkaXRNb2RlbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0U3VibWl0RnVuY3Rpb24gPSAoZWRpdE1vZGVsOiBCQlNGQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS51cGRhdGVBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb25EYXRhKGVkaXRNb2RlbCk7XHJcbiAgfTtcclxuXHJcbiAgb25TdWNjZXNzSGFuZGxlciA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMubWFzdGVyTGF5b3V0U2VydmljZS5yZWxvYWRDb21wb25lbnQoKTtcclxuICB9O1xyXG5cclxuICBidWlsZFVBRVBhc3NDb25maWdPYmplY3QoZm9ybVZhbHVlOiBhbnkpOiBVQUVQYXNzQ29uZmlndXJhdGlvbiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiYXNlVXJsOiBmb3JtVmFsdWVbdGhpcy5iYXNlVVJMVGV4dEJveC5uYW1lXSxcclxuICAgICAgY2xpZW50SUQ6IGZvcm1WYWx1ZVt0aGlzLmNsaWVudElkVGV4dEJveC5uYW1lXSxcclxuICAgICAgc2VjcmV0S2V5OiBmb3JtVmFsdWVbdGhpcy5zZWNyZXRLZXlUZXh0Qm94Lm5hbWVdLFxyXG4gICAgICByZWRpcmVjdFVybDogZm9ybVZhbHVlW3RoaXMucmVkaXJlY3RVUkxUZXh0Qm94Lm5hbWVdLFxyXG4gICAgICBhY2Nlc3NMZXZlbHM6IGZvcm1WYWx1ZVt0aGlzLmFjY2Vzc0xldmVsRHJvcGRvd24ubmFtZV0sXHJcbiAgICAgIGVuYWJsZUxpbmtpbmdFeGlzdGluZ1VzZXJzOiBmb3JtVmFsdWVbdGhpcy5saW5raW5nRXhpc3RpbmdVc2Vyc1RvZ2dsZS5uYW1lXSxcclxuICAgICAgZW5hYmxlSW1wb3J0aW5nTmV3VXNlcjogZm9ybVZhbHVlW3RoaXMuaW1wb3J0aW5nTmV3VXNlclRvZ2dsZS5uYW1lXSxcclxuICAgICAgZW5hYmxlVXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpbjogZm9ybVZhbHVlW3RoaXMudXBkYXRlVXNlckluZm9ybWF0aW9uT25Mb2dpblRvZ2dsZS5uYW1lXSxcclxuICAgICAgZGVmYXVsdFBlcm1pc3Npb25TZXQ6IGZvcm1WYWx1ZVt0aGlzLnVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd24ubmFtZV0sXHJcbiAgICAgIGVuYWJsZVNPUFBlcm1pc3Npb25NYXBwaW5nOiBmb3JtVmFsdWVbdGhpcy5zb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZS5uYW1lXSxcclxuICAgICAgdXNlclR5cGVQZXJtaXNzaW9uczogdGhpcy5idWlsZFVzZXJUeXBlUGVybWlzc2lvbigpLFxyXG4gICAgICB1c2VySW5mb01hcHBpbmc6IHRoaXMuYnVpbGRVc2VySW5mb01hcHBpbmcoZm9ybVZhbHVlKSxcclxuICAgICAgbGlua2luZ01vZGU6IGZvcm1WYWx1ZVt0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd24ubmFtZV0sXHJcbiAgICB9IGFzIFVBRVBhc3NDb25maWd1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRVc2VySW5mb01hcHBpbmcoZm9ybVZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWVFTjogZm9ybVZhbHVlW3RoaXMubmFtZUVuQ2hlY2tib3gubmFtZV0sXHJcbiAgICAgIG5hbWVBUjogZm9ybVZhbHVlW3RoaXMubmFtZUFyQ2hlY2tib3gubmFtZV0sXHJcbiAgICAgIGVtYWlsOiBmb3JtVmFsdWVbdGhpcy5lbWFpbENoZWNrYm94Lm5hbWVdLFxyXG4gICAgICBlaWQ6IGZvcm1WYWx1ZVt0aGlzLmVJZENoZWNrYm94Lm5hbWVdLFxyXG4gICAgICBtb2JpbGU6IGZvcm1WYWx1ZVt0aGlzLm1vYmlsZUNoZWNrYm94Lm5hbWVdLFxyXG4gICAgICBuYXRpb25hbGl0eTogZm9ybVZhbHVlW3RoaXMubmF0aW9uYWxpdHlDaGVja2JveC5uYW1lXSxcclxuICAgICAgZ2VuZGVyOiBmb3JtVmFsdWVbdGhpcy5nZW5kZXJDaGVja2JveC5uYW1lXVxyXG4gICAgfSBhcyBVQUVQYXNzVXNlckluZm9NYXBwaW5nO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRVc2VyVHlwZVBlcm1pc3Npb24oKTogVUFFUGFzc1VzZXJUeXBlUGVybWlzc2lvbltdIHtcclxuICAgIGxldCByZXNMaXN0OiBVQUVQYXNzVXNlclR5cGVQZXJtaXNzaW9uW10gPSBbXTtcclxuICAgIGlmICh0aGlzLnNob3dVc2VyVHlwZVBlcm1pc3Npb25zTWFwcGluZykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQWNjZXNzTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4ge1xyXG4gICAgICAgIHJlc0xpc3QucHVzaCh7XHJcbiAgICAgICAgICB1c2VyVHlwZTogbGV2ZWwsXHJcbiAgICAgICAgICBwZXJtaXNzaW9uczogdGhpcy5lZGl0Rm9ybS5jb250cm9sc1tgcGVybWlzc2lvbnMtdXNlci10eXBlLSR7bGV2ZWx9YF0/LnZhbHVlLFxyXG4gICAgICAgIH0gYXMgVUFFUGFzc1VzZXJUeXBlUGVybWlzc2lvbik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFVBRSBQYXNzIEZ1bmN0aW9uc1xyXG5cclxuICBvbkxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zaG93VXNlclR5cGVMaW5raW5nTWFwcGluZyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuc2hvd1VzZXJUeXBlTGlua2luZ01hcHBpbmcpXHJcbiAgICAgIHRoaXMuYWRkUmVxdWlyZWRWYWxpZGF0aW9uKFt0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd25dLCB0aGlzLmVkaXRGb3JtLCB0aGlzLmVkaXRGb3JtT3B0aW9ucyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMucmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKFt0aGlzLmxpbmtpbmdNb2RlRHJvcGRvd25dLCB0aGlzLmVkaXRGb3JtLCB0aGlzLmVkaXRGb3JtT3B0aW9ucyk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VJbXBvcnRpbmdOZXdVc2VyVG9nZ2xlKHZhbHVlOiBhbnksIGlzSW5pdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnNob3dJbXBvcnRpbmdOZXdVc2VyTWFwcGluZyA9IHZhbHVlO1xyXG4gICAgaWYgKGlzSW5pdClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dJbXBvcnRpbmdOZXdVc2VyTWFwcGluZykge1xyXG4gICAgICB0aGlzLmFkZFJlcXVpcmVkVmFsaWRhdGlvbihbdGhpcy51c2VyUGVybWlzc2lvblNldERyb3Bkb3duXSwgdGhpcy5lZGl0Rm9ybSwgdGhpcy5lZGl0Rm9ybU9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjY2Vzc0xldmVscy5mb3JFYWNoKGxldmVsID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNvbnRyb2woYHBlcm1pc3Npb25zLXVzZXItdHlwZS0ke2xldmVsfWAsIHRoaXMuZWRpdEZvcm0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oW3RoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bl0sIHRoaXMuZWRpdEZvcm0sIHRoaXMuZWRpdEZvcm1PcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlU09QUGVybWlzc2lvblRvZ2dsZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1VzZXJUeXBlUGVybWlzc2lvbnNNYXBwaW5nID0gdmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuc2hvd1VzZXJUeXBlUGVybWlzc2lvbnNNYXBwaW5nKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY2Nlc3NMZXZlbHMuZm9yRWFjaChsZXZlbCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb250cm9sKGBwZXJtaXNzaW9ucy11c2VyLXR5cGUtJHtsZXZlbH1gLCB0aGlzLmVkaXRGb3JtKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQZXJtaXNzaW9uU2V0KGlkOiBhbnkpIHtcclxuICAgIGlmICghaWQpIHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uc0xpc3QgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpZHMgPSBBcnJheShpZCk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRQZXJtaXNzaW9uc0Ryb3BEb3duKGlkcykuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uc0xpc3QgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uU2V0cygpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0UGVybWlzc2lvblNldHNMaXN0KCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldExpc3QgPSByZXMucGVybWVzc2lvbnNldHM7XHJcbiAgICAgIHRoaXMudXNlclBlcm1pc3Npb25TZXREcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdERyb3BEb3duT3B0aW9ucyh1c2VyVHlwZTogYW55KSB7XHJcbiAgICB2YXIgcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHBlcm1pc3Npb25Ecm9wRG93bk9wdGlvbnMubmFtZSA9IGBwZXJtaXNzaW9ucy11c2VyLXR5cGUtJHt1c2VyVHlwZX1gO1xyXG4gICAgcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucy5sYWJlbFZhbHVlID0gdGhpcy50cmFuc2xhdGUoVUFFUGFzc1VzZXJUeXBlc1t1c2VyVHlwZV0pICsgXCItXCIgKyB0aGlzLnRyYW5zbGF0ZShcIlBlcm1pc3Npb25zXCIpO1xyXG4gICAgcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucy5pc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBwZXJtaXNzaW9uRHJvcERvd25PcHRpb25zLnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgIHBlcm1pc3Npb25Ecm9wRG93bk9wdGlvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgcGVybWlzc2lvbkRyb3BEb3duT3B0aW9ucy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZXRQZXJtaXNzaW9uRm9yVUFFUGFzc1VzZXJUeXBlcyh1c2VyVHlwZSk7XHJcblxyXG4gICAgcmV0dXJuIHBlcm1pc3Npb25Ecm9wRG93bk9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFjY2Vzc0xldmVscyhzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIGxldCB1c2VyVHlwZXNLZXlzID0gdGhpcy51YWVQYXNzVXNlclR5cGVMaXN0Lm1hcChpdGVtID0+IHsgcmV0dXJuIGl0ZW0ua2V5OyB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRBY2Nlc3NMZXZlbHMgPSBzZWxlY3RlZEl0ZW1zO1xyXG5cclxuICAgIGxldCBub3RTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRBY2Nlc3NMZXZlbHMuZmlsdGVyKGl0ZW0gPT4gdXNlclR5cGVzS2V5cy5pbmRleE9mKGl0ZW0pIDwgMCk7XHJcbiAgICBub3RTZWxlY3RlZC5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZUNvbnRyb2woYHBlcm1pc3Npb25zLXVzZXItdHlwZS0ke2l9YCwgdGhpcy5lZGl0Rm9ybSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRQZXJtaXNzaW9uRm9yVUFFUGFzc1VzZXJUeXBlcyh1c2VyVHlwZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy51YWVQYXNzQ29uZmlndXJhdGlvbk1vZGVsLnVzZXJUeXBlUGVybWlzc2lvbnMuZmluZChpID0+IGkudXNlclR5cGUgPT0gdXNlclR5cGUpPy5wZXJtaXNzaW9ucztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gdmFsaWRhdGlvbiBhY3Rpb25zXHJcblxyXG4gIGFkZFJlcXVpcmVkVmFsaWRhdGlvbihjdXN0b21Db250cm9sT3B0aW9uOiBhbnlbXSwgZm9ybTogRm9ybUdyb3VwLCBmb3JtT3B0aW9uczogRm9ybU9wdGlvbnMpOiB2b2lkIHtcclxuICAgIGN1c3RvbUNvbnRyb2xPcHRpb24uZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgaWYgKGZvcm0uZ2V0KGNvbnRyb2wubmFtZSkpXHJcbiAgICAgICAgdGhpcy5hZGRSZXF1aXJlZFJ1bGUoZm9ybS5nZXQoY29udHJvbC5uYW1lKSwgZm9ybU9wdGlvbnMpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgY29udHJvbC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKGN1c3RvbUNvbnRyb2xPcHRpb246IGFueVtdLCBmb3JtOiBGb3JtR3JvdXAsIGZvcm1PcHRpb25zOiBGb3JtT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgY3VzdG9tQ29udHJvbE9wdGlvbi5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICBpZiAoZm9ybS5nZXQoY29udHJvbC5uYW1lKSlcclxuICAgICAgICB0aGlzLnJlbW92ZVJlcXVpcmVkUnVsZShmb3JtLmdldChjb250cm9sLm5hbWUpLCBmb3JtT3B0aW9ucyk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb250cm9sLklzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtQ29udHJvbHNWYWx1ZShjdXN0b21Db250cm9sc09wdGlvbnM6IGFueVtdLCBmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgIGN1c3RvbUNvbnRyb2xzT3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgIGxldCBmb3JtQ29udHJvbCA9IGZvcm0uZ2V0KG9wdGlvbi5uYW1lKTtcclxuICAgICAgaWYgKGZvcm1Db250cm9sKVxyXG4gICAgICAgIGZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcblxyXG5cclxuIiwiPG5nLXRlbXBsYXRlICNlZGl0TW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+XHJcbiAgICAgIHt7IHRyYW5zbGF0ZSgnRWRpdEF1dGhDb25maWd1cmF0aW9uJykgfX1cclxuICAgIDwvaDQ+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTQgc3ZnLWljb24taG92ZXItYnJhbmRcIiBbaW5saW5lU1ZHXT1cIicvYXNzZXRzL2ltYWdlcy9jbG9zZS1tb2RhbC5zdmcnXCI+PC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImVkaXRGb3JtT3B0aW9uc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVJZCA9PSBhdXRoZW50aWNhdGlvbk1vZGVFbnVtVmFsdWUuVUFFUGFzc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImJhc2VVUkxUZXh0Qm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImNsaWVudElkVGV4dEJveFwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWNyZXRLZXlUZXh0Qm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInJlZGlyZWN0VVJMVGV4dEJveFwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChvbkNoYW5nZSk9XCJvbkNoYW5nZUFjY2Vzc0xldmVscygkZXZlbnQpXCIgW29wdGlvbnNdPVwiYWNjZXNzTGV2ZWxEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiaW1wb3J0aW5nTmV3VXNlclRvZ2dsZVwiIFtncm91cF09XCJlZGl0Rm9ybVwiXHJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlSW1wb3J0aW5nTmV3VXNlclRvZ2dsZSgkZXZlbnQpXCI+PC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwibGlua2luZ0V4aXN0aW5nVXNlcnNUb2dnbGVcIlxyXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkxpbmtpbmdFeGlzdGluZ1VzZXJzVG9nZ2xlVmFsdWUoJGV2ZW50KVwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cInVwZGF0ZVVzZXJJbmZvcm1hdGlvbk9uTG9naW5Ub2dnbGVcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dJbXBvcnRpbmdOZXdVc2VyTWFwcGluZ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZmllbGRzZXRcclxuICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IHNvbGlkICMwMDdiZmY7IGJvcmRlci1yYWRpdXM6IDhweDsgcGFkZGluZzogMXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTsgcG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgIDxsZWdlbmRcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxcmVtOyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzAwN2JmZjsgd2lkdGg6IGF1dG87IHBhZGRpbmc6IDAgMTBweDsgbWFyZ2luLWJvdHRvbTogMDtcIj5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zbGF0ZSgnRW5hYmxlSW1wb3J0aW5nTmV3VXNlcicpIH19PC9sZWdlbmQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKG9uQ2hhbmdlKT1cImNoYW5nZVBlcm1pc3Npb25TZXQoJGV2ZW50KVwiIFtvcHRpb25zXT1cInVzZXJQZXJtaXNzaW9uU2V0RHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlU09QUGVybWlzc2lvblRvZ2dsZVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzb3BQZXJtaXNzaW9uTWFwcGluZ1RvZ2dsZVwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJhdGlvbi1oZWFkZXJcIiAqbmdJZj1cInNob3dVc2VyVHlwZVBlcm1pc3Npb25zTWFwcGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGg1Pnt7IHRyYW5zbGF0ZSgnQWNjZXNzTGV2ZWxzUGVybWlzc2lvbk1hcHBpbmcnKSB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCBsZXZlbCBvZiBzZWxlY3RlZEFjY2Vzc0xldmVsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJpbml0RHJvcERvd25PcHRpb25zKGxldmVsKVwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dVc2VyVHlwZUxpbmtpbmdNYXBwaW5nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGg1Pnt7IHRyYW5zbGF0ZSgnTGlua2luZ09wdGlvbnMnKSB9fTwvaDU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJsaW5raW5nTW9kZURyb3Bkb3duXCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWd1cmF0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8aDU+e3sgdHJhbnNsYXRlKCdMaW5raW5nQXR0cmlidXRlc09wdGlvbnMnKSB9fTwvaDU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm5hbWVBckNoZWNrYm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwibmFtZUVuQ2hlY2tib3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJlbWFpbENoZWNrYm94XCIgW2dyb3VwXT1cImVkaXRGb3JtXCI+PC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiZUlkQ2hlY2tib3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJtb2JpbGVDaGVja2JveFwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm5hdGlvbmFsaXR5Q2hlY2tib3hcIiBbZ3JvdXBdPVwiZWRpdEZvcm1cIj48L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJnZW5kZXJDaGVja2JveFwiIFtncm91cF09XCJlZGl0Rm9ybVwiPjwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJtb2RlSWQgPT0gYXV0aGVudGljYXRpb25Nb2RlRW51bVZhbHVlLkF6dXJlQURcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHRyYW5zbGF0ZSgnQ2FuY2VsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gYXBwUHJldmVudERvdWJsZUNsaWNrIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWJyYW5kXCI+XHJcbiAgICAgICAge3sgdHJhbnNsYXRlKCdTYXZlJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L0JCU0YtRm9ybT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=