@csmart/ngc-smart-victim 1.18.9 → 1.18.13
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/csmart-ngc-smart-victim.mjs +5 -0
- package/esm2022/lib/caseNote/caseNote.component.mjs +194 -0
- package/esm2022/lib/common-dialog/common-dialog.component.mjs +23 -0
- package/esm2022/lib/common-dialog/common-dialog.module.mjs +34 -0
- package/esm2022/lib/common-dialog/common-dialog.service.mjs +33 -0
- package/esm2022/lib/contact/contact.component.mjs +140 -0
- package/esm2022/lib/email.services.mjs +42 -0
- package/esm2022/lib/intake.service.mjs +57 -0
- package/esm2022/lib/safetyPlan/serviceProvider.component.mjs +99 -0
- package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
- package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
- package/esm2022/lib/shared/app.shared.module.mjs +215 -0
- package/esm2022/lib/shared/validators/date.validator.mjs +59 -0
- package/esm2022/lib/shared/validators/index.mjs +2 -0
- package/esm2022/lib/smart-victim-delete-confirm.component.mjs +44 -0
- package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +1155 -0
- package/esm2022/lib/smart-victim.component.mjs +317 -0
- package/esm2022/lib/smart-victim.model.mjs +142 -0
- package/esm2022/lib/smart-victim.module.mjs +128 -0
- package/esm2022/lib/smart-victim.service.mjs +370 -0
- package/esm2022/lib/victim-routing.module.mjs +41 -0
- package/esm2022/lib/victimSearch/VictimSearchFilter.mjs +3 -0
- package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +38 -0
- package/esm2022/public-api.mjs +11 -0
- package/fesm2022/csmart-ngc-smart-victim.mjs +3342 -0
- package/fesm2022/csmart-ngc-smart-victim.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/caseNote/caseNote.component.d.ts +51 -0
- package/lib/common-dialog/common-dialog.component.d.ts +14 -0
- package/lib/common-dialog/common-dialog.module.d.ts +8 -0
- package/lib/common-dialog/common-dialog.service.d.ts +11 -0
- package/lib/contact/contact.component.d.ts +40 -0
- package/lib/email.services.d.ts +11 -0
- package/lib/intake.service.d.ts +57 -0
- package/lib/safetyPlan/serviceProvider.component.d.ts +19 -0
- package/lib/safetyPlan/victimSafetyPlan.component.d.ts +54 -0
- package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +62 -0
- package/lib/shared/app.shared.module.d.ts +33 -0
- package/lib/shared/validators/date.validator.d.ts +9 -0
- package/lib/shared/validators/index.d.ts +1 -0
- package/lib/smart-victim-delete-confirm.component.d.ts +12 -0
- package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +129 -0
- package/lib/smart-victim.component.d.ts +69 -0
- package/lib/smart-victim.model.d.ts +211 -0
- package/lib/smart-victim.module.d.ts +49 -0
- package/lib/smart-victim.service.d.ts +71 -0
- package/lib/victim-routing.module.d.ts +7 -0
- package/{src/lib/victimSearch/VictimSearchFilter.ts → lib/victimSearch/VictimSearchFilter.d.ts} +7 -9
- package/lib/victimSearch/victimSearchForm.component.d.ts +14 -0
- package/package.json +21 -6
- package/{src/public-api.ts → public-api.d.ts} +7 -12
- package/karma.conf.js +0 -32
- package/ng-package.json +0 -7
- package/src/lib/caseNote/caseNote.component.css +0 -22
- package/src/lib/caseNote/caseNote.component.html +0 -188
- package/src/lib/caseNote/caseNote.component.ts +0 -265
- package/src/lib/common-dialog/common-dialog.component.css +0 -10
- package/src/lib/common-dialog/common-dialog.component.html +0 -23
- package/src/lib/common-dialog/common-dialog.component.spec.ts +0 -25
- package/src/lib/common-dialog/common-dialog.component.ts +0 -21
- package/src/lib/common-dialog/common-dialog.module.ts +0 -22
- package/src/lib/common-dialog/common-dialog.service.ts +0 -35
- package/src/lib/contact/contact.component.css +0 -22
- package/src/lib/contact/contact.component.html +0 -124
- package/src/lib/contact/contact.component.ts +0 -176
- package/src/lib/email-notification.service.ts +0 -42
- package/src/lib/email.services.ts +0 -51
- package/src/lib/http.service.ts +0 -34
- package/src/lib/intake.service.ts +0 -82
- package/src/lib/loader.service.ts +0 -11
- package/src/lib/safetyPlan/serviceProvider.component.ts +0 -94
- package/src/lib/safetyPlan/victimSafetyPlan.component.css +0 -27
- package/src/lib/safetyPlan/victimSafetyPlan.component.html +0 -85
- package/src/lib/safetyPlan/victimSafetyPlan.component.ts +0 -178
- package/src/lib/safetyPlan/victimSafetyPlanDetail.component.html +0 -234
- package/src/lib/safetyPlan/victimSafetyPlanDetail.component.ts +0 -492
- package/src/lib/shared/app.shared.module.ts +0 -111
- package/src/lib/shared/validators/date.validator.ts +0 -73
- package/src/lib/shared/validators/index.ts +0 -1
- package/src/lib/smart-victim-delete-confirm.component.ts +0 -35
- package/src/lib/smart-victim-detail/smart-victim-detail.component.css +0 -43
- package/src/lib/smart-victim-detail/smart-victim-detail.component.html +0 -869
- package/src/lib/smart-victim-detail/smart-victim-detail.component.spec.ts +0 -25
- package/src/lib/smart-victim-detail/smart-victim-detail.component.ts +0 -1387
- package/src/lib/smart-victim.component.css +0 -245
- package/src/lib/smart-victim.component.html +0 -132
- package/src/lib/smart-victim.component.spec.ts +0 -25
- package/src/lib/smart-victim.component.ts +0 -333
- package/src/lib/smart-victim.model.ts +0 -301
- package/src/lib/smart-victim.module.ts +0 -110
- package/src/lib/smart-victim.service.spec.ts +0 -12
- package/src/lib/smart-victim.service.ts +0 -557
- package/src/lib/victim-routing.module.ts +0 -35
- package/src/lib/victimSearch/victimSearchForm.component.html +0 -35
- package/src/lib/victimSearch/victimSearchForm.component.ts +0 -41
- package/src/test.ts +0 -16
- package/tsconfig.lib.json +0 -36
- package/tsconfig.spec.json +0 -17
- package/tslint.json +0 -17
@@ -0,0 +1,340 @@
|
|
1
|
+
import { Component } from '@angular/core';
|
2
|
+
import { NgcSmartVictimService } from '../smart-victim.service';
|
3
|
+
import { UntypedFormControl, UntypedFormBuilder, Validators } from '@angular/forms';
|
4
|
+
import { MatDialog } from '@angular/material/dialog';
|
5
|
+
import { CommonDialogService } from '.././common-dialog/common-dialog.service';
|
6
|
+
import { HttpClient } from '@angular/common/http';
|
7
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
8
|
+
import { dateValidator } from '../shared/validators';
|
9
|
+
import { SeriveProviderComponent } from '../safetyPlan/serviceProvider.component';
|
10
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
11
|
+
import { MatTableDataSource } from '@angular/material/table';
|
12
|
+
import * as i0 from "@angular/core";
|
13
|
+
import * as i1 from "@angular/material/dialog";
|
14
|
+
import * as i2 from "../smart-victim.service";
|
15
|
+
import * as i3 from "@angular/common/http";
|
16
|
+
import * as i4 from "@angular/material/snack-bar";
|
17
|
+
import * as i5 from "@angular/router";
|
18
|
+
import * as i6 from ".././common-dialog/common-dialog.service";
|
19
|
+
import * as i7 from "@angular/forms";
|
20
|
+
import * as i8 from "@angular/common";
|
21
|
+
import * as i9 from "@angular/material/button";
|
22
|
+
import * as i10 from "@angular/material/checkbox";
|
23
|
+
import * as i11 from "@angular/material/card";
|
24
|
+
import * as i12 from "@angular/material/list";
|
25
|
+
import * as i13 from "@angular/material/toolbar";
|
26
|
+
import * as i14 from "@angular/material/input";
|
27
|
+
import * as i15 from "@angular/material/form-field";
|
28
|
+
import * as i16 from "@angular/cdk/text-field";
|
29
|
+
import * as i17 from "@angular/material/datepicker";
|
30
|
+
import * as i18 from "@angular/material/select";
|
31
|
+
import * as i19 from "@angular/material/core";
|
32
|
+
import * as i20 from "@angular/material/table";
|
33
|
+
export class VictimSafetyPlanDetailComponent {
|
34
|
+
constructor(dialog, _victimServicesComponent, http, snackBar, route, router, commonDialogService, formBuilder) {
|
35
|
+
this.dialog = dialog;
|
36
|
+
this._victimServicesComponent = _victimServicesComponent;
|
37
|
+
this.http = http;
|
38
|
+
this.snackBar = snackBar;
|
39
|
+
this.route = route;
|
40
|
+
this.router = router;
|
41
|
+
this.commonDialogService = commonDialogService;
|
42
|
+
this.formBuilder = formBuilder;
|
43
|
+
this.editSafetyPlan = {};
|
44
|
+
this.providerListCollection = [];
|
45
|
+
this.serviceCheck = [];
|
46
|
+
this.victimServiceStatusHistoriesDataSource = new MatTableDataSource();
|
47
|
+
this.initForm();
|
48
|
+
}
|
49
|
+
initForm() {
|
50
|
+
this.spForm = this.formBuilder.group({
|
51
|
+
serviceGoal: new UntypedFormControl('', Validators.compose([
|
52
|
+
Validators.required
|
53
|
+
])),
|
54
|
+
goalStatus: new UntypedFormControl('', Validators.compose([
|
55
|
+
Validators.required
|
56
|
+
])),
|
57
|
+
goalStatusDate: new UntypedFormControl('', Validators.compose([
|
58
|
+
Validators.required, dateValidator()
|
59
|
+
])),
|
60
|
+
comment: new UntypedFormControl('', Validators.required)
|
61
|
+
});
|
62
|
+
this.spForm.markAsPristine();
|
63
|
+
this.spForm.markAsUntouched();
|
64
|
+
}
|
65
|
+
ngOnInit() {
|
66
|
+
var data = this.route.snapshot.data;
|
67
|
+
this.loginStaff = data.loginStaff;
|
68
|
+
this.staffId = this.loginStaff.staffId;
|
69
|
+
this.sub = this.route.params.subscribe(params => {
|
70
|
+
this.victimServiceId = params['victimServiceId'];
|
71
|
+
this.victimId = params['victimId'];
|
72
|
+
});
|
73
|
+
this.hiddenAddNewFlag = false;
|
74
|
+
this.isDisplay = false;
|
75
|
+
this._victimServicesComponent.getVictimServiceTypes().subscribe((items) => {
|
76
|
+
this.victimServiceTypes = items;
|
77
|
+
});
|
78
|
+
this._victimServicesComponent.getVictimServiceStatus().subscribe((items) => {
|
79
|
+
this.victimServiceStatus = items;
|
80
|
+
});
|
81
|
+
this._victimServicesComponent.getVictim(this.victimId).subscribe((items) => {
|
82
|
+
this.victimName = items.firstName + ', ' + items.lastName;
|
83
|
+
});
|
84
|
+
//---------------graphQL--------------------------------------
|
85
|
+
// this.getVictimServiceTypeProgramProviders().subscribe(result => {
|
86
|
+
// this.providerList = result;
|
87
|
+
// });
|
88
|
+
// console.log('this.victimServiceId');
|
89
|
+
// console.log(this.victimServiceId);
|
90
|
+
if (this.victimServiceId != 0) {
|
91
|
+
this._victimServicesComponent.getVictimServices(this.victimServiceId).subscribe(victimSafetyPlans => {
|
92
|
+
console.log('victimSafetyPlans');
|
93
|
+
console.log(victimSafetyPlans);
|
94
|
+
this.editSafetyPlan = victimSafetyPlans[0];
|
95
|
+
this.victimId = victimSafetyPlans[0].victimId;
|
96
|
+
console.log('this.editSafetyPlan');
|
97
|
+
console.log(this.editSafetyPlan);
|
98
|
+
// console.log('this.editSafetyPlan.goal');
|
99
|
+
// console.log(this.editSafetyPlan.goal);
|
100
|
+
// console.log('this.editSafetyPlan[0].goal');
|
101
|
+
// console.log(this.editSafetyPlan[0].goal);
|
102
|
+
});
|
103
|
+
this._victimServicesComponent.getServiceStatusHistories(this.victimServiceId).subscribe(victimServiceStatusHistories => {
|
104
|
+
// this.victimServiceStatusHistories = victimServiceStatusHistories;
|
105
|
+
this.victimServiceStatusHistoriesDataSource.data = victimServiceStatusHistories;
|
106
|
+
});
|
107
|
+
}
|
108
|
+
this.loadProvider();
|
109
|
+
}
|
110
|
+
//pass in id
|
111
|
+
isInArray(providerListCollectionKey, serviceTypeName, event) {
|
112
|
+
console.log('providerListCollectionKey');
|
113
|
+
console.log(providerListCollectionKey);
|
114
|
+
console.log('serviceTypeName');
|
115
|
+
console.log(serviceTypeName);
|
116
|
+
console.log('event.source.value');
|
117
|
+
console.log(event.checked);
|
118
|
+
if (event.checked == true) {
|
119
|
+
for (let j = 0; j < this.providerListCollection.length; j++) {
|
120
|
+
if (providerListCollectionKey == this.providerListCollection[j].groupId) {
|
121
|
+
this.providerListCollection[j].isDisplay = !this.providerListCollection[j].isDisplay;
|
122
|
+
const dialogRef = this.dialog.open(SeriveProviderComponent, {
|
123
|
+
width: '500px',
|
124
|
+
data: {
|
125
|
+
serviceType: serviceTypeName,
|
126
|
+
serviceTypeId: providerListCollectionKey,
|
127
|
+
providerCollections: [...this.providerListCollection],
|
128
|
+
},
|
129
|
+
panelClass: 'formFieldWidth480',
|
130
|
+
});
|
131
|
+
dialogRef.afterClosed().subscribe((result) => {
|
132
|
+
console.log('The dialog was closed');
|
133
|
+
console.log(result);
|
134
|
+
if (result) {
|
135
|
+
console.log('The dialog was closed, inside result');
|
136
|
+
this.savePlanProvider(providerListCollectionKey, result.voteeProviderId);
|
137
|
+
}
|
138
|
+
});
|
139
|
+
// return;
|
140
|
+
}
|
141
|
+
}
|
142
|
+
} //if event.checked == true
|
143
|
+
//this.router.navigate(['saftyPlanDetail', this.victimServiceId, this.victimId ]);
|
144
|
+
}
|
145
|
+
loadProvider() {
|
146
|
+
this.providerListCollection = [];
|
147
|
+
this._victimServicesComponent.getvVictimServiceTypeProgramProviders()
|
148
|
+
.subscribe((providerList) => {
|
149
|
+
if (providerList) {
|
150
|
+
let providers = Object.create(null);
|
151
|
+
for (let i = 0; i < providerList.length; i++) {
|
152
|
+
if (!providers[providerList[i].victimServiceTypeId]) {
|
153
|
+
providers[providerList[i].victimServiceTypeId] = [];
|
154
|
+
if (this.editSafetyPlan.vVictimServiceDetails != null) {
|
155
|
+
for (let j = 0; j < this.editSafetyPlan.vVictimServiceDetails.length; j++) {
|
156
|
+
if (providerList[i].victimServiceTypeId == this.editSafetyPlan.vVictimServiceDetails[j].victimServiceId.toString()) {
|
157
|
+
this.isDisplay = true;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
161
|
+
this.providerListCollection.push({ groupId: providerList[i].victimServiceTypeId, isDisplay: this.isDisplay, collection: providers[providerList[i].victimServiceTypeId] });
|
162
|
+
}
|
163
|
+
providers[providerList[i].victimServiceTypeId].push(providerList[i]);
|
164
|
+
}
|
165
|
+
}
|
166
|
+
});
|
167
|
+
}
|
168
|
+
//---------------graphQL--------------------------------------
|
169
|
+
// getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
|
170
|
+
// const queryString = `
|
171
|
+
// {
|
172
|
+
// findVictimServiceTypeProgramProviders {
|
173
|
+
// data {
|
174
|
+
// victimServiceTypeProgramProviderId
|
175
|
+
// victimServiceType
|
176
|
+
// victimProgramProvider
|
177
|
+
// }
|
178
|
+
// }
|
179
|
+
// }`;
|
180
|
+
// return this.http.post<any>(environment.smartApiUrl, { query: queryString })
|
181
|
+
// .map(result => {
|
182
|
+
// return result.data.findVictimServiceTypeProgramProviders.data;
|
183
|
+
// });
|
184
|
+
// }
|
185
|
+
evaluateSelection(victimServiceTypeId) {
|
186
|
+
if (this.editSafetyPlan.vVictimServiceDetails) {
|
187
|
+
return this.editSafetyPlan.vVictimServiceDetails.findIndex(r => r.victimServiceTypeId === victimServiceTypeId) >= 0;
|
188
|
+
}
|
189
|
+
}
|
190
|
+
savePlanProvider(victimServiceTypeId, victimProgramProviderId) {
|
191
|
+
console.log('savePlanProvider');
|
192
|
+
console.log(victimServiceTypeId);
|
193
|
+
console.log(victimProgramProviderId);
|
194
|
+
if (victimProgramProviderId === "" || victimProgramProviderId === null || victimProgramProviderId === undefined) {
|
195
|
+
this.snackBar.open('Please pick a program on the drop down list !', '', { duration: 120, });
|
196
|
+
// alert('Please pick a program on the drop down list !');
|
197
|
+
}
|
198
|
+
else {
|
199
|
+
if (this.victimServiceId == 0) {
|
200
|
+
//insert
|
201
|
+
console.log('insert new plan');
|
202
|
+
const safetyPlan = {
|
203
|
+
victimId: this.victimId,
|
204
|
+
fullName: null,
|
205
|
+
victimServiceId: 0,
|
206
|
+
goal: this.editSafetyPlan.goal,
|
207
|
+
comment: this.editSafetyPlan.comment,
|
208
|
+
modifiedBy: this.staffId,
|
209
|
+
victimServiceStatusId: null,
|
210
|
+
status: null,
|
211
|
+
startDate: null,
|
212
|
+
vVictimServiceDetails: null,
|
213
|
+
victimName: null
|
214
|
+
};
|
215
|
+
this._victimServicesComponent.addSafetyPlan(safetyPlan).subscribe((itms) => {
|
216
|
+
const victimServiceStatus = {
|
217
|
+
victimServiceStatusHistoryId: 0,
|
218
|
+
victimServiceId: itms.victimServiceId,
|
219
|
+
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
220
|
+
startDate: this.editSafetyPlan.startDate,
|
221
|
+
modifiedBy: this.staffId,
|
222
|
+
comment: 'test add safety plan'
|
223
|
+
};
|
224
|
+
this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe(() => {
|
225
|
+
console.log('check itms.victimServiceId iniside add victim serive status');
|
226
|
+
console.log(itms.victimServiceId);
|
227
|
+
const victimServiceDetail = {
|
228
|
+
victimServiceId: itms.victimServiceId,
|
229
|
+
victimServiceDetailId: 0,
|
230
|
+
victimServiceTypeId: victimServiceTypeId,
|
231
|
+
victimProgramProviderId: victimProgramProviderId,
|
232
|
+
modifiedBy: this.staffId,
|
233
|
+
victimProgramProvider: null
|
234
|
+
};
|
235
|
+
console.log('add plan provider here at insert');
|
236
|
+
this._victimServicesComponent.addPlanProvider(victimServiceDetail).subscribe(() => {
|
237
|
+
this.router.navigate(['saftyPlanDetail', itms.victimServiceId, this.victimId]);
|
238
|
+
});
|
239
|
+
});
|
240
|
+
});
|
241
|
+
}
|
242
|
+
else //update
|
243
|
+
{
|
244
|
+
const victimServiceDetail = {
|
245
|
+
victimServiceId: this.victimServiceId,
|
246
|
+
victimServiceDetailId: 0,
|
247
|
+
victimServiceTypeId: victimServiceTypeId,
|
248
|
+
victimProgramProviderId: victimProgramProviderId,
|
249
|
+
modifiedBy: this.staffId,
|
250
|
+
victimProgramProvider: null
|
251
|
+
};
|
252
|
+
console.log('add plan provider here at update');
|
253
|
+
this._victimServicesComponent.addPlanProvider(victimServiceDetail).subscribe(() => {
|
254
|
+
this.router.navigate(['saftyPlanDetail', this.victimServiceId, this.victimId]);
|
255
|
+
});
|
256
|
+
}
|
257
|
+
}
|
258
|
+
}
|
259
|
+
deleteProvider(victimProgramProviderId) {
|
260
|
+
this.commonDialogService
|
261
|
+
.confirm('', 'Do you want to delete this provider?', 'Yes', 'No')
|
262
|
+
.subscribe(res => {
|
263
|
+
this.result = res;
|
264
|
+
if (this.result) {
|
265
|
+
this._victimServicesComponent.deleteProvider(victimProgramProviderId, this.staffId)
|
266
|
+
.subscribe(result => {
|
267
|
+
this.snackBar.open('delete provider Successfully !', '', {
|
268
|
+
duration: 3000,
|
269
|
+
});
|
270
|
+
location.reload();
|
271
|
+
});
|
272
|
+
}
|
273
|
+
});
|
274
|
+
// location.reload();
|
275
|
+
}
|
276
|
+
saveSafetyPlan() {
|
277
|
+
if (this.editSafetyPlan.victimServiceId === undefined) {
|
278
|
+
const safetyPlan = {
|
279
|
+
victimId: this.victimId,
|
280
|
+
fullName: null,
|
281
|
+
victimServiceId: 0,
|
282
|
+
goal: this.editSafetyPlan.goal,
|
283
|
+
comment: this.editSafetyPlan.comment,
|
284
|
+
modifiedBy: this.staffId,
|
285
|
+
victimServiceStatusId: null,
|
286
|
+
status: null,
|
287
|
+
startDate: null,
|
288
|
+
vVictimServiceDetails: null,
|
289
|
+
victimName: null
|
290
|
+
};
|
291
|
+
this._victimServicesComponent.addSafetyPlan(safetyPlan).subscribe((itms) => {
|
292
|
+
const victimServiceStatus = {
|
293
|
+
victimServiceStatusHistoryId: 0,
|
294
|
+
victimServiceId: itms.victimServiceId,
|
295
|
+
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
296
|
+
startDate: this.editSafetyPlan.startDate,
|
297
|
+
modifiedBy: this.staffId,
|
298
|
+
comment: 'test add safety Plan'
|
299
|
+
};
|
300
|
+
this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe(resp => {
|
301
|
+
this.snackBar.open('Insert status successfully!', '', {
|
302
|
+
duration: 3000,
|
303
|
+
});
|
304
|
+
});
|
305
|
+
this.router.navigate(['saftyPlanDetail', itms.victimServiceId, this.victimId]);
|
306
|
+
});
|
307
|
+
}
|
308
|
+
else {
|
309
|
+
// this.editSafetyPlan.modifiedBy=this.loginStaff.staffId;
|
310
|
+
this.editSafetyPlan.modifiedBy = this.staffId;
|
311
|
+
this._victimServicesComponent.updateSafetyPlan(this.editSafetyPlan).subscribe(resp => {
|
312
|
+
// this.snackBar.open('update Successfully!', '', {
|
313
|
+
// duration: 3000,
|
314
|
+
// });
|
315
|
+
const victimServiceStatus = {
|
316
|
+
victimServiceStatusHistoryId: 0,
|
317
|
+
victimServiceId: this.editSafetyPlan.victimServiceId.toString(),
|
318
|
+
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
319
|
+
startDate: this.editSafetyPlan.startDate,
|
320
|
+
modifiedBy: this.staffId,
|
321
|
+
comment: 'test update safety Plan'
|
322
|
+
};
|
323
|
+
this._victimServicesComponent.addVictimServiceStatus(victimServiceStatus).subscribe();
|
324
|
+
this.router.navigate(['saftyPlanDetail', this.editSafetyPlan.victimServiceId, this.victimId]);
|
325
|
+
});
|
326
|
+
}
|
327
|
+
}
|
328
|
+
back() {
|
329
|
+
console.log('this.victimId');
|
330
|
+
console.log(this.victimId);
|
331
|
+
this.router.navigate(['saftyPlan', this.victimId]);
|
332
|
+
}
|
333
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: VictimSafetyPlanDetailComponent, deps: [{ token: i1.MatDialog }, { token: i2.NgcSmartVictimService }, { token: i3.HttpClient }, { token: i4.MatSnackBar }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.CommonDialogService }, { token: i7.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
334
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: VictimSafetyPlanDetailComponent, selector: "ng-component", providers: [CommonDialogService], ngImport: i0, template: "<mat-card>\r\n <mat-card-header>\r\n\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\r\n </mat-toolbar>\r\n\r\n\r\n <div class='container'>\r\n <form [formGroup]=\"spForm\" #spDetailForm=\"ngForm\" >\r\n\r\n\r\n <div class=\"row\" ><b>Victim Name:</b> {{victimName}} </div>\r\n\r\n\r\n <div class=\"row\" >\r\n <mat-form-field >\r\n <mat-label>Goal:</mat-label>\r\n <input matInput formControlName=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" >\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field>\r\n <mat-label>Goal Status:</mat-label>\r\n <mat-select formControlName=\"goalStatus\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" >\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n\r\n <div class=\"row\">\r\n\r\n <mat-form-field>\r\n <mat-label>Goal Status Date:</mat-label>\r\n <input matInput\r\n formControlName=\"goalStatusDate\"\r\n [matDatepicker]=\"goalStatusDate\"\r\n placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\"\r\n (click)=\"goalStatusDate.open()\"\r\n >\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker>\r\n </mat-form-field>\r\n\r\n\r\n <div class=\"help-block\"\r\n *ngIf=\"spForm.get('goalStatusDate').hasError('date')\r\n && (spForm.get('goalStatusDate').dirty || spForm.get('goalStatusDate').touched)\">\r\n <mat-error>Future Date is <strong>not allowed</strong> for goal status date</mat-error>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row\" >\r\n <!-- <mat-form-field style=\"width: 200px;\"> -->\r\n <!-- <mat-label>Comment:</mat-label>\r\n <textarea mdInput\r\n class=\"textarea-content\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n formControlName=\"comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\"\r\n >\r\n </textarea> -->\r\n <!-- </mat-form-field> -->\r\n\r\n\r\n\r\n <mat-form-field style=\"width: 400px;\">\r\n <mat-label>Comment:</mat-label>\r\n <textarea\r\n class=\"textarea-content\"\r\n matInput\r\n placeholder=\"\"\r\n formControlName=\"comment\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea>\r\n\r\n\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </form>\r\n </div><!--end form-->\r\n\r\n\r\n <br>\r\n\r\n <div class=\"row\"><b>Need and provider:</b><br> (click on a check box to select provider information)\r\n\r\n <mat-list>\r\n <mat-list-item *ngFor=\"let serviceType of victimServiceTypes; let i=index\" >\r\n <mat-checkbox class=\"example-margin\" name=\"victimService\" color =\"primary\" [checked]=\"evaluateSelection(serviceType.victimServiceTypeId)\" (change)=\"isInArray(serviceType.victimServiceTypeId,serviceType.name, $event);\" > {{serviceType.name}}</mat-checkbox>\r\n <div> </div>\r\n <div *ngFor=\"let provider of providerListCollection; let pi = index\" >\r\n <!-- <div *ngIf=\"provider.isDisplay && serviceType.victimServiceTypeId == provider.groupId \" class=\"Row\">\r\n\r\n <div class=\"serviceSelect\"> -->\r\n <!-- <mat-form-field> -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(ngModel)]=\"providerId\" > -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(value)]=\"providerId\" >\r\n <mat-option *ngFor=\" let providerOption of provider.collection\" [value]=\"providerOption.victimProgramProviderId\" >{{providerOption.victimProgramProvider}}</mat-option>\r\n </mat-select> -->\r\n <!-- </mat-form-field> -->\r\n\r\n <!-- </div>\r\n\r\n <div class=\"serviceButton\">\r\n <button mat-stroked-button color=\"primary\" (click)=\"savePlanProvider(serviceType.victimServiceTypeId ,providerId)\">Add Provider</button>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div *ngFor=\" let serviceprovider of editSafetyPlan.vVictimServiceDetails\" >\r\n\r\n <div *ngIf=\"serviceType.victimServiceTypeId===serviceprovider.victimServiceTypeId\" class=\"Row\" >\r\n <!-- . {{ serviceprovider.victimProgramProvider}}<button mat-stroked-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> <br> -->\r\n <div class=\"serviceSelect\" >\r\n . {{ serviceprovider.victimProgramProvider}}\r\n </div>\r\n <div class=\"serviceButton\">\r\n <button mat-stroked-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-list-item>\r\n\r\n </mat-list>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Victim Name:</b> {{victimName}} </div>\r\n <div class='col-md-7'>\r\n\r\n </div>\r\n </div> -->\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'>\r\n <mat-form-field >\r\n <input matInput name=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" required placeholder=\"\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'>\r\n <mat-select name=\"goalStatus\" [style.width]=\"'50%'\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" required>\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status Date:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'>\r\n <input matInput name=\"goalStatusDate\" [matDatepicker]=\"goalStatusDate\" placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker>\r\n </div>\r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Comment:</b></div>\r\n <div class='col-md-7'>\r\n <textarea mdInput placeholder=\"\" rows=\"10\" cols=\"50\" name=\"comment\" [(ngModel)]=\"editSafetyPlan.comment\"></textarea>\r\n </div>\r\n </div> -->\r\n\r\n\r\n <div class='row' >\r\n <div class='col-md-12 text-center'>\r\n <!-- <button type=\"button\" class=\"btn btn-default btn-small\" (click)=\"print()\">Print</button> -->\r\n <button mat-stroked-button color=\"primary\" (click)=\"saveSafetyPlan()\" [disabled]=\"!spForm.valid\">Save</button>\r\n <!-- <button mat-stroked-button color=\"primary\" (click)=\"commondialogRef.close()\">Cancel</button> -->\r\n <button mat-stroked-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div>\r\n </div>\r\n\r\n <!--status hisotry-->\r\n\r\n <mat-table #table [dataSource]=\"victimServiceStatusHistoriesDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"startDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimServiceStatusId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatusId}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"[ 'startDate', 'victimServiceStatusId', 'comment']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:[ 'startDate', 'victimServiceStatusId', 'comment'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n\r\n\r\n</mat-card-content>\r\n</mat-card>\r\n", styles: ["div.serviceSelect{width:500px}div.serviceButton{width:20%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.app-class .mat-mdc-list-item{height:auto}.textarea-content{width:500px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i11.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i11.MatCardHeader, selector: "mat-card-header" }, { kind: "component", type: i12.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i12.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i13.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i14.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: i15.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i15.MatLabel, selector: "mat-label" }, { kind: "directive", type: i15.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i15.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i16.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: i17.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i17.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i17.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i18.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i19.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i20.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i20.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i20.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i20.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i20.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i20.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i20.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i20.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i20.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i20.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
|
335
|
+
}
|
336
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: VictimSafetyPlanDetailComponent, decorators: [{
|
337
|
+
type: Component,
|
338
|
+
args: [{ providers: [CommonDialogService], template: "<mat-card>\r\n <mat-card-header>\r\n\r\n </mat-card-header>\r\n <mat-card-content>\r\n <mat-toolbar color=\"primary\">\r\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\r\n </mat-toolbar>\r\n\r\n\r\n <div class='container'>\r\n <form [formGroup]=\"spForm\" #spDetailForm=\"ngForm\" >\r\n\r\n\r\n <div class=\"row\" ><b>Victim Name:</b> {{victimName}} </div>\r\n\r\n\r\n <div class=\"row\" >\r\n <mat-form-field >\r\n <mat-label>Goal:</mat-label>\r\n <input matInput formControlName=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" >\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field>\r\n <mat-label>Goal Status:</mat-label>\r\n <mat-select formControlName=\"goalStatus\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" >\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n\r\n <div class=\"row\">\r\n\r\n <mat-form-field>\r\n <mat-label>Goal Status Date:</mat-label>\r\n <input matInput\r\n formControlName=\"goalStatusDate\"\r\n [matDatepicker]=\"goalStatusDate\"\r\n placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\"\r\n (click)=\"goalStatusDate.open()\"\r\n >\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker>\r\n </mat-form-field>\r\n\r\n\r\n <div class=\"help-block\"\r\n *ngIf=\"spForm.get('goalStatusDate').hasError('date')\r\n && (spForm.get('goalStatusDate').dirty || spForm.get('goalStatusDate').touched)\">\r\n <mat-error>Future Date is <strong>not allowed</strong> for goal status date</mat-error>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"row\" >\r\n <!-- <mat-form-field style=\"width: 200px;\"> -->\r\n <!-- <mat-label>Comment:</mat-label>\r\n <textarea mdInput\r\n class=\"textarea-content\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n formControlName=\"comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\"\r\n >\r\n </textarea> -->\r\n <!-- </mat-form-field> -->\r\n\r\n\r\n\r\n <mat-form-field style=\"width: 400px;\">\r\n <mat-label>Comment:</mat-label>\r\n <textarea\r\n class=\"textarea-content\"\r\n matInput\r\n placeholder=\"\"\r\n formControlName=\"comment\"\r\n [(ngModel)]=\"editSafetyPlan.comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"8\"\r\n cdkAutosizeMaxRows=\"12\">\r\n </textarea>\r\n\r\n\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </form>\r\n </div><!--end form-->\r\n\r\n\r\n <br>\r\n\r\n <div class=\"row\"><b>Need and provider:</b><br> (click on a check box to select provider information)\r\n\r\n <mat-list>\r\n <mat-list-item *ngFor=\"let serviceType of victimServiceTypes; let i=index\" >\r\n <mat-checkbox class=\"example-margin\" name=\"victimService\" color =\"primary\" [checked]=\"evaluateSelection(serviceType.victimServiceTypeId)\" (change)=\"isInArray(serviceType.victimServiceTypeId,serviceType.name, $event);\" > {{serviceType.name}}</mat-checkbox>\r\n <div> </div>\r\n <div *ngFor=\"let provider of providerListCollection; let pi = index\" >\r\n <!-- <div *ngIf=\"provider.isDisplay && serviceType.victimServiceTypeId == provider.groupId \" class=\"Row\">\r\n\r\n <div class=\"serviceSelect\"> -->\r\n <!-- <mat-form-field> -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(ngModel)]=\"providerId\" > -->\r\n <!-- <mat-select name=\"provider\" id=\"provider.groupId\" [(value)]=\"providerId\" >\r\n <mat-option *ngFor=\" let providerOption of provider.collection\" [value]=\"providerOption.victimProgramProviderId\" >{{providerOption.victimProgramProvider}}</mat-option>\r\n </mat-select> -->\r\n <!-- </mat-form-field> -->\r\n\r\n <!-- </div>\r\n\r\n <div class=\"serviceButton\">\r\n <button mat-stroked-button color=\"primary\" (click)=\"savePlanProvider(serviceType.victimServiceTypeId ,providerId)\">Add Provider</button>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div *ngFor=\" let serviceprovider of editSafetyPlan.vVictimServiceDetails\" >\r\n\r\n <div *ngIf=\"serviceType.victimServiceTypeId===serviceprovider.victimServiceTypeId\" class=\"Row\" >\r\n <!-- . {{ serviceprovider.victimProgramProvider}}<button mat-stroked-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button> <br> -->\r\n <div class=\"serviceSelect\" >\r\n . {{ serviceprovider.victimProgramProvider}}\r\n </div>\r\n <div class=\"serviceButton\">\r\n <button mat-stroked-button color=\"primary\" (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\">Delete</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-list-item>\r\n\r\n </mat-list>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Victim Name:</b> {{victimName}} </div>\r\n <div class='col-md-7'>\r\n\r\n </div>\r\n </div> -->\r\n <!-- <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'>\r\n <mat-form-field >\r\n <input matInput name=\"serviceGoal\" [(ngModel)]=\"editSafetyPlan.goal\" required placeholder=\"\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'>\r\n <mat-select name=\"goalStatus\" [style.width]=\"'50%'\" [(ngModel)]=\"editSafetyPlan.victimServiceStatusId\" required>\r\n <mat-option *ngFor=\" let victimServiceStatu of victimServiceStatus\" [value]=\"victimServiceStatu.victimServiceStatusId\" >{{victimServiceStatu.name}}</mat-option>\r\n </mat-select>\r\n </div>\r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Goal Status Date:<font color=\"red\">*</font></b></div>\r\n <div class='col-md-7'>\r\n <input matInput name=\"goalStatusDate\" [matDatepicker]=\"goalStatusDate\" placeholder=\"Choose a date\" [(ngModel)]=\"editSafetyPlan.startDate\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker>\r\n </div>\r\n </div>\r\n\r\n <div class='row' >\r\n <div class='col-md-5 desc-label'><b>Comment:</b></div>\r\n <div class='col-md-7'>\r\n <textarea mdInput placeholder=\"\" rows=\"10\" cols=\"50\" name=\"comment\" [(ngModel)]=\"editSafetyPlan.comment\"></textarea>\r\n </div>\r\n </div> -->\r\n\r\n\r\n <div class='row' >\r\n <div class='col-md-12 text-center'>\r\n <!-- <button type=\"button\" class=\"btn btn-default btn-small\" (click)=\"print()\">Print</button> -->\r\n <button mat-stroked-button color=\"primary\" (click)=\"saveSafetyPlan()\" [disabled]=\"!spForm.valid\">Save</button>\r\n <!-- <button mat-stroked-button color=\"primary\" (click)=\"commondialogRef.close()\">Cancel</button> -->\r\n <button mat-stroked-button color=\"primary\" (click)=\"back()\">Back</button>\r\n </div>\r\n </div>\r\n\r\n <!--status hisotry-->\r\n\r\n <mat-table #table [dataSource]=\"victimServiceStatusHistoriesDataSource\" class=\"example-table\">\r\n <ng-container matColumnDef=\"startDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"victimServiceStatusId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatusId}} </mat-cell>\r\n </ng-container>\r\n\r\n\r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment}} </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"[ 'startDate', 'victimServiceStatusId', 'comment']\" class=\"example-header-row\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns:[ 'startDate', 'victimServiceStatusId', 'comment'];\" class=\"example-row\"></mat-row>\r\n </mat-table>\r\n\r\n\r\n\r\n\r\n</mat-card-content>\r\n</mat-card>\r\n", styles: ["div.serviceSelect{width:500px}div.serviceButton{width:20%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.app-class .mat-mdc-list-item{height:auto}.textarea-content{width:500px}\n"] }]
|
339
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.NgcSmartVictimService }, { type: i3.HttpClient }, { type: i4.MatSnackBar }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.CommonDialogService }, { type: i7.UntypedFormBuilder }] });
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuRGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zYWZldHlQbGFuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFvQixrQkFBa0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQTtBQUVoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTN0QsTUFBTSxPQUFPLCtCQUErQjtJQWtDMUMsWUFDUyxNQUFpQixFQUNoQix3QkFBK0MsRUFD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QkFDdkIsT0FBTyxFQUFDLHlCQUF5QjtpQkFDaEMsQ0FBQztnQkFFSixJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFHdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQztZQUU1RixDQUFDLENBQ1YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztpSUE5Y1UsK0JBQStCO3FIQUEvQiwrQkFBK0IsdUNBTC9CLENBQUMsbUJBQW1CLENBQUMsMEJDcEJsQyxzK2VBME9BOzsyRkRqTmEsK0JBQStCO2tCQVAzQyxTQUFTO2dDQUVHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlcixWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWaWN0aW1TYWZldHlQbGFuLFZpY3RpbVNlcnZpY2VEZXRhaWwsXHJcbiAgVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnksVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbCxcclxuICBQcm92aWRlckxpc3RDb2xsZWN0aW9uTW9kZWwgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21tb25EaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uL2NvbW1vbi1kaWFsb2cvY29tbW9uLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNlbGVjdGVkT2ZmZW5kZXIsIExvZ2luU3RhZmYgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1jb3JlJztcclxuaW1wb3J0IHsgZGF0ZVZhbGlkYXRvciwgcGFzc0RhdGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zaGFyZWQvdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IFNlcml2ZVByb3ZpZGVyQ29tcG9uZW50fSBmcm9tICcuLi9zYWZldHlQbGFuL3NlcnZpY2VQcm92aWRlci5jb21wb25lbnQnXHJcbmltcG9ydCB7IFByb3ZpZGVyc0RpYWxvZ0RhdGF9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpY3RpbVNhZmV0eVBsYW4uY29tcG9uZW50LmNzcyddXHJcbiBcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBWaWN0aW1TYWZldHlQbGFuRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIGhpZGRlbkFkZE5ld0ZsYWc6IGJvb2xlYW47XHJcbiAgc2FmZXR5UGxhbnM6IFZpY3RpbVNhZmV0eVBsYW5bXTtcclxuICBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuO1xyXG4gIGVkaXRTYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0gPFZpY3RpbVNhZmV0eVBsYW4+e307XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgY29udGFjdFR5cGVzOiBhbnlbXTtcclxuICBjb250YWN0UHVycG9zZXM6IGFueVtdO1xyXG4gIHZpY3RpbVNlcnZpY2VUeXBlczogYW55W107XHJcbiAgdmljdGltU2FmZXR5UGxhbnM6IFZpY3RpbVNhZmV0eVBsYW5bXTtcclxuICB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBhbnlbXTtcclxuICBwcm92aWRlckxpc3Q6IFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXTtcclxuICBwcm92aWRlckxpc3RDb2xsZWN0aW9uOlByb3ZpZGVyTGlzdENvbGxlY3Rpb25Nb2RlbFtdPVtdO1xyXG4gIHZpY3RpbVNlcnZpY2VEZXRhaWw6IFZpY3RpbVNlcnZpY2VEZXRhaWxbXTtcclxuICBpbmR4OmFueTtcclxuICBzZXJ2aWNlQ2hlY2sgPSBbXTtcclxuICB2aWN0aW1OYW1lOiBzdHJpbmc7XHJcbiAgaXNEaXNwbGF5OiBib29sZWFuO1xyXG4gIHN0YWZmSWQ6IG51bWJlcjtcclxuICB2aWN0aW1JZDogbnVtYmVyO1xyXG4gIHZpY3RpbVNlcnZpY2VJZDogbnVtYmVyO1xyXG4gIG9mZmVuZGVySWQ6IG51bWJlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHByaXZhdGUgc3ViOiBhbnk7XHJcbiAgcmVzdWx0OiBhbnk7XHJcbiAgdmljdGltU2VydmljZVN0YXR1c0hpc3Rvcmllc0RhdGFTb3VyY2U9IG5ldyAgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgcHJvdmlkZXJJZDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkOiBzdHJpbmc7XHJcblxyXG5cclxuICBzcEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfdmljdGltU2VydmljZXNDb21wb25lbnQ6IE5nY1NtYXJ0VmljdGltU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICAgXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG5cclxuXHRcclxuXHRcdFx0dGhpcy5zcEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBzZXJ2aWNlR29hbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcdFx0ICBdKSksXHJcbiAgICAgICAgICBnb2FsU3RhdHVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHRcdCAgXSkpLFxyXG4gICAgICAgICAgZ29hbFN0YXR1c0RhdGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsZGF0ZVZhbGlkYXRvcigpXHRcdCAgXSkpLFxyXG4gICAgICAgICAgY29tbWVudDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyxWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zcEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgdGhpcy5zcEZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgXHJcblxyXG4gICAgdmFyIGRhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE7XHJcbiAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhLmxvZ2luU3RhZmY7XHJcbiAgICB0aGlzLnN0YWZmSWQgPSAgdGhpcy5sb2dpblN0YWZmLnN0YWZmSWQ7XHJcblxyXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlSWQgPSBwYXJhbXNbJ3ZpY3RpbVNlcnZpY2VJZCddO1xyXG4gICAgICB0aGlzLnZpY3RpbUlkID0gcGFyYW1zWyd2aWN0aW1JZCddO1xyXG4gXHJcbiAgICB9KTtcclxuICAgXHJcbiAgICB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEaXNwbGF5ID0gZmFsc2U7XHJcbiAgIFxyXG4gXHJcblxyXG4gICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbVNlcnZpY2VUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2VUeXBlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbVNlcnZpY2VTdGF0dXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlU3RhdHVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbU5hbWUgPSBpdGVtcy5maXJzdE5hbWUgKyAnLCAnICsgaXRlbXMubGFzdE5hbWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gXHJcbiAgICAgXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS1ncmFwaFFMLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gdGhpcy5nZXRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8gdGhpcy5wcm92aWRlckxpc3QgPSByZXN1bHQ7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy52aWN0aW1TZXJ2aWNlSWQnKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy52aWN0aW1TZXJ2aWNlSWQpO1xyXG4gICAgIFxyXG4gICAgaWYgKHRoaXMudmljdGltU2VydmljZUlkIT0wKXtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZXModGhpcy52aWN0aW1TZXJ2aWNlSWQpLnN1YnNjcmliZShcclxuICAgICAgICB2aWN0aW1TYWZldHlQbGFucyA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndmljdGltU2FmZXR5UGxhbnMnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbVNhZmV0eVBsYW5zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmVkaXRTYWZldHlQbGFuID0gdmljdGltU2FmZXR5UGxhbnNbMF07XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUlkID0gIHZpY3RpbVNhZmV0eVBsYW5zWzBdLnZpY3RpbUlkO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZWRpdFNhZmV0eVBsYW4nKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFNhZmV0eVBsYW4pO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuZWRpdFNhZmV0eVBsYW4uZ29hbCcpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRTYWZldHlQbGFuWzBdLmdvYWwnKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZWRpdFNhZmV0eVBsYW5bMF0uZ29hbCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFNlcnZpY2VTdGF0dXNIaXN0b3JpZXModGhpcy52aWN0aW1TZXJ2aWNlSWQpLnN1YnNjcmliZShcclxuICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzID0+IHtcclxuICAgICAgICAvLyB0aGlzLnZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXMgPSB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzO1xyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZVN0YXR1c0hpc3Rvcmllc0RhdGFTb3VyY2UuZGF0YSA9IHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRQcm92aWRlcigpO1xyXG4gXHJcbiAgfVxyXG4gIC8vcGFzcyBpbiBpZFxyXG5pc0luQXJyYXkocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleTpzdHJpbmcsIHNlcnZpY2VUeXBlTmFtZTogc3RyaW5nLCBldmVudCl7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3Byb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXknKTtcclxuICAgIGNvbnNvbGUubG9nKHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXkpO1xyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZygnc2VydmljZVR5cGVOYW1lJyk7XHJcbiAgICBjb25zb2xlLmxvZyhzZXJ2aWNlVHlwZU5hbWUpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdldmVudC5zb3VyY2UudmFsdWUnKTtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50LmNoZWNrZWQpO1xyXG5cclxuICAgIGlmIChldmVudC5jaGVja2VkID09IHRydWUpe1xyXG5cclxuICAgICAgZm9yKGxldCBqPTA7ajx0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb24ubGVuZ3RoO2orKyl7XHJcbiAgICAgICAgaWYocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleT09dGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uW2pdLmdyb3VwSWQpe1xyXG4gICAgICAgICAgdGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uW2pdLmlzRGlzcGxheT0hdGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uW2pdLmlzRGlzcGxheTtcclxuXHJcbiAgICAgXHJcblxyXG4gICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlcml2ZVByb3ZpZGVyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgIGRhdGE6IDxQcm92aWRlcnNEaWFsb2dEYXRhPntcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgIHNlcnZpY2VUeXBlOnNlcnZpY2VUeXBlTmFtZSxcclxuICAgICAgICAgICBzZXJ2aWNlVHlwZUlkOiBwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5LFxyXG4gICAgICAgICAgIHByb3ZpZGVyQ29sbGVjdGlvbnM6IFsuLi50aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25dLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdmb3JtRmllbGRXaWR0aDQ4MCcsXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBkaWFsb2cgd2FzIGNsb3NlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBkaWFsb2cgd2FzIGNsb3NlZCwgaW5zaWRlIHJlc3VsdCcpO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVQbGFuUHJvdmlkZXIocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleSxyZXN1bHQudm90ZWVQcm92aWRlcklkKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgICAvLyByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfS8vaWYgZXZlbnQuY2hlY2tlZCA9PSB0cnVlXHJcbiAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsIHRoaXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcbiAgICAgIFxyXG4gIH1cclxuXHJcbmxvYWRQcm92aWRlcigpeyBcclxuXHJcbiB0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb249W107XHJcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXR2VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzKClcclxuICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAocHJvdmlkZXJMaXN0OlZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXSApPT57IFxyXG4gICAgICAgIGlmKHByb3ZpZGVyTGlzdCl7XHJcbiAgIFxyXG4gICAgICAgICAgbGV0IHByb3ZpZGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgICBmb3IobGV0IGk9MDtpPHByb3ZpZGVyTGlzdC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXSkge1xyXG4gICAgICAgICAgICAgIHByb3ZpZGVyc1twcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZF0gPSBbXTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgIGlmICggdGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHMgIT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajx0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICAgICAgICBpZiAoIHByb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkID09IHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzW2pdLnZpY3RpbVNlcnZpY2VJZC50b1N0cmluZygpICl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNwbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb24ucHVzaCh7IGdyb3VwSWQ6IHByb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkLGlzRGlzcGxheTp0aGlzLmlzRGlzcGxheSwgY29sbGVjdGlvbjogcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXS5wdXNoKHByb3ZpZGVyTGlzdFtpXSk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG4vLy0tLS0tLS0tLS0tLS0tLWdyYXBoUUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyAgIGdldFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycygpOiBPYnNlcnZhYmxlPFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXT4ge1xyXG4vLyAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBgXHJcbi8vICAgICAgICAge1xyXG4vLyAgICAgICAgICAgZmluZFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycyB7XHJcbi8vICAgICAgICAgICAgICAgICBkYXRhIHtcclxuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJJZFxyXG4vLyAgICAgICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlVHlwZVxyXG4vLyAgICAgICAgICAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJcclxuLy8gICAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfWA7XHJcbiBcclxuLy8gICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGVudmlyb25tZW50LnNtYXJ0QXBpVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxyXG4vLyAgICAgICAgIC5tYXAocmVzdWx0ID0+IHtcclxuLy8gICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGEuZmluZFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycy5kYXRhO1xyXG4vLyAgICAgfSk7XHJcbi8vIH1cclxuXHJcbiAgZXZhbHVhdGVTZWxlY3Rpb24odmljdGltU2VydmljZVR5cGVJZDogc3RyaW5nKSB7XHJcbiAgIGlmICh0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscykge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzLmZpbmRJbmRleChyID0+IHIudmljdGltU2VydmljZVR5cGVJZCA9PT0gdmljdGltU2VydmljZVR5cGVJZCkgPj0gMDtcclxuICAgfVxyXG4gIH1cclxuXHJcblxyXG5zYXZlUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHN0cmluZyx2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgY29uc29sZS5sb2coJ3NhdmVQbGFuUHJvdmlkZXInKTtcclxuICBjb25zb2xlLmxvZyh2aWN0aW1TZXJ2aWNlVHlwZUlkKTtcclxuICBjb25zb2xlLmxvZyh2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZCk7XHJcblxyXG4gIGlmICh2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZCA9PT0gXCJcIiB8fCB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZD09PSBudWxsIHx8IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkID09PSB1bmRlZmluZWQpe1xyXG4gIFxyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKCdQbGVhc2UgcGljayBhIHByb2dyYW0gb24gdGhlIGRyb3AgZG93biBsaXN0ICEnLCAnJywgeyBkdXJhdGlvbjogMTIwLH0pO1xyXG4gICAvLyBhbGVydCgnUGxlYXNlIHBpY2sgYSBwcm9ncmFtIG9uIHRoZSBkcm9wIGRvd24gbGlzdCAhJyk7XHJcblxyXG4gIH1lbHNlXHJcbiAge1xyXG4gICAgXHJcbiAgaWYgKCB0aGlzLnZpY3RpbVNlcnZpY2VJZCA9PSAwKXtcclxuICAgLy9pbnNlcnRcclxuICAgY29uc29sZS5sb2coJ2luc2VydCBuZXcgcGxhbicpO1xyXG4gICBjb25zdCBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0ge1xyXG4gICAgdmljdGltSWQ6dGhpcy52aWN0aW1JZCxcclxuICAgIGZ1bGxOYW1lOiBudWxsLFxyXG4gICAgdmljdGltU2VydmljZUlkOiAwLFxyXG4gICAgZ29hbDp0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwsXHJcbiAgICBjb21tZW50OiB0aGlzLmVkaXRTYWZldHlQbGFuLmNvbW1lbnQsXHJcbiAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogbnVsbCxcclxuICAgIHN0YXR1czogbnVsbCxcclxuICAgIHN0YXJ0RGF0ZTogbnVsbCxcclxuICAgIHZWaWN0aW1TZXJ2aWNlRGV0YWlsczogbnVsbCxcclxuICAgIHZpY3RpbU5hbWU6IG51bGxcclxufTtcclxudGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkU2FmZXR5UGxhbihzYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgKGl0bXM6YW55KT0+e1xyXG4gICAgY29uc3QgdmljdGltU2VydmljZVN0YXR1czogVmljdGltU2VydmljZVN0YXR1c0hpc3Rvcnk9IHtcclxuICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICB2aWN0aW1TZXJ2aWNlSWQ6IGl0bXMudmljdGltU2VydmljZUlkLFxyXG4gICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZVN0YXR1c0lkICxcclxuICAgICAgc3RhcnREYXRlOiB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZSxcclxuICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgIGNvbW1lbnQ6J3Rlc3QgYWRkIHNhZmV0eSBwbGFuJ1xyXG4gICAgICB9O1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFZpY3RpbVNlcnZpY2VTdGF0dXModmljdGltU2VydmljZVN0YXR1cykuc3Vic2NyaWJlKFxyXG4gXHJcbiAgICAgICgpID0+e1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGVjayBpdG1zLnZpY3RpbVNlcnZpY2VJZCBpbmlzaWRlIGFkZCB2aWN0aW0gc2VyaXZlIHN0YXR1cycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGl0bXMudmljdGltU2VydmljZUlkKTtcclxuXHJcbiAgICAgICAgY29uc3QgdmljdGltU2VydmljZURldGFpbDogVmljdGltU2VydmljZURldGFpbCA9IHtcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgICB2aWN0aW1TZXJ2aWNlRGV0YWlsSWQ6IDAsXHJcbiAgICAgICAgICB2aWN0aW1TZXJ2aWNlVHlwZUlkOiB2aWN0aW1TZXJ2aWNlVHlwZUlkLFxyXG4gICAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVySWQ6IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkLFxyXG4gICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVyOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGQgcGxhbiBwcm92aWRlciBoZXJlIGF0IGluc2VydCcpO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VEZXRhaWwpLnN1YnNjcmliZShcclxuXHJcbiAgICAgICAgICAoKSA9PntcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgaXRtcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgKTtcclxuICAgXHJcbiAgXHJcbiAgXHJcbiAgfVxyXG5cclxuXHJcbik7XHJcbiAgfVxyXG4gIGVsc2UvL3VwZGF0ZVxyXG4gICAge1xyXG4gICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlRGV0YWlsOiBWaWN0aW1TZXJ2aWNlRGV0YWlsID0ge1xyXG4gICAgICAgIHZpY3RpbVNlcnZpY2VJZDogdGhpcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgdmljdGltU2VydmljZURldGFpbElkOiAwLFxyXG4gICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHZpY3RpbVNlcnZpY2VUeXBlSWQsXHJcbiAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVySWQ6IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkLFxyXG4gICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZCxcclxuICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXI6IG51bGxcclxuICAgICAgfTtcclxuICAgICAgY29uc29sZS5sb2coJ2FkZCBwbGFuIHByb3ZpZGVyIGhlcmUgYXQgdXBkYXRlJyk7XHJcbiAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFBsYW5Qcm92aWRlcih2aWN0aW1TZXJ2aWNlRGV0YWlsKS5zdWJzY3JpYmUoXHJcblxyXG4gICAgICAgICgpID0+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICB0aGlzLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuXHJcbiAgZGVsZXRlUHJvdmlkZXIodmljdGltUHJvZ3JhbVByb3ZpZGVySWQ6IHN0cmluZyl7XHJcblxyXG4gICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAuY29uZmlybSgnJywgJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHByb3ZpZGVyPycsICdZZXMnLCAnTm8nKVxyXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHQpIHtcclxuICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmRlbGV0ZVByb3ZpZGVyKHZpY3RpbVByb2dyYW1Qcm92aWRlcklkLCB0aGlzLnN0YWZmSWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignZGVsZXRlIHByb3ZpZGVyIFN1Y2Nlc3NmdWxseSAhJywgJycsIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgIH0pO1xyXG4gXHJcbiAgICAvLyBsb2NhdGlvbi5yZWxvYWQoKTtcclxuXHJcbiAgfVxyXG5zYXZlU2FmZXR5UGxhbigpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZUlkID09PSB1bmRlZmluZWQgKSB7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2FmZXR5UGxhbjogVmljdGltU2FmZXR5UGxhbiA9IHtcclxuICAgICAgICAgICAgdmljdGltSWQ6IHRoaXMudmljdGltSWQsXHJcbiAgICAgICAgICAgIGZ1bGxOYW1lOiBudWxsLFxyXG4gICAgICAgICAgICB2aWN0aW1TZXJ2aWNlSWQ6IDAsXHJcbiAgICAgICAgICAgIGdvYWw6dGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsLFxyXG4gICAgICAgICAgICBjb21tZW50OiB0aGlzLmVkaXRTYWZldHlQbGFuLmNvbW1lbnQsXHJcbiAgICAgICAgICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICAgICAgc3RhcnREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICB2VmljdGltU2VydmljZURldGFpbHM6IG51bGwsXHJcbiAgICAgICAgICAgIHZpY3RpbU5hbWU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFNhZmV0eVBsYW4oc2FmZXR5UGxhbikuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKGl0bXM6YW55KT0+e1xyXG4gICAgICAgICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeT0ge1xyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5SWQ6MCxcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlSWQ6IGl0bXMudmljdGltU2VydmljZUlkLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgLFxyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5lZGl0U2FmZXR5UGxhbi5zdGFydERhdGUsXHJcbiAgICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgICAgY29tbWVudDondGVzdCBhZGQgc2FmZXR5IFBsYW4nXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFZpY3RpbVNlcnZpY2VTdGF0dXModmljdGltU2VydmljZVN0YXR1cykuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHJlc3A9PntcclxuICAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignSW5zZXJ0IHN0YXR1cyBzdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgIGl0bXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5lZGl0U2FmZXR5UGxhbi5tb2RpZmllZEJ5PXRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xyXG4gICAgICB0aGlzLmVkaXRTYWZldHlQbGFuLm1vZGlmaWVkQnkgPXRoaXMuc3RhZmZJZDtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQudXBkYXRlU2FmZXR5UGxhbih0aGlzLmVkaXRTYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAvLyAgdGhpcy5zbmFja0Jhci5vcGVuKCd1cGRhdGUgU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICAgIC8vICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgICAgLy8gICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VTdGF0dXM6IFZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5PSB7XHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZVN0YXR1c0lkICxcclxuICAgICAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlLFxyXG4gICAgICAgICAgICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgICAgICAgICAgIGNvbW1lbnQ6J3Rlc3QgdXBkYXRlIHNhZmV0eSBQbGFuJ1xyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRWaWN0aW1TZXJ2aWNlU3RhdHVzKHZpY3RpbVNlcnZpY2VTdGF0dXMpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBcclxuICB9XHJcblxyXG4gIGJhY2soKXtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUlkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUlkKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuJywgdGhpcy52aWN0aW1JZF0pOyBcclxuICB9XHJcbiBcclxuXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZD5cclxuICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPG1hdC10b29sYmFyICBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiY2FyZC1oZWFkZXJcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jaztcIj5TYWZldHkgUGxhbjwvaDQ+XHJcbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb250YWluZXInPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3BGb3JtXCIgI3NwRGV0YWlsRm9ybT1cIm5nRm9ybVwiID5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiID48Yj5WaWN0aW0gTmFtZTo8L2I+IHt7dmljdGltTmFtZX19IDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkdvYWw6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgIGZvcm1Db250cm9sTmFtZT1cInNlcnZpY2VHb2FsXCIgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi5nb2FsXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R29hbCBTdGF0dXM6PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgIGZvcm1Db250cm9sTmFtZT1cImdvYWxTdGF0dXNcIiAgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWRcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwiIGxldCB2aWN0aW1TZXJ2aWNlU3RhdHUgb2YgdmljdGltU2VydmljZVN0YXR1c1wiIFt2YWx1ZV09XCJ2aWN0aW1TZXJ2aWNlU3RhdHUudmljdGltU2VydmljZVN0YXR1c0lkXCIgPnt7dmljdGltU2VydmljZVN0YXR1Lm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+R29hbCBTdGF0dXMgRGF0ZTo8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdvYWxTdGF0dXNEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZ29hbFN0YXR1c0RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZSBhIGRhdGVcIiBbKG5nTW9kZWwpXT1cImVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb2FsU3RhdHVzRGF0ZS5vcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImdvYWxTdGF0dXNEYXRlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZ29hbFN0YXR1c0RhdGU+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3BGb3JtLmdldCgnZ29hbFN0YXR1c0RhdGUnKS5oYXNFcnJvcignZGF0ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChzcEZvcm0uZ2V0KCdnb2FsU3RhdHVzRGF0ZScpLmRpcnR5IHx8IHNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJykudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvcj5GdXR1cmUgRGF0ZSBpcyA8c3Ryb25nPm5vdCBhbGxvd2VkPC9zdHJvbmc+IGZvciBnb2FsIHN0YXR1cyBkYXRlPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1sYWJlbD5Db21tZW50OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbWRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHRhcmVhLWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRTYWZldHlQbGFuLmNvbW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNaW5Sb3dzPVwiOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWF4Um93cz1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPiAgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogNDAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Db21tZW50OjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dGFyZWEtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi5jb21tZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtUZXh0YXJlYUF1dG9zaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F1dG9zaXplPVwiY2RrVGV4dGFyZWFBdXRvc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNaW5Sb3dzPVwiOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48IS0tZW5kIGZvcm0tLT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48Yj5OZWVkIGFuZCBwcm92aWRlcjo8L2I+PGJyPiAoY2xpY2sgb24gYSBjaGVjayBib3ggdG8gc2VsZWN0IHByb3ZpZGVyIGluZm9ybWF0aW9uKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKm5nRm9yPVwibGV0IHNlcnZpY2VUeXBlIG9mIHZpY3RpbVNlcnZpY2VUeXBlczsgbGV0IGk9aW5kZXhcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImV4YW1wbGUtbWFyZ2luXCIgbmFtZT1cInZpY3RpbVNlcnZpY2VcIiAgY29sb3IgPVwicHJpbWFyeVwiIFtjaGVja2VkXT1cImV2YWx1YXRlU2VsZWN0aW9uKHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQpXCIgIChjaGFuZ2UpPVwiaXNJbkFycmF5KHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQsc2VydmljZVR5cGUubmFtZSwgJGV2ZW50KTtcIiA+IHt7c2VydmljZVR5cGUubmFtZX19PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gJm5ic3A7Jm5ic3A7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb3ZpZGVyIG9mIHByb3ZpZGVyTGlzdENvbGxlY3Rpb247IGxldCBwaSA9IGluZGV4XCIgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInByb3ZpZGVyLmlzRGlzcGxheSAmJiBzZXJ2aWNlVHlwZS52aWN0aW1TZXJ2aWNlVHlwZUlkID09IHByb3ZpZGVyLmdyb3VwSWQgXCIgY2xhc3M9XCJSb3dcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2VTZWxlY3RcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LXNlbGVjdCAgbmFtZT1cInByb3ZpZGVyXCIgaWQ9XCJwcm92aWRlci5ncm91cElkXCIgWyhuZ01vZGVsKV09XCJwcm92aWRlcklkXCIgPiAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtc2VsZWN0ICBuYW1lPVwicHJvdmlkZXJcIiBpZD1cInByb3ZpZGVyLmdyb3VwSWRcIiBbKHZhbHVlKV09XCJwcm92aWRlcklkXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCIgbGV0IHByb3ZpZGVyT3B0aW9uIG9mIHByb3ZpZGVyLmNvbGxlY3Rpb25cIiBbdmFsdWVdPVwicHJvdmlkZXJPcHRpb24udmljdGltUHJvZ3JhbVByb3ZpZGVySWRcIiA+e3twcm92aWRlck9wdGlvbi52aWN0aW1Qcm9ncmFtUHJvdmlkZXJ9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L21hdC1mb3JtLWZpZWxkPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXJ2aWNlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzYXZlUGxhblByb3ZpZGVyKHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQgLHByb3ZpZGVySWQpXCI+QWRkIFByb3ZpZGVyPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cIiBsZXQgc2VydmljZXByb3ZpZGVyIG9mIGVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlsc1wiICA+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VydmljZVR5cGUudmljdGltU2VydmljZVR5cGVJZD09PXNlcnZpY2Vwcm92aWRlci52aWN0aW1TZXJ2aWNlVHlwZUlkXCIgIGNsYXNzPVwiUm93XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gLiB7eyBzZXJ2aWNlcHJvdmlkZXIudmljdGltUHJvZ3JhbVByb3ZpZGVyfX08YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVsZXRlUHJvdmlkZXIoc2VydmljZXByb3ZpZGVyLnZpY3RpbVNlcnZpY2VEZXRhaWxJZClcIj5EZWxldGU8L2J1dHRvbj4gPGJyPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VydmljZVNlbGVjdFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHt7IHNlcnZpY2Vwcm92aWRlci52aWN0aW1Qcm9ncmFtUHJvdmlkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXJ2aWNlQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVsZXRlUHJvdmlkZXIoc2VydmljZXByb3ZpZGVyLnZpY3RpbVNlcnZpY2VEZXRhaWxJZClcIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz0ncm93JyA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTUgZGVzYy1sYWJlbCc+PGI+VmljdGltIE5hbWU6PC9iPiB7e3ZpY3RpbU5hbWV9fSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNyc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz0ncm93JyA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTUgZGVzYy1sYWJlbCc+PGI+R29hbDo8Zm9udCBjb2xvcj1cInJlZFwiPio8L2ZvbnQ+PC9iPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC03Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwic2VydmljZUdvYWxcIiBbKG5nTW9kZWwpXT1cImVkaXRTYWZldHlQbGFuLmdvYWxcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdyb3cnID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNSBkZXNjLWxhYmVsJz48Yj5Hb2FsIFN0YXR1czo8Zm9udCBjb2xvcj1cInJlZFwiPio8L2ZvbnQ+PC9iPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC03Jz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBuYW1lPVwiZ29hbFN0YXR1c1wiICBbc3R5bGUud2lkdGhdPVwiJzUwJSdcIiAgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWRcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwiIGxldCB2aWN0aW1TZXJ2aWNlU3RhdHUgb2YgdmljdGltU2VydmljZVN0YXR1c1wiIFt2YWx1ZV09XCJ2aWN0aW1TZXJ2aWNlU3RhdHUudmljdGltU2VydmljZVN0YXR1c0lkXCIgPnt7dmljdGltU2VydmljZVN0YXR1Lm5hbWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdyb3cnID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNSBkZXNjLWxhYmVsJz48Yj5Hb2FsIFN0YXR1cyBEYXRlOjxmb250IGNvbG9yPVwicmVkXCI+KjwvZm9udD48L2I+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTcnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9XCJnb2FsU3RhdHVzRGF0ZVwiIFttYXREYXRlcGlja2VyXT1cImdvYWxTdGF0dXNEYXRlXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgYSBkYXRlXCIgWyhuZ01vZGVsKV09XCJlZGl0U2FmZXR5UGxhbi5zdGFydERhdGVcIiAgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImdvYWxTdGF0dXNEYXRlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2dvYWxTdGF0dXNEYXRlPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncm93JyA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTUgZGVzYy1sYWJlbCc+PGI+Q29tbWVudDo8L2I+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTcnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG1kSW5wdXQgcGxhY2Vob2xkZXI9XCJcIiAgcm93cz1cIjEwXCIgY29scz1cIjUwXCIgbmFtZT1cImNvbW1lbnRcIiBbKG5nTW9kZWwpXT1cImVkaXRTYWZldHlQbGFuLmNvbW1lbnRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncm93JyA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTEyIHRleHQtY2VudGVyJz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbWFsbFwiIChjbGljayk9XCJwcmludCgpXCI+UHJpbnQ8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmVTYWZldHlQbGFuKClcIiBbZGlzYWJsZWRdPVwiIXNwRm9ybS52YWxpZFwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICZuYnNwOyZuYnNwOzxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICAoY2xpY2spPVwiY29tbW9uZGlhbG9nUmVmLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLXN0YXR1cyBoaXNvdHJ5LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWJsZSAjdGFibGUgW2RhdGFTb3VyY2VdPVwidmljdGltU2VydmljZVN0YXR1c0hpc3Rvcmllc0RhdGFTb3VyY2VcIiBjbGFzcz1cImV4YW1wbGUtdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN0YXJ0RGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPlN0YXJ0IERhdGU8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+IHt7cm93LnN0YXJ0RGF0ZSB8IGRhdGV9fSA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1TZXJ2aWNlU3RhdHVzSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+U3RhdHVzPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cudmljdGltU2VydmljZVN0YXR1c0lkfX0gPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY29tbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5Db21tZW50PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuY29tbWVudH19IDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWyAnc3RhcnREYXRlJywgJ3ZpY3RpbVNlcnZpY2VTdGF0dXNJZCcsICdjb21tZW50J11cIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6WyAnc3RhcnREYXRlJywgJ3ZpY3RpbVNlcnZpY2VTdGF0dXNJZCcsICdjb21tZW50J107XCIgY2xhc3M9XCJleGFtcGxlLXJvd1wiPjwvbWF0LXJvdz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYmxlPlxyXG5cclxuXHJcblxyXG5cclxuPC9tYXQtY2FyZC1jb250ZW50PlxyXG48L21hdC1jYXJkPlxyXG4iXX0=
|