@csmart/ngc-smart-victim 1.14.44 → 1.14.45

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/README.md +25 -25
  2. package/esm2020/lib/caseNote/caseNote.component.mjs +194 -0
  3. package/esm2020/lib/common-dialog/common-dialog.component.mjs +23 -0
  4. package/esm2020/lib/common-dialog/common-dialog.module.mjs +34 -0
  5. package/esm2020/lib/common-dialog/common-dialog.service.mjs +33 -0
  6. package/esm2020/lib/contact/contact.component.mjs +140 -0
  7. package/esm2020/lib/email.services.mjs +42 -0
  8. package/esm2020/lib/intake.service.mjs +57 -0
  9. package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +99 -0
  10. package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
  11. package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
  12. package/esm2020/lib/shared/app.shared.module.mjs +215 -0
  13. package/esm2020/lib/shared/validators/date.validator.mjs +59 -0
  14. package/esm2020/lib/smart-victim-delete-confirm.component.mjs +44 -0
  15. package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +1104 -0
  16. package/esm2020/lib/smart-victim.component.mjs +314 -0
  17. package/esm2020/lib/smart-victim.model.mjs +133 -0
  18. package/esm2020/lib/smart-victim.module.mjs +128 -0
  19. package/esm2020/lib/smart-victim.service.mjs +352 -0
  20. package/{esm2022 → esm2020}/lib/victim-routing.module.mjs +5 -5
  21. package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +3 -0
  22. package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +38 -0
  23. package/{esm2022 → esm2020}/public-api.mjs +1 -1
  24. package/fesm2015/csmart-ngc-smart-victim.mjs +3273 -0
  25. package/fesm2015/csmart-ngc-smart-victim.mjs.map +1 -0
  26. package/fesm2020/csmart-ngc-smart-victim.mjs +3261 -0
  27. package/fesm2020/csmart-ngc-smart-victim.mjs.map +1 -0
  28. package/lib/caseNote/caseNote.component.d.ts +2 -2
  29. package/lib/common-dialog/common-dialog.component.d.ts +1 -1
  30. package/lib/contact/contact.component.d.ts +1 -1
  31. package/lib/safetyPlan/serviceProvider.component.d.ts +1 -1
  32. package/lib/safetyPlan/victimSafetyPlan.component.d.ts +2 -2
  33. package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +2 -2
  34. package/lib/smart-victim-delete-confirm.component.d.ts +1 -1
  35. package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +2 -2
  36. package/lib/smart-victim.component.d.ts +2 -2
  37. package/lib/victimSearch/victimSearchForm.component.d.ts +1 -1
  38. package/package.json +11 -5
  39. package/esm2022/lib/caseNote/caseNote.component.mjs +0 -219
  40. package/esm2022/lib/common-dialog/common-dialog.component.mjs +0 -26
  41. package/esm2022/lib/common-dialog/common-dialog.module.mjs +0 -34
  42. package/esm2022/lib/common-dialog/common-dialog.service.mjs +0 -34
  43. package/esm2022/lib/contact/contact.component.mjs +0 -158
  44. package/esm2022/lib/email.services.mjs +0 -43
  45. package/esm2022/lib/intake.service.mjs +0 -59
  46. package/esm2022/lib/safetyPlan/serviceProvider.component.mjs +0 -105
  47. package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -146
  48. package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -372
  49. package/esm2022/lib/shared/app.shared.module.mjs +0 -215
  50. package/esm2022/lib/shared/validators/date.validator.mjs +0 -59
  51. package/esm2022/lib/smart-victim-delete-confirm.component.mjs +0 -46
  52. package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1141
  53. package/esm2022/lib/smart-victim.component.mjs +0 -343
  54. package/esm2022/lib/smart-victim.model.mjs +0 -233
  55. package/esm2022/lib/smart-victim.module.mjs +0 -128
  56. package/esm2022/lib/smart-victim.service.mjs +0 -357
  57. package/esm2022/lib/victimSearch/VictimSearchFilter.mjs +0 -8
  58. package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +0 -37
  59. package/fesm2022/csmart-ngc-smart-victim.mjs +0 -3556
  60. package/fesm2022/csmart-ngc-smart-victim.mjs.map +0 -1
  61. /package/{esm2022 → esm2020}/csmart-ngc-smart-victim.mjs +0 -0
  62. /package/{esm2022 → esm2020}/lib/shared/validators/index.mjs +0 -0
@@ -0,0 +1,1104 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';
3
+ import { MatRadioGroup } from '@angular/material/radio';
4
+ import { NgcSmartVictimService } from '../smart-victim.service';
5
+ import { Router, ActivatedRoute } from '@angular/router';
6
+ import { CommonDialogService } from '.././common-dialog/common-dialog.service';
7
+ import { DatePipe, Location } from '@angular/common';
8
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
9
+ import { MatTableDataSource } from '@angular/material/table';
10
+ import { SmartAddressComponent } from '@csmart/ngc-smart-address';
11
+ import { MatDialog } from '@angular/material/dialog';
12
+ import { MatSnackBar } from '@angular/material/snack-bar';
13
+ import { MatInput } from '@angular/material/input';
14
+ import { MatSelect } from '@angular/material/select';
15
+ import { ChangeDetectorRef, } from '@angular/core';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@angular/common";
18
+ import * as i2 from "@angular/forms";
19
+ import * as i3 from "@angular/material/dialog";
20
+ import * as i4 from "@angular/router";
21
+ import * as i5 from "@angular/material/snack-bar";
22
+ import * as i6 from ".././common-dialog/common-dialog.service";
23
+ import * as i7 from "../smart-victim.service";
24
+ import * as i8 from "@angular/material/button";
25
+ import * as i9 from "@angular/material/checkbox";
26
+ import * as i10 from "@angular/material/radio";
27
+ import * as i11 from "@angular/material/slider";
28
+ import * as i12 from "@angular/material/card";
29
+ import * as i13 from "@angular/material/tabs";
30
+ import * as i14 from "@angular/material/form-field";
31
+ import * as i15 from "@angular/material/input";
32
+ import * as i16 from "@angular/material/datepicker";
33
+ import * as i17 from "@angular/material/select";
34
+ import * as i18 from "@angular/material/core";
35
+ import * as i19 from "@angular/material/table";
36
+ import * as i20 from "@csmart/ngc-smart-address";
37
+ import * as i21 from "@csmart/smart-ui";
38
+ export function conditionalValidator(predicate, validator, errorNamespace) {
39
+ return (formControl => {
40
+ if (!formControl.parent) {
41
+ return null;
42
+ }
43
+ let error = null;
44
+ if (predicate()) {
45
+ error = validator(formControl);
46
+ }
47
+ if (errorNamespace && error) {
48
+ const customError = {};
49
+ customError[errorNamespace] = error;
50
+ error = customError;
51
+ }
52
+ return error;
53
+ });
54
+ }
55
+ export function stringConditionalValidator(predicate, validator, errorNamespace) {
56
+ return (formControl => {
57
+ if (!formControl.parent) {
58
+ return null;
59
+ }
60
+ let error = null;
61
+ if (predicate() == 'YS') {
62
+ error = validator(formControl);
63
+ }
64
+ if (errorNamespace && error) {
65
+ const customError = {};
66
+ customError[errorNamespace] = error;
67
+ error = customError;
68
+ }
69
+ return error;
70
+ });
71
+ }
72
+ export class SmartVictimDetailComponent {
73
+ constructor(location, formBuilder, dialog, route, router, snackBar, commonDialogService, victimService, changeDetectorRefs) {
74
+ this.location = location;
75
+ this.formBuilder = formBuilder;
76
+ this.dialog = dialog;
77
+ this.route = route;
78
+ this.router = router;
79
+ this.snackBar = snackBar;
80
+ this.commonDialogService = commonDialogService;
81
+ this.victimService = victimService;
82
+ this.changeDetectorRefs = changeDetectorRefs;
83
+ this.victimDetail = {};
84
+ this.onSave = new EventEmitter();
85
+ this.onCancel = new EventEmitter();
86
+ this.hidden = true;
87
+ this.victimAdvocate = {};
88
+ this.victimGuardian = {};
89
+ this.guardianTabFlag = false;
90
+ this.advocateTabFlag = false;
91
+ this.commonChildrenDivFlag = false;
92
+ this.cpoExpirationDivFlag = false;
93
+ this.supportInPlaceDivFlag = false;
94
+ this.weaponInvolvedDivFlag = false;
95
+ this.drugUseDivFlag = false;
96
+ this.showDelete = false;
97
+ this.addressId = 0;
98
+ this.advocateAddressId = 0;
99
+ this.guardianAddressId = 0;
100
+ this.datePipe = new DatePipe('en-US');
101
+ this.emailPattern = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$";
102
+ this.phoneNumber = "\\d{10}";
103
+ this.editVictim = {};
104
+ this.otherWeaponFlag = false;
105
+ this.otherDrugFlag = false;
106
+ this.contactDataSource = new MatTableDataSource();
107
+ this.guardianPhoneExistFlag = false;
108
+ this.advocatePhoneExistFlag = false;
109
+ this.phoneValidationFlag = false;
110
+ this.guaridanNoPhoneChkFlag = true;
111
+ this.advocateNoPhoneChkFlag = true;
112
+ this.addressValidators = {
113
+ street: [],
114
+ street2: [],
115
+ city: [],
116
+ stateCode: [],
117
+ zipCode: [],
118
+ psaCode: [],
119
+ };
120
+ this.homePhoneControl = new UntypedFormControl();
121
+ this.cellPhoneControl = new UntypedFormControl();
122
+ this.workPhoneControl = new UntypedFormControl();
123
+ this.guardianHomePhoneControl = new UntypedFormControl();
124
+ this.guardianCellPhoneControl = new UntypedFormControl();
125
+ this.guardianWorkPhoneControl = new UntypedFormControl();
126
+ this.advocateHomePhoneControl = new UntypedFormControl();
127
+ this.advocateCellPhoneControl = new UntypedFormControl();
128
+ this.advocateWorkPhoneControl = new UntypedFormControl();
129
+ this.emergencyContactPhoneControl = new UntypedFormControl();
130
+ this.initForm();
131
+ }
132
+ initForm() {
133
+ this.victimForm = this.formBuilder.group({
134
+ underSupervisionFlag: new UntypedFormControl('', Validators.compose([Validators.required])),
135
+ victimOffenderRelationshipTypeId: new UntypedFormControl('', Validators.compose([Validators.required])),
136
+ lastName: new UntypedFormControl('', Validators.compose([Validators.required])),
137
+ firstName: new UntypedFormControl('', Validators.compose([Validators.required])),
138
+ middleName: new UntypedFormControl(''),
139
+ prefixId: new UntypedFormControl(''),
140
+ suffixId: new UntypedFormControl(''),
141
+ genderCode: new UntypedFormControl(''),
142
+ birthDate: new UntypedFormControl(''),
143
+ homePhone: new UntypedFormControl(''),
144
+ cellPhone: new UntypedFormControl(''),
145
+ workPhone: new UntypedFormControl(''),
146
+ email: new UntypedFormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
147
+ minorFlag: new UntypedFormControl('', Validators.compose([Validators.required])),
148
+ victimAdvocateFlag: new UntypedFormControl('', Validators.compose([Validators.required])),
149
+ guardianLastName: new UntypedFormControl('', stringConditionalValidator(() => this.victimForm.get('minorFlag').value, Validators.required, 'illuminatiError')),
150
+ guardianFirstName: new UntypedFormControl('', stringConditionalValidator(() => this.victimForm.get('minorFlag').value, Validators.required, 'illuminatiError')),
151
+ guardianPrefixId: new UntypedFormControl(''),
152
+ guardianSuffixId: new UntypedFormControl(''),
153
+ //guardianGender:new FormControl('', ),
154
+ guardianBirthDate: new UntypedFormControl(''),
155
+ guardianNoPhoneFlag: new UntypedFormControl(true),
156
+ guardianHomePhone: new UntypedFormControl(''),
157
+ guardianCellPhone: new UntypedFormControl(''),
158
+ guardianWorkPhone: new UntypedFormControl(''),
159
+ guardianEmail: new UntypedFormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
160
+ advocateNoPhoneFlag: new UntypedFormControl(true),
161
+ advocateWorkPhone: new UntypedFormControl(''),
162
+ advocateHomePhone: new UntypedFormControl(''),
163
+ advocateCellPhone: new UntypedFormControl(''),
164
+ advocateSuffixId: new UntypedFormControl(''),
165
+ advocatePrefixId: new UntypedFormControl(''),
166
+ advocateFirstName: new UntypedFormControl('', stringConditionalValidator(() => this.victimForm.get('victimAdvocateFlag').value, Validators.required, 'illuminatiError')),
167
+ advocateLastName: new UntypedFormControl('', stringConditionalValidator(() => this.victimForm.get('victimAdvocateFlag').value, Validators.required, 'illuminatiError')),
168
+ advocateEmail: new UntypedFormControl('', Validators.compose([Validators.pattern(this.emailPattern)])),
169
+ emergencyContact: new UntypedFormControl(''),
170
+ emergencyContactPhone: new UntypedFormControl(''),
171
+ emergencyChildren: new UntypedFormControl(''),
172
+ emergencyCpo: new UntypedFormControl(''),
173
+ emergencyDrug: new UntypedFormControl(''),
174
+ emergencySupport: new UntypedFormControl(''),
175
+ emergencyWeapon: new UntypedFormControl(''),
176
+ drug: new UntypedFormControl(''),
177
+ weapon: new UntypedFormControl(''),
178
+ support: new UntypedFormControl(''),
179
+ commonChildrenFlag: new UntypedFormControl(''),
180
+ commonChildrenNumber: new UntypedFormControl(''),
181
+ cpoExpirationFlag: new UntypedFormControl(''),
182
+ cpoExpirationDate: new UntypedFormControl(''),
183
+ accessRisk: new UntypedFormControl(''),
184
+ drugUseFlag: new UntypedFormControl(''),
185
+ supportInPlaceFlag: new UntypedFormControl(''),
186
+ weaponInvolvedFlag: new UntypedFormControl(''),
187
+ otherWeapon: new UntypedFormControl(''),
188
+ otherDrug: new UntypedFormControl(''),
189
+ alcoholUseFlag: new UntypedFormControl(''),
190
+ victimSupports: new UntypedFormControl(''),
191
+ victimWeaponUses: new UntypedFormControl(''),
192
+ victimDrugUses: new UntypedFormControl(''),
193
+ allowCsosaContactFlag: new UntypedFormControl(''),
194
+ liveWithOffenderFlag: new UntypedFormControl(''),
195
+ });
196
+ this.victimForm.markAsPristine();
197
+ this.victimForm.markAsUntouched();
198
+ }
199
+ _getVictim() {
200
+ if (this.victimId === 0) {
201
+ return;
202
+ }
203
+ ;
204
+ if (this.editMode == true) {
205
+ console.log('find victim id inside getVictim');
206
+ console.log(this.victimId);
207
+ if (this.victimId === undefined) {
208
+ this.sub = this.route.params.subscribe(params => {
209
+ this.victimId = params['victimId'];
210
+ console.log('my this.victimId');
211
+ console.log(this.victimId);
212
+ });
213
+ }
214
+ this.victimService.getVictim(this.victimId)
215
+ .subscribe((victim) => {
216
+ console.log('victim data 1');
217
+ console.log(victim);
218
+ this.editVictim = victim;
219
+ var supportsData = [];
220
+ this.editVictim.victimSupports.forEach(t => { supportsData.push(t.victimSupportTypeId); });
221
+ const victimSupportsControl = this.victimForm.get('victimSupports');
222
+ victimSupportsControl.setValue(supportsData);
223
+ var weaponUsesData = [];
224
+ var otherWeapon = "";
225
+ this.editVictim.victimWeaponUses.forEach(t => {
226
+ weaponUsesData.push(t.weaponTypeId);
227
+ if (t.weaponTypeId == "OTHER") {
228
+ otherWeapon = t.otherWeapon;
229
+ this.otherWeaponFlag = true;
230
+ }
231
+ });
232
+ const victimWeaponUsesControl = this.victimForm.get('victimWeaponUses');
233
+ victimWeaponUsesControl.setValue(weaponUsesData);
234
+ const otherWeaponControl = this.victimForm.get('otherWeapon');
235
+ otherWeaponControl.setValue(otherWeapon);
236
+ var drugUseData = [];
237
+ var otherDrug = "";
238
+ console.log('load this.editVictim.victimDrugUses');
239
+ console.log(this.editVictim.victimDrugUses);
240
+ this.editVictim.victimDrugUses.forEach(t => {
241
+ if (t.drugTypeId === null) {
242
+ otherDrug = t.otherDrug;
243
+ this.otherDrugFlag = true;
244
+ t.drugTypeId = 'OTHER';
245
+ }
246
+ drugUseData.push(t.drugTypeId);
247
+ });
248
+ console.log('this.editVictim.victimDrugUses after push');
249
+ console.log(drugUseData);
250
+ if (drugUseData) {
251
+ const victimDrugUsesControl = this.victimForm.get('victimDrugUses');
252
+ victimDrugUsesControl.setValue(drugUseData);
253
+ }
254
+ if (otherDrug) {
255
+ const otherDrugControl = this.victimForm.get('otherDrug');
256
+ otherDrugControl.setValue(otherDrug);
257
+ }
258
+ //contact
259
+ this.victimService.getContacts(this.victimId).subscribe(contactList => {
260
+ console.log('contactList');
261
+ console.log(contactList);
262
+ this.contactList = contactList;
263
+ this.contactDataSource.data = this.contactList;
264
+ });
265
+ //no phone field
266
+ if (this.editVictim.guardianNoPhoneFlag === false) {
267
+ this.victimForm.patchValue({ guardianNoPhoneFlag: false });
268
+ }
269
+ if (this.editVictim.advocateNoPhoneFlag === false) {
270
+ this.victimForm.patchValue({ advocateNoPhoneFlag: false });
271
+ }
272
+ this.homePhoneControl.setValue(!this.editVictim.homePhone ? "" : this.editVictim.homePhone);
273
+ this.cellPhoneControl.setValue(!this.editVictim.cellPhone ? "" : this.editVictim.cellPhone);
274
+ this.workPhoneControl.setValue(!this.editVictim.workPhone ? "" : this.editVictim.workPhone);
275
+ this.guardianHomePhoneControl.setValue(!this.editVictim.guardianHomePhone ? "" : this.editVictim.guardianHomePhone);
276
+ this.guardianCellPhoneControl.setValue(!this.editVictim.guardianCellPhone ? "" : this.editVictim.guardianCellPhone);
277
+ this.guardianWorkPhoneControl.setValue(!this.editVictim.guardianWorkPhone ? "" : this.editVictim.guardianWorkPhone);
278
+ this.advocateHomePhoneControl.setValue(!this.editVictim.advocateHomePhone ? "" : this.editVictim.advocateHomePhone);
279
+ this.advocateCellPhoneControl.setValue(!this.editVictim.advocateCellPhone ? "" : this.editVictim.advocateCellPhone);
280
+ this.advocateWorkPhoneControl.setValue(!this.editVictim.advocateWorkPhone ? "" : this.editVictim.advocateWorkPhone);
281
+ this.emergencyContactPhoneControl.setValue(!this.editVictim.emergencyContactPhone ? "" : this.editVictim.emergencyContactPhone);
282
+ }, error => {
283
+ this.snackBar.open("Error occured while retriving Victim Information. Please try again.");
284
+ });
285
+ return;
286
+ }
287
+ else {
288
+ //new
289
+ }
290
+ }
291
+ ngOnChanges() {
292
+ }
293
+ onClear() {
294
+ if (this.addressComponent)
295
+ this.addressComponent.reset();
296
+ }
297
+ showAddress(value) {
298
+ if (value.checked) {
299
+ this.victimService.getCurrentHousing(this.offenderId).subscribe((item) => {
300
+ this.addressId = item.housing.addressId;
301
+ this.victimForm.patchValue({ addressId: this.addressId });
302
+ });
303
+ }
304
+ else {
305
+ this.addressComponent.reset();
306
+ this.editVictim.allowCsosaContactFlag = false;
307
+ this.addressId = null;
308
+ }
309
+ }
310
+ onAddressChange(addressId) {
311
+ this.victimForm.patchValue({ addressId: addressId });
312
+ this.addressId = addressId;
313
+ }
314
+ onGuardianAddressChange(MyGuardianAddressId) {
315
+ this.victimForm.patchValue({ guardianAddressId: MyGuardianAddressId });
316
+ this.guardianAddressId = MyGuardianAddressId;
317
+ }
318
+ onAdvocateAddressChange(MyAdvocateAddressId) {
319
+ this.victimForm.patchValue({ advocateAddressId: MyAdvocateAddressId });
320
+ this.advocateAddressId = MyAdvocateAddressId;
321
+ }
322
+ cancel() {
323
+ this.victimForm.reset();
324
+ }
325
+ ngOnInit() {
326
+ this.homePhoneControl.valueChanges.subscribe((hpn) => {
327
+ const newValue = hpn.replace(/\D/g, '');
328
+ this.editVictim.homePhone = newValue;
329
+ });
330
+ this.cellPhoneControl.valueChanges.subscribe((hpn) => {
331
+ const newValue = hpn.replace(/\D/g, '');
332
+ this.editVictim.cellPhone = newValue;
333
+ });
334
+ this.workPhoneControl.valueChanges.subscribe((hpn) => {
335
+ const newValue = hpn.replace(/\D/g, '');
336
+ this.editVictim.workPhone = newValue;
337
+ });
338
+ this.guardianHomePhoneControl.valueChanges.subscribe((hpn) => {
339
+ const newValue = hpn.replace(/\D/g, '');
340
+ this.editVictim.guardianHomePhone = newValue;
341
+ });
342
+ this.guardianCellPhoneControl.valueChanges.subscribe((hpn) => {
343
+ const newValue = hpn.replace(/\D/g, '');
344
+ this.editVictim.guardianCellPhone = newValue;
345
+ });
346
+ this.guardianWorkPhoneControl.valueChanges.subscribe((hpn) => {
347
+ const newValue = hpn.replace(/\D/g, '');
348
+ this.editVictim.guardianWorkPhone = newValue;
349
+ });
350
+ this.advocateHomePhoneControl.valueChanges.subscribe((hpn) => {
351
+ const newValue = hpn.replace(/\D/g, '');
352
+ this.editVictim.advocateHomePhone = newValue;
353
+ });
354
+ this.advocateCellPhoneControl.valueChanges.subscribe((hpn) => {
355
+ const newValue = hpn.replace(/\D/g, '');
356
+ this.editVictim.advocateCellPhone = newValue;
357
+ });
358
+ this.advocateWorkPhoneControl.valueChanges.subscribe((hpn) => {
359
+ const newValue = hpn.replace(/\D/g, '');
360
+ this.editVictim.advocateWorkPhone = newValue;
361
+ });
362
+ this.emergencyContactPhoneControl.valueChanges.subscribe((hpn) => {
363
+ const newValue = hpn.replace(/\D/g, '');
364
+ this.editVictim.emergencyContactPhone = newValue;
365
+ });
366
+ console.log('show offenderId');
367
+ console.log(this.offenderId);
368
+ console.log('show staffId');
369
+ console.log(this.staffId);
370
+ console.log('show isIntake');
371
+ console.log(this.isIntake);
372
+ //required field
373
+ const requiredImplementation = { get: function () {
374
+ if (this._required) {
375
+ return this._required;
376
+ }
377
+ if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {
378
+ const emptyValueControl = Object.assign({}, this.ngControl.control);
379
+ emptyValueControl.value = null;
380
+ return ('required' in (this.ngControl.control.validator(emptyValueControl) || {}));
381
+ }
382
+ return false;
383
+ }, set: function (value) { this._required = coerceBooleanProperty(value); }, };
384
+ Object.defineProperty(MatInput.prototype, 'required', requiredImplementation);
385
+ Object.defineProperty(MatSelect.prototype, 'required', requiredImplementation);
386
+ Object.defineProperty(MatRadioGroup.prototype, 'required', requiredImplementation);
387
+ //required field end
388
+ if (this.victimDetail != null) {
389
+ // edit record
390
+ this.editMode = true;
391
+ this.showDelete = true;
392
+ this.victimId = this.victimDetail.victimId;
393
+ this.guardianTabFlag = this.victimDetail.minorFlag;
394
+ if (this.victimDetail.victimAdvocateFlag == 'YS') {
395
+ this.advocateTabFlag = true;
396
+ }
397
+ if (this.otherWeaponFlag == true) {
398
+ const otherWeaponControl = this.victimForm.get('otherWeapon');
399
+ otherWeaponControl.setValidators(Validators.required);
400
+ }
401
+ if (this.otherDrugFlag == true) {
402
+ const otherDrugControl = this.victimForm.get('otherDrug');
403
+ otherDrugControl.setValidators(Validators.required);
404
+ }
405
+ this.cpoExpirationDivFlag = this.victimDetail.cpoExpirationFlag;
406
+ this.commonChildrenDivFlag = this.victimDetail.commonChildrenFlag;
407
+ this.supportInPlaceDivFlag = this.victimDetail.supportInPlaceFlag;
408
+ this.weaponInvolvedDivFlag = this.victimDetail.weaponInvolvedFlag;
409
+ this.drugUseDivFlag = this.victimDetail.drugUseFlag;
410
+ this.addressId = this.victimDetail.addressId;
411
+ this.guardianAddressId = this.victimDetail.guardianAddressId;
412
+ this.advocateAddressId = this.victimDetail.advocateAddressId;
413
+ this._getVictim();
414
+ }
415
+ else {
416
+ //add new record
417
+ this.victimForm.patchValue({ guardianNoPhoneFlag: true });
418
+ this.victimForm.patchValue({ advocateNoPhoneFlag: true });
419
+ }
420
+ this.victimService.getFlagOptionYesNoUnknowns().subscribe((items) => {
421
+ this.flagOption = items;
422
+ });
423
+ this.victimService.getGenders().subscribe((items) => {
424
+ this.genders = items;
425
+ });
426
+ this.victimService.getPrefixes().subscribe((items) => {
427
+ this.prefixes = items;
428
+ });
429
+ this.victimService.getSuffixes().subscribe((items) => {
430
+ this.suffixes = items;
431
+ });
432
+ this.victimService.getRelationshipTypes().subscribe((items) => {
433
+ this.relationshipTypes = items.filter((y) => (y.relationshipCategoryId === 'ST' || y.relationshipCategoryId === 'FM'));
434
+ });
435
+ this.victimService.getSupportTypes().subscribe((items) => {
436
+ this.victimSupportTypes = items;
437
+ });
438
+ this.victimService.getWeaponTypes().subscribe((items) => {
439
+ this.weaponTypes = items;
440
+ });
441
+ this.victimService.getDrugsTypes().subscribe((items) => {
442
+ console.log('drug lookup items');
443
+ console.log(items);
444
+ this.drugs = items;
445
+ this.drugs.push({ drugTypeId: 'OTHER', name: 'Other' });
446
+ console.log(this.drugs);
447
+ });
448
+ // this.victimService.getDocketList(this.offenderId).subscribe(
449
+ // (items: any) => {
450
+ // this.docketlist = items;
451
+ // }
452
+ // );
453
+ this.victimForm.get('minorFlag').valueChanges
454
+ .subscribe(value => {
455
+ this.victimForm.get('guardianFirstName').updateValueAndValidity();
456
+ this.victimForm.get('guardianLastName').updateValueAndValidity();
457
+ this.victimForm.get('guardianWorkPhone').updateValueAndValidity();
458
+ this.victimForm.get('guardianHomePhone').updateValueAndValidity();
459
+ this.victimForm.get('guardianCellPhone').updateValueAndValidity();
460
+ });
461
+ this.victimForm.get('victimAdvocateFlag').valueChanges
462
+ .subscribe(value => {
463
+ this.victimForm.get('advocateFirstName').updateValueAndValidity();
464
+ this.victimForm.get('advocateLastName').updateValueAndValidity();
465
+ this.victimForm.get('advocateWorkPhone').updateValueAndValidity();
466
+ this.victimForm.get('advocateHomePhone').updateValueAndValidity();
467
+ this.victimForm.get('advocateCellPhone').updateValueAndValidity();
468
+ });
469
+ }
470
+ back() {
471
+ //this.onSave.emit(this.victimDetail);
472
+ this.router.navigate(['victimList']);
473
+ }
474
+ deleteVictim() {
475
+ this.commonDialogService
476
+ .confirm('', 'Do you want to delete this Victim?', 'Yes', 'No')
477
+ .subscribe(res => {
478
+ this.result = res;
479
+ if (this.result) {
480
+ this.victimService.deleteVictims(this.victimDetail.victimId, this.staffId)
481
+ .subscribe(result => {
482
+ this.snackBar.open('Delete Successfully!', '', {
483
+ duration: 3000,
484
+ });
485
+ });
486
+ // this.onSave.emit(this.victimDetail);
487
+ // this.router.navigate(['victim']);
488
+ setTimeout(() => {
489
+ window.location.reload();
490
+ }, 1500);
491
+ }
492
+ });
493
+ }
494
+ radioMinorChange($event) {
495
+ if ($event.value === true) {
496
+ this.guardianTabFlag = true;
497
+ }
498
+ else {
499
+ this.guardianTabFlag = false;
500
+ }
501
+ }
502
+ radioAdvocateChange($event) {
503
+ const advocateLastNameControl = this.victimForm.get('advocateLastName');
504
+ const advocateFirstNameControl = this.victimForm.get('advocateFirstName');
505
+ if ($event.value === "YS") {
506
+ this.advocateTabFlag = true;
507
+ advocateLastNameControl.setValidators(Validators.required);
508
+ advocateFirstNameControl.setValidators(Validators.required);
509
+ }
510
+ else {
511
+ this.advocateTabFlag = false;
512
+ advocateLastNameControl.clearValidators();
513
+ advocateFirstNameControl.clearValidators();
514
+ }
515
+ advocateLastNameControl.updateValueAndValidity();
516
+ advocateFirstNameControl.updateValueAndValidity();
517
+ }
518
+ radioCicChange($event) {
519
+ if ($event.value === true) {
520
+ this.commonChildrenDivFlag = true;
521
+ // requrie field
522
+ this.setValidators('commonChildren');
523
+ }
524
+ else {
525
+ this.commonChildrenDivFlag = false;
526
+ }
527
+ }
528
+ setValidators(type) {
529
+ if (type == 'commonChildren') {
530
+ this.victimForm.get('commonChildrenNumber').clearValidators();
531
+ this.victimForm.get('commonChildrenNumber').setValidators(Validators.required);
532
+ }
533
+ else if (type == 'cpo') {
534
+ this.victimForm.get('cpoExpirationDate').clearValidators();
535
+ this.victimForm.get('cpoExpirationDate').setValidators(Validators.required);
536
+ }
537
+ }
538
+ radioSupportChange($event) {
539
+ if ($event.value === true) {
540
+ this.supportInPlaceDivFlag = true;
541
+ }
542
+ else {
543
+ this.supportInPlaceDivFlag = false;
544
+ }
545
+ }
546
+ radioWeaponChange($event) {
547
+ if ($event.value === true) {
548
+ this.weaponInvolvedDivFlag = true;
549
+ }
550
+ else {
551
+ this.weaponInvolvedDivFlag = false;
552
+ }
553
+ }
554
+ radioDrugChange($event) {
555
+ if ($event.value === true) {
556
+ this.drugUseDivFlag = true;
557
+ }
558
+ else {
559
+ this.drugUseDivFlag = false;
560
+ }
561
+ }
562
+ radioCpoChange($event) {
563
+ if ($event.value === true) {
564
+ this.cpoExpirationDivFlag = true;
565
+ this.setValidators('cpo');
566
+ }
567
+ else {
568
+ this.cpoExpirationDivFlag = false;
569
+ }
570
+ }
571
+ handleDOBChange($event) {
572
+ var ageDifMs = Date.now() - $event.value;
573
+ var ageDate = new Date(ageDifMs);
574
+ if (Math.abs(ageDate.getUTCFullYear() - 1970) <= 18) {
575
+ this.snackBar.open('Victim is a Minor. This information is a sensitive and should not be disclosed to any unauthorized parties. Contact the legal guardian.', '', {
576
+ duration: 6000,
577
+ });
578
+ const minorControl = this.victimForm.get('minorFlag');
579
+ minorControl.setValue(true);
580
+ this.guardianTabFlag = true;
581
+ }
582
+ }
583
+ checkOtherWeapon(WeaponUse) {
584
+ const otherWeaponControl = this.victimForm.get('otherWeapon');
585
+ if (WeaponUse.includes("OTHER")) {
586
+ this.otherWeaponFlag = true;
587
+ otherWeaponControl.setValidators(Validators.required);
588
+ }
589
+ else {
590
+ this.otherWeaponFlag = false;
591
+ otherWeaponControl.clearValidators();
592
+ }
593
+ otherWeaponControl.updateValueAndValidity();
594
+ }
595
+ checkOtherDrug(DrugUse) {
596
+ const otherDrugControl = this.victimForm.get('otherDrug');
597
+ if (DrugUse.includes("OTHER")) {
598
+ this.otherDrugFlag = true;
599
+ otherDrugControl.setValidators(Validators.required);
600
+ }
601
+ else {
602
+ this.otherDrugFlag = false;
603
+ otherDrugControl.clearValidators();
604
+ }
605
+ otherDrugControl.updateValueAndValidity();
606
+ }
607
+ //#region "save victim"
608
+ saveVictim() {
609
+ //guardian phone logic
610
+ if (!this.victimForm.value.guardianNoPhoneFlag) {
611
+ if (this.guardianHomePhoneControl.value) {
612
+ if (this.guardianHomePhoneControl.value !== null) {
613
+ if (this.guardianHomePhoneControl.value !== "") {
614
+ this.guardianPhoneExistFlag = true;
615
+ }
616
+ }
617
+ }
618
+ if (this.guardianWorkPhoneControl.value !== undefined) {
619
+ if (this.guardianWorkPhoneControl.value !== null) {
620
+ if (this.guardianWorkPhoneControl.value !== "") {
621
+ this.guardianPhoneExistFlag = true;
622
+ }
623
+ }
624
+ }
625
+ if (this.guardianCellPhoneControl.value) {
626
+ if (this.guardianCellPhoneControl.value !== null) {
627
+ if (this.guardianCellPhoneControl.value !== "") {
628
+ this.guardianPhoneExistFlag = true;
629
+ }
630
+ }
631
+ }
632
+ }
633
+ console.log('this.victimForm.value.guardianNoPhoneFlag');
634
+ console.log(this.victimForm.value.guardianNoPhoneFlag);
635
+ console.log('this.guardianPhoneExistFlag');
636
+ console.log(this.guardianPhoneExistFlag);
637
+ if (this.guardianPhoneExistFlag === false && this.victimForm.value.guardianNoPhoneFlag === false) {
638
+ this.phoneValidationFlag = true;
639
+ this.commonDialogService
640
+ .warning('', 'Please check the guardian phone field. You have to fill one of the three phone fileds.', 'Ok')
641
+ .subscribe(res => {
642
+ this.result = res;
643
+ });
644
+ }
645
+ console.log('this.phoneValidationFlag');
646
+ console.log(this.phoneValidationFlag);
647
+ //advocate phone logic
648
+ if (!this.victimForm.value.advocateNoPhoneFlag) {
649
+ if (this.advocateHomePhoneControl.value) {
650
+ if (this.advocateHomePhoneControl.value !== null) {
651
+ if (this.advocateHomePhoneControl.value !== "") {
652
+ this.advocatePhoneExistFlag = true;
653
+ }
654
+ }
655
+ }
656
+ if (this.advocateWorkPhoneControl.value !== undefined) {
657
+ if (this.advocateWorkPhoneControl.value !== null) {
658
+ if (this.advocateWorkPhoneControl.value !== "") {
659
+ this.advocatePhoneExistFlag = true;
660
+ }
661
+ }
662
+ }
663
+ if (this.advocateCellPhoneControl.value) {
664
+ if (this.advocateCellPhoneControl.value !== null) {
665
+ if (this.advocateCellPhoneControl.value !== "") {
666
+ this.advocatePhoneExistFlag = true;
667
+ }
668
+ }
669
+ }
670
+ }
671
+ console.log('this.victimForm.value.advocateNoPhoneFlag');
672
+ console.log(this.victimForm.value.advocateNoPhoneFlag);
673
+ console.log('this.advocatePhoneExistFlag');
674
+ console.log(this.advocatePhoneExistFlag);
675
+ if (this.advocatePhoneExistFlag === false && this.victimForm.value.advocateNoPhoneFlag === false) {
676
+ this.phoneValidationFlag = true;
677
+ this.commonDialogService
678
+ .warning('', 'Please check the advocate phone field. You have to fill one of the three phone fileds.', 'Ok')
679
+ .subscribe(res => {
680
+ this.result = res;
681
+ });
682
+ }
683
+ if (this.homePhoneControl.value) {
684
+ this.victimForm.value.homePhone = this.homePhoneControl.value.replace(/[()\s-]/g, '');
685
+ }
686
+ else {
687
+ this.victimForm.value.homePhone = null;
688
+ }
689
+ if (this.cellPhoneControl.value) {
690
+ this.victimForm.value.cellPhone = this.cellPhoneControl.value.replace(/[()\s-]/g, '');
691
+ }
692
+ else {
693
+ this.victimForm.value.cellPhone = null;
694
+ }
695
+ if (this.workPhoneControl.value) {
696
+ this.victimForm.value.workPhone = this.workPhoneControl.value.replace(/[()\s-]/g, '');
697
+ }
698
+ else {
699
+ this.victimForm.value.workPhone = null;
700
+ }
701
+ if (this.guardianHomePhoneControl.value) {
702
+ this.victimForm.value.guardianHomePhone = this.guardianHomePhoneControl.value.replace(/[()\s-]/g, '');
703
+ }
704
+ else {
705
+ this.victimForm.value.guardianHomePhone = null;
706
+ }
707
+ if (this.guardianCellPhoneControl.value) {
708
+ this.victimForm.value.guardianCellPhone = this.guardianCellPhoneControl.value.replace(/[()\s-]/g, '');
709
+ }
710
+ else {
711
+ this.victimForm.value.guardianCellPhone = null;
712
+ }
713
+ if (this.guardianWorkPhoneControl.value) {
714
+ this.victimForm.value.guardianWorkPhone = this.guardianWorkPhoneControl.value.replace(/[()\s-]/g, '');
715
+ }
716
+ else {
717
+ this.victimForm.value.guardianWorkPhone = null;
718
+ }
719
+ if (this.advocateHomePhoneControl.value) {
720
+ this.victimForm.value.advocateHomePhone = this.advocateHomePhoneControl.value.replace(/[()\s-]/g, '');
721
+ }
722
+ else {
723
+ this.victimForm.value.advocateHomePhone = null;
724
+ }
725
+ if (this.advocateCellPhoneControl.value) {
726
+ this.victimForm.value.advocateCellPhone = this.advocateCellPhoneControl.value.replace(/[()\s-]/g, '');
727
+ }
728
+ else {
729
+ this.victimForm.value.advocateCellPhone = null;
730
+ }
731
+ if (this.advocateWorkPhoneControl.value) {
732
+ this.victimForm.value.advocateWorkPhone = this.advocateWorkPhoneControl.value.replace(/[()\s-]/g, '');
733
+ }
734
+ else {
735
+ this.victimForm.value.advocateWorkPhone = null;
736
+ }
737
+ if (this.emergencyContactPhoneControl.value) {
738
+ this.victimForm.value.emergencyContactPhone = this.emergencyContactPhoneControl.value.replace(/[()\s-]/g, '');
739
+ }
740
+ else {
741
+ this.victimForm.value.emergencyContactPhone = null;
742
+ }
743
+ //data process
744
+ console.log('this.phoneValidationFlag 1');
745
+ console.log(this.phoneValidationFlag);
746
+ if (this.phoneValidationFlag === false) {
747
+ if (this.victimDetail === null) {
748
+ //insert new victim
749
+ var myVictimSupports = [];
750
+ if (this.victimForm.value.victimSupports) {
751
+ this.victimForm.value.victimSupports.forEach(element => {
752
+ const victimSupport = {};
753
+ victimSupport.victimId = this.victimForm.value.victimId;
754
+ victimSupport.victimSupportTypeId = element;
755
+ victimSupport.modifiedBy = this.staffId;
756
+ myVictimSupports.push(victimSupport);
757
+ });
758
+ }
759
+ var myVictimDrugUses = [];
760
+ console.log('this.victimForm.value.victimDrugUses during save');
761
+ console.log(this.victimForm.value.victimDrugUses);
762
+ if (this.victimForm.value.victimDrugUses) {
763
+ this.victimForm.value.victimDrugUses.forEach(element => {
764
+ const victimDrugUse = {};
765
+ victimDrugUse.drugTypeId = element;
766
+ if (element === "OTHER" || element === "" || element === null) {
767
+ victimDrugUse.drugTypeId = null;
768
+ victimDrugUse.otherDrug = this.victimForm.value.otherDrug;
769
+ }
770
+ else {
771
+ victimDrugUse.drugTypeId = element;
772
+ victimDrugUse.otherDrug = null;
773
+ }
774
+ victimDrugUse.modifiedBy = this.staffId;
775
+ victimDrugUse.victimId = this.victimForm.value.victimId;
776
+ myVictimDrugUses.push(victimDrugUse);
777
+ });
778
+ }
779
+ console.log('this.victimForm.value.victimDrugUses during save 1');
780
+ console.log(this.victimForm.value.victimDrugUses);
781
+ var myVictimWeaponUses = [];
782
+ if (this.victimForm.value.victimWeaponUses) {
783
+ this.victimForm.value.victimWeaponUses.forEach(element => {
784
+ const victimWeaponUse = {};
785
+ victimWeaponUse.victimId = this.victimForm.value.victimId;
786
+ victimWeaponUse.weaponTypeId = element;
787
+ if (element == "OTHER") {
788
+ victimWeaponUse.otherWeapon = this.victimForm.value.otherWeapon;
789
+ }
790
+ else {
791
+ victimWeaponUse.otherWeapon = null;
792
+ }
793
+ victimWeaponUse.modifiedBy = this.staffId;
794
+ myVictimWeaponUses.push(victimWeaponUse);
795
+ });
796
+ }
797
+ const newVictim = {
798
+ victimId: 0,
799
+ offenderId: this.offenderId,
800
+ victimOffenderRelationshipTypeId: this.victimForm.value.victimOffenderRelationshipTypeId,
801
+ lastName: this.victimForm.value.lastName,
802
+ firstName: this.victimForm.value.firstName,
803
+ middleName: this.victimForm.value.middleName
804
+ ? this.victimForm.value.middleName
805
+ : null,
806
+ prefixId: this.victimForm.value.prefixId
807
+ ? this.victimForm.value.prefixId
808
+ : null,
809
+ suffixId: this.victimForm.value.suffixId
810
+ ? this.victimForm.value.suffixId
811
+ : null,
812
+ birthDate: this.victimForm.value.birthDate
813
+ ? this.victimForm.value.birthDate
814
+ : null,
815
+ genderCode: this.victimForm.value.genderCode
816
+ ? this.victimForm.value.genderCode
817
+ : null,
818
+ underSupervisionFlag: this.victimForm.value.underSupervisionFlag,
819
+ minorFlag: this.victimForm.value.minorFlag,
820
+ victimAdvocateFlag: this.victimForm.value.victimAdvocateFlag,
821
+ homePhone: this.victimForm.value.homePhone,
822
+ workPhone: this.victimForm.value.workPhone,
823
+ cellPhone: this.victimForm.value.cellPhone,
824
+ email: this.victimForm.value.email ? this.victimForm.value.email : null,
825
+ addressId: this.victimForm.value.addressId
826
+ ? this.victimForm.value.addressId
827
+ : 1,
828
+ emergencyContact: this.victimForm.value.emergencyContact
829
+ ? this.victimForm.value.emergencyContact
830
+ : null,
831
+ emergencyContactPhone: this.victimForm.value.emergencyContactPhone,
832
+ commonChildrenFlag: this.victimForm.value.commonChildrenFlag,
833
+ commonChildrenNumber: this.victimForm.value.commonChildrenNumber,
834
+ cpoExpirationFlag: this.victimForm.value.cpoExpirationFlag,
835
+ cpoExpirationDate: this.victimForm.value.cpoExpirationDate
836
+ ? this.datePipe.transform(this.victimForm.value.cpoExpirationDate, "short")
837
+ : null,
838
+ supportInPlaceFlag: this.victimForm.value.supportInPlaceFlag,
839
+ weaponInvolvedFlag: this.victimForm.value.weaponInvolvedFlag,
840
+ drugUseFlag: this.victimForm.value.drugUseFlag,
841
+ alcoholUseFlag: this.victimForm.value.alcoholUseFlag,
842
+ accessRisk: this.victimForm.value.accessRisk,
843
+ modifiedBy: this.staffId,
844
+ vVictimAdvocate: null,
845
+ vVictimGuardian: null,
846
+ victimDrugUses: myVictimDrugUses,
847
+ victimSupports: myVictimSupports,
848
+ victimWeaponUses: myVictimWeaponUses,
849
+ advocateFirstName: null,
850
+ advocateLastName: null,
851
+ advocateEmail: null,
852
+ advocatePrefixId: null,
853
+ advocateSuffixId: null,
854
+ advocateNoPhoneFlag: null,
855
+ advocateHomePhone: null,
856
+ advocateWorkPhone: null,
857
+ advocateCellPhone: null,
858
+ advocateAddressId: null,
859
+ guardianFirstName: null,
860
+ guardianLastName: null,
861
+ guardianEmail: null,
862
+ guardianPrefixId: null,
863
+ guardianSuffixId: null,
864
+ guardianNoPhoneFlag: null,
865
+ guardianHomePhone: null,
866
+ guardianWorkPhone: null,
867
+ guardianCellPhone: null,
868
+ guardianAddressId: null,
869
+ guardianBirthDate: null,
870
+ relationship: null,
871
+ //relationship: this.victimForm.value.victimOffenderRelationshipTypeId? this.victimForm.value.victimOffenderRelationshipTypeId : null,
872
+ allowCsosaContactFlag: this.victimForm.value.allowCsosaContactFlag
873
+ ? this.victimForm.value.allowCsosaContactFlag
874
+ : null,
875
+ liveWithOffenderFlag: this.victimForm.value.liveWithOffenderFlag
876
+ ? this.victimForm.value.liveWithOffenderFlag
877
+ : null,
878
+ };
879
+ if (this.addressId == 0) {
880
+ newVictim.addressId = null;
881
+ }
882
+ else {
883
+ newVictim.addressId = this.addressId;
884
+ }
885
+ newVictim.advocateAddressId = this.advocateAddressId;
886
+ newVictim.guardianAddressId = this.guardianAddressId;
887
+ console.log('newVictim');
888
+ console.log(newVictim);
889
+ this.victimService.postVictims(newVictim).subscribe((items) => {
890
+ const id = items ? items.victimId : '';
891
+ if (this.victimForm.value.victimAdvocateFlag == "YS") {
892
+ console.log('add advocate');
893
+ const victimAdvocate = {
894
+ victimAdvocateId: id,
895
+ lastName: this.victimForm.value.advocateLastName,
896
+ firstName: this.victimForm.value.advocateFirstName,
897
+ prefixId: this.victimForm.value.advocatePrefixId,
898
+ suffixId: this.victimForm.value.advocateSuffixId,
899
+ addressId: this.advocateAddressId ? this.advocateAddressId : null,
900
+ noPhoneFlag: this.victimForm.value.advocateNoPhoneFlag ? this.victimForm.value.advocateNoPhoneFlag : null,
901
+ homePhone: this.victimForm.value.advocateHomePhone,
902
+ workPhone: this.victimForm.value.advocateWorkPhone,
903
+ cellPhone: this.victimForm.value.advocateCellPhone,
904
+ email: this.victimForm.value.advocateEmail,
905
+ modifiedBy: this.staffId
906
+ };
907
+ this.victimService.postVictimAdvocate(id, victimAdvocate).subscribe();
908
+ }
909
+ if (this.victimForm.value.minorFlag == true) {
910
+ const victimGuardian = {
911
+ victimGuardianId: id,
912
+ lastName: this.victimForm.value.guardianLastName,
913
+ firstName: this.victimForm.value.guardianFirstName,
914
+ prefixId: this.victimForm.value.guardianPrefixId,
915
+ suffixId: this.victimForm.value.guardianSuffixId,
916
+ birthDate: this.victimForm.value.guardianBirthDate,
917
+ addressId: this.guardianAddressId ? this.guardianAddressId : null,
918
+ noPhoneFlag: this.victimForm.value.guardianNoPhoneFlag ? this.victimForm.value.guardianNoPhoneFlag : null,
919
+ homePhone: this.victimForm.value.guardianHomePhone,
920
+ workPhone: this.victimForm.value.guardianWorkPhone,
921
+ cellPhone: this.victimForm.value.guardianCellPhone,
922
+ email: this.victimForm.value.guardianEmail,
923
+ modifiedBy: this.staffId
924
+ };
925
+ this.victimService.postVictimGuardian(id, victimGuardian).subscribe();
926
+ }
927
+ this.snackBar.open('Add Victim Successfully!', '', {
928
+ duration: 3000,
929
+ });
930
+ //insert new
931
+ if (this.isIntake === true) {
932
+ this.router.navigate(['victimHome']);
933
+ }
934
+ else {
935
+ this.router.navigate(['victimList']);
936
+ }
937
+ //this.onSave.emit(this.victimDetail);
938
+ });
939
+ }
940
+ else {
941
+ //update victim
942
+ this.victimDetail.underSupervisionFlag = this.victimForm.value.underSupervisionFlag;
943
+ this.victimDetail.victimOffenderRelationshipTypeId = this.victimForm.value.victimOffenderRelationshipTypeId;
944
+ this.victimDetail.lastName = this.victimForm.value.lastName;
945
+ this.victimDetail.firstName = this.victimForm.value.firstName;
946
+ this.victimDetail.middleName = this.victimForm.value.middleName;
947
+ this.victimDetail.prefixId = this.victimForm.value.prefixId ? this.victimForm.value.prefixId : null;
948
+ this.victimDetail.suffixId = this.victimForm.value.suffixId ? this.victimForm.value.suffixId : null;
949
+ this.victimDetail.birthDate = this.victimForm.value.birthDate;
950
+ this.victimDetail.genderCode = this.victimForm.value.genderCode;
951
+ this.victimDetail.minorFlag = this.victimForm.value.minorFlag;
952
+ this.victimDetail.homePhone = this.victimForm.value.homePhone;
953
+ this.victimDetail.workPhone = this.victimForm.value.workPhone;
954
+ this.victimDetail.cellPhone = this.victimForm.value.cellPhone;
955
+ this.victimDetail.email = this.victimForm.value.email;
956
+ this.victimDetail.victimAdvocateFlag = this.victimForm.value.victimAdvocateFlag;
957
+ this.victimDetail.emergencyContact = this.victimForm.value.emergencyContact;
958
+ this.victimDetail.emergencyContactPhone = this.victimForm.value.emergencyContactPhone;
959
+ this.victimDetail.commonChildrenFlag = this.victimForm.value.commonChildrenFlag;
960
+ this.victimDetail.commonChildrenNumber = this.victimForm.value.commonChildrenNumber;
961
+ this.victimDetail.cpoExpirationDate = this.victimForm.value.cpoExpirationDate;
962
+ this.victimDetail.cpoExpirationFlag = this.victimForm.value.cpoExpirationFlag;
963
+ this.victimDetail.supportInPlaceFlag = this.victimForm.value.supportInPlaceFlag;
964
+ this.victimDetail.weaponInvolvedFlag = this.victimForm.value.weaponInvolvedFlag;
965
+ this.victimDetail.drugUseFlag = this.victimForm.value.drugUseFlag;
966
+ this.victimDetail.alcoholUseFlag = this.victimForm.value.alcoholUseFlag;
967
+ this.victimDetail.accessRisk = this.victimForm.value.accessRisk;
968
+ this.victimDetail.addressId = this.addressId;
969
+ this.victimDetail.allowCsosaContactFlag = this.victimForm.value.allowCsosaContactFlag;
970
+ this.victimDetail.liveWithOffenderFlag = this.victimForm.value.liveWithOffenderFlag;
971
+ this.victimDetail.victimSupports = [];
972
+ this.victimForm.value.victimSupports.forEach(element => {
973
+ const victimSupport = {};
974
+ victimSupport.victimId = this.victimDetail.victimId;
975
+ victimSupport.victimSupportTypeId = element;
976
+ victimSupport.modifiedBy = this.staffId;
977
+ this.victimDetail.victimSupports.push(victimSupport);
978
+ });
979
+ this.victimDetail.victimDrugUses = [];
980
+ this.victimForm.value.victimDrugUses.forEach(element => {
981
+ const victimDrugUse = {};
982
+ victimDrugUse.drugTypeId = element;
983
+ console.log('this.victimForm.value.victimDrugUses before');
984
+ console.log(this.victimForm.value.victimDrugUses);
985
+ if (element === "OTHER" || element === "") {
986
+ victimDrugUse.drugTypeId = null;
987
+ victimDrugUse.otherDrug = this.victimForm.value.otherDrug;
988
+ }
989
+ else {
990
+ victimDrugUse.drugTypeId = element;
991
+ victimDrugUse.otherDrug = null;
992
+ }
993
+ victimDrugUse.modifiedBy = this.staffId;
994
+ victimDrugUse.victimId = this.victimDetail.victimId;
995
+ this.victimDetail.victimDrugUses.push(victimDrugUse);
996
+ });
997
+ this.victimForm.value.victimDrugUses.filter(word => (!(word.drugTypeId === null && word.otherDrug === null)));
998
+ this.victimDetail.victimWeaponUses = [];
999
+ this.victimForm.value.victimWeaponUses.forEach(element => {
1000
+ const victimWeaponUse = {};
1001
+ victimWeaponUse.victimId = this.victimDetail.victimId;
1002
+ victimWeaponUse.weaponTypeId = element;
1003
+ if (element == "OTHER") {
1004
+ victimWeaponUse.otherWeapon = this.victimForm.value.otherWeapon;
1005
+ }
1006
+ else {
1007
+ victimWeaponUse.otherWeapon = null;
1008
+ }
1009
+ victimWeaponUse.modifiedBy = this.staffId;
1010
+ this.victimDetail.victimWeaponUses.push(victimWeaponUse);
1011
+ });
1012
+ console.log('this.victimDetail before emit');
1013
+ console.log(this.victimDetail);
1014
+ this.victimService.putVictims(this.victimDetail.victimId, this.victimDetail).subscribe((items) => {
1015
+ this.snackBar.open('Update Successfully!', '', {
1016
+ duration: 3000,
1017
+ });
1018
+ //Advocate section
1019
+ this.victimAdvocate.victimAdvocateId = this.victimDetail.victimId;
1020
+ this.victimAdvocate.lastName = this.victimForm.value.advocateLastName;
1021
+ this.victimAdvocate.firstName = this.victimForm.value.advocateFirstName;
1022
+ this.victimAdvocate.prefixId = this.victimForm.value.advocatePrefixId ? this.victimForm.value.advocatePrefixId : null;
1023
+ this.victimAdvocate.suffixId = this.victimForm.value.advocateSuffixId ? this.victimForm.value.advocateSuffixId : null;
1024
+ this.victimAdvocate.addressId = this.advocateAddressId ? this.advocateAddressId : null;
1025
+ this.victimAdvocate.noPhoneFlag = this.victimForm.value.advocateNoPhoneFlag ? true : false;
1026
+ this.victimAdvocate.homePhone = this.victimForm.value.advocateHomePhone;
1027
+ this.victimAdvocate.workPhone = this.victimForm.value.advocateWorkPhone;
1028
+ this.victimAdvocate.cellPhone = this.victimForm.value.advocateCellPhone;
1029
+ this.victimAdvocate.email = this.victimForm.value.advocateEmail ? this.victimForm.value.advocateEmail : null;
1030
+ this.victimAdvocate.modifiedBy = this.staffId;
1031
+ console.log('work on advocate part');
1032
+ if (this.victimDetail.victimAdvocateFlag == 'YS') {
1033
+ console.log('work on advocate flag is YS ');
1034
+ if (this.victimDetail.advocateFirstName != null) {
1035
+ console.log('check advocate fisrt name ');
1036
+ console.log(this.victimDetail.advocateFirstName);
1037
+ this.victimService.putVictimAdvocate(this.victimDetail.victimId, this.victimAdvocate).subscribe(resp => { });
1038
+ }
1039
+ else {
1040
+ console.log('add advocate');
1041
+ console.log(this.victimAdvocate);
1042
+ this.victimService.postVictimAdvocate(this.victimDetail.victimId, this.victimAdvocate).subscribe();
1043
+ }
1044
+ }
1045
+ // guardian section
1046
+ this.victimGuardian.victimGuardianId = this.victimDetail.victimId;
1047
+ this.victimGuardian.lastName = this.victimForm.value.guardianLastName;
1048
+ this.victimGuardian.firstName = this.victimForm.value.guardianFirstName;
1049
+ this.victimGuardian.prefixId = this.victimForm.value.guardianPrefixId ? this.victimForm.value.guardianPrefixId : null;
1050
+ this.victimGuardian.suffixId = this.victimForm.value.guardianSuffixId ? this.victimForm.value.guardianSuffixId : null;
1051
+ this.victimGuardian.addressId = this.guardianAddressId ? this.guardianAddressId : null;
1052
+ this.victimGuardian.noPhoneFlag = this.victimForm.value.guardianNoPhoneFlag ? true : false;
1053
+ this.victimGuardian.homePhone = this.victimForm.value.guardianHomePhone;
1054
+ this.victimGuardian.workPhone = this.victimForm.value.guardianWorkPhone;
1055
+ this.victimGuardian.cellPhone = this.victimForm.value.guardianCellPhone;
1056
+ this.victimGuardian.email = this.victimForm.value.guardianEmail ? this.victimForm.value.guardianEmail : null;
1057
+ this.victimGuardian.modifiedBy = this.staffId;
1058
+ if (this.victimDetail.minorFlag == true) {
1059
+ if (this.victimDetail.guardianFirstName != null)
1060
+ this.victimService.putVictimGuardian(this.victimDetail.victimId, this.victimGuardian).subscribe(resp => {
1061
+ });
1062
+ else {
1063
+ console.log('add gurdian');
1064
+ console.log(this.victimGuardian);
1065
+ this.victimService.postVictimGuardian(this.victimDetail.victimId, this.victimGuardian).subscribe();
1066
+ }
1067
+ }
1068
+ });
1069
+ }
1070
+ } //end of this.phoneValidationFlag = false
1071
+ console.log('this.victimDetail');
1072
+ console.log(this.victimDetail);
1073
+ this.onSave.emit(this.victimDetail);
1074
+ }
1075
+ //#endregion "save victim"
1076
+ addContact() {
1077
+ this.router.navigate(['victimContact', this.victimId]);
1078
+ }
1079
+ formatLabel(value) {
1080
+ return value;
1081
+ }
1082
+ }
1083
+ /** @nocollapse */ SmartVictimDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SmartVictimDetailComponent, deps: [{ token: i1.Location }, { token: i2.UntypedFormBuilder }, { token: i3.MatDialog }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.MatSnackBar }, { token: i6.CommonDialogService }, { token: i7.NgcSmartVictimService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1084
+ /** @nocollapse */ SmartVictimDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SmartVictimDetailComponent, selector: "csmart-victim-detail", inputs: { victimDetail: "victimDetail", staffId: "staffId", offenderId: "offenderId", isIntake: "isIntake" }, outputs: { onSave: "onSave", onCancel: "onCancel" }, providers: [CommonDialogService], viewQueries: [{ propertyName: "addressComponent", first: true, predicate: ["addressComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card>\n <mat-card-content>\n\n <div [formGroup]=\"victimForm\">\n\n <mat-tab-group dynamicHeight mat-stretch-tabs>\n <mat-tab label=\"Victim Detail\" >\n <div class='container'>\n\n <mat-form-field>\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\n <br>\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\n <br>\n <br>\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button>&nbsp;\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-label>Victim Currently Under Supervision:</mat-label>\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\n {{item.name}}</mat-option>\n </mat-select>\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\n <mat-error>under supervision field is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-label>Relationship to Offender:</mat-label>\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\n </mat-select>\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\n <mat-error>relationship is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-label>Victim Last Name:</mat-label>\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\n <mat-error>victim last name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim First Name: </mat-label>\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\n <mat-error>victim first name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Middle Name:</mat-label>\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Prefix:</mat-label>\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Suffix:</mat-label>\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Sex:</mat-label>\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Date of Birth:</mat-label>\n <input matInput\n [matDatepicker]=\"victimBirthRef\"\n formControlName=\"birthDate\"\n [(ngModel)]=\"editVictim.birthDate\"\n (click)=\"victimBirthRef.open()\"\n (dateChange)=\"handleDOBChange($event)\"\n >\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #victimBirthRef></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Home Phone:</mat-label>\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.homePhone\"\n [phoneControl]=\"homePhoneControl\"\n [formControl]=\"homePhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Victim Cell Phone:</mat-label>\n <input\n id=\"tel1\"\n matInput\n phoneMask\n [preValue]=\"editVictim.cellPhone\"\n [phoneControl]=\"cellPhoneControl\"\n [formControl]=\"cellPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field >\n <mat-label>Victim Work Phone:</mat-label>\n <input\n id=\"tel2\"\n matInput\n phoneMask\n [preValue]=\"editVictim.workPhone\"\n [phoneControl]=\"workPhoneControl\"\n [formControl]=\"workPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Victim Email:</mat-label>\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <div></div>\n <app-smart-address\n [modifiedBy]=\"staffId\"\n [id]=\"addressId\"\n [outline]=\"true\"\n [showPsa]=\"true\"\n [addressValidators]=\"addressValidators\"\n [readonly]=\"false\"\n (addressIdChange)=\"onAddressChange($event)\"\n #addressComponent >\n\n </app-smart-address>\n\n\n <!-- Docket:\n <div>\n <div *ngFor=\"let docket of docketlist; let i=index\">\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\n </div>\n </div> -->\n <div>\n <mat-checkbox color=\"primary\" formControlName=\"liveWithOffenderFlag\" name=\"liveWithOffenderFlag\" [(ngModel)]=\"editVictim.liveWithOffenderFlag\" (change)=\"showAddress($event)\" >victim live with offender</mat-checkbox>\n <br>\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\n </div>\n\n </div>\n\n <mat-card>\n <mat-form-field>\n <mat-label> Children in Common</mat-label>\n <br>\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"commonChildrenDivFlag\">\n\n <mat-form-field >\n <mat-label>\n Children number\n </mat-label>\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\n </mat-form-field>\n\n </div>\n\n <mat-form-field>\n <mat-label>CPO: </mat-label>\n <br>\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"cpoExpirationDivFlag\">\n <mat-form-field>\n <mat-label>Expiration Date: </mat-label>\n <input matInput\n [matDatepicker]=\"cpoDateRef\"\n formControlName=\"cpoExpirationDate\"\n (click)=\"cpoDateRef.open()\"\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #cpoDateRef></mat-datepicker>\n </mat-form-field>\n\n </div>\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Victim has a Support System in Place? </mat-label>\n <br>\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"supportInPlaceDivFlag\">\n <mat-form-field>\n <mat-label>Support type? </mat-label>\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\n <div (mouseleave)=\"supportSel.close()\">\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\n {{item.name}}\n </mat-option>\n </div>\n </mat-select>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n </div>\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Weapons Involved?</mat-label>\n <br>\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n\n <div *ngIf=\"weaponInvolvedDivFlag\">\n <mat-form-field>\n <mat-label>Weapon Type</mat-label>\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\n <div (mouseleave)=\"weaponSel.close()\">\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\n {{item.name}}\n </mat-option>\n </div>\n </mat-select>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n </div>\n\n <div *ngIf=\"otherWeaponFlag\">\n <mat-form-field>\n <mat-label>Other Weapon:* </mat-label>\n <input matInput formControlName=\"otherWeapon\" >\n </mat-form-field>\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\n <mat-error><strong>Other weapon is required.</strong></mat-error>\n </div>\n </div>\n\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\n <br>\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\n <br>\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"drugUseDivFlag\">\n <mat-form-field>\n <mat-label>Drug:</mat-label>\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\n <div (mouseleave)=\"drugSel.close()\">\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\n {{item.name}}\n </mat-option>\n\n </div>\n </mat-select>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n </div>\n\n <div *ngIf=\"otherDrugFlag\">\n <mat-form-field>\n <mat-label>Other Drug:* </mat-label>\n <input matInput formControlName=\"otherDrug\" >\n </mat-form-field>\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\n <mat-error><strong>Other drug is required.</strong></mat-error>\n </div>\n </div>\n <br>\n <br>\n\n <div>\n <div>\n <mat-label>\n Access Risk: 1 thru 10 (10 greatest risk): &nbsp;<b> {{editVictim.accessRisk}}</b>\n </mat-label>\n </div>\n <div>\n\n <mat-slider\n formControlName=\"accessRisk\"\n thumbLabel=\"true\"\n [displayWith]=\"formatLabel\"\n min=\"1\"\n max=\"10\"\n [(ngModel)]=\"editVictim.accessRisk\"\n ></mat-slider>\n\n </div>\n\n </div>\n\n </mat-card>\n\n\n <br><br><br>\n </mat-tab>\n\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\n <div class='container'>\n <mat-form-field>\n <mat-label>Guardian Last Name:</mat-label>\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Guardian First Name:</mat-label>\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Guardian Prefix:</mat-label>\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Guardian Suffix:</mat-label>\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <!-- <mat-form-field>\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field> -->\n\n\n <mat-form-field>\n <mat-label>Date of Birth:</mat-label>\n <input matInput\n [matDatepicker]=\"guardianDateRef\"\n formControlName=\"guardianBirthDate\"\n [(ngModel)]=\"editVictim.guardianBirthDate\"\n (click)=\"guardianDateRef.open()\"\n >\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #guardianDateRef></mat-datepicker>\n </mat-form-field>\n\n <div></div>\n <mat-form-field >\n <mat-checkbox\n color = \"primary\"\n formControlName=\"guardianNoPhoneFlag\">\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\n <input matInput placeholder=\"\" style=\"display: none;\">\n </mat-form-field>\n\n\n <div></div>\n <mat-card>\n <mat-form-field >\n <mat-label>Guardian Home Phone:</mat-label>\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.guardianHomePhone\"\n [phoneControl]=\"guardianHomePhoneControl\"\n [formControl]=\"guardianHomePhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\n </div>\n\n\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Guardian Cell Phone:</mat-label>\n <input\n id=\"tel4\"\n matInput\n phoneMask\n [preValue]=\"editVictim.guardianCellPhone\"\n [phoneControl]=\"guardianCellPhoneControl\"\n [formControl]=\"guardianCellPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Guardian Work Phone:</mat-label>\n\n <input\n id=\"tel5\"\n matInput\n phoneMask\n [preValue]=\"editVictim.guardianWorkPhone\"\n [phoneControl]=\"guardianWorkPhoneControl\"\n [formControl]=\"guardianWorkPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\n </div>\n\n\n </mat-form-field>\n </mat-card>\n\n <div></div>\n\n <mat-form-field>\n <mat-label>Guardian Email:</mat-label>\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <div></div>\n\n <div>\n <app-smart-address\n\n [showPsa]=\"true\"\n [modifiedBy]=\"staffId\"\n [id]=\"guardianAddressId\"\n (addressIdChange)=\"onGuardianAddressChange($event)\"\n [outline]=\"true\"\n readonly=\"false\"\n [rowHeight]=\"80\"\n (isValid)=\"false\"\n [addressValidators]=\"addressValidators\"\n #guardianAddressComponent\n >\n </app-smart-address>\n </div>\n </div>\n\n <br><br><br>\n </mat-tab>\n\n <!--advocate-->\n\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" >\n <div class='container'>\n\n <mat-form-field>\n <mat-label>Advocate Last Name:</mat-label>\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate First Name:</mat-label>\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Prefix:</mat-label>\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Suffix:</mat-label>\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-checkbox\n color = \"primary\"\n formControlName=\"advocateNoPhoneFlag\"\n\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\n <input matInput placeholder=\"\" style=\"display: none;\">\n </mat-form-field>\n\n <div></div>\n <mat-card>\n <mat-form-field >\n <mat-label>Advocate Home Phone:</mat-label>\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.advocateHomePhone\"\n [phoneControl]=\"advocateHomePhoneControl\"\n [formControl]=\"advocateHomePhoneControl\"\n maxlength=\"14\"/>\n\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Cell Phone:</mat-label>\n <input\n id=\"tel7\"\n matInput\n phoneMask\n [preValue]=\"editVictim.advocateCellPhone\"\n [phoneControl]=\"advocateCellPhoneControl\"\n [formControl]=\"advocateCellPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\n </div>\n\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Work Phone:</mat-label>\n <input\n id=\"tel8\"\n matInput\n phoneMask\n [preValue]=\"editVictim.advocateWorkPhone\"\n [phoneControl]=\"advocateWorkPhoneControl\"\n [formControl]=\"advocateWorkPhoneControl\"\n maxlength=\"14\"/>\n\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\n </div>\n\n </mat-form-field>\n </mat-card>\n\n <div></div>\n\n <mat-form-field>\n <mat-label>Advocate Email:</mat-label>\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <div></div>\n\n\n <div >\n <app-smart-address\n [showPsa]=\"true\"\n [modifiedBy]=\"staffId\"\n [id]=\"advocateAddressId\"\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\n [outline]=\"true\"\n readonly=\"false\"\n [rowHeight]=\"80\"\n (isValid)=\"false\"\n [addressValidators]=\"addressValidators\"\n #advocateAddressComponent >\n </app-smart-address>\n </div>\n </div>\n <br><br><br>\n </mat-tab>\n\n\n <mat-tab label=\"Emergency Contact\">\n <div class='container'>\n\n <mat-form-field>\n <mat-label>Emergency Contact Name:</mat-label>\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Emergency Phone Number:</mat-label>\n\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.emergencyContactPhone\"\n [phoneControl]=\"emergencyContactPhoneControl\"\n [formControl]=\"emergencyContactPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n </div>\n <br><br><br>\n </mat-tab>\n\n </mat-tab-group>\n <div class='outer'>\n <div>\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\n <mat-error>Relationship is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\n <mat-error>Victim last name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\n <mat-error>victim first name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\n </div>\n\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\n <mat-error>Other drug field is <strong>required</strong></mat-error>\n </div>\n\n\n </div>\n\n <div class=\"inner\">\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button>\n </div>\n &nbsp;&nbsp;\n <div *ngIf=\"showDelete\" class=\"inner\">\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\n </div>\n &nbsp;&nbsp;\n <div class=\"inner\">\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\n </div>\n &nbsp;&nbsp;\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n\n </div>\n\n </div>\n <br>\n <br>\n\n <div align=\"right\">\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\n </div>\n\n <div>\n\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"contactDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\n </ng-container>\n\n\n <ng-container matColumnDef=\"victimContactMethod\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"nextContactDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\n </ng-container>\n\n\n <ng-container matColumnDef=\"staff\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"comment\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"contactId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n\n\n </div>\n\n </mat-card-content>\n</mat-card>\n", styles: ["mat-form-field{width:100%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}@media only screen and (max-width: 1120px){.container{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:15px}}@media only screen and (max-width: 675px){.container{display:flex;flex-direction:column}}#outer{width:100%;text-align:center}.inner{display:inline-block}.tp-radio-group{display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i11.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "displayWith", "valueText", "vertical"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { kind: "component", type: i12.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i12.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i13.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i13.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "directive", type: i14.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatLabel, selector: "mat-label" }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i16.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i16.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i16.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i17.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i18.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i19.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i19.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i19.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i19.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i19.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i19.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i19.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i19.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i19.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i19.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i20.SmartAddressComponent, selector: "app-smart-address", inputs: ["showPsa", "housingTypeId", "modifiedBy", "rowHeight", "id", "outline", "readonly", "addressValidators"], outputs: ["isValid", "addressIdChange"] }, { kind: "directive", type: i21.PhoneMaskDirective, selector: "[phoneMask]", inputs: ["phoneControl", "preValue"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
1085
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SmartVictimDetailComponent, decorators: [{
1086
+ type: Component,
1087
+ args: [{ selector: 'csmart-victim-detail', providers: [CommonDialogService], template: "<mat-card>\n <mat-card-content>\n\n <div [formGroup]=\"victimForm\">\n\n <mat-tab-group dynamicHeight mat-stretch-tabs>\n <mat-tab label=\"Victim Detail\" >\n <div class='container'>\n\n <mat-form-field>\n <mat-label>Is victim a minor?<font color=\"red\">* </font></mat-label>\n <br>\n <mat-radio-group formControlName=\"minorFlag\" (change)=\"radioMinorChange($event)\" [(ngModel)]=\"editVictim.minorFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Does the Victim have a Victim Advocate or Social Worker with <br>whom CSOSA should maintain contact?<font color=\"red\">* </font></mat-label>\n <br>\n <br>\n <mat-radio-group class = \"tp-radio-group\" formControlName=\"victimAdvocateFlag\" (change)=\"radioAdvocateChange($event)\" [(ngModel)]=\"editVictim.victimAdvocateFlag\">\n <mat-radio-button color=\"primary\" *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\">{{item.name}} </mat-radio-button>&nbsp;\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-label>Victim Currently Under Supervision:</mat-label>\n <mat-select formControlName=\"underSupervisionFlag\" name=\"supervision\" [(ngModel)]=\"editVictim.underSupervisionFlag\" >\n <mat-option *ngFor=\"let item of flagOption\" [value]=\"item.flagOptionYesNoUnknownId\" >\n {{item.name}}</mat-option>\n </mat-select>\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\n <mat-error>under supervision field is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-label>Relationship to Offender:</mat-label>\n <mat-select formControlName=\"victimOffenderRelationshipTypeId\" [(ngModel)]=\"editVictim.victimOffenderRelationshipTypeId\" >\n <mat-option *ngFor=\"let item of relationshipTypes\" [value]=\"item.relationshipTypeId\">{{item.name}}</mat-option>\n </mat-select>\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\n <mat-error>relationship is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-label>Victim Last Name:</mat-label>\n <input matInput formControlName=\"lastName\" [(ngModel)]=\"editVictim.lastName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\n <mat-error>victim last name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim First Name: </mat-label>\n <input matInput formControlName=\"firstName\" [(ngModel)]=\"editVictim.firstName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\n <mat-error>victim first name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Middle Name:</mat-label>\n <input matInput formControlName=\"middleName\" [(ngModel)]=\"editVictim.middleName\">\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Prefix:</mat-label>\n <mat-select formControlName=\"prefixId\" [(ngModel)]=\"editVictim.prefixId\">\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Suffix:</mat-label>\n <mat-select formControlName=\"suffixId\" [(ngModel)]=\"editVictim.suffixId\">\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Sex:</mat-label>\n <mat-select formControlName=\"genderCode\" [(ngModel)]=\"editVictim.genderCode\">\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Date of Birth:</mat-label>\n <input matInput\n [matDatepicker]=\"victimBirthRef\"\n formControlName=\"birthDate\"\n [(ngModel)]=\"editVictim.birthDate\"\n (click)=\"victimBirthRef.open()\"\n (dateChange)=\"handleDOBChange($event)\"\n >\n <mat-datepicker-toggle [for]=\"victimBirthRef\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #victimBirthRef></mat-datepicker>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Victim Home Phone:</mat-label>\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.homePhone\"\n [phoneControl]=\"homePhoneControl\"\n [formControl]=\"homePhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('homePhone').errors\n && (victimForm.get('homePhone').dirty || victimForm.get('homePhone').touched)\">\n <mat-error><strong>Home phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Victim Cell Phone:</mat-label>\n <input\n id=\"tel1\"\n matInput\n phoneMask\n [preValue]=\"editVictim.cellPhone\"\n [phoneControl]=\"cellPhoneControl\"\n [formControl]=\"cellPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('cellPhone').errors\n && (victimForm.get('cellPhone').dirty || victimForm.get('cellPhone').touched)\">\n <mat-error><strong>Cell phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n\n <mat-form-field >\n <mat-label>Victim Work Phone:</mat-label>\n <input\n id=\"tel2\"\n matInput\n phoneMask\n [preValue]=\"editVictim.workPhone\"\n [phoneControl]=\"workPhoneControl\"\n [formControl]=\"workPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('workPhone').errors\n && (victimForm.get('workPhone').dirty || victimForm.get('workPhone').touched)\">\n <mat-error><strong>Work phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Victim Email:</mat-label>\n <input matInput formControlName=\"email\" [(ngModel)]=\"editVictim.email\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('email').errors\n && (victimForm.get('email').dirty || victimForm.get('email').touched)\">\n <mat-error><strong>victim email format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <div></div>\n <app-smart-address\n [modifiedBy]=\"staffId\"\n [id]=\"addressId\"\n [outline]=\"true\"\n [showPsa]=\"true\"\n [addressValidators]=\"addressValidators\"\n [readonly]=\"false\"\n (addressIdChange)=\"onAddressChange($event)\"\n #addressComponent >\n\n </app-smart-address>\n\n\n <!-- Docket:\n <div>\n <div *ngFor=\"let docket of docketlist; let i=index\">\n <mat-checkbox >{{docket.docketNumber}}</mat-checkbox>\n </div>\n </div> -->\n <div>\n <mat-checkbox color=\"primary\" formControlName=\"liveWithOffenderFlag\" name=\"liveWithOffenderFlag\" [(ngModel)]=\"editVictim.liveWithOffenderFlag\" (change)=\"showAddress($event)\" >victim live with offender</mat-checkbox>\n <br>\n <mat-checkbox color=\"primary\" formControlName=\"allowCsosaContactFlag\" name=\"allowCsosaContactFlag\" [(ngModel)]=\"editVictim.allowCsosaContactFlag\">victim wants to be contacted by CSOSA</mat-checkbox>\n </div>\n\n </div>\n\n <mat-card>\n <mat-form-field>\n <mat-label> Children in Common</mat-label>\n <br>\n <mat-radio-group formControlName=\"commonChildrenFlag\" [(ngModel)]=\"editVictim.commonChildrenFlag\" (change)=\"radioCicChange($event)\">\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"commonChildrenDivFlag\">\n\n <mat-form-field >\n <mat-label>\n Children number\n </mat-label>\n <input matInput formControlName=\"commonChildrenNumber\" [(ngModel)]=\"editVictim.commonChildrenNumber\" >\n </mat-form-field>\n\n </div>\n\n <mat-form-field>\n <mat-label>CPO: </mat-label>\n <br>\n <mat-radio-group formControlName=\"cpoExpirationFlag\" [(ngModel)]=\"editVictim.cpoExpirationFlag\" (change)=\"radioCpoChange($event)\">\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"cpoExpirationDivFlag\">\n <mat-form-field>\n <mat-label>Expiration Date: </mat-label>\n <input matInput\n [matDatepicker]=\"cpoDateRef\"\n formControlName=\"cpoExpirationDate\"\n (click)=\"cpoDateRef.open()\"\n [(ngModel)]=\"editVictim.cpoExpirationDate\" >\n <mat-datepicker-toggle [for]=\"cpoDateRef\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #cpoDateRef></mat-datepicker>\n </mat-form-field>\n\n </div>\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Victim has a Support System in Place? </mat-label>\n <br>\n <mat-radio-group formControlName=\"supportInPlaceFlag\" [(ngModel)]=\"editVictim.supportInPlaceFlag\" (change)=\"radioSupportChange($event)\">\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"supportInPlaceDivFlag\">\n <mat-form-field>\n <mat-label>Support type? </mat-label>\n <mat-select #supportSel formControlName=\"victimSupports\" [(ngModel)]=\"editVictim.victimSupports\" multiple>\n <div (mouseleave)=\"supportSel.close()\">\n <mat-option color=\"primary\" *ngFor=\"let item of victimSupportTypes\" [value]=\"item.victimSupportTypeId\">\n {{item.name}}\n </mat-option>\n </div>\n </mat-select>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n </div>\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Weapons Involved?</mat-label>\n <br>\n <mat-radio-group formControlName=\"weaponInvolvedFlag\" (change)=\"radioWeaponChange($event)\" [(ngModel)]=\"editVictim.weaponInvolvedFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n\n <div *ngIf=\"weaponInvolvedDivFlag\">\n <mat-form-field>\n <mat-label>Weapon Type</mat-label>\n <mat-select #weaponSel formControlName=\"victimWeaponUses\" multiple [(ngModel)]=\"editVictim.victimWeaponUses\" (selectionChange)=\"checkOtherWeapon($event.value)\" >\n <div (mouseleave)=\"weaponSel.close()\">\n <mat-option color=\"primary\" *ngFor=\"let item of weaponTypes\" [value]=\"item.weaponTypeId\">\n {{item.name}}\n </mat-option>\n </div>\n </mat-select>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n </div>\n\n <div *ngIf=\"otherWeaponFlag\">\n <mat-form-field>\n <mat-label>Other Weapon:* </mat-label>\n <input matInput formControlName=\"otherWeapon\" >\n </mat-form-field>\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\n <mat-error><strong>Other weapon is required.</strong></mat-error>\n </div>\n </div>\n\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Was Offender under the influence of alcohol at the time of the offense?</mat-label>\n <br>\n <mat-radio-group formControlName=\"alcoholUseFlag\" [(ngModel)]=\"editVictim.alcoholUseFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <br>\n <br>\n\n <mat-form-field>\n <mat-label>Was Offender under the influence of drugs at the time of the offense?</mat-label>\n <br>\n <mat-radio-group formControlName=\"drugUseFlag\" (change)=\"radioDrugChange($event)\" [(ngModel)]=\"editVictim.drugUseFlag\" >\n <mat-radio-button color=\"primary\" [value]=\"true\">Yes</mat-radio-button>&nbsp;\n <mat-radio-button color=\"primary\" [value]=\"false\">No</mat-radio-button>\n </mat-radio-group>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n <div *ngIf=\"drugUseDivFlag\">\n <mat-form-field>\n <mat-label>Drug:</mat-label>\n <mat-select #drugSel formControlName=\"victimDrugUses\" multiple (selectionChange)=\"checkOtherDrug($event.value)\" >\n <div (mouseleave)=\"drugSel.close()\">\n <mat-option color=\"primary\" *ngFor=\"let item of drugs\" [value]=\"item.drugTypeId\">\n {{item.name}}\n </mat-option>\n\n </div>\n </mat-select>\n <input matInput placeholder=\"\" style=\"display: none\">\n </mat-form-field>\n\n </div>\n\n <div *ngIf=\"otherDrugFlag\">\n <mat-form-field>\n <mat-label>Other Drug:* </mat-label>\n <input matInput formControlName=\"otherDrug\" >\n </mat-form-field>\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\n <mat-error><strong>Other drug is required.</strong></mat-error>\n </div>\n </div>\n <br>\n <br>\n\n <div>\n <div>\n <mat-label>\n Access Risk: 1 thru 10 (10 greatest risk): &nbsp;<b> {{editVictim.accessRisk}}</b>\n </mat-label>\n </div>\n <div>\n\n <mat-slider\n formControlName=\"accessRisk\"\n thumbLabel=\"true\"\n [displayWith]=\"formatLabel\"\n min=\"1\"\n max=\"10\"\n [(ngModel)]=\"editVictim.accessRisk\"\n ></mat-slider>\n\n </div>\n\n </div>\n\n </mat-card>\n\n\n <br><br><br>\n </mat-tab>\n\n <mat-tab *ngIf=\"guardianTabFlag\" label=\"Legal Guardian\">\n <div class='container'>\n <mat-form-field>\n <mat-label>Guardian Last Name:</mat-label>\n <input matInput formControlName=\"guardianLastName\" [(ngModel)]=\"editVictim.guardianLastName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors \">\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Guardian First Name:</mat-label>\n <input matInput formControlName=\"guardianFirstName\" [(ngModel)]=\"editVictim.guardianFirstName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors \">\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Guardian Prefix:</mat-label>\n <mat-select formControlName=\"guardianPrefixId\" [(ngModel)]=\"editVictim.guardianPrefixId\" >\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Guardian Suffix:</mat-label>\n <mat-select formControlName=\"guardianSuffixId\" [(ngModel)]=\"editVictim.guardianSuffixId\" >\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <!-- <mat-form-field>\n <mat-select placeholder=\"Choose\" formControlName=\"guardianGender\" [(ngModel)]=\"editVictim.guardianGender\">\n <mat-option *ngFor=\"let item of genders\" [value]=\"item.genderCode\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field> -->\n\n\n <mat-form-field>\n <mat-label>Date of Birth:</mat-label>\n <input matInput\n [matDatepicker]=\"guardianDateRef\"\n formControlName=\"guardianBirthDate\"\n [(ngModel)]=\"editVictim.guardianBirthDate\"\n (click)=\"guardianDateRef.open()\"\n >\n <mat-datepicker-toggle [for]=\"guardianDateRef\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #guardianDateRef></mat-datepicker>\n </mat-form-field>\n\n <div></div>\n <mat-form-field >\n <mat-checkbox\n color = \"primary\"\n formControlName=\"guardianNoPhoneFlag\">\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\n <input matInput placeholder=\"\" style=\"display: none;\">\n </mat-form-field>\n\n\n <div></div>\n <mat-card>\n <mat-form-field >\n <mat-label>Guardian Home Phone:</mat-label>\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.guardianHomePhone\"\n [phoneControl]=\"guardianHomePhoneControl\"\n [formControl]=\"guardianHomePhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianHomePhone').errors\n && (victimForm.get('guardianHomePhone').dirty || victimForm.get('guardianHomePhone').touched)\">\n <mat-error><strong>Guardian home phone number format is not correct.</strong></mat-error>\n </div>\n\n\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Guardian Cell Phone:</mat-label>\n <input\n id=\"tel4\"\n matInput\n phoneMask\n [preValue]=\"editVictim.guardianCellPhone\"\n [phoneControl]=\"guardianCellPhoneControl\"\n [formControl]=\"guardianCellPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianCellPhone').errors\n && (victimForm.get('guardianCellPhone').dirty || victimForm.get('guardianCellPhone').touched)\">\n <mat-error><strong>Guardian Cell phone number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field >\n <mat-label>Guardian Work Phone:</mat-label>\n\n <input\n id=\"tel5\"\n matInput\n phoneMask\n [preValue]=\"editVictim.guardianWorkPhone\"\n [phoneControl]=\"guardianWorkPhoneControl\"\n [formControl]=\"guardianWorkPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianWorkPhone').errors\n && (victimForm.get('guardianWorkPhone').dirty || victimForm.get('guardianWorkPhone').touched)\">\n <mat-error><strong>Guardian work phone number format is not correct.</strong></mat-error>\n </div>\n\n\n </mat-form-field>\n </mat-card>\n\n <div></div>\n\n <mat-form-field>\n <mat-label>Guardian Email:</mat-label>\n <input matInput formControlName=\"guardianEmail\" [(ngModel)]=\"editVictim.guardianEmail\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianEmail').errors\n && (victimForm.get('guardianEmail').dirty || victimForm.get('guardianEmail').touched)\">\n <mat-error><strong>Guardian email format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <div></div>\n\n <div>\n <app-smart-address\n\n [showPsa]=\"true\"\n [modifiedBy]=\"staffId\"\n [id]=\"guardianAddressId\"\n (addressIdChange)=\"onGuardianAddressChange($event)\"\n [outline]=\"true\"\n readonly=\"false\"\n [rowHeight]=\"80\"\n (isValid)=\"false\"\n [addressValidators]=\"addressValidators\"\n #guardianAddressComponent\n >\n </app-smart-address>\n </div>\n </div>\n\n <br><br><br>\n </mat-tab>\n\n <!--advocate-->\n\n <mat-tab *ngIf=\"advocateTabFlag\" label=\"Advocate\" >\n <div class='container'>\n\n <mat-form-field>\n <mat-label>Advocate Last Name:</mat-label>\n <input matInput formControlName=\"advocateLastName\" [(ngModel)]=\"editVictim.advocateLastName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors \">\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate First Name:</mat-label>\n <input matInput formControlName=\"advocateFirstName\" [(ngModel)]=\"editVictim.advocateFirstName\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors \">\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\n </div>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Prefix:</mat-label>\n <mat-select formControlName=\"advocatePrefixId\" [(ngModel)]=\"editVictim.advocatePrefixId\" >\n <mat-option *ngFor=\"let item of prefixes\" [value]=\"item.prefixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Suffix:</mat-label>\n <mat-select formControlName=\"advocateSuffixId\" [(ngModel)]=\"editVictim.advocateSuffixId\" >\n <mat-option *ngFor=\"let item of suffixes\" [value]=\"item.suffixId\">{{item.name}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <mat-form-field>\n <mat-checkbox\n color = \"primary\"\n formControlName=\"advocateNoPhoneFlag\"\n\n [(ngModel)]=\"editVictim.advocateNoPhoneFlag\" >\n No Phone (If there is no phone, the phone fields are no longer required)</mat-checkbox>\n <input matInput placeholder=\"\" style=\"display: none;\">\n </mat-form-field>\n\n <div></div>\n <mat-card>\n <mat-form-field >\n <mat-label>Advocate Home Phone:</mat-label>\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.advocateHomePhone\"\n [phoneControl]=\"advocateHomePhoneControl\"\n [formControl]=\"advocateHomePhoneControl\"\n maxlength=\"14\"/>\n\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateHomePhone').errors\n && (victimForm.get('advocateHomePhone').dirty || victimForm.get('advocateHomePhone').touched)\">\n <mat-error><strong>Advocate home number format is not correct.</strong></mat-error>\n </div>\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Cell Phone:</mat-label>\n <input\n id=\"tel7\"\n matInput\n phoneMask\n [preValue]=\"editVictim.advocateCellPhone\"\n [phoneControl]=\"advocateCellPhoneControl\"\n [formControl]=\"advocateCellPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateCellPhone').errors\n && (victimForm.get('advocateCellPhone').dirty || victimForm.get('advocateCellPhone').touched)\">\n <mat-error><strong>Advocate cell number format is not correct.</strong></mat-error>\n </div>\n\n\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Advocate Work Phone:</mat-label>\n <input\n id=\"tel8\"\n matInput\n phoneMask\n [preValue]=\"editVictim.advocateWorkPhone\"\n [phoneControl]=\"advocateWorkPhoneControl\"\n [formControl]=\"advocateWorkPhoneControl\"\n maxlength=\"14\"/>\n\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateWorkPhone').errors\n && (victimForm.get('advocateWorkPhone').dirty || victimForm.get('advocateWorkPhone').touched)\">\n <mat-error><strong>Advocate work number format is not correct.</strong></mat-error>\n </div>\n\n </mat-form-field>\n </mat-card>\n\n <div></div>\n\n <mat-form-field>\n <mat-label>Advocate Email:</mat-label>\n <input matInput formControlName=\"advocateEmail\" [(ngModel)]=\"editVictim.advocateEmail\" >\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateEmail').errors\n && (victimForm.get('advocateEmail').dirty || victimForm.get('advocateEmail').touched)\">\n <mat-error><strong>Advocate email format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n <div></div>\n\n\n <div >\n <app-smart-address\n [showPsa]=\"true\"\n [modifiedBy]=\"staffId\"\n [id]=\"advocateAddressId\"\n (addressIdChange)=\"onAdvocateAddressChange($event)\"\n [outline]=\"true\"\n readonly=\"false\"\n [rowHeight]=\"80\"\n (isValid)=\"false\"\n [addressValidators]=\"addressValidators\"\n #advocateAddressComponent >\n </app-smart-address>\n </div>\n </div>\n <br><br><br>\n </mat-tab>\n\n\n <mat-tab label=\"Emergency Contact\">\n <div class='container'>\n\n <mat-form-field>\n <mat-label>Emergency Contact Name:</mat-label>\n <input matInput formControlName=\"emergencyContact\" [(ngModel)]=\"editVictim.emergencyContact\" >\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Emergency Phone Number:</mat-label>\n\n <input\n id=\"tel\"\n matInput\n phoneMask\n [preValue]=\"editVictim.emergencyContactPhone\"\n [phoneControl]=\"emergencyContactPhoneControl\"\n [formControl]=\"emergencyContactPhoneControl\"\n maxlength=\"14\"/>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('emergencyContactPhone').errors\n && (victimForm.get('emergencyContactPhone').dirty || victimForm.get('emergencyContactPhone').touched)\">\n <mat-error><strong>Emergency contact number format is not correct.</strong></mat-error>\n </div>\n </mat-form-field>\n\n </div>\n <br><br><br>\n </mat-tab>\n\n </mat-tab-group>\n <div class='outer'>\n <div>\n All buttons apply to all tabs. If save button is grey, please check each tab to make sure the required field is filled.<br><br>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('minorFlag').errors\n && (victimForm.get('minorFlag').dirty || victimForm.get('minorFlag').touched)\">\n <mat-error>If victim a minor field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimAdvocateFlag').errors\n && (victimForm.get('victimAdvocateFlag').dirty || victimForm.get('victimAdvocateFlag').touched)\">\n <mat-error>If victim has advocate field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('underSupervisionFlag').errors\n && (victimForm.get('underSupervisionFlag').dirty || victimForm.get('underSupervisionFlag').touched)\">\n <mat-error>Under supervision field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('victimOffenderRelationshipTypeId').errors\n && (victimForm.get('victimOffenderRelationshipTypeId').dirty || victimForm.get('victimOffenderRelationshipTypeId').touched)\">\n <mat-error>Relationship is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('lastName').errors\n && (victimForm.get('lastName').dirty || victimForm.get('lastName').touched)\">\n <mat-error>Victim last name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('firstName').errors\n && (victimForm.get('firstName').dirty || victimForm.get('firstName').touched)\">\n <mat-error>victim first name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianFirstName').errors\n && (victimForm.get('guardianFirstName').dirty || victimForm.get('guardianFirstName').touched)\">\n <mat-error>Guardian first name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('guardianLastName').errors\n && (victimForm.get('guardianLastName').dirty || victimForm.get('guardianLastName').touched)\" >\n <mat-error>Guardian last name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateLastName').errors\n && (victimForm.get('advocateLastName').dirty || victimForm.get('advocateLastName').touched)\" >\n <mat-error>Advocate last name is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('advocateFirstName').errors\n && (victimForm.get('advocateFirstName').dirty || victimForm.get('advocateFirstName').touched)\">\n <mat-error>Advocate first name is <strong>required</strong></mat-error>\n </div>\n\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherWeapon').errors\n && (victimForm.get('otherWeapon').dirty || victimForm.get('otherWeapon').touched)\">\n <mat-error>Other weapon field is <strong>required</strong></mat-error>\n </div>\n\n <div class=\"help-block\" *ngIf=\"victimForm.get('otherDrug').errors\n && (victimForm.get('otherDrug').dirty || victimForm.get('otherDrug').touched)\">\n <mat-error>Other drug field is <strong>required</strong></mat-error>\n </div>\n\n\n </div>\n\n <div class=\"inner\">\n <button mat-raised-button color=\"primary\" (click)=\"saveVictim()\" [disabled]=\"!victimForm.valid\" >Save </button>\n </div>\n &nbsp;&nbsp;\n <div *ngIf=\"showDelete\" class=\"inner\">\n <button mat-raised-button color=\"primary\" (click)=\"deleteVictim()\">Delete </button>\n </div>\n &nbsp;&nbsp;\n <div class=\"inner\">\n <button mat-raised-button color=\"primary\" (click)=\"cancel()\">Clear </button>\n </div>\n &nbsp;&nbsp;\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n\n </div>\n\n </div>\n <br>\n <br>\n\n <div align=\"right\">\n <button mat-raised-button color=\"primary\" (click)=\"addContact()\" >Add victim contact</button>\n </div>\n\n <div>\n\n <mat-table #table [dataSource]=\"contactDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"contactDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.contactDate | date}} </mat-cell>\n </ng-container>\n\n\n <ng-container matColumnDef=\"victimContactMethod\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact Method</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimContactMethod}} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"nextContactDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Next Contact Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.nextContactDate | date}} </mat-cell>\n </ng-container>\n\n\n <ng-container matColumnDef=\"staff\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Contact By</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.staff}} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"comment\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"contactId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['contactDate', 'victimContactMethod','nextContactDate', 'staff', 'comment', 'contactId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n\n\n </div>\n\n </mat-card-content>\n</mat-card>\n", styles: ["mat-form-field{width:100%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}@media only screen and (max-width: 1120px){.container{display:grid;grid-template-columns:1fr 1fr;grid-row-gap:15px}}@media only screen and (max-width: 675px){.container{display:flex;flex-direction:column}}#outer{width:100%;text-align:center}.inner{display:inline-block}.tp-radio-group{display:flex;justify-content:space-between}\n"] }]
1088
+ }], ctorParameters: function () { return [{ type: i1.Location }, { type: i2.UntypedFormBuilder }, { type: i3.MatDialog }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.MatSnackBar }, { type: i6.CommonDialogService }, { type: i7.NgcSmartVictimService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { victimDetail: [{
1089
+ type: Input
1090
+ }], staffId: [{
1091
+ type: Input
1092
+ }], offenderId: [{
1093
+ type: Input
1094
+ }], isIntake: [{
1095
+ type: Input
1096
+ }], onSave: [{
1097
+ type: Output
1098
+ }], onCancel: [{
1099
+ type: Output
1100
+ }], addressComponent: [{
1101
+ type: ViewChild,
1102
+ args: ["addressComponent"]
1103
+ }] } });
1104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc21hcnQtdmljdGltLWRldGFpbC9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zbWFydC12aWN0aW0tZGV0YWlsL3NtYXJ0LXZpY3RpbS1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0Isa0JBQWtCLEVBQUMsVUFBVSxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDakgsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQWMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFDLE1BQUksdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFxQixxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUs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QixDQUFDLFFBQVEsQ0FDNUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FDNUQsQ0FBQztnQkFFRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUM1QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUM1RCxDQUFDO2dCQUVGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQ3BDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUM1RSxDQUFDO2dCQUVGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQ3BDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUM1RSxDQUFDO2dCQUVGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQ3BDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUM1RSxDQUFDO2dCQUdGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQ3BDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUM1RSxDQUFDO2dCQUVGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQ3BDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxp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QkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDaEQ7UUFHRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUM7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1NBQ3RHO2FBQ0c7WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDL0M7UUFFRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1NBQ3RHO2FBQ0c7WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDL0M7UUFFQSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUM7WUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1NBQ3RHO2FBQ0c7WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDL0M7UUFHRCxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1NBQzdHO2FBQUk7WUFDSixJQUFJLENB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LENBQUMsb0JBQW9CLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUM7Z0JBQzdHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzlELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FB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QUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUwsMEJBQTBCO0lBQ3RCLFVBQVU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQWE7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzswSUF6dkNNLDBCQUEwQjs4SEFBMUIsMEJBQTBCLGtOQUYxQixDQUFDLG1CQUFtQixDQUFDLHFLQ25HbEMsaTYzQ0FxMkJBOzJGRGh3QmEsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLG1CQUFtQixDQUFDOzBVQUd2QixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ3dCLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUNvbnRyb2wsVmFsaWRhdG9ycyxWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFJhZGlvQ2hhbmdlLCBNYXRSYWRpb0dyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgVmljdGltLFZpY3RpbURydWdVc2UsIENvbnRhY3QsIFZpY3RpbUFkdm9jYXRlLFZpY3RpbUd1YXJkaWFuLFZpY3RpbVdlYXBvblVzZSxWaWN0aW1TdXBwb3J0IH0gZnJvbSAnLi4vc21hcnQtdmljdGltLm1vZGVsJztcbmltcG9ydCB7IE5nY1NtYXJ0VmljdGltU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbW9uRGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi9jb21tb24tZGlhbG9nL2NvbW1vbi1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgZm9ybWF0RGF0ZSwgTG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHl9ZnJvbSdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBBZGRyZXNzVmFsaWRhdG9ycywgU21hcnRBZGRyZXNzQ29tcG9uZW50IH0gZnJvbSAnQGNzbWFydC9uZ2Mtc21hcnQtYWRkcmVzcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgSW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIE5nRm9ybSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgWGRtU2VydmljZSxcbiAgU2VsZWN0ZWRPZmZlbmRlcixcbiAgU21hcnRBdXRoU2VydmljZSxcbiAgTG9naW5TdGFmZixcbiAgU21hcnRBY2Nlc3NDb250cm9sQ29uZmlnLFxuICBBY2Nlc3NUeXBlLFxufSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1jb3JlJztcblxuaW1wb3J0IHsgbWFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNtYXJ0RGVsZXRlQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJ0Bjc21hcnQvc21hcnQtdWknO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vbGVhbkZuIHtcbiAgKCk6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0ZuIHtcbiAgKCk6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmRpdGlvbmFsVmFsaWRhdG9yKHByZWRpY2F0ZTogQm9vbGVhbkZuLFxuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuLFxuICBlcnJvck5hbWVzcGFjZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbnJldHVybiAoZm9ybUNvbnRyb2wgPT4ge1xuaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcbnJldHVybiBudWxsO1xufVxubGV0IGVycm9yID0gbnVsbDtcbmlmIChwcmVkaWNhdGUoKSkge1xuZXJyb3IgPSB2YWxpZGF0b3IoZm9ybUNvbnRyb2wpO1xufVxuaWYgKGVycm9yTmFtZXNwYWNlICYmIGVycm9yKSB7XG5jb25zdCBjdXN0b21FcnJvciA9IHt9O1xuY3VzdG9tRXJyb3JbZXJyb3JOYW1lc3BhY2VdID0gZXJyb3I7XG5lcnJvciA9IGN1c3RvbUVycm9yXG59XG5yZXR1cm4gZXJyb3I7XG59KVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcihwcmVkaWNhdGU6IFN0cmluZ0ZuLFxuICB2YWxpZGF0b3I6IFZhbGlkYXRvckZuLFxuICBlcnJvck5hbWVzcGFjZT86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbnJldHVybiAoZm9ybUNvbnRyb2wgPT4ge1xuaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcbnJldHVybiBudWxsO1xufVxubGV0IGVycm9yID0gbnVsbDtcbmlmIChwcmVkaWNhdGUoKT09J1lTJykge1xuZXJyb3IgPSB2YWxpZGF0b3IoZm9ybUNvbnRyb2wpO1xufVxuaWYgKGVycm9yTmFtZXNwYWNlICYmIGVycm9yKSB7XG5jb25zdCBjdXN0b21FcnJvciA9IHt9O1xuY3VzdG9tRXJyb3JbZXJyb3JOYW1lc3BhY2VdID0gZXJyb3I7XG5lcnJvciA9IGN1c3RvbUVycm9yXG59XG5yZXR1cm4gZXJyb3I7XG59KVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjc21hcnQtdmljdGltLWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC12aWN0aW0tZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtdmljdGltLWRldGFpbC5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0VmljdGltRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB2aWN0aW1EZXRhaWwgPSA8VmljdGltPnt9O1xuICBASW5wdXQoKSBzdGFmZklkOiBudW1iZXI7XG4gIEBJbnB1dCgpIG9mZmVuZGVySWQ6IG51bWJlcjtcbiAgQElucHV0KCkgaXNJbnRha2U6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKFwiYWRkcmVzc0NvbXBvbmVudFwiKSBhZGRyZXNzQ29tcG9uZW50OiBTbWFydEFkZHJlc3NDb21wb25lbnQ7XG5cblxuICB2aWN0aW1JZDogbnVtYmVyO1xuICB2aWN0aW1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIGRydWdzOiBhbnk7XG4gIHZpY3RpbVN1cHBvcnRUeXBlczogYW55O1xuICBwcmVmaXhlczogYW55O1xuICAvL3ZpY3RpbTogVmljdGltID0gPFZpY3RpbT57fTtcbiAgc3VmZml4ZXM6IGFueTtcbiAgcmVsYXRpb25zaGlwVHlwZXM6IGFueTtcbiAgZ2VuZGVyczogYW55O1xuICBkb2NrZXRsaXN0OiBhbnk7XG4gIHdlYXBvblR5cGVzOiBhbnk7XG4gIGZsYWdPcHRpb246IGFueTtcbiAgc2VsZWN0ZWRXZWFwb25UeXBlczogYW55O1xuICBzZWxlY3RlZFZpY3RpbVN1cHBvcnRUeXBlczogYW55O1xuICBzZWxlY3RlZERydWdzOiBhbnk7XG4gIGlkOiBhbnk7XG4gIGhpZGRlbjogYm9vbGVhbj10cnVlO1xuICBwcml2YXRlIHN1YjogYW55O1xuICB2aWN0aW1BZHZvY2F0ZTogVmljdGltQWR2b2NhdGUgPSAgPFZpY3RpbUFkdm9jYXRlPnt9O1xuICB2aWN0aW1HdWFyZGlhbjogVmljdGltR3VhcmRpYW4gPSA8VmljdGltR3VhcmRpYW4+e307XG4gIHZpY3RpbVdlYXBvblVzZTogVmljdGltV2VhcG9uVXNlO1xuICB2aWN0aW1TdXBwb3J0OiBWaWN0aW1TdXBwb3J0O1xuICB2aWN0aW1EcnVnVXNlOiBWaWN0aW1EcnVnVXNlO1xuICByZXN1bHQ6IGFueTtcbiAgZWRpdE1vZGU6IGFueTtcbiAgZ3VhcmRpYW5UYWJGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIGFkdm9jYXRlVGFiRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBjb21tb25DaGlsZHJlbkRpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3BvRXhwaXJhdGlvbkRpdkZsYWcgOiBib29sZWFuID0gZmFsc2U7XG4gIHN1cHBvcnRJblBsYWNlRGl2RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICB3ZWFwb25JbnZvbHZlZERpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZHJ1Z1VzZURpdkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhZGRyZXNzSWQ6IG51bWJlciA9IDA7XG4gIGFkdm9jYXRlQWRkcmVzc0lkOiBudW1iZXIgPSAwO1xuICBndWFyZGlhbkFkZHJlc3NJZDogbnVtYmVyID0gMDtcbiAgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XG4gIGVtYWlsUGF0dGVybiA9IFwiXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSRcIjtcbiAgcGhvbmVOdW1iZXIgPSBcIlxcXFxkezEwfVwiO1xuICBlZGl0VmljdGltOiBWaWN0aW0gPSA8VmljdGltPnt9O1xuICB2aWN0aW1BZ2U6IG51bWJlcjtcbiAgb3RoZXJXZWFwb25GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIG90aGVyRHJ1Z0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb250YWN0RGF0YVNvdXJjZT0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xuICBjb250YWN0TGlzdDogQ29udGFjdFtdO1xuICBndWFyZGlhblBob25lRXhpc3RGbGFnOiBib29sZWFuID0gIGZhbHNlO1xuICBhZHZvY2F0ZVBob25lRXhpc3RGbGFnOiBib29sZWFuID0gIGZhbHNlO1xuICBwaG9uZVZhbGlkYXRpb25GbGFnOiBib29sZWFuID0gIGZhbHNlO1xuICBndWFyaWRhbk5vUGhvbmVDaGtGbGFnOiBib29sZWFuID0gdHJ1ZTtcbiAgYWR2b2NhdGVOb1Bob25lQ2hrRmxhZzogYm9vbGVhbiA9ICB0cnVlO1xuXG4gIGFkZHJlc3NWYWxpZGF0b3JzOiBBZGRyZXNzVmFsaWRhdG9ycyA9IHtcbiAgICBzdHJlZXQ6IFtdLFxuICAgIHN0cmVldDI6IFtdLFxuICAgIGNpdHk6IFtdLFxuICAgIHN0YXRlQ29kZTogW10sXG4gICAgemlwQ29kZTogW10sXG4gICAgcHNhQ29kZTogW10sXG4gIH07XG4gIGhvbWVQaG9uZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIGNlbGxQaG9uZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIHdvcmtQaG9uZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIGd1YXJkaWFuSG9tZVBob25lQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZ3VhcmRpYW5DZWxsUGhvbmVDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBndWFyZGlhbldvcmtQaG9uZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIGFkdm9jYXRlSG9tZVBob25lQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgYWR2b2NhdGVDZWxsUGhvbmVDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBhZHZvY2F0ZVdvcmtQaG9uZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIGVtZXJnZW5jeUNvbnRhY3RQaG9uZUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBjb21tb25EaWFsb2dTZXJ2aWNlOiBDb21tb25EaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmljdGltU2VydmljZTogTmdjU21hcnRWaWN0aW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWZzOiBDaGFuZ2VEZXRlY3RvclJlZixcblxuICAgICkge1xuICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgIH1cblxuICAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcblxuICAgIHRoaXMudmljdGltRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdW5kZXJTdXBlcnZpc2lvbkZsYWc6ICBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgdmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFsgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIGxhc3ROYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgZmlyc3ROYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoWyBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgbWlkZGxlTmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIHByZWZpeElkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgc3VmZml4SWQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBnZW5kZXJDb2RlOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBiaXJ0aERhdGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBob21lUGhvbmU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBjZWxsUGhvbmU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICB3b3JrUGhvbmU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBlbWFpbDpuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLmVtYWlsUGF0dGVybikgXSkpLFxuICAgICAgbWlub3JGbGFnOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICB2aWN0aW1BZHZvY2F0ZUZsYWc6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbIFZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICBndWFyZGlhbkxhc3ROYW1lOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcigoKSA9PiB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS52YWx1ZSwgIFZhbGlkYXRvcnMucmVxdWlyZWQsICdpbGx1bWluYXRpRXJyb3InKSApLFxuICAgICAgZ3VhcmRpYW5GaXJzdE5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICBzdHJpbmdDb25kaXRpb25hbFZhbGlkYXRvcigoKSA9PiB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS52YWx1ZSwgIFZhbGlkYXRvcnMucmVxdWlyZWQsICdpbGx1bWluYXRpRXJyb3InKSksXG4gICAgICBndWFyZGlhblByZWZpeElkOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBndWFyZGlhblN1ZmZpeElkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgLy9ndWFyZGlhbkdlbmRlcjpuZXcgRm9ybUNvbnRyb2woJycsICksXG4gICAgICBndWFyZGlhbkJpcnRoRGF0ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6bmV3IFVudHlwZWRGb3JtQ29udHJvbCh0cnVlKSxcblxuICAgICAgZ3VhcmRpYW5Ib21lUGhvbmU6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywpLFxuICAgICAgZ3VhcmRpYW5DZWxsUGhvbmU6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywpLFxuICAgICAgZ3VhcmRpYW5Xb3JrUGhvbmU6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywpLFxuXG5cbiAgICAgIGd1YXJkaWFuRW1haWw6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5lbWFpbFBhdHRlcm4pIF0pKSxcbiAgICAgIGFkdm9jYXRlTm9QaG9uZUZsYWc6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodHJ1ZSksXG5cblxuICAgICAgYWR2b2NhdGVXb3JrUGhvbmU6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywpLFxuICAgICAgYWR2b2NhdGVIb21lUGhvbmU6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywpLFxuICAgICAgYWR2b2NhdGVDZWxsUGhvbmU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsKSxcblxuXG4gICAgICBhZHZvY2F0ZVN1ZmZpeElkOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBhZHZvY2F0ZVByZWZpeElkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgYWR2b2NhdGVGaXJzdE5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgJ2lsbHVtaW5hdGlFcnJvcicpKSxcbiAgICAgIGFkdm9jYXRlTGFzdE5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIHN0cmluZ0NvbmRpdGlvbmFsVmFsaWRhdG9yKCgpID0+IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkLCdpbGx1bWluYXRpRXJyb3InKSksXG4gICAgICBhZHZvY2F0ZUVtYWlsOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLmVtYWlsUGF0dGVybikgXSkpLFxuICAgICAgZW1lcmdlbmN5Q29udGFjdDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGVtZXJnZW5jeUNvbnRhY3RQaG9uZTpuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCksXG4gICAgICBlbWVyZ2VuY3lDaGlsZHJlbjogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGVtZXJnZW5jeUNwbzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGVtZXJnZW5jeURydWc6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGVtZXJnZW5jeVN1cHBvcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBlbWVyZ2VuY3lXZWFwb246IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBkcnVnOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgd2VhcG9uOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgc3VwcG9ydDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGNvbW1vbkNoaWxkcmVuRmxhZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGNvbW1vbkNoaWxkcmVuTnVtYmVyOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICBjcG9FeHBpcmF0aW9uRmxhZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIGNwb0V4cGlyYXRpb25EYXRlOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgYWNjZXNzUmlzazpuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgZHJ1Z1VzZUZsYWc6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIHN1cHBvcnRJblBsYWNlRmxhZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIHdlYXBvbkludm9sdmVkRmxhZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIG90aGVyV2VhcG9uOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgb3RoZXJEcnVnOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgYWxjb2hvbFVzZUZsYWc6bmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgKSxcbiAgICAgIHZpY3RpbVN1cHBvcnRzOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICB2aWN0aW1XZWFwb25Vc2VzOm5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG4gICAgICB2aWN0aW1EcnVnVXNlczpuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgYWxsb3dDc29zYUNvbnRhY3RGbGFnOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCApLFxuICAgICAgbGl2ZVdpdGhPZmZlbmRlckZsYWc6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsICksXG5cbn0pO1xuXG4gICAgdGhpcy52aWN0aW1Gb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG5cdFx0dGhpcy52aWN0aW1Gb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuXG4gICB9XG5cbiAgIHByaXZhdGUgX2dldFZpY3RpbSgpIHtcbiAgICBpZiAodGhpcy52aWN0aW1JZCA9PT0gMCkge1xuXG4gICAgICByZXR1cm47XG4gICAgfTtcblx0XHRpZiAodGhpcy5lZGl0TW9kZSA9PSB0cnVlKSB7XG4gICAgY29uc29sZS5sb2coJ2ZpbmQgdmljdGltIGlkIGluc2lkZSBnZXRWaWN0aW0nKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUlkKTtcblxuICAgIGlmICh0aGlzLnZpY3RpbUlkID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnN1YiA9IHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcbiAgICAgIGNvbnNvbGUubG9nKCdteSB0aGlzLnZpY3RpbUlkJyk7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUlkKTtcbiAgICAgfSk7XG4gICB9XG5cbiAgICAgIHRoaXMudmljdGltU2VydmljZS5nZXRWaWN0aW0odGhpcy52aWN0aW1JZClcbiAgICAgIC5zdWJzY3JpYmUoKHZpY3RpbTogVmljdGltKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWN0aW0gZGF0YSAxJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbSk7XG4gICAgICAgIHRoaXMuZWRpdFZpY3RpbSA9IDxWaWN0aW0+dmljdGltO1xuXG4gICAgICAgIHZhciBzdXBwb3J0c0RhdGEgPVtdO1xuICAgICAgICB0aGlzLmVkaXRWaWN0aW0udmljdGltU3VwcG9ydHMuZm9yRWFjaCggdD0+e3N1cHBvcnRzRGF0YS5wdXNoKHQudmljdGltU3VwcG9ydFR5cGVJZCk7IH0gIClcbiAgICAgICAgY29uc3QgdmljdGltU3VwcG9ydHNDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgndmljdGltU3VwcG9ydHMnKTtcbiAgICAgICAgdmljdGltU3VwcG9ydHNDb250cm9sLnNldFZhbHVlKHN1cHBvcnRzRGF0YSk7XG5cbiAgICAgICAgdmFyIHdlYXBvblVzZXNEYXRhID1bXTtcbiAgICAgICAgdmFyIG90aGVyV2VhcG9uID0gXCJcIjtcbiAgICAgICAgdGhpcy5lZGl0VmljdGltLnZpY3RpbVdlYXBvblVzZXMuZm9yRWFjaCggdD0+e1xuICAgICAgICAgIHdlYXBvblVzZXNEYXRhLnB1c2godC53ZWFwb25UeXBlSWQpO1xuICAgICAgICAgIGlmICh0LndlYXBvblR5cGVJZCA9PSBcIk9USEVSXCIpe1xuICAgICAgICAgICAgb3RoZXJXZWFwb24gPSB0Lm90aGVyV2VhcG9uO1xuICAgICAgICAgICAgdGhpcy5vdGhlcldlYXBvbkZsYWcgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICB9ICApXG5cblxuICAgICAgICBjb25zdCB2aWN0aW1XZWFwb25Vc2VzQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbVdlYXBvblVzZXMnKTtcbiAgICAgICAgdmljdGltV2VhcG9uVXNlc0NvbnRyb2wuc2V0VmFsdWUod2VhcG9uVXNlc0RhdGEpO1xuXG4gICAgICAgIGNvbnN0IG90aGVyV2VhcG9uQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJyk7XG4gICAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWx1ZShvdGhlcldlYXBvbik7XG5cbiAgICAgICAgdmFyIGRydWdVc2VEYXRhID1bXTtcbiAgICAgICAgdmFyIG90aGVyRHJ1ZyA9IFwiXCI7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2xvYWQgdGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcyk7XG4gICAgICAgIHRoaXMuZWRpdFZpY3RpbS52aWN0aW1EcnVnVXNlcy5mb3JFYWNoKCB0PT57XG5cbiAgICAgICAgICBpZiAodC5kcnVnVHlwZUlkID09PSBudWxsKXtcbiAgICAgICAgICAgIG90aGVyRHJ1ZyA9IHQub3RoZXJEcnVnO1xuICAgICAgICAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcbiAgICAgICAgICAgIHQuZHJ1Z1R5cGVJZCA9J09USEVSJztcbiAgICAgICAgICB9XG4gICAgICAgICAgZHJ1Z1VzZURhdGEucHVzaCh0LmRydWdUeXBlSWQpO1xuXG4gICAgICAgIH0gIClcblxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0VmljdGltLnZpY3RpbURydWdVc2VzIGFmdGVyIHB1c2gnKTtcbiAgICAgICAgY29uc29sZS5sb2coZHJ1Z1VzZURhdGEpO1xuXG5cbiAgICAgICAgaWYgKGRydWdVc2VEYXRhKXtcbiAgICAgICAgICBjb25zdCB2aWN0aW1EcnVnVXNlc0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1EcnVnVXNlcycpO1xuICAgICAgICAgIHZpY3RpbURydWdVc2VzQ29udHJvbC5zZXRWYWx1ZShkcnVnVXNlRGF0YSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdGhlckRydWcpe1xuICAgICAgICAgIGNvbnN0IG90aGVyRHJ1Z0NvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKTtcbiAgICAgICAgICBvdGhlckRydWdDb250cm9sLnNldFZhbHVlKG90aGVyRHJ1Zyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NvbnRhY3RcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldENvbnRhY3RzKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcbiAgICAgICAgICBjb250YWN0TGlzdCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29udGFjdExpc3QnKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnRhY3RMaXN0KTtcbiAgICAgICAgICAgIHRoaXMuY29udGFjdExpc3QgPSBjb250YWN0TGlzdDtcbiAgICAgICAgICAgIHRoaXMuY29udGFjdERhdGFTb3VyY2UuZGF0YSA9IHRoaXMuY29udGFjdExpc3Q7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vbm8gcGhvbmUgZmllbGRcblxuICAgICAgICBpZiAoIHRoaXMuZWRpdFZpY3RpbS5ndWFyZGlhbk5vUGhvbmVGbGFnID09PSBmYWxzZSApe1xuICAgICAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHtndWFyZGlhbk5vUGhvbmVGbGFnOiBmYWxzZX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdGhpcy5lZGl0VmljdGltLmFkdm9jYXRlTm9QaG9uZUZsYWcgPT09IGZhbHNlICl7XG4gICAgICAgICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2Fkdm9jYXRlTm9QaG9uZUZsYWc6IGZhbHNlfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhvbWVQaG9uZUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgIXRoaXMuZWRpdFZpY3RpbS5ob21lUGhvbmUgPyBcIlwiIDogdGhpcy5lZGl0VmljdGltLmhvbWVQaG9uZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2VsbFBob25lQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAhdGhpcy5lZGl0VmljdGltLmNlbGxQaG9uZSA/IFwiXCIgOiB0aGlzLmVkaXRWaWN0aW0uY2VsbFBob25lXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy53b3JrUGhvbmVDb250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICF0aGlzLmVkaXRWaWN0aW0ud29ya1Bob25lID8gXCJcIiA6IHRoaXMuZWRpdFZpY3RpbS53b3JrUGhvbmVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmd1YXJkaWFuSG9tZVBob25lQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAhdGhpcy5lZGl0VmljdGltLmd1YXJkaWFuSG9tZVBob25lID8gXCJcIiA6IHRoaXMuZWRpdFZpY3RpbS5ndWFyZGlhbkhvbWVQaG9uZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZ3VhcmRpYW5DZWxsUGhvbmVDb250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICF0aGlzLmVkaXRWaWN0aW0uZ3VhcmRpYW5DZWxsUGhvbmUgPyBcIlwiIDogdGhpcy5lZGl0VmljdGltLmd1YXJkaWFuQ2VsbFBob25lXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ndWFyZGlhbldvcmtQaG9uZUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgIXRoaXMuZWRpdFZpY3RpbS5ndWFyZGlhbldvcmtQaG9uZSA/IFwiXCIgOiB0aGlzLmVkaXRWaWN0aW0uZ3VhcmRpYW5Xb3JrUGhvbmVcbiAgICAgICAgKTtcblxuXG4gICAgICAgIHRoaXMuYWR2b2NhdGVIb21lUGhvbmVDb250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICF0aGlzLmVkaXRWaWN0aW0uYWR2b2NhdGVIb21lUGhvbmUgPyBcIlwiIDogdGhpcy5lZGl0VmljdGltLmFkdm9jYXRlSG9tZVBob25lXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hZHZvY2F0ZUNlbGxQaG9uZUNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgIXRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZUNlbGxQaG9uZSA/IFwiXCIgOiB0aGlzLmVkaXRWaWN0aW0uYWR2b2NhdGVDZWxsUGhvbmVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFkdm9jYXRlV29ya1Bob25lQ29udHJvbC5zZXRWYWx1ZShcbiAgICAgICAgICAhdGhpcy5lZGl0VmljdGltLmFkdm9jYXRlV29ya1Bob25lID8gXCJcIiA6IHRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZVdvcmtQaG9uZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZW1lcmdlbmN5Q29udGFjdFBob25lQ29udHJvbCAuc2V0VmFsdWUoXG4gICAgICAgICAgIXRoaXMuZWRpdFZpY3RpbS5lbWVyZ2VuY3lDb250YWN0UGhvbmUgID8gXCJcIiA6IHRoaXMuZWRpdFZpY3RpbS5lbWVyZ2VuY3lDb250YWN0UGhvbmVcbiAgICAgICAgKTtcblxuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJFcnJvciBvY2N1cmVkIHdoaWxlIHJldHJpdmluZyBWaWN0aW0gSW5mb3JtYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuO1xuXHRcdH0gZWxzZSB7XG4gICAgICAvL25ld1xuXG4gICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcblxuICB9XG5cbiAgb25DbGVhcigpIHtcbiAgICBpZiAodGhpcy5hZGRyZXNzQ29tcG9uZW50KSB0aGlzLmFkZHJlc3NDb21wb25lbnQucmVzZXQoKTtcbiAgfVxuXG4gIHNob3dBZGRyZXNzKHZhbHVlKXtcblxuICAgIGlmICh2YWx1ZS5jaGVja2VkKXtcblxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRDdXJyZW50SG91c2luZyh0aGlzLm9mZmVuZGVySWQpLnN1YnNjcmliZShcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRyZXNzSWQgPSBpdGVtLmhvdXNpbmcuYWRkcmVzc0lkO1xuICAgICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWRkcmVzc0lkOiB0aGlzLmFkZHJlc3NJZH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy5hZGRyZXNzQ29tcG9uZW50LnJlc2V0KCk7XG4gICAgICB0aGlzLmVkaXRWaWN0aW0uYWxsb3dDc29zYUNvbnRhY3RGbGFnID0gZmFsc2U7XG4gICAgICB0aGlzLmFkZHJlc3NJZCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxuICBvbkFkZHJlc3NDaGFuZ2UoYWRkcmVzc0lkKSB7XG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2FkZHJlc3NJZDogYWRkcmVzc0lkfSlcbiAgICB0aGlzLmFkZHJlc3NJZCA9IGFkZHJlc3NJZDtcbiAgfVxuICBvbkd1YXJkaWFuQWRkcmVzc0NoYW5nZShNeUd1YXJkaWFuQWRkcmVzc0lkKSB7XG4gICAgdGhpcy52aWN0aW1Gb3JtLnBhdGNoVmFsdWUoe2d1YXJkaWFuQWRkcmVzc0lkOiBNeUd1YXJkaWFuQWRkcmVzc0lkfSlcbiAgICB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkID0gIE15R3VhcmRpYW5BZGRyZXNzSWQ7XG4gIH1cbiAgb25BZHZvY2F0ZUFkZHJlc3NDaGFuZ2UoTXlBZHZvY2F0ZUFkZHJlc3NJZCkge1xuICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHthZHZvY2F0ZUFkZHJlc3NJZDogTXlBZHZvY2F0ZUFkZHJlc3NJZH0pXG4gICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9IE15QWR2b2NhdGVBZGRyZXNzSWQ7XG4gIH1cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMudmljdGltRm9ybS5yZXNldCgpO1xufVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhvbWVQaG9uZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoaHBuOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaHBuLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICB0aGlzLmVkaXRWaWN0aW0uaG9tZVBob25lPSBuZXdWYWx1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2VsbFBob25lQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChocG46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBocG4ucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgIHRoaXMuZWRpdFZpY3RpbS5jZWxsUGhvbmU9IG5ld1ZhbHVlO1xuICAgIH0pO1xuXG5cbiAgICB0aGlzLndvcmtQaG9uZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoaHBuOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaHBuLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICB0aGlzLmVkaXRWaWN0aW0ud29ya1Bob25lPSBuZXdWYWx1ZTtcbiAgICB9KTtcblxuXG4gICAgdGhpcy5ndWFyZGlhbkhvbWVQaG9uZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoaHBuOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaHBuLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICB0aGlzLmVkaXRWaWN0aW0uZ3VhcmRpYW5Ib21lUGhvbmU9IG5ld1ZhbHVlO1xuICAgIH0pO1xuXG5cbiAgICB0aGlzLmd1YXJkaWFuQ2VsbFBob25lQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChocG46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBocG4ucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgIHRoaXMuZWRpdFZpY3RpbS5ndWFyZGlhbkNlbGxQaG9uZT0gbmV3VmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmd1YXJkaWFuV29ya1Bob25lQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChocG46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBocG4ucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgIHRoaXMuZWRpdFZpY3RpbS5ndWFyZGlhbldvcmtQaG9uZT0gbmV3VmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkdm9jYXRlSG9tZVBob25lQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChocG46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBocG4ucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgIHRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZUhvbWVQaG9uZT0gbmV3VmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkdm9jYXRlQ2VsbFBob25lQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChocG46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBocG4ucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgIHRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZUNlbGxQaG9uZT0gbmV3VmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkdm9jYXRlV29ya1Bob25lQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChocG46IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBocG4ucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgIHRoaXMuZWRpdFZpY3RpbS5hZHZvY2F0ZVdvcmtQaG9uZT0gbmV3VmFsdWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVtZXJnZW5jeUNvbnRhY3RQaG9uZUNvbnRyb2wgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGhwbjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGhwbi5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgICAgdGhpcy5lZGl0VmljdGltLmVtZXJnZW5jeUNvbnRhY3RQaG9uZT0gbmV3VmFsdWU7XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnc2hvdyBvZmZlbmRlcklkJyk7XG4gICAgY29uc29sZS5sb2codGhpcy5vZmZlbmRlcklkKTtcbiAgICBjb25zb2xlLmxvZygnc2hvdyBzdGFmZklkJyk7XG4gICAgY29uc29sZS5sb2codGhpcy5zdGFmZklkKTtcbiAgICBjb25zb2xlLmxvZygnc2hvdyBpc0ludGFrZScpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuaXNJbnRha2UpO1xuXG4gICAgICAgLy9yZXF1aXJlZCBmaWVsZFxuICAgIGNvbnN0IHJlcXVpcmVkSW1wbGVtZW50YXRpb24gPSB7Z2V0OmZ1bmN0aW9uKCk6Ym9vbGVhbntpZih0aGlzLl9yZXF1aXJlZCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkO31cbiAgICBpZih0aGlzLm5nQ29udHJvbCYmdGhpcy5uZ0NvbnRyb2wuY29udHJvbCYmdGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3JcbiAgICAgICl7Y29uc3QgZW1wdHlWYWx1ZUNvbnRyb2w9T2JqZWN0LmFzc2lnbih7fSxcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbCk7KGVtcHR5VmFsdWVDb250cm9sIGFzIGFueSkudmFsdWU9bnVsbDtcbiAgICAgICAgcmV0dXJuKCdyZXF1aXJlZCdpbih0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcihlbXB0eVZhbHVlQ29udHJvbCl8fHt9KSk7fVxuICAgICAgICByZXR1cm4gZmFsc2U7fSxzZXQ6ZnVuY3Rpb24odmFsdWU6Ym9vbGVhbil7dGhpcy5fcmVxdWlyZWQ9Y29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTt9LH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRJbnB1dC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRTZWxlY3QucHJvdG90eXBlLCdyZXF1aXJlZCcscmVxdWlyZWRJbXBsZW1lbnRhdGlvbiwpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWF0UmFkaW9Hcm91cC5wcm90b3R5cGUsJ3JlcXVpcmVkJyxyZXF1aXJlZEltcGxlbWVudGF0aW9uLCk7XG4gICAgLy9yZXF1aXJlZCBmaWVsZCBlbmRcblxuICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwhPW51bGwpIHtcbiAgICAgICAvLyBlZGl0IHJlY29yZFxuICAgICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XG4gICAgICB0aGlzLnNob3dEZWxldGU9IHRydWU7XG4gICAgICB0aGlzLnZpY3RpbUlkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XG4gICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IHRoaXMudmljdGltRGV0YWlsLm1pbm9yRmxhZztcblxuICAgICAgaWYgKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUFkdm9jYXRlRmxhZz09J1lTJyl7XG4gICAgICAgICAgICB0aGlzLmFkdm9jYXRlVGFiRmxhZyA9IHRydWU7XG4gICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vdGhlcldlYXBvbkZsYWcgPT0gdHJ1ZSl7XG4gICAgICAgIGNvbnN0IG90aGVyV2VhcG9uQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJyk7XG4gICAgICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vdGhlckRydWdGbGFnID09IHRydWUpe1xuICAgICAgICBjb25zdCBvdGhlckRydWdDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJyk7XG4gICAgICAgIG90aGVyRHJ1Z0NvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jcG9FeHBpcmF0aW9uRGl2RmxhZyAgPXRoaXMudmljdGltRGV0YWlsLmNwb0V4cGlyYXRpb25GbGFnO1xuICAgICAgdGhpcy5jb21tb25DaGlsZHJlbkRpdkZsYWcgPSB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbkZsYWc7XG4gICAgICB0aGlzLnN1cHBvcnRJblBsYWNlRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLnN1cHBvcnRJblBsYWNlRmxhZztcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnPSAgdGhpcy52aWN0aW1EZXRhaWwud2VhcG9uSW52b2x2ZWRGbGFnO1xuICAgICAgdGhpcy5kcnVnVXNlRGl2RmxhZz0gIHRoaXMudmljdGltRGV0YWlsLmRydWdVc2VGbGFnO1xuICAgICAgdGhpcy5hZGRyZXNzSWQgPSB0aGlzLnZpY3RpbURldGFpbC5hZGRyZXNzSWQ7XG4gICAgICB0aGlzLmd1YXJkaWFuQWRkcmVzc0lkID0gIHRoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuQWRkcmVzc0lkO1xuICAgICAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA9ICB0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUFkZHJlc3NJZDtcbiAgICAgIHRoaXMuX2dldFZpY3RpbSgpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vYWRkIG5ldyByZWNvcmRcbiAgICAgIHRoaXMudmljdGltRm9ybS5wYXRjaFZhbHVlKHtndWFyZGlhbk5vUGhvbmVGbGFnOiB0cnVlfSk7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0ucGF0Y2hWYWx1ZSh7YWR2b2NhdGVOb1Bob25lRmxhZzogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRGbGFnT3B0aW9uWWVzTm9Vbmtub3ducygpLnN1YnNjcmliZShcbiAgICAgIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmxhZ09wdGlvbiA9IGl0ZW1zO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldEdlbmRlcnMoKS5zdWJzY3JpYmUoXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmdlbmRlcnMgPSBpdGVtcztcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRQcmVmaXhlcygpLnN1YnNjcmliZShcbiAgICAgIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJlZml4ZXMgPSBpdGVtcztcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRTdWZmaXhlcygpLnN1YnNjcmliZShcbiAgICAgIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3VmZml4ZXMgPSBpdGVtcztcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRSZWxhdGlvbnNoaXBUeXBlcygpLnN1YnNjcmliZShcbiAgICAgIChpdGVtczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmVsYXRpb25zaGlwVHlwZXMgPSBpdGVtcy5maWx0ZXIoICh5KSA9PiAoeS5yZWxhdGlvbnNoaXBDYXRlZ29yeUlkID09PSAnU1QnIHx8IHkucmVsYXRpb25zaGlwQ2F0ZWdvcnlJZCA9PT0gJ0ZNJyApKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMudmljdGltU2VydmljZS5nZXRTdXBwb3J0VHlwZXMoKS5zdWJzY3JpYmUoXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnZpY3RpbVN1cHBvcnRUeXBlcyA9IGl0ZW1zO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldFdlYXBvblR5cGVzKCkuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy53ZWFwb25UeXBlcyA9IGl0ZW1zO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy52aWN0aW1TZXJ2aWNlLmdldERydWdzVHlwZXMoKS5zdWJzY3JpYmUoXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZHJ1ZyBsb29rdXAgaXRlbXMnKTtcbiAgICAgICAgY29uc29sZS5sb2coaXRlbXMpO1xuICAgICAgICB0aGlzLmRydWdzID0gaXRlbXM7XG4gICAgICAgIHRoaXMuZHJ1Z3MucHVzaCh7ZHJ1Z1R5cGVJZDogJ09USEVSJywgbmFtZTogJ090aGVyJ30pO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmRydWdzKTtcbiAgICAgIH1cbiAgICApO1xuICAgIC8vIHRoaXMudmljdGltU2VydmljZS5nZXREb2NrZXRMaXN0KHRoaXMub2ZmZW5kZXJJZCkuc3Vic2NyaWJlKFxuICAgIC8vICAgKGl0ZW1zOiBhbnkpID0+IHtcbiAgICAvLyAgICAgdGhpcy5kb2NrZXRsaXN0ID0gaXRlbXM7XG4gICAgLy8gICB9XG4gICAgLy8gKTtcblxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLnZhbHVlQ2hhbmdlc1xuICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Xb3JrUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuSG9tZVBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkNlbGxQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ3ZpY3RpbUFkdm9jYXRlRmxhZycpLnZhbHVlQ2hhbmdlc1xuICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVXb3JrUGhvbmUnKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlSG9tZVBob25lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUNlbGxQaG9uZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9KTtcblxuICB9XG5cbiAgYmFjaygpe1xuICAgIC8vdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1MaXN0J10pO1xuICB9XG5cbiAgZGVsZXRlVmljdGltKCkge1xuICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgVmljdGltPycsICdZZXMnLCAnTm8nKVxuICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLmRlbGV0ZVZpY3RpbXModGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsIHRoaXMuc3RhZmZJZClcbiAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRGVsZXRlIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLCB9KTtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICk7XG4gICAgICAgICAgIFxuICAgICAgICAgICAvLyB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcbiAgICAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW0nXSk7XG4gICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgfSwxNTAwKTtcbiAgICAgICAgICBcblxuICAgICAgICB9XG4gICAgIH0pO1xuICB9XG5cbiAgcmFkaW9NaW5vckNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLmd1YXJkaWFuVGFiRmxhZyA9IGZhbHNlO1xuICAgIH1cblxuICB9XG5cbiAgcmFkaW9BZHZvY2F0ZUNoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcblxuICAgIGNvbnN0IGFkdm9jYXRlTGFzdE5hbWVDb250cm9sID0gdGhpcy52aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpO1xuICAgIGNvbnN0IGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlRmlyc3ROYW1lJyk7XG5cbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSBcIllTXCIpIHtcbiAgICAgIHRoaXMuYWR2b2NhdGVUYWJGbGFnID0gdHJ1ZTtcbiAgICAgIGFkdm9jYXRlTGFzdE5hbWVDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICBhZHZvY2F0ZUZpcnN0TmFtZUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMuYWR2b2NhdGVUYWJGbGFnID0gZmFsc2U7XG4gICAgICBhZHZvY2F0ZUxhc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgIGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICB9XG4gICAgYWR2b2NhdGVMYXN0TmFtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIGFkdm9jYXRlRmlyc3ROYW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgfVxuXG4gIHJhZGlvQ2ljQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gdHJ1ZTtcbiAgICAgIC8vIHJlcXVyaWUgZmllbGRcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycygnY29tbW9uQ2hpbGRyZW4nKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMuY29tbW9uQ2hpbGRyZW5EaXZGbGFnID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsaWRhdG9ycyh0eXBlKSB7XG4gICAgaWYodHlwZSA9PSAnY29tbW9uQ2hpbGRyZW4nKXtcbiAgICB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdjb21tb25DaGlsZHJlbk51bWJlcicpLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2NvbW1vbkNoaWxkcmVuTnVtYmVyJykuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgIH1cbiAgIGVsc2UgaWYgKHR5cGUgPT0gJ2Nwbycpe1xuICAgIHRoaXMudmljdGltRm9ybS5nZXQoJ2Nwb0V4cGlyYXRpb25EYXRlJykuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy52aWN0aW1Gb3JtLmdldCgnY3BvRXhwaXJhdGlvbkRhdGUnKS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuXG4gICB9XG4gIH1cbiAgcmFkaW9TdXBwb3J0Q2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMuc3VwcG9ydEluUGxhY2VEaXZGbGFnID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJhZGlvV2VhcG9uQ2hhbmdlKCRldmVudDogTWF0UmFkaW9DaGFuZ2Upe1xuICAgIGlmICgkZXZlbnQudmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMud2VhcG9uSW52b2x2ZWREaXZGbGFnID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJhZGlvRHJ1Z0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRydWdVc2VEaXZGbGFnID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMuZHJ1Z1VzZURpdkZsYWcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByYWRpb0Nwb0NoYW5nZSgkZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKXtcbiAgICBpZiAoJGV2ZW50LnZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycygnY3BvJyk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLmNwb0V4cGlyYXRpb25EaXZGbGFnID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRE9CQ2hhbmdlKCRldmVudCApe1xuICAgdmFyIGFnZURpZk1zID0gRGF0ZS5ub3coKSAtICAkZXZlbnQudmFsdWU7XG4gICB2YXIgYWdlRGF0ZSA9IG5ldyBEYXRlKGFnZURpZk1zKTtcbiAgICBpZiggTWF0aC5hYnMoYWdlRGF0ZS5nZXRVVENGdWxsWWVhcigpIC0gMTk3MCkgPD0gMTgpe1xuXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVmljdGltIGlzIGEgTWlub3IuIFRoaXMgaW5mb3JtYXRpb24gaXMgYSBzZW5zaXRpdmUgYW5kIHNob3VsZCBub3QgYmUgZGlzY2xvc2VkIHRvIGFueSB1bmF1dGhvcml6ZWQgcGFydGllcy4gQ29udGFjdCB0aGUgbGVnYWwgZ3VhcmRpYW4uJywgJycsIHtcbiAgICAgICAgZHVyYXRpb246IDYwMDAsfSk7XG4gICAgICAgIGNvbnN0IG1pbm9yQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpO1xuICAgICAgICBtaW5vckNvbnRyb2wuc2V0VmFsdWUodHJ1ZSk7XG4gICAgICAgIHRoaXMuZ3VhcmRpYW5UYWJGbGFnID0gdHJ1ZTtcbiAgICB9XG5cbiAgfVxuICBjaGVja090aGVyV2VhcG9uKFdlYXBvblVzZSl7XG5cbiAgICBjb25zdCBvdGhlcldlYXBvbkNvbnRyb2wgPSB0aGlzLnZpY3RpbUZvcm0uZ2V0KCdvdGhlcldlYXBvbicpO1xuICAgICBpZiAoV2VhcG9uVXNlLmluY2x1ZGVzKFwiT1RIRVJcIikpe1xuICAgICB0aGlzLm90aGVyV2VhcG9uRmxhZyA9IHRydWU7XG4gICAgIG90aGVyV2VhcG9uQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXG5cbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMub3RoZXJXZWFwb25GbGFnID0gZmFsc2U7XG4gICAgICBvdGhlcldlYXBvbkNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgfVxuICAgb3RoZXJXZWFwb25Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIGNoZWNrT3RoZXJEcnVnKERydWdVc2Upe1xuXG4gICAgY29uc3Qgb3RoZXJEcnVnQ29udHJvbCA9IHRoaXMudmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpO1xuICAgICBpZiAoRHJ1Z1VzZS5pbmNsdWRlcyhcIk9USEVSXCIpKXtcbiAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gdHJ1ZTtcbiAgICAgb3RoZXJEcnVnQ29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXG5cblxuICAgIH1lbHNle1xuICAgICAgdGhpcy5vdGhlckRydWdGbGFnID0gZmFsc2U7XG4gICAgICBvdGhlckRydWdDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xuXG5cbiAgICB9XG4gICBvdGhlckRydWdDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBcInNhdmUgdmljdGltXCJcbiAgc2F2ZVZpY3RpbSgpIHtcblxuICAvL2d1YXJkaWFuIHBob25lIGxvZ2ljXG4gIGlmICghdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcpXG4gICB7XG4gICAgIGlmICh0aGlzLmd1YXJkaWFuSG9tZVBob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICAgaWYgKHRoaXMuZ3VhcmRpYW5Ib21lUGhvbmVDb250cm9sLnZhbHVlICE9PSBudWxsKXtcbiAgICAgICAgIGlmICh0aGlzLmd1YXJkaWFuSG9tZVBob25lQ29udHJvbC52YWx1ZSAhPT0gXCJcIil7XG4gICAgICAgICAgICAgdGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnID0gIHRydWU7XG4gICAgICAgfVxuICAgICB9XG4gICAgIH1cblxuXG5cbiAgICAgaWYgKHRoaXMuZ3VhcmRpYW5Xb3JrUGhvbmVDb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQpe1xuICAgICAgaWYgKHRoaXMuZ3VhcmRpYW5Xb3JrUGhvbmVDb250cm9sLnZhbHVlICE9PSBudWxsKXtcbiAgICAgICAgaWYgKHRoaXMuZ3VhcmRpYW5Xb3JrUGhvbmVDb250cm9sLnZhbHVlICE9PSBcIlwiKXtcbiAgICAgICAgICAgIHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmd1YXJkaWFuQ2VsbFBob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICBpZiAodGhpcy5ndWFyZGlhbkNlbGxQaG9uZUNvbnRyb2wudmFsdWUhPT0gbnVsbCl7XG4gICAgICAgIGlmICh0aGlzLmd1YXJkaWFuQ2VsbFBob25lQ29udHJvbC52YWx1ZSAhPT0gXCJcIil7XG4gICAgICAgICAgICB0aGlzLmd1YXJkaWFuUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgfVxuXG4gIH1cblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZycpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnKTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnJyk7XG4gICAgY29uc29sZS5sb2codGhpcy5ndWFyZGlhblBob25lRXhpc3RGbGFnKTtcblxuXG4gICAgaWYgKHRoaXMuZ3VhcmRpYW5QaG9uZUV4aXN0RmxhZyA9PT0gZmFsc2UgJiYgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWcgPT09IGZhbHNlKVxuICAgIHtcbiAgICAgICAgICB0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxuICAgICAgICAgIC53YXJuaW5nKCcnLCAnUGxlYXNlIGNoZWNrIHRoZSBndWFyZGlhbiBwaG9uZSBmaWVsZC4gWW91IGhhdmUgdG8gZmlsbCBvbmUgb2YgdGhlIHRocmVlIHBob25lIGZpbGVkcy4nLCAnT2snKVxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHt0aGlzLnJlc3VsdCA9ICByZXM7XG5cbiAgICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3RoaXMucGhvbmVWYWxpZGF0aW9uRmxhZycpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMucGhvbmVWYWxpZGF0aW9uRmxhZyk7XG5cbiAgICAvL2Fkdm9jYXRlIHBob25lIGxvZ2ljXG4gICAgaWYgKCF0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZylcbiAgICB7XG4gICAgICBpZiAodGhpcy5hZHZvY2F0ZUhvbWVQaG9uZUNvbnRyb2wudmFsdWUpe1xuICAgICAgICBpZiAodGhpcy5hZHZvY2F0ZUhvbWVQaG9uZUNvbnRyb2wudmFsdWUgIT09IG51bGwpe1xuICAgICAgICAgIGlmICh0aGlzLmFkdm9jYXRlSG9tZVBob25lQ29udHJvbC52YWx1ZSAhPT0gXCJcIil7XG4gICAgICAgICAgICAgIHRoaXMuYWR2b2NhdGVQaG9uZUV4aXN0RmxhZyA9ICB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB9XG5cblxuXG4gICAgICBpZiAodGhpcy5hZHZvY2F0ZVdvcmtQaG9uZUNvbnRyb2wudmFsdWUgIT09IHVuZGVmaW5lZCl7XG4gICAgICBpZiAodGhpcy5hZHZvY2F0ZVdvcmtQaG9uZUNvbnRyb2wudmFsdWUgIT09IG51bGwpe1xuICAgICAgICBpZiAodGhpcy5hZHZvY2F0ZVdvcmtQaG9uZUNvbnRyb2wudmFsdWUgIT09IFwiXCIpe1xuICAgICAgICAgICAgdGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID0gIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIH1cblxuXG4gICAgaWYgKHRoaXMuYWR2b2NhdGVDZWxsUGhvbmVDb250cm9sLnZhbHVlKXtcbiAgICAgIGlmICh0aGlzLmFkdm9jYXRlQ2VsbFBob25lQ29udHJvbC52YWx1ZSAhPT0gbnVsbCl7XG4gICAgICAgIGlmICh0aGlzLmFkdm9jYXRlQ2VsbFBob25lQ29udHJvbC52YWx1ZSAhPT0gXCJcIil7XG4gICAgICAgICAgICB0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcgPSAgdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgfVxuXG4gICAgfVxuXG4gY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnJyk7XG4gY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWcpO1xuIGNvbnNvbGUubG9nKCd0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcnKTtcbiBjb25zb2xlLmxvZyh0aGlzLmFkdm9jYXRlUGhvbmVFeGlzdEZsYWcpO1xuXG4gaWYodGhpcy5hZHZvY2F0ZVBob25lRXhpc3RGbGFnID09PSBmYWxzZSAmJiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZyA9PT0gZmFsc2UpXG4ge1xuXG4gICAgICAgdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID0gdHJ1ZTtcbiAgICAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcbiAgICAgICAud2FybmluZygnJywgJ1BsZWFzZSBjaGVjayB0aGUgYWR2b2NhdGUgcGhvbmUgZmllbGQuIFlvdSBoYXZlIHRvIGZpbGwgb25lIG9mIHRoZSB0aHJlZSBwaG9uZSBmaWxlZHMuJywgJ09rJylcbiAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xuXG4gICAgICAgfSk7XG4gfVxuXG5cbiAgICBpZiAodGhpcy5ob21lUGhvbmVDb250cm9sLnZhbHVlKXtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUgPSB0aGlzLmhvbWVQaG9uZUNvbnRyb2wudmFsdWUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmhvbWVQaG9uZSA9ICBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNlbGxQaG9uZUNvbnRyb2wudmFsdWUpe1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZSA9IHRoaXMuY2VsbFBob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJykgO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMud29ya1Bob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lID0gIHRoaXMud29ya1Bob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmd1YXJkaWFuSG9tZVBob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgPSB0aGlzLmd1YXJkaWFuSG9tZVBob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ib21lUGhvbmUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmd1YXJkaWFuQ2VsbFBob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgPSB0aGlzLmd1YXJkaWFuQ2VsbFBob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5DZWxsUGhvbmUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmd1YXJkaWFuV29ya1Bob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUgPSB0aGlzLmd1YXJkaWFuV29ya1Bob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJyk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Xb3JrUGhvbmUgPSBudWxsO1xuICAgIH1cblxuXG4gICAgaWYgKHRoaXMuYWR2b2NhdGVIb21lUGhvbmVDb250cm9sLnZhbHVlKXtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZSA9ICB0aGlzLmFkdm9jYXRlSG9tZVBob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJylcbiAgICAgfVxuICAgICBlbHNle1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlSG9tZVBob25lID0gbnVsbDtcbiAgICAgfVxuXG4gICAgIGlmICh0aGlzLmFkdm9jYXRlQ2VsbFBob25lQ29udHJvbC52YWx1ZSl7XG4gICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUgPSAgdGhpcy5hZHZvY2F0ZUNlbGxQaG9uZUNvbnRyb2wudmFsdWUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXG4gICAgIH1cbiAgICAgZWxzZXtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUNlbGxQaG9uZSA9IG51bGw7XG4gICAgIH1cblxuICAgICAgaWYgKHRoaXMuYWR2b2NhdGVXb3JrUGhvbmVDb250cm9sLnZhbHVlKXtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVdvcmtQaG9uZSA9ICB0aGlzLmFkdm9jYXRlV29ya1Bob25lQ29udHJvbC52YWx1ZS5yZXBsYWNlKC9bKClcXHMtXS9nLCAnJylcbiAgICAgfVxuICAgICBlbHNle1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lID0gbnVsbDtcbiAgICAgfVxuXG4gICAgIFxuICAgICBpZiAodGhpcy5lbWVyZ2VuY3lDb250YWN0UGhvbmVDb250cm9sLnZhbHVlKXtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmUgPSB0aGlzLmVtZXJnZW5jeUNvbnRhY3RQaG9uZUNvbnRyb2wudmFsdWUucmVwbGFjZSgvWygpXFxzLV0vZywgJycpXG4gICAgIH1lbHNle1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9ICBudWxsO1xuICAgICB9XG4vL2RhdGEgcHJvY2Vzc1xuXG4gIGNvbnNvbGUubG9nKCd0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcgMScpO1xuICBjb25zb2xlLmxvZyh0aGlzLnBob25lVmFsaWRhdGlvbkZsYWcpO1xuIGlmICggdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID09PSBmYWxzZSl7XG4gICAgaWYgKHRoaXMudmljdGltRGV0YWlsID09PSBudWxsKXtcbiAgICAgIC8vaW5zZXJ0IG5ldyB2aWN0aW1cblxuICAgICB2YXIgbXlWaWN0aW1TdXBwb3J0cyA9IFtdO1xuICAgICBpZiAodGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbVN1cHBvcnRzKXtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1TdXBwb3J0cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmljdGltU3VwcG9ydD0gPFZpY3RpbVN1cHBvcnQ+e307XG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbUlkPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbVN1cHBvcnRUeXBlSWQ9IGVsZW1lbnQ7XG4gICAgICAgICAgICB2aWN0aW1TdXBwb3J0Lm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcbiAgICAgICAgICAgIG15VmljdGltU3VwcG9ydHMucHVzaCh2aWN0aW1TdXBwb3J0KTtcbiAgICAgICAgIH0pO1xuICAgICB9XG5cbiAgICB2YXIgbXlWaWN0aW1EcnVnVXNlcyA9IFtdO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMgZHVyaW5nIHNhdmUnKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpO1xuICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltRHJ1Z1VzZXMpe1xuICAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgIGNvbnN0IHZpY3RpbURydWdVc2UgPSA8VmljdGltRHJ1Z1VzZT57fTtcbiAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gZWxlbWVudDtcblxuICAgICBpZiAoZWxlbWVudCA9PT1cIk9USEVSXCIgfHwgZWxlbWVudCA9PT0gXCJcIiB8fCBlbGVtZW50ID09PSBudWxsKXtcbiAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IG51bGw7XG4gICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XG4gICAgIH1cbiAgICAgZWxzZXtcbiAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XG4gICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IG51bGw7XG4gICAgIH1cblxuICAgICB2aWN0aW1EcnVnVXNlLm1vZGlmaWVkQnkgPSB0aGlzLnN0YWZmSWQ7XG4gICAgIHZpY3RpbURydWdVc2UudmljdGltSWQgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltSWQ7XG4gICAgIG15VmljdGltRHJ1Z1VzZXMucHVzaCh2aWN0aW1EcnVnVXNlKTtcbiAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBkdXJpbmcgc2F2ZSAxJyk7XG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbURydWdVc2VzKTtcblxuICB2YXIgbXlWaWN0aW1XZWFwb25Vc2VzID0gW107XG5cbiAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1XZWFwb25Vc2VzKXtcbiAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZSA9IDxWaWN0aW1XZWFwb25Vc2U+e307XG4gICAgICAgdmljdGltV2VhcG9uVXNlLnZpY3RpbUlkPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUlkO1xuICAgICAgIHZpY3RpbVdlYXBvblVzZS53ZWFwb25UeXBlSWQ9IGVsZW1lbnQ7XG5cbiAgICAgICBpZiAoZWxlbWVudCA9PVwiT1RIRVJcIil7XG4gICAgICAgIHZpY3RpbVdlYXBvblVzZS5vdGhlcldlYXBvbiA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbjtcbiAgICAgICB9XG4gICAgICAgZWxzZXtcbiAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uID0gbnVsbDtcbiAgICAgICB9XG4gICAgICAgdmljdGltV2VhcG9uVXNlLm1vZGlmaWVkQnk9IHRoaXMuc3RhZmZJZDtcbiAgICAgICBteVZpY3RpbVdlYXBvblVzZXMucHVzaCh2aWN0aW1XZWFwb25Vc2UpO1xuICAgfSk7XG4gfVxuXG4gY29uc3QgbmV3VmljdGltID0ge1xuICAgdmljdGltSWQ6IDAsXG4gICBvZmZlbmRlcklkOiB0aGlzLm9mZmVuZGVySWQsXG4gICB2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZDpcbiAgICAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkLFxuICAgbGFzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5sYXN0TmFtZSxcbiAgIGZpcnN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmZpcnN0TmFtZSxcbiAgIG1pZGRsZU5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5taWRkbGVOYW1lXG4gICAgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWVcbiAgICAgOiBudWxsLFxuICAgcHJlZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZFxuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZFxuICAgICA6IG51bGwsXG4gICBzdWZmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkXG4gICAgID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnN1ZmZpeElkXG4gICAgIDogbnVsbCxcbiAgIGJpcnRoRGF0ZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmJpcnRoRGF0ZVxuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5iaXJ0aERhdGVcbiAgICAgOiBudWxsLFxuICAgZ2VuZGVyQ29kZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmdlbmRlckNvZGVcbiAgICAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ2VuZGVyQ29kZVxuICAgICA6IG51bGwsXG4gICB1bmRlclN1cGVydmlzaW9uRmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnVuZGVyU3VwZXJ2aXNpb25GbGFnLFxuICAgbWlub3JGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUubWlub3JGbGFnLFxuICAgdmljdGltQWR2b2NhdGVGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnLFxuXG4gICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmUsXG4gICB3b3JrUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS53b3JrUGhvbmUsXG4gICBjZWxsUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5jZWxsUGhvbmUsXG4gICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsIDogbnVsbCxcbiAgIGFkZHJlc3NJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkZHJlc3NJZFxuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZGRyZXNzSWRcbiAgICAgOiAxLFxuICAgZW1lcmdlbmN5Q29udGFjdDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtZXJnZW5jeUNvbnRhY3RcbiAgICAgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdFxuICAgICA6IG51bGwsXG4gICBlbWVyZ2VuY3lDb250YWN0UGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmUsXG4gICBjb21tb25DaGlsZHJlbkZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5jb21tb25DaGlsZHJlbkZsYWcsXG4gICBjb21tb25DaGlsZHJlbk51bWJlcjogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNvbW1vbkNoaWxkcmVuTnVtYmVyLFxuICAgY3BvRXhwaXJhdGlvbkZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRmxhZyxcbiAgIGNwb0V4cGlyYXRpb25EYXRlOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkRhdGVcbiAgICAgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLnZpY3RpbUZvcm0udmFsdWUuY3BvRXhwaXJhdGlvbkRhdGUsIFwic2hvcnRcIilcbiAgICAgOiBudWxsLFxuICAgc3VwcG9ydEluUGxhY2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuc3VwcG9ydEluUGxhY2VGbGFnLFxuICAgd2VhcG9uSW52b2x2ZWRGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUud2VhcG9uSW52b2x2ZWRGbGFnLFxuICAgZHJ1Z1VzZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5kcnVnVXNlRmxhZyxcbiAgIGFsY29ob2xVc2VGbGFnOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWxjb2hvbFVzZUZsYWcsXG4gICBhY2Nlc3NSaXNrOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWNjZXNzUmlzayxcbiAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZCxcbiAgIHZWaWN0aW1BZHZvY2F0ZTogbnVsbCxcbiAgIHZWaWN0aW1HdWFyZGlhbjogbnVsbCxcbiAgIHZpY3RpbURydWdVc2VzOiBteVZpY3RpbURydWdVc2VzLFxuICAgdmljdGltU3VwcG9ydHM6IG15VmljdGltU3VwcG9ydHMsXG4gICB2aWN0aW1XZWFwb25Vc2VzOiBteVZpY3RpbVdlYXBvblVzZXMsXG5cbiAgIGFkdm9jYXRlRmlyc3ROYW1lOiBudWxsLFxuICAgYWR2b2NhdGVMYXN0TmFtZTogbnVsbCxcbiAgIGFkdm9jYXRlRW1haWw6IG51bGwsXG4gICBhZHZvY2F0ZVByZWZpeElkOiBudWxsLFxuICAgYWR2b2NhdGVTdWZmaXhJZDogbnVsbCxcbiAgIGFkdm9jYXRlTm9QaG9uZUZsYWc6IG51bGwsXG4gICBhZHZvY2F0ZUhvbWVQaG9uZTogbnVsbCxcbiAgIGFkdm9jYXRlV29ya1Bob25lOiBudWxsLFxuICAgYWR2b2NhdGVDZWxsUGhvbmU6IG51bGwsXG4gICBhZHZvY2F0ZUFkZHJlc3NJZDogbnVsbCxcbiAgIGd1YXJkaWFuRmlyc3ROYW1lOiBudWxsLFxuICAgZ3VhcmRpYW5MYXN0TmFtZTogbnVsbCxcbiAgIGd1YXJkaWFuRW1haWw6IG51bGwsXG4gICBndWFyZGlhblByZWZpeElkOiBudWxsLFxuICAgZ3VhcmRpYW5TdWZmaXhJZDogbnVsbCxcbiAgIGd1YXJkaWFuTm9QaG9uZUZsYWc6IG51bGwsXG4gICBndWFyZGlhbkhvbWVQaG9uZTogbnVsbCxcbiAgIGd1YXJkaWFuV29ya1Bob25lOiBudWxsLFxuICAgZ3VhcmRpYW5DZWxsUGhvbmU6IG51bGwsXG4gICBndWFyZGlhbkFkZHJlc3NJZDogbnVsbCxcbiAgIGd1YXJkaWFuQmlydGhEYXRlOiBudWxsLFxuICAgcmVsYXRpb25zaGlwOiBudWxsLFxuICAgLy9yZWxhdGlvbnNoaXA6IHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZD8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkIDogbnVsbCxcbiAgIGFsbG93Q3Nvc2FDb250YWN0RmxhZzogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFsbG93Q3Nvc2FDb250YWN0RmxhZ1xuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGxvd0Nzb3NhQ29udGFjdEZsYWdcbiAgICAgOiBudWxsLFxuICAgbGl2ZVdpdGhPZmZlbmRlckZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5saXZlV2l0aE9mZmVuZGVyRmxhZ1xuICAgICA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5saXZlV2l0aE9mZmVuZGVyRmxhZ1xuICAgICA6IG51bGwsXG4gfTtcblxuICAgICBpZiAodGhpcy5hZGRyZXNzSWQgPT0gMCl7XG4gICAgICBuZXdWaWN0aW0uYWRkcmVzc0lkID0gbnVsbDtcbiAgICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZpY3RpbS5hZGRyZXNzSWQgPSAgdGhpcy5hZGRyZXNzSWQ7XG4gICAgIH1cblxuICAgICBuZXdWaWN0aW0uYWR2b2NhdGVBZGRyZXNzSWQgPSAgdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZDtcbiAgICAgbmV3VmljdGltLmd1YXJkaWFuQWRkcmVzc0lkID0gIHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ7XG5cblxuICAgICAgY29uc29sZS5sb2coJ25ld1ZpY3RpbScpO1xuICAgICAgY29uc29sZS5sb2cobmV3VmljdGltKTtcbiAgICAgIHRoaXMudmljdGltU2VydmljZS5wb3N0VmljdGltcyhuZXdWaWN0aW0pLnN1YnNjcmliZShcbiAgICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcblxuICAgICAgICAgY29uc3QgaWQgPSBpdGVtcyA/IGl0ZW1zLnZpY3RpbUlkIDogJyc7XG5cbiAgICAgICAgIGlmICh0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltQWR2b2NhdGVGbGFnID09IFwiWVNcIil7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnYWRkIGFkdm9jYXRlJyk7XG4gICAgICAgICAgY29uc3QgdmljdGltQWR2b2NhdGU6IFZpY3RpbUFkdm9jYXRlID0ge1xuICAgICAgICAgIHZpY3RpbUFkdm9jYXRlSWQ6IGlkLFxuICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVMYXN0TmFtZSxcbiAgICAgICAgICBmaXJzdE5hbWU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUZpcnN0TmFtZSxcbiAgICAgICAgICBwcmVmaXhJZDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQsXG4gICAgICAgICAgc3VmZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZVN1ZmZpeElkLFxuICAgICAgICAgIGFkZHJlc3NJZDogdGhpcy5hZHZvY2F0ZUFkZHJlc3NJZCA/IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQ6IG51bGwsXG4gICAgICAgICAgbm9QaG9uZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZU5vUGhvbmVGbGFnID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlTm9QaG9uZUZsYWc6IG51bGwsXG4gICAgICAgICAgaG9tZVBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVIb21lUGhvbmUsXG4gICAgICAgICAgd29ya1Bob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVXb3JrUGhvbmUsXG4gICAgICAgICAgY2VsbFBob25lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmUsXG4gICAgICAgICAgZW1haWw6IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUVtYWlsLFxuICAgICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZFxuICAgICAgfTtcblxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUFkdm9jYXRlKGlkLCB2aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKCk7XG4gICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudmljdGltRm9ybS52YWx1ZS5taW5vckZsYWcgPT0gdHJ1ZSl7XG4gICAgICAgIGNvbnN0IHZpY3RpbUd1YXJkaWFuOiBWaWN0aW1HdWFyZGlhbiA9IHtcbiAgICAgICAgICB2aWN0aW1HdWFyZGlhbklkOiBpZCxcbiAgICAgICAgICBsYXN0TmFtZTogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTGFzdE5hbWUsXG4gICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5GaXJzdE5hbWUsXG4gICAgICAgICAgcHJlZml4SWQ6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblByZWZpeElkLFxuICAgICAgICAgIHN1ZmZpeElkOiB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5TdWZmaXhJZCxcbiAgICAgICAgICBiaXJ0aERhdGU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkJpcnRoRGF0ZSxcbiAgICAgICAgICBhZGRyZXNzSWQ6IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ/IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQ6IG51bGwsXG4gICAgICAgICAgbm9QaG9uZUZsYWc6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbk5vUGhvbmVGbGFnPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5Ob1Bob25lRmxhZzogbnVsbCxcbiAgICAgICAgICBob21lUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkhvbWVQaG9uZSxcbiAgICAgICAgICB3b3JrUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbldvcmtQaG9uZSxcbiAgICAgICAgICBjZWxsUGhvbmU6IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkNlbGxQaG9uZSxcbiAgICAgICAgICBlbWFpbDogdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuRW1haWwsXG4gICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkXG4gICAgICAgfTtcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1HdWFyZGlhbihpZCwgdmljdGltR3VhcmRpYW4pLnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQWRkIFZpY3RpbSBTdWNjZXNzZnVsbHkhJywgJycsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAvL2luc2VydCBuZXdcbiAgICAgICAgaWYgKHRoaXMuaXNJbnRha2U9PT10cnVlKXtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUhvbWUnXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1MaXN0J10pO1xuICAgICAgICB9XG4gICAgICAgIC8vdGhpcy5vblNhdmUuZW1pdCh0aGlzLnZpY3RpbURldGFpbCk7XG5cbiAgICAgIH1cbiAgICAgKTtcblxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vdXBkYXRlIHZpY3RpbVxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwudW5kZXJTdXBlcnZpc2lvbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUudW5kZXJTdXBlcnZpc2lvbkZsYWc7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQ7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5sYXN0TmFtZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5sYXN0TmFtZTtcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmZpcnN0TmFtZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5maXJzdE5hbWU7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5taWRkbGVOYW1lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pZGRsZU5hbWU7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5wcmVmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5wcmVmaXhJZCA6IG51bGw7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5zdWZmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5zdWZmaXhJZCA6IG51bGw7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5iaXJ0aERhdGUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYmlydGhEYXRlO1xuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuZ2VuZGVyQ29kZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5nZW5kZXJDb2RlO1xuICAgICAgdGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLm1pbm9yRmxhZztcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmhvbWVQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ob21lUGhvbmU7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC53b3JrUGhvbmUgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUud29ya1Bob25lO1xuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY2VsbFBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNlbGxQaG9uZTtcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtYWlsID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmVtYWlsO1xuICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLnZpY3RpbUFkdm9jYXRlRmxhZztcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtZXJnZW5jeUNvbnRhY3QgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZW1lcmdlbmN5Q29udGFjdDtcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmVtZXJnZW5jeUNvbnRhY3RQaG9uZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5lbWVyZ2VuY3lDb250YWN0UGhvbmU7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jb21tb25DaGlsZHJlbkZsYWcgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5GbGFnO1xuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuY29tbW9uQ2hpbGRyZW5OdW1iZXIgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuY29tbW9uQ2hpbGRyZW5OdW1iZXI7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5jcG9FeHBpcmF0aW9uRGF0ZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5jcG9FeHBpcmF0aW9uRGF0ZTtcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmNwb0V4cGlyYXRpb25GbGFnID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmNwb0V4cGlyYXRpb25GbGFnO1xuICAgICAgdGhpcy52aWN0aW1EZXRhaWwuc3VwcG9ydEluUGxhY2VGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5zdXBwb3J0SW5QbGFjZUZsYWc7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC53ZWFwb25JbnZvbHZlZEZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLndlYXBvbkludm9sdmVkRmxhZztcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmRydWdVc2VGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5kcnVnVXNlRmxhZztcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFsY29ob2xVc2VGbGFnID0gIHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGNvaG9sVXNlRmxhZztcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFjY2Vzc1Jpc2sgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFjY2Vzc1Jpc2s7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5hZGRyZXNzSWQgPSB0aGlzLmFkZHJlc3NJZDtcbiAgICAgIHRoaXMudmljdGltRGV0YWlsLmFsbG93Q3Nvc2FDb250YWN0RmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hbGxvd0Nzb3NhQ29udGFjdEZsYWc7XG4gICAgICB0aGlzLnZpY3RpbURldGFpbC5saXZlV2l0aE9mZmVuZGVyRmxhZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5saXZlV2l0aE9mZmVuZGVyRmxhZztcblxuICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltU3VwcG9ydHMgPSBbXTtcbiAgICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltU3VwcG9ydHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgdmljdGltU3VwcG9ydD0gPFZpY3RpbVN1cHBvcnQ+e307XG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQudmljdGltSWQ9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xuICAgICAgICAgICAgICB2aWN0aW1TdXBwb3J0LnZpY3RpbVN1cHBvcnRUeXBlSWQ9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgIHZpY3RpbVN1cHBvcnQubW9kaWZpZWRCeT0gdGhpcy5zdGFmZklkO1xuICAgICAgICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1TdXBwb3J0cy5wdXNoKHZpY3RpbVN1cHBvcnQpO1xuICAgICAgfSk7XG5cbiAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1EcnVnVXNlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCB2aWN0aW1EcnVnVXNlID0gPFZpY3RpbURydWdVc2U+e307XG4gICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XG4gICAgICAgY29uc29sZS5sb2coJ3RoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcyBiZWZvcmUnKVxuICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcylcblxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gXCJPVEhFUlwiIHx8IGVsZW1lbnQgPT09IFwiXCIgICl7XG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5kcnVnVHlwZUlkID0gbnVsbDtcbiAgICAgICAgICB2aWN0aW1EcnVnVXNlLm90aGVyRHJ1ZyA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlckRydWc7XG4gICAgICAgICB9XG4gICAgICAgICBlbHNle1xuICAgICAgICAgIHZpY3RpbURydWdVc2UuZHJ1Z1R5cGVJZCA9IGVsZW1lbnQ7XG4gICAgICAgICAgdmljdGltRHJ1Z1VzZS5vdGhlckRydWcgPSBudWxsO1xuICAgICAgICAgfVxuXG4gICAgICAgIHZpY3RpbURydWdVc2UubW9kaWZpZWRCeSA9IHRoaXMuc3RhZmZJZDtcbiAgICAgICAgdmljdGltRHJ1Z1VzZS52aWN0aW1JZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xuICAgICAgICB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1EcnVnVXNlcy5wdXNoKHZpY3RpbURydWdVc2UpO1xuXG4gICAgICB9KTtcbiAgICAgIHRoaXMudmljdGltRm9ybS52YWx1ZS52aWN0aW1EcnVnVXNlcy5maWx0ZXIod29yZCA9PiAoICEod29yZC5kcnVnVHlwZUlkID09PSBudWxsICAmJiB3b3JkLm90aGVyRHJ1ZyA9PT0gbnVsbCkgICAgKSk7XG5cbiAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltV2VhcG9uVXNlcyA9IFtdO1xuICAgICB0aGlzLnZpY3RpbUZvcm0udmFsdWUudmljdGltV2VhcG9uVXNlcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHZpY3RpbVdlYXBvblVzZSA9IDxWaWN0aW1XZWFwb25Vc2U+e307XG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLnZpY3RpbUlkPSB0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZDtcbiAgICAgICAgICB2aWN0aW1XZWFwb25Vc2Uud2VhcG9uVHlwZUlkPSBlbGVtZW50O1xuXG4gICAgICAgICBpZiAoZWxlbWVudCA9PVwiT1RIRVJcIil7XG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uPXRoaXMudmljdGltRm9ybS52YWx1ZS5vdGhlcldlYXBvbjtcbiAgICAgICAgIH1cbiAgICAgICAgIGVsc2V7XG4gICAgICAgICAgdmljdGltV2VhcG9uVXNlLm90aGVyV2VhcG9uID0gbnVsbDtcbiAgICAgICAgIH1cblxuICAgICAgICAgIHZpY3RpbVdlYXBvblVzZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XG4gICAgICAgICAgdGhpcy52aWN0aW1EZXRhaWwudmljdGltV2VhcG9uVXNlcy5wdXNoKHZpY3RpbVdlYXBvblVzZSk7XG5cbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1EZXRhaWwgYmVmb3JlIGVtaXQnKTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsKTtcblxuXG4gICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltcyh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbURldGFpbCkuc3Vic2NyaWJlKFxuICAgICAgICAoaXRlbXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVXBkYXRlIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xuICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgIC8vQWR2b2NhdGUgc2VjdGlvblxuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUudmljdGltQWR2b2NhdGVJZCA9IHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkO1xuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUubGFzdE5hbWU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUxhc3ROYW1lO1xuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuZmlyc3ROYW1lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVGaXJzdE5hbWU7XG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5wcmVmaXhJZD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlUHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVQcmVmaXhJZCA6IG51bGw7XG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5zdWZmaXhJZD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlU3VmZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVTdWZmaXhJZCA6IG51bGw7XG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5hZGRyZXNzSWQ9IHRoaXMuYWR2b2NhdGVBZGRyZXNzSWQgPyB0aGlzLmFkdm9jYXRlQWRkcmVzc0lkIDogbnVsbDtcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLm5vUGhvbmVGbGFnPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVOb1Bob25lRmxhZz8gdHJ1ZTogZmFsc2U7XG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5ob21lUGhvbmU9IHRoaXMudmljdGltRm9ybS52YWx1ZS5hZHZvY2F0ZUhvbWVQaG9uZTtcbiAgICAgICAgICB0aGlzLnZpY3RpbUFkdm9jYXRlLndvcmtQaG9uZT0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlV29ya1Bob25lO1xuICAgICAgICAgIHRoaXMudmljdGltQWR2b2NhdGUuY2VsbFBob25lPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVDZWxsUGhvbmU7XG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5lbWFpbD0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmFkdm9jYXRlRW1haWwgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuYWR2b2NhdGVFbWFpbCA6IG51bGw7XG4gICAgICAgICAgdGhpcy52aWN0aW1BZHZvY2F0ZS5tb2RpZmllZEJ5PSB0aGlzLnN0YWZmSWQ7XG5cbiAgICAgICBjb25zb2xlLmxvZygnd29yayBvbiBhZHZvY2F0ZSBwYXJ0Jyk7XG4gICAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwudmljdGltQWR2b2NhdGVGbGFnPT0nWVMnKVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3dvcmsgb24gYWR2b2NhdGUgZmxhZyBpcyBZUyAnKTtcbiAgICAgICAgICBpZih0aGlzLnZpY3RpbURldGFpbC5hZHZvY2F0ZUZpcnN0TmFtZSAhPSBudWxsKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjaGVjayBhZHZvY2F0ZSBmaXNydCBuYW1lICcpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1EZXRhaWwuYWR2b2NhdGVGaXJzdE5hbWUpO1xuICAgICAgICAgIHRoaXMudmljdGltU2VydmljZS5wdXRWaWN0aW1BZHZvY2F0ZSh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCx0aGlzLnZpY3RpbUFkdm9jYXRlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzcD0+e30gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhZGQgYWR2b2NhdGUnKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltQWR2b2NhdGUpO1xuICAgICAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlLnBvc3RWaWN0aW1BZHZvY2F0ZSh0aGlzLnZpY3RpbURldGFpbC52aWN0aW1JZCwgdGhpcy52aWN0aW1BZHZvY2F0ZSkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAvLyBndWFyZGlhbiBzZWN0aW9uXG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi52aWN0aW1HdWFyZGlhbklkID0gdGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQ7XG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5sYXN0TmFtZSA9ICB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5MYXN0TmFtZTtcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLmZpcnN0TmFtZSA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkZpcnN0TmFtZTtcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLnByZWZpeElkID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuUHJlZml4SWQgPyB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5QcmVmaXhJZCA6IG51bGw7XG4gICAgdGhpcy52aWN0aW1HdWFyZGlhbi5zdWZmaXhJZCA9IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhblN1ZmZpeElkID8gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuU3VmZml4SWQgOiBudWxsO1xuICAgIHRoaXMudmljdGltR3VhcmRpYW4uYWRkcmVzc0lkID0gdGhpcy5ndWFyZGlhbkFkZHJlc3NJZCA/IHRoaXMuZ3VhcmRpYW5BZGRyZXNzSWQgOiBudWxsO1xuICAgIHRoaXMudmljdGltR3VhcmRpYW4ubm9QaG9uZUZsYWcgPSAgdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuTm9QaG9uZUZsYWc/IHRydWU6IGZhbHNlO1xuICAgIHRoaXMudmljdGltR3VhcmRpYW4uaG9tZVBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuSG9tZVBob25lO1xuICAgIHRoaXMudmljdGltR3VhcmRpYW4ud29ya1Bob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuV29ya1Bob25lO1xuICAgIHRoaXMudmljdGltR3VhcmRpYW4uY2VsbFBob25lID0gdGhpcy52aWN0aW1Gb3JtLnZhbHVlLmd1YXJkaWFuQ2VsbFBob25lO1xuICAgIHRoaXMudmljdGltR3VhcmRpYW4uZW1haWwgPSB0aGlzLnZpY3RpbUZvcm0udmFsdWUuZ3VhcmRpYW5FbWFpbCA/IHRoaXMudmljdGltRm9ybS52YWx1ZS5ndWFyZGlhbkVtYWlsIDogbnVsbDtcbiAgICB0aGlzLnZpY3RpbUd1YXJkaWFuLm1vZGlmaWVkQnkgPSB0aGlzLnN0YWZmSWQ7XG5cbiAgICBpZiAodGhpcy52aWN0aW1EZXRhaWwubWlub3JGbGFnID09IHRydWUpXG4gICAge1xuICAgICAgIGlmKHRoaXMudmljdGltRGV0YWlsLmd1YXJkaWFuRmlyc3ROYW1lICE9IG51bGwgKVxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucHV0VmljdGltR3VhcmRpYW4odGhpcy52aWN0aW1EZXRhaWwudmljdGltSWQsdGhpcy52aWN0aW1HdWFyZGlhbikuc3Vic2NyaWJlKFxuICAgICAgICByZXNwPT57XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2FkZCBndXJkaWFuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy52aWN0aW1HdWFyZGlhbik7XG4gICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2UucG9zdFZpY3RpbUd1YXJkaWFuKHRoaXMudmljdGltRGV0YWlsLnZpY3RpbUlkLCB0aGlzLnZpY3RpbUd1YXJkaWFuKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgIH1cbiAgICB9XG5cbiAgICApO1xuXG4gICAgfVxuICB9Ly9lbmQgb2YgdGhpcy5waG9uZVZhbGlkYXRpb25GbGFnID0gZmFsc2VcblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbURldGFpbCcpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltRGV0YWlsKTtcbiAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMudmljdGltRGV0YWlsKTtcbiAgICAgIH1cblxuICAvLyNlbmRyZWdpb24gXCJzYXZlIHZpY3RpbVwiXG4gICAgICBhZGRDb250YWN0KCl7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyd2aWN0aW1Db250YWN0Jyx0aGlzLnZpY3RpbUlkXSk7XG4gICAgICB9XG4gICAgICBmb3JtYXRMYWJlbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuXG59XG4iLCI8bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgIFtmb3JtR3JvdXBdPVwidmljdGltRm9ybVwiPlxuXG4gICAgICAgICAgPG1hdC10YWItZ3JvdXAgZHluYW1pY0hlaWdodCAgbWF0LXN0cmV0Y2gtdGFicz5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiVmljdGltIERldGFpbFwiID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5JcyB2aWN0aW0gYSBtaW5vcj88Zm9udCBjb2xvcj1cInJlZFwiPiogPC9mb250PjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwICBmb3JtQ29udHJvbE5hbWU9XCJtaW5vckZsYWdcIiAgKGNoYW5nZSk9XCJyYWRpb01pbm9yQ2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0ubWlub3JGbGFnXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnbWlub3JGbGFnJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+SWYgdmljdGltIGEgbWlub3IgZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkRvZXMgdGhlIFZpY3RpbSBoYXZlIGEgVmljdGltIEFkdm9jYXRlIG9yIFNvY2lhbCBXb3JrZXIgd2l0aCA8YnI+d2hvbSBDU09TQSBzaG91bGQgbWFpbnRhaW4gY29udGFjdD88Zm9udCBjb2xvcj1cInJlZFwiPiogPC9mb250PjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcyA9IFwidHAtcmFkaW8tZ3JvdXBcIiAgZm9ybUNvbnRyb2xOYW1lPVwidmljdGltQWR2b2NhdGVGbGFnXCIgIChjaGFuZ2UpPVwicmFkaW9BZHZvY2F0ZUNoYW5nZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnZpY3RpbUFkdm9jYXRlRmxhZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmbGFnT3B0aW9uXCIgW3ZhbHVlXT1cIml0ZW0uZmxhZ09wdGlvblllc05vVW5rbm93bklkXCI+e3tpdGVtLm5hbWV9fSA8L21hdC1yYWRpby1idXR0b24+Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5JZiB2aWN0aW0gaGFzIGFkdm9jYXRlIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIEN1cnJlbnRseSBVbmRlciBTdXBlcnZpc2lvbjo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cInVuZGVyU3VwZXJ2aXNpb25GbGFnXCIgbmFtZT1cInN1cGVydmlzaW9uXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnVuZGVyU3VwZXJ2aXNpb25GbGFnXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZsYWdPcHRpb25cIiBbdmFsdWVdPVwiaXRlbS5mbGFnT3B0aW9uWWVzTm9Vbmtub3duSWRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dW5kZXIgc3VwZXJ2aXNpb24gZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UmVsYXRpb25zaGlwIHRvIE9mZmVuZGVyOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS52aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZFwiICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcmVsYXRpb25zaGlwVHlwZXNcIiBbdmFsdWVdPVwiaXRlbS5yZWxhdGlvbnNoaXBUeXBlSWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCcpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1PZmZlbmRlclJlbGF0aW9uc2hpcFR5cGVJZCcpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+cmVsYXRpb25zaGlwIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gTGFzdCBOYW1lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImxhc3ROYW1lXCIgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5sYXN0TmFtZVwiID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnbGFzdE5hbWUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnbGFzdE5hbWUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnbGFzdE5hbWUnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj52aWN0aW0gbGFzdCBuYW1lIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBGaXJzdCBOYW1lOiA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmZpcnN0TmFtZVwiICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2ZpcnN0TmFtZScpLmVycm9yc1xuICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdmaXJzdE5hbWUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+dmljdGltIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gTWlkZGxlIE5hbWU6PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwibWlkZGxlTmFtZVwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5taWRkbGVOYW1lXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VmljdGltIFByZWZpeDo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cInByZWZpeElkXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnByZWZpeElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcHJlZml4ZXNcIiBbdmFsdWVdPVwiaXRlbS5wcmVmaXhJZFwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gU3VmZml4OjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwic3VmZml4SWRcIiAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLnN1ZmZpeElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VmZml4ZXNcIiBbdmFsdWVdPVwiaXRlbS5zdWZmaXhJZFwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gU2V4OjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImdlbmRlckNvZGVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ2VuZGVyQ29kZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZW5kZXJzXCIgW3ZhbHVlXT1cIml0ZW0uZ2VuZGVyQ29kZVwiPnt7aXRlbS5uYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0ZSBvZiBCaXJ0aDo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJ2aWN0aW1CaXJ0aFJlZlwiXG4gICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYmlydGhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5iaXJ0aERhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpY3RpbUJpcnRoUmVmLm9wZW4oKVwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVET0JDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgW2Zvcl09XCJ2aWN0aW1CaXJ0aFJlZlwiIG1hdFN1ZmZpeD48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjdmljdGltQmlydGhSZWY+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gSG9tZSBQaG9uZTo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwidGVsXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGhvbmVNYXNrXG4gICAgICAgICAgICAgICAgICAgIFtwcmVWYWx1ZV09XCJlZGl0VmljdGltLmhvbWVQaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwaG9uZUNvbnRyb2xdPVwiaG9tZVBob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJob21lUGhvbmVDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIi8+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnaG9tZVBob25lJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2hvbWVQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdob21lUGhvbmUnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkhvbWUgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gQ2VsbCBQaG9uZTo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZWwxXCJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgIFtwcmVWYWx1ZV09XCJlZGl0VmljdGltLmNlbGxQaG9uZVwiXG4gICAgICAgICAgICAgICAgICBbcGhvbmVDb250cm9sXT1cImNlbGxQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNlbGxQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIi8+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnY2VsbFBob25lJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2NlbGxQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdjZWxsUGhvbmUnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5DZWxsIHBob25lIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBXb3JrIFBob25lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cInRlbDJcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBob25lTWFza1xuICAgICAgICAgICAgICAgICAgW3ByZVZhbHVlXT1cImVkaXRWaWN0aW0ud29ya1Bob25lXCJcbiAgICAgICAgICAgICAgICAgIFtwaG9uZUNvbnRyb2xdPVwid29ya1Bob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwid29ya1Bob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiLz5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCd3b3JrUGhvbmUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnd29ya1Bob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ3dvcmtQaG9uZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+V29yayBwaG9uZSBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlZpY3RpbSBFbWFpbDo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmVtYWlsXCIgPlxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZW1haWwnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPnZpY3RpbSBlbWFpbCBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgIDxhcHAtc21hcnQtYWRkcmVzc1xuICAgICAgICAgICAgICAgIFttb2RpZmllZEJ5XT1cInN0YWZmSWRcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJhZGRyZXNzSWRcIlxuICAgICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaG93UHNhXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFthZGRyZXNzVmFsaWRhdG9yc109XCJhZGRyZXNzVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAoYWRkcmVzc0lkQ2hhbmdlKT1cIm9uQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAjYWRkcmVzc0NvbXBvbmVudCA+XG5cbiAgICAgICAgICAgICAgICA8L2FwcC1zbWFydC1hZGRyZXNzPlxuXG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRG9ja2V0OlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAgKm5nRm9yPVwibGV0IGRvY2tldCBvZiBkb2NrZXRsaXN0OyBsZXQgaT1pbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggPnt7ZG9ja2V0LmRvY2tldE51bWJlcn19PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggIGNvbG9yPVwicHJpbWFyeVwiIGZvcm1Db250cm9sTmFtZT1cImxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgbmFtZT1cImxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmxpdmVXaXRoT2ZmZW5kZXJGbGFnXCIgICAoY2hhbmdlKT1cInNob3dBZGRyZXNzKCRldmVudClcIiAgPnZpY3RpbSBsaXZlIHdpdGggb2ZmZW5kZXI8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggIGNvbG9yPVwicHJpbWFyeVwiIGZvcm1Db250cm9sTmFtZT1cImFsbG93Q3Nvc2FDb250YWN0RmxhZ1wiIG5hbWU9XCJhbGxvd0Nzb3NhQ29udGFjdEZsYWdcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWxsb3dDc29zYUNvbnRhY3RGbGFnXCI+dmljdGltIHdhbnRzIHRvIGJlIGNvbnRhY3RlZCBieSBDU09TQTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPiBDaGlsZHJlbiBpbiBDb21tb248L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwiY29tbW9uQ2hpbGRyZW5GbGFnXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNvbW1vbkNoaWxkcmVuRmxhZ1wiICAoY2hhbmdlKT1cInJhZGlvQ2ljQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cImNvbW1vbkNoaWxkcmVuRGl2RmxhZ1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkcmVuIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiY29tbW9uQ2hpbGRyZW5OdW1iZXJcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uY29tbW9uQ2hpbGRyZW5OdW1iZXJcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNQTzogPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwiY3BvRXhwaXJhdGlvbkZsYWdcIiAgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmNwb0V4cGlyYXRpb25GbGFnXCIgKGNoYW5nZSk9XCJyYWRpb0Nwb0NoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwb0V4cGlyYXRpb25EaXZGbGFnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkV4cGlyYXRpb24gRGF0ZTogPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiY3BvRGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3BvRXhwaXJhdGlvbkRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNwb0RhdGVSZWYub3BlbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5jcG9FeHBpcmF0aW9uRGF0ZVwiICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIFtmb3JdPVwiY3BvRGF0ZVJlZlwiIG1hdFN1ZmZpeD48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjY3BvRGF0ZVJlZj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgIDxicj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5WaWN0aW0gaGFzIGEgU3VwcG9ydCBTeXN0ZW0gaW4gUGxhY2U/IDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJzdXBwb3J0SW5QbGFjZUZsYWdcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uc3VwcG9ydEluUGxhY2VGbGFnXCIgIChjaGFuZ2UpPVwicmFkaW9TdXBwb3J0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW3ZhbHVlXT1cInRydWVcIj5ZZXM8L21hdC1yYWRpby1idXR0b24+Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3VwcG9ydEluUGxhY2VEaXZGbGFnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TdXBwb3J0IHR5cGU/IDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAjc3VwcG9ydFNlbCBmb3JtQ29udHJvbE5hbWU9XCJ2aWN0aW1TdXBwb3J0c1wiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS52aWN0aW1TdXBwb3J0c1wiIG11bHRpcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlbGVhdmUpPVwic3VwcG9ydFNlbC5jbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2aWN0aW1TdXBwb3J0VHlwZXNcIiBbdmFsdWVdPVwiaXRlbS52aWN0aW1TdXBwb3J0VHlwZUlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XZWFwb25zIEludm9sdmVkPzwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmb3JtQ29udHJvbE5hbWU9XCJ3ZWFwb25JbnZvbHZlZEZsYWdcIiAoY2hhbmdlKT1cInJhZGlvV2VhcG9uQ2hhbmdlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0ud2VhcG9uSW52b2x2ZWRGbGFnXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3ZWFwb25JbnZvbHZlZERpdkZsYWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XZWFwb24gVHlwZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICAjd2VhcG9uU2VsIGZvcm1Db250cm9sTmFtZT1cInZpY3RpbVdlYXBvblVzZXNcIiBtdWx0aXBsZSBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0udmljdGltV2VhcG9uVXNlc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hlY2tPdGhlcldlYXBvbigkZXZlbnQudmFsdWUpXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAobW91c2VsZWF2ZSk9XCJ3ZWFwb25TZWwuY2xvc2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3ZWFwb25UeXBlc1wiIFt2YWx1ZV09XCJpdGVtLndlYXBvblR5cGVJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3RoZXJXZWFwb25GbGFnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+T3RoZXIgV2VhcG9uOiogPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cIm90aGVyV2VhcG9uXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPk90aGVyIHdlYXBvbiBpcyByZXF1aXJlZC48L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5XYXMgT2ZmZW5kZXIgdW5kZXIgdGhlIGluZmx1ZW5jZSBvZiBhbGNvaG9sIGF0IHRoZSB0aW1lIG9mIHRoZSBvZmZlbnNlPzwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgZm9ybUNvbnRyb2xOYW1lPVwiYWxjb2hvbFVzZUZsYWdcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWxjb2hvbFVzZUZsYWdcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LXJhZGlvLWJ1dHRvbj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJmYWxzZVwiPk5vPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPldhcyBPZmZlbmRlciB1bmRlciB0aGUgaW5mbHVlbmNlIG9mIGRydWdzIGF0IHRoZSB0aW1lIG9mIHRoZSBvZmZlbnNlPzwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cImRydWdVc2VGbGFnXCIgKGNoYW5nZSk9XCJyYWRpb0RydWdDaGFuZ2UoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5kcnVnVXNlRmxhZ1wiICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtcmFkaW8tYnV0dG9uPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRydWdVc2VEaXZGbGFnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5EcnVnOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgI2RydWdTZWwgZm9ybUNvbnRyb2xOYW1lPVwidmljdGltRHJ1Z1VzZXNcIiBtdWx0aXBsZSAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hlY2tPdGhlckRydWcoJGV2ZW50LnZhbHVlKVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChtb3VzZWxlYXZlKT1cImRydWdTZWwuY2xvc2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkcnVnc1wiIFt2YWx1ZV09XCJpdGVtLmRydWdUeXBlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm90aGVyRHJ1Z0ZsYWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5PdGhlciBEcnVnOiogPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cIm90aGVyRHJ1Z1wiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdvdGhlckRydWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5PdGhlciBkcnVnIGlzIHJlcXVpcmVkLjwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VzcyBSaXNrOiAxIHRocnUgMTAgKDEwIGdyZWF0ZXN0IHJpc2spOiAmbmJzcDs8Yj4ge3tlZGl0VmljdGltLmFjY2Vzc1Jpc2t9fTwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXNzUmlza1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYkxhYmVsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZm9ybWF0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWNjZXNzUmlza1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9tYXQtc2xpZGVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuXG4gICAgICAgICAgICAgIDxicj48YnI+PGJyPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgICAgIDxtYXQtdGFiICAqbmdJZj1cImd1YXJkaWFuVGFiRmxhZ1wiIGxhYmVsPVwiTGVnYWwgR3VhcmRpYW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gTGFzdCBOYW1lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuTGFzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5MYXN0TmFtZVwiID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5MYXN0TmFtZScpLmVycm9ycyBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBsYXN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gRmlyc3QgTmFtZTo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCAgZm9ybUNvbnRyb2xOYW1lPVwiZ3VhcmRpYW5GaXJzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5GaXJzdE5hbWVcIiA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRmlyc3ROYW1lJykuZXJyb3JzIFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkd1YXJkaWFuIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIFByZWZpeDo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhblByZWZpeElkXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuUHJlZml4SWRcIiA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZWZpeGVzXCIgW3ZhbHVlXT1cIml0ZW0ucHJlZml4SWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkd1YXJkaWFuIFN1ZmZpeDo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhblN1ZmZpeElkXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuU3VmZml4SWRcIiAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWZmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnN1ZmZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJDaG9vc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbkdlbmRlclwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5ndWFyZGlhbkdlbmRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdlbmRlcnNcIiBbdmFsdWVdPVwiaXRlbS5nZW5kZXJDb2RlXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+RGF0ZSBvZiBCaXJ0aDo8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZ3VhcmRpYW5EYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImd1YXJkaWFuQmlydGhEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5ndWFyZGlhbkJpcnRoRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3VhcmRpYW5EYXRlUmVmLm9wZW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cImd1YXJkaWFuRGF0ZVJlZlwiIG1hdFN1ZmZpeD48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNndWFyZGlhbkRhdGVSZWY+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBjb2xvciA9IFwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbk5vUGhvbmVGbGFnXCI+XG4gICAgICAgICAgICAgICAgICBObyBQaG9uZSAoSWYgdGhlcmUgaXMgbm8gcGhvbmUsIHRoZSBwaG9uZSBmaWVsZHMgYXJlIG5vIGxvbmdlciByZXF1aXJlZCk8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5HdWFyZGlhbiBIb21lIFBob25lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZWxcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgICAgW3ByZVZhbHVlXT1cImVkaXRWaWN0aW0uZ3VhcmRpYW5Ib21lUGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICBbcGhvbmVDb250cm9sXT1cImd1YXJkaWFuSG9tZVBob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJndWFyZGlhbkhvbWVQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuSG9tZVBob25lJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ib21lUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5Ib21lUGhvbmUnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+R3VhcmRpYW4gaG9tZSBwaG9uZSBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5HdWFyZGlhbiBDZWxsIFBob25lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgIGlkPVwidGVsNFwiXG4gICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgICBbcHJlVmFsdWVdPVwiZWRpdFZpY3RpbS5ndWFyZGlhbkNlbGxQaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgW3Bob25lQ29udHJvbF09XCJndWFyZGlhbkNlbGxQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJndWFyZGlhbkNlbGxQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE0XCIvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5DZWxsUGhvbmUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5DZWxsUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5DZWxsUGhvbmUnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+R3VhcmRpYW4gQ2VsbCBwaG9uZSBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gV29yayBQaG9uZTo8L21hdC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZWw1XCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGhvbmVNYXNrXG4gICAgICAgICAgICAgICAgICAgIFtwcmVWYWx1ZV09XCJlZGl0VmljdGltLmd1YXJkaWFuV29ya1Bob25lXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bob25lQ29udHJvbF09XCJndWFyZGlhbldvcmtQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ3VhcmRpYW5Xb3JrUGhvbmVDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTRcIi8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbldvcmtQaG9uZScpLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuV29ya1Bob25lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuV29ya1Bob25lJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkd1YXJkaWFuIHdvcmsgcGhvbmUgbnVtYmVyIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG5cbiAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R3VhcmRpYW4gRW1haWw6PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJndWFyZGlhbkVtYWlsXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmd1YXJkaWFuRW1haWxcIiAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRW1haWwnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkVtYWlsJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuRW1haWwnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5HdWFyZGlhbiBlbWFpbCBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxhcHAtc21hcnQtYWRkcmVzc1xuXG4gICAgICAgICAgICAgICAgW3Nob3dQc2FdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW21vZGlmaWVkQnldPVwic3RhZmZJZFwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImd1YXJkaWFuQWRkcmVzc0lkXCJcbiAgICAgICAgICAgICAgICAoYWRkcmVzc0lkQ2hhbmdlKT1cIm9uR3VhcmRpYW5BZGRyZXNzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiODBcIlxuICAgICAgICAgICAgICAgIChpc1ZhbGlkKT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbYWRkcmVzc1ZhbGlkYXRvcnNdPVwiYWRkcmVzc1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgICNndWFyZGlhbkFkZHJlc3NDb21wb25lbnRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9hcHAtc21hcnQtYWRkcmVzcz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+XG4gICAgICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgICAgIDwhLS1hZHZvY2F0ZS0tPlxuXG4gICAgICAgICAgICAgIDxtYXQtdGFiICAqbmdJZj1cImFkdm9jYXRlVGFiRmxhZ1wiIGxhYmVsPVwiQWR2b2NhdGVcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QWR2b2NhdGUgTGFzdCBOYW1lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cImFkdm9jYXRlTGFzdE5hbWVcIiBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVMYXN0TmFtZVwiICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLmVycm9ycyBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBGaXJzdCBOYW1lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cImFkdm9jYXRlRmlyc3ROYW1lXCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmFkdm9jYXRlRmlyc3ROYW1lXCIgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLmVycm9ycyBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBQcmVmaXg6PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJhZHZvY2F0ZVByZWZpeElkXCIgIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZVByZWZpeElkXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZWZpeGVzXCIgW3ZhbHVlXT1cIml0ZW0ucHJlZml4SWRcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QWR2b2NhdGUgU3VmZml4OjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVTdWZmaXhJZFwiIFsobmdNb2RlbCldPVwiZWRpdFZpY3RpbS5hZHZvY2F0ZVN1ZmZpeElkXCIgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdWZmaXhlc1wiIFt2YWx1ZV09XCJpdGVtLnN1ZmZpeElkXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkdm9jYXRlTm9QaG9uZUZsYWdcIlxuXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVOb1Bob25lRmxhZ1wiID5cbiAgICAgICAgICAgICAgICAgIE5vIFBob25lIChJZiB0aGVyZSBpcyBubyBwaG9uZSwgdGhlIHBob25lIGZpZWxkcyBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkKTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5BZHZvY2F0ZSBIb21lIFBob25lOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZWxcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgICAgW3ByZVZhbHVlXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVIb21lUGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICBbcGhvbmVDb250cm9sXT1cImFkdm9jYXRlSG9tZVBob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJhZHZvY2F0ZUhvbWVQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiLz5cblxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVIb21lUGhvbmUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUhvbWVQaG9uZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5BZHZvY2F0ZSBob21lIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIENlbGwgUGhvbmU6PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBpZD1cInRlbDdcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgICAgW3ByZVZhbHVlXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVDZWxsUGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICBbcGhvbmVDb250cm9sXT1cImFkdm9jYXRlQ2VsbFBob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJhZHZvY2F0ZUNlbGxQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlQ2VsbFBob25lJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVDZWxsUGhvbmUnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPjxzdHJvbmc+QWR2b2NhdGUgY2VsbCBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIFdvcmsgUGhvbmU6PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBpZD1cInRlbDhcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgICAgW3ByZVZhbHVlXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVXb3JrUGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICBbcGhvbmVDb250cm9sXT1cImFkdm9jYXRlV29ya1Bob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJhZHZvY2F0ZVdvcmtQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxNFwiLz5cblxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVXb3JrUGhvbmUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZVdvcmtQaG9uZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZVdvcmtQaG9uZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5BZHZvY2F0ZSB3b3JrIG51bWJlciBmb3JtYXQgaXMgbm90IGNvcnJlY3QuPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFkdm9jYXRlIEVtYWlsOjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYWR2b2NhdGVFbWFpbFwiICBbKG5nTW9kZWwpXT1cImVkaXRWaWN0aW0uYWR2b2NhdGVFbWFpbFwiID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUVtYWlsJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVFbWFpbCcpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUVtYWlsJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj48c3Ryb25nPkFkdm9jYXRlIGVtYWlsIGZvcm1hdCBpcyBub3QgY29ycmVjdC48L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiA+XG4gICAgICAgICAgICAgIDxhcHAtc21hcnQtYWRkcmVzc1xuICAgICAgICAgICAgICBbc2hvd1BzYV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW21vZGlmaWVkQnldPVwic3RhZmZJZFwiXG4gICAgICAgICAgICAgIFtpZF09XCJhZHZvY2F0ZUFkZHJlc3NJZFwiXG4gICAgICAgICAgICAgIChhZGRyZXNzSWRDaGFuZ2UpPVwib25BZHZvY2F0ZUFkZHJlc3NDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtvdXRsaW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICByZWFkb25seT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCI4MFwiXG4gICAgICAgICAgICAgIChpc1ZhbGlkKT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2FkZHJlc3NWYWxpZGF0b3JzXT1cImFkZHJlc3NWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgI2Fkdm9jYXRlQWRkcmVzc0NvbXBvbmVudCA+XG4gICAgICAgICAgICAgIDwvYXBwLXNtYXJ0LWFkZHJlc3M+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJyPjxicj48YnI+XG4gICAgICAgICAgICA8L21hdC10YWI+XG5cblxuICAgICAgICAgICAgIDxtYXQtdGFiICBsYWJlbD1cIkVtZXJnZW5jeSBDb250YWN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkVtZXJnZW5jeSBDb250YWN0IE5hbWU6PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0ICBmb3JtQ29udHJvbE5hbWU9XCJlbWVyZ2VuY3lDb250YWN0XCIgWyhuZ01vZGVsKV09XCJlZGl0VmljdGltLmVtZXJnZW5jeUNvbnRhY3RcIiAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkVtZXJnZW5jeSBQaG9uZSBOdW1iZXI6PC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInRlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZU1hc2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlVmFsdWVdPVwiZWRpdFZpY3RpbS5lbWVyZ2VuY3lDb250YWN0UGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwaG9uZUNvbnRyb2xdPVwiZW1lcmdlbmN5Q29udGFjdFBob25lQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImVtZXJnZW5jeUNvbnRhY3RQaG9uZUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjE0XCIvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2VtZXJnZW5jeUNvbnRhY3RQaG9uZScpLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdlbWVyZ2VuY3lDb250YWN0UGhvbmUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnZW1lcmdlbmN5Q29udGFjdFBob25lJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3I+PHN0cm9uZz5FbWVyZ2VuY3kgY29udGFjdCBudW1iZXIgZm9ybWF0IGlzIG5vdCBjb3JyZWN0Ljwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnI+PGJyPjxicj5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSdvdXRlcic+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgQWxsIGJ1dHRvbnMgYXBwbHkgdG8gYWxsIHRhYnMuIElmIHNhdmUgYnV0dG9uIGlzIGdyZXksIHBsZWFzZSBjaGVjayBlYWNoIHRhYiB0byBtYWtlIHN1cmUgdGhlIHJlcXVpcmVkIGZpZWxkIGlzIGZpbGxlZC48YnI+PGJyPlxuXG4gICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ21pbm9yRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdtaW5vckZsYWcnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPklmIHZpY3RpbSBhIG1pbm9yIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5lcnJvcnNcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd2aWN0aW1BZHZvY2F0ZUZsYWcnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltQWR2b2NhdGVGbGFnJykudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5JZiB2aWN0aW0gaGFzIGFkdm9jYXRlIGZpZWxkIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgndW5kZXJTdXBlcnZpc2lvbkZsYWcnKS5lcnJvcnNcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCd1bmRlclN1cGVydmlzaW9uRmxhZycpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+VW5kZXIgc3VwZXJ2aXNpb24gZmllbGQgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ3ZpY3RpbU9mZmVuZGVyUmVsYXRpb25zaGlwVHlwZUlkJykuZXJyb3JzXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgndmljdGltT2ZmZW5kZXJSZWxhdGlvbnNoaXBUeXBlSWQnKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yPlJlbGF0aW9uc2hpcCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnbGFzdE5hbWUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdsYXN0TmFtZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+VmljdGltIGxhc3QgbmFtZSBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZXJyb3JzXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnZmlyc3ROYW1lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2ZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+dmljdGltIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnZ3VhcmRpYW5GaXJzdE5hbWUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBmaXJzdCBuYW1lIGlzIDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz48L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtYmxvY2tcIiAqbmdJZj1cInZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJykuZXJyb3JzXG4gICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdndWFyZGlhbkxhc3ROYW1lJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ2d1YXJkaWFuTGFzdE5hbWUnKS50b3VjaGVkKVwiID5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5HdWFyZGlhbiBsYXN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS5lcnJvcnNcbiAgICAgICAgICAgICAgICAmJiAodmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlTGFzdE5hbWUnKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnYWR2b2NhdGVMYXN0TmFtZScpLnRvdWNoZWQpXCIgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5BZHZvY2F0ZSBsYXN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ2Fkdm9jYXRlRmlyc3ROYW1lJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgJiYgKHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLmRpcnR5IHx8IHZpY3RpbUZvcm0uZ2V0KCdhZHZvY2F0ZUZpcnN0TmFtZScpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPkFkdm9jYXRlIGZpcnN0IG5hbWUgaXMgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPjwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiICpuZ0lmPVwidmljdGltRm9ybS5nZXQoJ290aGVyV2VhcG9uJykuZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS5kaXJ0eSB8fCB2aWN0aW1Gb3JtLmdldCgnb3RoZXJXZWFwb24nKS50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yPk90aGVyIHdlYXBvbiBmaWVsZCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWJsb2NrXCIgKm5nSWY9XCJ2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykuZXJyb3JzXG4gICAgICAgICAgICAgICYmICh2aWN0aW1Gb3JtLmdldCgnb3RoZXJEcnVnJykuZGlydHkgfHwgdmljdGltRm9ybS5nZXQoJ290aGVyRHJ1ZycpLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+T3RoZXIgZHJ1ZyBmaWVsZCBpcyA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVWaWN0aW0oKVwiIFtkaXNhYmxlZF09XCIhdmljdGltRm9ybS52YWxpZFwiICA+U2F2ZSA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIGNsYXNzPVwiaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJkZWxldGVWaWN0aW0oKVwiPkRlbGV0ZSA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+Q2xlYXIgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnI+XG4gICAgICAgIDxicj5cblxuICAgICAgICA8ZGl2IGFsaWduPVwicmlnaHRcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiYWRkQ29udGFjdCgpXCIgID5BZGQgdmljdGltIGNvbnRhY3Q8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdj5cblxuICAgICAgICAgIDxtYXQtdGFibGUgI3RhYmxlIFtkYXRhU291cmNlXT1cImNvbnRhY3REYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLXRhYmxlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbnRhY3REYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5Db250YWN0IERhdGU8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29udGFjdERhdGUgfCBkYXRlfX0gPC9tYXQtY2VsbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidmljdGltQ29udGFjdE1ldGhvZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbnRhY3QgTWV0aG9kPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy52aWN0aW1Db250YWN0TWV0aG9kfX0gPC9tYXQtY2VsbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5leHRDb250YWN0RGF0ZVwiPlxuICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPk5leHQgQ29udGFjdCBEYXRlPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5uZXh0Q29udGFjdERhdGUgfCBkYXRlfX0gPC9tYXQtY2VsbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhZmZcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5Db250YWN0IEJ5PC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5zdGFmZn19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29tbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+Q29tbWVudDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5jb21tZW50fX0gPC9tYXQtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29udGFjdElkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+PC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydjb250YWN0RGF0ZScsICd2aWN0aW1Db250YWN0TWV0aG9kJywnbmV4dENvbnRhY3REYXRlJywgJ3N0YWZmJywgJ2NvbW1lbnQnLCAnY29udGFjdElkJ11cIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczpbJ2NvbnRhY3REYXRlJywgJ3ZpY3RpbUNvbnRhY3RNZXRob2QnLCduZXh0Q29udGFjdERhdGUnLCAnc3RhZmYnLCAnY29tbWVudCcsICdjb250YWN0SWQnXTtcIiBjbGFzcz1cImV4YW1wbGUtcm93XCI+PC9tYXQtcm93PlxuICAgICAgICAgICAgPC9tYXQtdGFibGU+XG5cblxuICAgICAgICA8L2Rpdj5cblxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuIl19