@hmcts/ccd-case-ui-toolkit 5.0.27-angular11-upgrade → 5.0.29-angular11-upgrade
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +11134 -10972
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
- package/esm2015/lib/app.config.js +4 -1
- package/esm2015/lib/shared/components/case-editor/case-access-utils/index.js +6 -4
- package/esm2015/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.js +2 -10
- package/esm2015/lib/shared/components/case-editor/case-editor.module.js +35 -26
- package/esm2015/lib/shared/components/case-editor/services/case.notifier.js +36 -4
- package/esm2015/lib/shared/components/case-editor/services/cases.service.js +58 -58
- package/esm2015/lib/shared/components/case-editor/services/work-allocation.service.js +50 -11
- package/esm2015/lib/shared/components/case-history/case-history.component.js +2 -11
- package/esm2015/lib/shared/components/case-history/case-history.module.js +11 -1
- package/esm2015/lib/shared/components/case-timeline/case-timeline.component.js +2 -5
- package/esm2015/lib/shared/components/case-timeline/case-timeline.module.js +5 -1
- package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js +86 -58
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.js +11 -8
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.js +5 -5
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +2 -12
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.js +3 -3
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +13 -9
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.js +2 -2
- package/esm2015/lib/shared/components/case-viewer/case-viewer.component.js +13 -33
- package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +32 -15
- package/esm2015/lib/shared/components/case-viewer/services/case.resolver.js +38 -23
- package/esm2015/lib/shared/components/event-start/event-guard/event-start.guard.js +20 -30
- package/esm2015/lib/shared/components/loading-spinner/index.js +2 -1
- package/esm2015/lib/shared/components/loading-spinner/loading-spinner.module.js +27 -0
- package/esm2015/lib/shared/components/palette/document/write-document-field.component.js +2 -5
- package/esm2015/lib/shared/components/palette/palette.module.js +2 -1
- package/esm2015/lib/shared/components/search-result/search-result.component.js +2 -11
- package/esm2015/lib/shared/components/search-result/search-result.module.js +11 -1
- package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.component.js +2 -6
- package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.module.js +6 -1
- package/esm2015/lib/shared/domain/work-allocation/index.js +2 -1
- package/esm2015/lib/shared/domain/work-allocation/wa-service-config.model.js +2 -0
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js +9883 -9735
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
- package/lib/app.config.d.ts +2 -0
- package/lib/app.config.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-access-utils/index.d.ts +2 -2
- package/lib/shared/components/case-editor/case-access-utils/index.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-editor.module.d.ts +12 -11
- package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/case.notifier.d.ts +10 -3
- package/lib/shared/components/case-editor/services/case.notifier.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/cases.service.d.ts +19 -25
- package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/work-allocation.service.d.ts +6 -5
- package/lib/shared/components/case-editor/services/work-allocation.service.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts +5 -1
- package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts +4 -2
- package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +4 -2
- package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-viewer.component.d.ts +5 -3
- package/lib/shared/components/case-viewer/case-viewer.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts +14 -13
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/services/case.resolver.d.ts +11 -9
- package/lib/shared/components/case-viewer/services/case.resolver.d.ts.map +1 -1
- package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts +3 -5
- package/lib/shared/components/event-start/event-guard/event-start.guard.d.ts.map +1 -1
- package/lib/shared/components/loading-spinner/index.d.ts +1 -0
- package/lib/shared/components/loading-spinner/index.d.ts.map +1 -1
- package/lib/shared/components/loading-spinner/loading-spinner.module.d.ts +9 -0
- package/lib/shared/components/loading-spinner/loading-spinner.module.d.ts.map +1 -0
- package/lib/shared/domain/work-allocation/index.d.ts +1 -0
- package/lib/shared/domain/work-allocation/index.d.ts.map +1 -1
- package/lib/shared/domain/work-allocation/wa-service-config.model.d.ts +9 -0
- package/lib/shared/domain/work-allocation/wa-service-config.model.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -5,26 +5,16 @@ import { throwError } from 'rxjs';
|
|
|
5
5
|
import { catchError, finalize, map, tap } from 'rxjs/operators';
|
|
6
6
|
import { AbstractAppConfig } from '../../../../app.config';
|
|
7
7
|
import { ShowCondition } from '../../../directives';
|
|
8
|
-
import { CaseEventTrigger } from '../../../domain
|
|
9
|
-
import {
|
|
10
|
-
import { FieldsUtils } from '../../../services/fields/fields.utils';
|
|
11
|
-
import { HttpErrorService } from '../../../services/http/http-error.service';
|
|
12
|
-
import { HttpService } from '../../../services/http/http.service';
|
|
13
|
-
import { LoadingService } from '../../../services/loading/loading.service';
|
|
14
|
-
import { OrderService } from '../../../services/order/order.service';
|
|
15
|
-
import { SessionStorageService } from '../../../services/session/session-storage.service';
|
|
8
|
+
import { CaseEventTrigger, Draft } from '../../../domain';
|
|
9
|
+
import { FieldsUtils, HttpErrorService, HttpService, LoadingService, OrderService, SessionStorageService } from '../../../services';
|
|
16
10
|
import { CaseAccessUtils } from '../case-access-utils';
|
|
17
11
|
import { WizardPageFieldToCaseFieldMapper } from './wizard-page-field-to-case-field.mapper';
|
|
18
12
|
import { WorkAllocationService } from './work-allocation.service';
|
|
19
13
|
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "../../../services
|
|
14
|
+
import * as i1 from "../../../services";
|
|
21
15
|
import * as i2 from "../../../../app.config";
|
|
22
|
-
import * as i3 from "
|
|
23
|
-
import * as i4 from "
|
|
24
|
-
import * as i5 from "./wizard-page-field-to-case-field.mapper";
|
|
25
|
-
import * as i6 from "./work-allocation.service";
|
|
26
|
-
import * as i7 from "../../../services/loading/loading.service";
|
|
27
|
-
import * as i8 from "../../../services/session/session-storage.service";
|
|
16
|
+
import * as i3 from "./wizard-page-field-to-case-field.mapper";
|
|
17
|
+
import * as i4 from "./work-allocation.service";
|
|
28
18
|
export class CasesService {
|
|
29
19
|
constructor(http, appConfig, orderService, errorService, wizardPageFieldToCaseFieldMapper, workAllocationService, loadingService, sessionStorageService) {
|
|
30
20
|
this.http = http;
|
|
@@ -35,11 +25,20 @@ export class CasesService {
|
|
|
35
25
|
this.workAllocationService = workAllocationService;
|
|
36
26
|
this.loadingService = loadingService;
|
|
37
27
|
this.sessionStorageService = sessionStorageService;
|
|
38
|
-
/**
|
|
39
|
-
* @deprecated Use `CasesService::getCaseView` instead
|
|
40
|
-
*/
|
|
41
28
|
this.get = this.getCaseView;
|
|
42
29
|
}
|
|
30
|
+
static updateChallengedAccessRequestAttributes(httpClient, caseId, attributesToUpdate) {
|
|
31
|
+
return httpClient.post(`/api/challenged-access-request/update-attributes`, {
|
|
32
|
+
caseId,
|
|
33
|
+
attributesToUpdate
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
static updateSpecificAccessRequestAttributes(httpClient, caseId, attributesToUpdate) {
|
|
37
|
+
return httpClient.post(`/api/specific-access-request/update-attributes`, {
|
|
38
|
+
caseId,
|
|
39
|
+
attributesToUpdate
|
|
40
|
+
});
|
|
41
|
+
}
|
|
43
42
|
getCaseView(jurisdictionId, caseTypeId, caseId) {
|
|
44
43
|
const url = this.appConfig.getApiUrl()
|
|
45
44
|
+ `/caseworkers/:uid`
|
|
@@ -154,43 +153,6 @@ export class CasesService {
|
|
|
154
153
|
return throwError(error);
|
|
155
154
|
}));
|
|
156
155
|
}
|
|
157
|
-
getCourtOrHearingCentreName(locationId) {
|
|
158
|
-
return this.http.get(`${this.appConfig.getLocationRefApiUrl()}/building-locations?epimms_id=${locationId}`);
|
|
159
|
-
}
|
|
160
|
-
createChallengedAccessRequest(caseId, request) {
|
|
161
|
-
// Assignment API endpoint
|
|
162
|
-
const userInfoStr = this.sessionStorageService.getItem('userDetails');
|
|
163
|
-
const camUtils = new CaseAccessUtils();
|
|
164
|
-
let userInfo;
|
|
165
|
-
if (userInfoStr) {
|
|
166
|
-
userInfo = JSON.parse(userInfoStr);
|
|
167
|
-
}
|
|
168
|
-
const roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
|
|
169
|
-
const roleName = camUtils.getAMRoleName('challenged', roleCategory);
|
|
170
|
-
const beginTime = new Date();
|
|
171
|
-
const endTime = new Date(new Date().setUTCHours(23, 59, 59, 999));
|
|
172
|
-
const id = userInfo.id ? userInfo.id : userInfo.uid;
|
|
173
|
-
const payload = camUtils.getAMPayload(id, id, roleName, roleCategory, 'CHALLENGED', caseId, request, beginTime, endTime);
|
|
174
|
-
return this.http.post(`/api/challenged-access-request`, payload);
|
|
175
|
-
}
|
|
176
|
-
createSpecificAccessRequest(caseId, sar) {
|
|
177
|
-
// Assignment API endpoint
|
|
178
|
-
const userInfoStr = this.sessionStorageService.getItem('userDetails');
|
|
179
|
-
const camUtils = new CaseAccessUtils();
|
|
180
|
-
let userInfo;
|
|
181
|
-
if (userInfoStr) {
|
|
182
|
-
userInfo = JSON.parse(userInfoStr);
|
|
183
|
-
}
|
|
184
|
-
const roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
|
|
185
|
-
const roleName = camUtils.getAMRoleName('specific', roleCategory);
|
|
186
|
-
const id = userInfo.id ? userInfo.id : userInfo.uid;
|
|
187
|
-
const payload = camUtils.getAMPayload(null, id, roleName, roleCategory, 'SPECIFIC', caseId, sar);
|
|
188
|
-
payload.roleRequest = Object.assign(Object.assign({}, payload.roleRequest), { process: 'specific-access', replaceExisting: true, assignerId: payload.requestedRoles[0].actorId, reference: `${caseId}/${roleName}/${payload.requestedRoles[0].actorId}` });
|
|
189
|
-
payload.requestedRoles[0] = Object.assign(Object.assign({}, payload.requestedRoles[0]), { roleName: 'specific-access-requested', roleCategory, classification: 'PRIVATE', endTime: new Date(new Date().setDate(new Date().getDate() + 30)), beginTime: null, grantType: 'BASIC', readOnly: true });
|
|
190
|
-
payload.requestedRoles[0].attributes = Object.assign(Object.assign({}, payload.requestedRoles[0].attributes), { requestedRole: roleName });
|
|
191
|
-
payload.requestedRoles[0].notes[0] = Object.assign(Object.assign({}, payload.requestedRoles[0].notes[0]), { userId: payload.requestedRoles[0].actorId });
|
|
192
|
-
return this.http.post(`/api/specific-access-request`, payload);
|
|
193
|
-
}
|
|
194
156
|
buildEventTriggerUrl(caseTypeId, eventTriggerId, caseId, ignoreWarning) {
|
|
195
157
|
let url = this.appConfig.getCaseDataUrl() + `/internal`;
|
|
196
158
|
if (Draft.isDraft(caseId)) {
|
|
@@ -250,6 +212,44 @@ export class CasesService {
|
|
|
250
212
|
}
|
|
251
213
|
return false;
|
|
252
214
|
}
|
|
215
|
+
getCourtOrHearingCentreName(locationId) {
|
|
216
|
+
return this.http.post(`/api/locations/getLocationsById`, { locations: [{ locationId }] });
|
|
217
|
+
}
|
|
218
|
+
createChallengedAccessRequest(caseId, request) {
|
|
219
|
+
// Assignment API endpoint
|
|
220
|
+
const userInfoStr = this.sessionStorageService.getItem('userDetails');
|
|
221
|
+
const camUtils = new CaseAccessUtils();
|
|
222
|
+
let userInfo;
|
|
223
|
+
if (userInfoStr) {
|
|
224
|
+
userInfo = JSON.parse(userInfoStr);
|
|
225
|
+
}
|
|
226
|
+
const roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
|
|
227
|
+
const roleName = camUtils.getAMRoleName('challenged', roleCategory);
|
|
228
|
+
const beginTime = new Date();
|
|
229
|
+
const endTime = new Date(new Date().setUTCHours(23, 59, 59, 999));
|
|
230
|
+
const id = userInfo.id ? userInfo.id : userInfo.uid;
|
|
231
|
+
const isNew = true;
|
|
232
|
+
const payload = camUtils.getAMPayload(id, id, roleName, roleCategory, 'CHALLENGED', caseId, request, beginTime, endTime, isNew);
|
|
233
|
+
return this.http.post(`/api/challenged-access-request`, payload);
|
|
234
|
+
}
|
|
235
|
+
createSpecificAccessRequest(caseId, sar) {
|
|
236
|
+
// Assignment API endpoint
|
|
237
|
+
const userInfoStr = this.sessionStorageService.getItem('userDetails');
|
|
238
|
+
const camUtils = new CaseAccessUtils();
|
|
239
|
+
let userInfo;
|
|
240
|
+
if (userInfoStr) {
|
|
241
|
+
userInfo = JSON.parse(userInfoStr);
|
|
242
|
+
}
|
|
243
|
+
const roleCategory = camUtils.getMappedRoleCategory(userInfo.roles, userInfo.roleCategories);
|
|
244
|
+
const roleName = camUtils.getAMRoleName('specific', roleCategory);
|
|
245
|
+
const id = userInfo.id ? userInfo.id : userInfo.uid;
|
|
246
|
+
const payload = camUtils.getAMPayload(null, id, roleName, roleCategory, 'SPECIFIC', caseId, sar, null, null, true);
|
|
247
|
+
payload.roleRequest = Object.assign(Object.assign({}, payload.roleRequest), { process: 'specific-access', replaceExisting: true, assignerId: payload.requestedRoles[0].actorId, reference: `${caseId}/${roleName}/${payload.requestedRoles[0].actorId}` });
|
|
248
|
+
payload.requestedRoles[0] = Object.assign(Object.assign({}, payload.requestedRoles[0]), { roleName: 'specific-access-requested', roleCategory, classification: 'PRIVATE', endTime: new Date(new Date().setDate(new Date().getDate() + 30)), beginTime: null, grantType: 'BASIC', readOnly: true });
|
|
249
|
+
payload.requestedRoles[0].attributes = Object.assign(Object.assign({}, payload.requestedRoles[0].attributes), { requestedRole: roleName, specificAccessReason: sar.specificReason });
|
|
250
|
+
payload.requestedRoles[0].notes[0] = Object.assign(Object.assign({}, payload.requestedRoles[0].notes[0]), { userId: payload.requestedRoles[0].actorId });
|
|
251
|
+
return this.http.post(`/api/specific-access-request`, payload);
|
|
252
|
+
}
|
|
253
253
|
}
|
|
254
254
|
// Internal (UI) API
|
|
255
255
|
CasesService.V2_MEDIATYPE_CASE_VIEW = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.ui-case-view.v2+json';
|
|
@@ -262,9 +262,9 @@ CasesService.V2_MEDIATYPE_CASE_DATA_VALIDATE = 'application/vnd.uk.gov.hmcts.ccd
|
|
|
262
262
|
CasesService.V2_MEDIATYPE_CREATE_EVENT = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-event.v2+json;charset=UTF-8';
|
|
263
263
|
CasesService.V2_MEDIATYPE_CREATE_CASE = 'application/vnd.uk.gov.hmcts.ccd-data-store-api.create-case.v2+json;charset=UTF-8';
|
|
264
264
|
CasesService.PUI_CASE_MANAGER = 'pui-case-manager';
|
|
265
|
-
CasesService.ɵfac = function CasesService_Factory(t) { return new (t || CasesService)(i0.ɵɵinject(i1.HttpService), i0.ɵɵinject(i2.AbstractAppConfig), i0.ɵɵinject(
|
|
265
|
+
CasesService.ɵfac = function CasesService_Factory(t) { return new (t || CasesService)(i0.ɵɵinject(i1.HttpService), i0.ɵɵinject(i2.AbstractAppConfig), i0.ɵɵinject(i1.OrderService), i0.ɵɵinject(i1.HttpErrorService), i0.ɵɵinject(i3.WizardPageFieldToCaseFieldMapper), i0.ɵɵinject(i4.WorkAllocationService), i0.ɵɵinject(i1.LoadingService), i0.ɵɵinject(i1.SessionStorageService)); };
|
|
266
266
|
CasesService.ɵprov = i0.ɵɵdefineInjectable({ token: CasesService, factory: CasesService.ɵfac });
|
|
267
267
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CasesService, [{
|
|
268
268
|
type: Injectable
|
|
269
|
-
}], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type:
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFPdEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXBELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVB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QU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JHO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztBQTlWRCxvQkFBb0I7QUFDRyxtQ0FBc0IsR0FBRyxzRUFBc0UsQ0FBQztBQUNoRyw0Q0FBK0IsR0FDcEQsNkZBQTZGLENBQUM7QUFDekUsNkNBQWdDLEdBQ3JELDhGQUE4RixDQUFDO0FBQzFFLDZDQUFnQyxHQUNyRCw4RkFBOEYsQ0FBQztBQUVqRyw0QkFBNEI7QUFFTCx3Q0FBMkIsR0FDaEQsc0ZBQXNGLENBQUM7QUFFbEUsNENBQStCLEdBQ3BELDBGQUEwRixDQUFDO0FBQ3RFLHNDQUF5QixHQUM5QyxvRkFBb0YsQ0FBQztBQUNoRSxxQ0FBd0IsR0FDN0MsbUZBQW1GLENBQUM7QUFFL0QsNkJBQWdCLEdBQUcsa0JBQWtCLENBQUM7d0VBdEJsRCxZQUFZO29EQUFaLFlBQVksV0FBWixZQUFZO3VGQUFaLFlBQVk7Y0FEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgU2hvd0NvbmRpdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50RGF0YSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLWV2ZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvY2FzZS1ldmVudC10cmlnZ2VyLm1vZGVsJztcbmltcG9ydCB7IENhc2VQcmludERvY3VtZW50IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9jYXNlLXByaW50LWRvY3VtZW50Lm1vZGVsJztcbmltcG9ydCB7IENhc2VWaWV3IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9jYXNlLXZpZXcubW9kZWwnO1xuaW1wb3J0IHsgQ2hhbGxlbmdlZEFjY2Vzc1JlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS12aWV3L2NoYWxsZW5nZWQtYWNjZXNzLXJlcXVlc3QubW9kZWwnO1xuaW1wb3J0IHsgUm9sZUFzc2lnbm1lbnRSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvcm9sZS1hc3NpZ25tZW50LXJlc3BvbnNlLm1vZGVsJztcbmltcG9ydCB7IFJvbGVDYXRlZ29yeSwgUm9sZVJlcXVlc3RQYXlsb2FkIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9yb2xlLXJlcXVlc3QubW9kZWwnO1xuaW1wb3J0IHsgU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBEcmFmdCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9kcmFmdC5tb2RlbCc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy9maWVsZHMudXRpbHMnO1xuaW1wb3J0IHsgSHR0cEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sb2FkaW5nL2xvYWRpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmRlci9vcmRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24vc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZUFjY2Vzc1V0aWxzIH0gZnJvbSAnLi4vY2FzZS1hY2Nlc3MtdXRpbHMnO1xuaW1wb3J0IHsgV2l6YXJkUGFnZSB9IGZyb20gJy4uL2RvbWFpbi93aXphcmQtcGFnZS5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmRQYWdlRmllbGRUb0Nhc2VGaWVsZE1hcHBlciB9IGZyb20gJy4vd2l6YXJkLXBhZ2UtZmllbGQtdG8tY2FzZS1maWVsZC5tYXBwZXInO1xuaW1wb3J0IHsgV29ya0FsbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi93b3JrLWFsbG9jYXRpb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlc1NlcnZpY2Uge1xuICAvLyBJbnRlcm5hbCAoVUkpIEFQSVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DQVNFX1ZJRVcgPSAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkudWktY2FzZS12aWV3LnYyK2pzb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9TVEFSVF9DQVNFX1RSSUdHRVIgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS51aS1zdGFydC1jYXNlLXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfRVZFTlRfVFJJR0dFUiA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLXN0YXJ0LWV2ZW50LXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfRFJBRlRfVFJJR0dFUiA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLXN0YXJ0LWRyYWZ0LXRyaWdnZXIudjIranNvbjtjaGFyc2V0PVVURi04JztcblxuICAvLyBFeHRlcm5hbCAoRGF0YSBTdG9yZSkgQVBJXG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ0FTRV9ET0NVTUVOVFMgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jYXNlLWRvY3VtZW50cy52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX0NBU0VfREFUQV9WQUxJREFURSA9XG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLmNhc2UtZGF0YS12YWxpZGF0ZS52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DUkVBVEVfRVZFTlQgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jcmVhdGUtZXZlbnQudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ1JFQVRFX0NBU0UgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jcmVhdGUtY2FzZS52Mitqc29uO2NoYXJzZXQ9VVRGLTgnO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFVJX0NBU0VfTUFOQUdFUiA9ICdwdWktY2FzZS1tYW5hZ2VyJztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBDYXNlc1NlcnZpY2U6OmdldENhc2VWaWV3YCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgZ2V0ID0gdGhpcy5nZXRDYXNlVmlldztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnOiBBYnN0cmFjdEFwcENvbmZpZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9yZGVyU2VydmljZTogT3JkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JTZXJ2aWNlOiBIdHRwRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2l6YXJkUGFnZUZpZWxkVG9DYXNlRmllbGRNYXBwZXI6IFdpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ya0FsbG9jYXRpb25TZXJ2aWNlOiBXb3JrQWxsb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZVxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlVmlldyhqdXJpc2RpY3Rpb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgICBjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgICAgICAgICAgIGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlVmlldz4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldEFwaVVybCgpXG4gICAgICArIGAvY2FzZXdvcmtlcnMvOnVpZGBcbiAgICAgICsgYC9qdXJpc2RpY3Rpb25zLyR7anVyaXNkaWN0aW9uSWR9YFxuICAgICAgKyBgL2Nhc2UtdHlwZXMvJHtjYXNlVHlwZUlkfWBcbiAgICAgICsgYC9jYXNlcy8ke2Nhc2VJZH1gO1xuXG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTZXJ2aWNlLnVucmVnaXN0ZXIobG9hZGluZ1Rva2VuKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZVZpZXdWMihjYXNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2FzZVZpZXc+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRDYXNlRGF0YVVybCgpfS9pbnRlcm5hbC9jYXNlcy8ke2Nhc2VJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DQVNFX1ZJRVcpXG4gICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsLCB7aGVhZGVycywgb2JzZXJ2ZTogJ2JvZHknfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nU2VydmljZS51bnJlZ2lzdGVyKGxvYWRpbmdUb2tlbikpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEV2ZW50VHJpZ2dlcihjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICBldmVudFRyaWdnZXJJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgY2FzZUlkPzogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgaWdub3JlV2FybmluZz86IHN0cmluZyk6IE9ic2VydmFibGU8Q2FzZUV2ZW50VHJpZ2dlcj4ge1xuICAgIGlnbm9yZVdhcm5pbmcgPSB1bmRlZmluZWQgIT09IGlnbm9yZVdhcm5pbmcgPyBpZ25vcmVXYXJuaW5nIDogJ2ZhbHNlJztcblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRFdmVudFRyaWdnZXJVcmwoY2FzZVR5cGVJZCwgZXZlbnRUcmlnZ2VySWQsIGNhc2VJZCwgaWdub3JlV2FybmluZyk7XG5cbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKTtcbiAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICBpZiAoRHJhZnQuaXNEcmFmdChjYXNlSWQpKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfU1RBUlRfRFJBRlRfVFJJR0dFUik7XG4gICAgfSBlbHNlIGlmIChjYXNlSWQgIT09IHVuZGVmaW5lZCAmJiBjYXNlSWQgIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9TVEFSVF9FVkVOVF9UUklHR0VSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX1NUQVJUX0NBU0VfVFJJR0dFUik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwsIHtoZWFkZXJzLCBvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChib2R5ID0+IHtcbiAgICAgICAgICByZXR1cm4gRmllbGRzVXRpbHMuaGFuZGxlTmVzdGVkRHluYW1pY0xpc3RzKGJvZHkpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgocDogb2JqZWN0KSA9PiBwbGFpblRvQ2xhc3MoQ2FzZUV2ZW50VHJpZ2dlciwgcCkpLFxuICAgICAgICB0YXAoZXZlbnRUcmlnZ2VyID0+IHRoaXMuaW5pdGlhbGlzZUV2ZW50VHJpZ2dlcihldmVudFRyaWdnZXIpKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVFdmVudChjYXNlRGV0YWlsczogQ2FzZVZpZXcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgY29uc3QgY2FzZUlkID0gY2FzZURldGFpbHMuY2FzZV9pZDtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmFwcENvbmZpZy5nZXRDYXNlRGF0YVVybCgpICsgYC9jYXNlcy8ke2Nhc2VJZH0vZXZlbnRzYDtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DUkVBVEVfRVZFTlQpXG4gICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCBldmVudERhdGEsIHtoZWFkZXJzLCBvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChib2R5ID0+IHRoaXMucHJvY2Vzc1Jlc3BvbnNlQm9keShib2R5LCBldmVudERhdGEpKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGVDYXNlKGN0aWQ6IHN0cmluZywgZXZlbnREYXRhOiBDYXNlRXZlbnREYXRhLCBwYWdlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgY29uc3QgcGFnZUlkU3RyaW5nID0gcGFnZUlkID8gJz9wYWdlSWQ9JyArIHBhZ2VJZCA6ICcnO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKClcbiAgICAgICsgYC9jYXNlLXR5cGVzLyR7Y3RpZH0vdmFsaWRhdGUke3BhZ2VJZFN0cmluZ31gO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfREFUQV9WQUxJREFURSlcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIGV2ZW50RGF0YSwge2hlYWRlcnMsIG9ic2VydmU6ICdib2R5J30pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2FzZShjdGlkOiBzdHJpbmcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgbGV0IGlnbm9yZVdhcm5pbmcgPSAnZmFsc2UnO1xuXG4gICAgaWYgKGV2ZW50RGF0YS5pZ25vcmVfd2FybmluZykge1xuICAgICAgaWdub3JlV2FybmluZyA9ICd0cnVlJztcbiAgICB9XG4gICAgY29uc3QgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKVxuICAgICAgKyBgL2Nhc2UtdHlwZXMvJHtjdGlkfS9jYXNlcz9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DUkVBVEVfQ0FTRSlcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIGV2ZW50RGF0YSwge2hlYWRlcnMsIG9ic2VydmU6ICdib2R5J30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGJvZHkgPT4gdGhpcy5wcm9jZXNzUmVzcG9uc2VCb2R5KGJvZHksIGV2ZW50RGF0YSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmludERvY3VtZW50cyhjYXNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Q2FzZVByaW50RG9jdW1lbnRbXT4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKClcbiAgICAgICsgYC9jYXNlcy8ke2Nhc2VJZH1gXG4gICAgICArIGAvZG9jdW1lbnRzYDtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DQVNFX0RPQ1VNRU5UUylcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwge2hlYWRlcnMsIG9ic2VydmU6ICdib2R5J30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGJvZHkgPT4gYm9keS5kb2N1bWVudFJlc291cmNlcyksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldENvdXJ0T3JIZWFyaW5nQ2VudHJlTmFtZShsb2NhdGlvbklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYXBwQ29uZmlnLmdldExvY2F0aW9uUmVmQXBpVXJsKCl9L2J1aWxkaW5nLWxvY2F0aW9ucz9lcGltbXNfaWQ9JHtsb2NhdGlvbklkfWApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUNoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0KGNhc2VJZDogc3RyaW5nLCByZXF1ZXN0OiBDaGFsbGVuZ2VkQWNjZXNzUmVxdWVzdCk6IE9ic2VydmFibGU8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4ge1xuICAgIC8vIEFzc2lnbm1lbnQgQVBJIGVuZHBvaW50XG4gICAgY29uc3QgdXNlckluZm9TdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpO1xuXG4gICAgY29uc3QgY2FtVXRpbHMgPSBuZXcgQ2FzZUFjY2Vzc1V0aWxzKCk7XG4gICAgbGV0IHVzZXJJbmZvOiBVc2VySW5mbztcbiAgICBpZiAodXNlckluZm9TdHIpIHtcbiAgICAgIHVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUNhdGVnb3J5OiBSb2xlQ2F0ZWdvcnkgPSBjYW1VdGlscy5nZXRNYXBwZWRSb2xlQ2F0ZWdvcnkodXNlckluZm8ucm9sZXMsIHVzZXJJbmZvLnJvbGVDYXRlZ29yaWVzKTtcbiAgICBjb25zdCByb2xlTmFtZSA9IGNhbVV0aWxzLmdldEFNUm9sZU5hbWUoJ2NoYWxsZW5nZWQnLCByb2xlQ2F0ZWdvcnkpO1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0VVRDSG91cnMoMjMsIDU5LCA1OSwgOTk5KSk7XG4gICAgY29uc3QgaWQgPSB1c2VySW5mby5pZCA/IHVzZXJJbmZvLmlkIDogdXNlckluZm8udWlkO1xuICAgIGNvbnN0IHBheWxvYWQ6IFJvbGVSZXF1ZXN0UGF5bG9hZCA9IGNhbVV0aWxzLmdldEFNUGF5bG9hZChpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlQ2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDSEFMTEVOR0VEJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpblRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFRpbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvYXBpL2NoYWxsZW5nZWQtYWNjZXNzLXJlcXVlc3RgLCBwYXlsb2FkKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTcGVjaWZpY0FjY2Vzc1JlcXVlc3QoY2FzZUlkOiBzdHJpbmcsIHNhcjogU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0KTogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgLy8gQXNzaWdubWVudCBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG5cbiAgICBjb25zdCBjYW1VdGlscyA9IG5ldyBDYXNlQWNjZXNzVXRpbHMoKTtcbiAgICBsZXQgdXNlckluZm86IFVzZXJJbmZvO1xuICAgIGlmICh1c2VySW5mb1N0cikge1xuICAgICAgdXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKTtcbiAgICB9XG5cbiAgICBjb25zdCByb2xlQ2F0ZWdvcnk6IFJvbGVDYXRlZ29yeSA9IGNhbVV0aWxzLmdldE1hcHBlZFJvbGVDYXRlZ29yeSh1c2VySW5mby5yb2xlcywgdXNlckluZm8ucm9sZUNhdGVnb3JpZXMpO1xuICAgIGNvbnN0IHJvbGVOYW1lID0gY2FtVXRpbHMuZ2V0QU1Sb2xlTmFtZSgnc3BlY2lmaWMnLCByb2xlQ2F0ZWdvcnkpO1xuICAgIGNvbnN0IGlkID0gdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZDtcbiAgICBjb25zdCBwYXlsb2FkOiBSb2xlUmVxdWVzdFBheWxvYWQgPSBjYW1VdGlscy5nZXRBTVBheWxvYWQobnVsbCwgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVOYW1lLCByb2xlQ2F0ZWdvcnksICdTUEVDSUZJQycsIGNhc2VJZCwgc2FyKTtcblxuICAgIHBheWxvYWQucm9sZVJlcXVlc3QgPSB7XG4gICAgICAuLi5wYXlsb2FkLnJvbGVSZXF1ZXN0LFxuICAgICAgcHJvY2VzczogJ3NwZWNpZmljLWFjY2VzcycsXG4gICAgICByZXBsYWNlRXhpc3Rpbmc6IHRydWUsXG4gICAgICBhc3NpZ25lcklkOiBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmFjdG9ySWQsXG4gICAgICByZWZlcmVuY2U6IGAke2Nhc2VJZH0vJHtyb2xlTmFtZX0vJHtwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmFjdG9ySWR9YFxuICAgIH07XG5cbiAgICBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdID0ge1xuICAgICAgLi4ucGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXSxcbiAgICAgIHJvbGVOYW1lOiAnc3BlY2lmaWMtYWNjZXNzLXJlcXVlc3RlZCcsXG4gICAgICByb2xlQ2F0ZWdvcnksXG4gICAgICBjbGFzc2lmaWNhdGlvbjogJ1BSSVZBVEUnLFxuICAgICAgZW5kVGltZTogbmV3IERhdGUobmV3IERhdGUoKS5zZXREYXRlKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpICsgMzApKSxcbiAgICAgIGJlZ2luVGltZTogbnVsbCxcbiAgICAgIGdyYW50VHlwZTogJ0JBU0lDJyxcbiAgICAgIHJlYWRPbmx5OiB0cnVlXG4gICAgfTtcblxuICAgIHBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0uYXR0cmlidXRlcyA9IHtcbiAgICAgIC4uLnBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0uYXR0cmlidXRlcyxcbiAgICAgIHJlcXVlc3RlZFJvbGU6IHJvbGVOYW1lXG4gICAgfTtcblxuICAgIHBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0ubm90ZXNbMF0gPSB7XG4gICAgICAuLi5wYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLm5vdGVzWzBdLFxuICAgICAgdXNlcklkOiBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmFjdG9ySWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIGAvYXBpL3NwZWNpZmljLWFjY2Vzcy1yZXF1ZXN0YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEV2ZW50VHJpZ2dlclVybChjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUcmlnZ2VySWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlSWQ/OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlV2FybmluZz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCkgKyBgL2ludGVybmFsYDtcblxuICAgIGlmIChEcmFmdC5pc0RyYWZ0KGNhc2VJZCkpIHtcbiAgICAgIHVybCArPSBgL2RyYWZ0cy8ke2Nhc2VJZH1gXG4gICAgICAgICsgYC9ldmVudC10cmlnZ2VyYFxuICAgICAgICArIGA/aWdub3JlLXdhcm5pbmc9JHtpZ25vcmVXYXJuaW5nfWA7XG4gICAgfSBlbHNlIGlmIChjYXNlVHlwZUlkID09PSB1bmRlZmluZWQgfHwgY2FzZVR5cGVJZCA9PT0gbnVsbCkge1xuICAgICAgdXJsICs9IGAvY2FzZXMvJHtjYXNlSWR9YFxuICAgICAgICArIGAvZXZlbnQtdHJpZ2dlcnMvJHtldmVudFRyaWdnZXJJZH1gXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsICs9IGAvY2FzZS10eXBlcy8ke2Nhc2VUeXBlSWR9YFxuICAgICAgICArIGAvZXZlbnQtdHJpZ2dlcnMvJHtldmVudFRyaWdnZXJJZH1gXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VCb2R5KGJvZHk6IGFueSwgZXZlbnREYXRhOiBDYXNlRXZlbnREYXRhKTogYW55IHtcbiAgICB0aGlzLnByb2Nlc3NUYXNrc09uU3VjY2Vzcyhib2R5LCBldmVudERhdGEuZXZlbnQpO1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXNlRXZlbnRUcmlnZ2VyKGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcikge1xuICAgIGlmICghZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcykge1xuICAgICAgZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcyA9IFtdO1xuICAgIH1cblxuICAgIGV2ZW50VHJpZ2dlci53aXphcmRfcGFnZXMuZm9yRWFjaCgod2l6YXJkUGFnZTogV2l6YXJkUGFnZSkgPT4ge1xuICAgICAgd2l6YXJkUGFnZS5wYXJzZWRTaG93Q29uZGl0aW9uID0gU2hvd0NvbmRpdGlvbi5nZXRJbnN0YW5jZSh3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uKTtcbiAgICAgIHdpemFyZFBhZ2UuY2FzZV9maWVsZHMgPSB0aGlzLm9yZGVyU2VydmljZS5zb3J0KFxuICAgICAgICB0aGlzLndpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyLm1hcEFsbCh3aXphcmRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcywgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NUYXNrc09uU3VjY2VzcyhjYXNlRGF0YTogYW55LCBldmVudERhdGE6IGFueSk6IHZvaWQge1xuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3b3JrIGFsbG9jYXRpb24gMSByZWxhdGVkXG4gICAgaWYgKHRoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3dvcmthbGxvY2F0aW9uJykge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGEgZmVhdHVyZSB0b2dnbGUgdG9cbiAgICAgIC8vIGNvbnRyb2wgdGhlIHdvcmsgYWxsb2NhdGlvblxuICAgICAgaWYgKCF0aGlzLmlzUHVpQ2FzZU1hbmFnZXIoKSkge1xuICAgICAgICB0aGlzLndvcmtBbGxvY2F0aW9uU2VydmljZS5jb21wbGV0ZUFwcHJvcHJpYXRlVGFzayhjYXNlRGF0YS5pZCwgZXZlbnREYXRhLmlkLCBjYXNlRGF0YS5qdXJpc2RpY3Rpb24sIGNhc2VEYXRhLmNhc2VfdHlwZSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFN1Y2Nlc3MuIERvIG5vdGhpbmcuXG4gICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgLy8gU2hvdyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nIGFib3V0IHNvbWV0aGluZyB0aGF0IHdlbnQgd3JvbmcuXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBwcm9jZXNzIHRhc2tzIGZvciB0aGlzIGNhc2UgZXZlbnQnLCBlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgQ2hlY2tzIGlmIHRoZSB1c2VyIGhhcyByb2xlIG9mIHB1aS1jYXNlLW1hbmFnZXIgYW5kIHJldHVybnMgdHJ1ZSBvciBmYWxzZVxuICAqL1xuICBwcml2YXRlIGlzUHVpQ2FzZU1hbmFnZXIoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXNlckluZm9TdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpO1xuICAgIGlmICh1c2VySW5mb1N0cikge1xuICAgICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgICByZXR1cm4gdXNlckluZm8gJiYgdXNlckluZm8ucm9sZXMgJiYgKHVzZXJJbmZvLnJvbGVzLmluZGV4T2YoQ2FzZXNTZXJ2aWNlLlBVSV9DQVNFX01BTkFHRVIpICE9PSAtMSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
269
|
+
}], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type: i1.OrderService }, { type: i1.HttpErrorService }, { type: i3.WizardPageFieldToCaseFieldMapper }, { type: i4.WorkAllocationService }, { type: i1.LoadingService }, { type: i1.SessionStorageService }]; }, null); })();
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9zZXJ2aWNlcy9jYXNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUVMLGdCQUFnQixFQUdTLEtBQUssRUFJL0IsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFHbEUsTUFBTSxPQUFPLFlBQVk7SUEwQ3ZCLFlBQ1UsSUFBaUIsRUFDakIsU0FBNEIsRUFDNUIsWUFBMEIsRUFDMUIsWUFB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Y0FBYyxHQUN6QyxDQUFBO1FBRUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG1DQUM3QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUMxQyxDQUFBO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsOEJBQThCLEVBQzlCLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQzs7QUFqWEQsb0JBQW9CO0FBQ0csbUNBQXNCLEdBQUcsc0VBQXNFLENBQUM7QUFDaEcsNENBQStCLEdBQ3BELDZGQUE2RixDQUFDO0FBQ3pFLDZDQUFnQyxHQUNyRCw4RkFBOEYsQ0FBQztBQUMxRSw2Q0FBZ0MsR0FDckQsOEZBQThGLENBQUM7QUFFakcsNEJBQTRCO0FBRUwsd0NBQTJCLEdBQ2hELHNGQUFzRixDQUFDO0FBRWxFLDRDQUErQixHQUNwRCwwRkFBMEYsQ0FBQztBQUN0RSxzQ0FBeUIsR0FDOUMsb0ZBQW9GLENBQUM7QUFDaEUscUNBQXdCLEdBQzdDLG1GQUFtRixDQUFDO0FBRS9ELDZCQUFnQixHQUFHLGtCQUFrQixDQUFDO3dFQXRCbEQsWUFBWTtvREFBWixZQUFZLFdBQVosWUFBWTt1RkFBWixZQUFZO2NBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IFNob3dDb25kaXRpb24gfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7XG4gIENhc2VFdmVudERhdGEsXG4gIENhc2VFdmVudFRyaWdnZXIsXG4gIENhc2VQcmludERvY3VtZW50LFxuICBDYXNlVmlldyxcbiAgQ2hhbGxlbmdlZEFjY2Vzc1JlcXVlc3QsIERyYWZ0LFxuICBSb2xlQXNzaWdubWVudFJlc3BvbnNlLFxuICBSb2xlQ2F0ZWdvcnksXG4gIFJvbGVSZXF1ZXN0UGF5bG9hZCwgU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0XG59IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscywgSHR0cEVycm9yU2VydmljZSwgSHR0cFNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlLCBPcmRlclNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IENhc2VBY2Nlc3NVdGlscyB9IGZyb20gJy4uL2Nhc2UtYWNjZXNzLXV0aWxzJztcbmltcG9ydCB7IFdpemFyZFBhZ2UgfSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgV2l6YXJkUGFnZUZpZWxkVG9DYXNlRmllbGRNYXBwZXIgfSBmcm9tICcuL3dpemFyZC1wYWdlLWZpZWxkLXRvLWNhc2UtZmllbGQubWFwcGVyJztcbmltcG9ydCB7IFdvcmtBbGxvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vd29yay1hbGxvY2F0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FzZXNTZXJ2aWNlIHtcbiAgLy8gSW50ZXJuYWwgKFVJKSBBUElcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ0FTRV9WSUVXID0gJ2FwcGxpY2F0aW9uL3ZuZC51ay5nb3YuaG1jdHMuY2NkLWRhdGEtc3RvcmUtYXBpLnVpLWNhc2Utdmlldy52Mitqc29uJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfU1RBUlRfQ0FTRV9UUklHR0VSID1cbiAgICAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkudWktc3RhcnQtY2FzZS10cmlnZ2VyLnYyK2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX1NUQVJUX0VWRU5UX1RSSUdHRVIgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS51aS1zdGFydC1ldmVudC10cmlnZ2VyLnYyK2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX1NUQVJUX0RSQUZUX1RSSUdHRVIgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS51aS1zdGFydC1kcmFmdC10cmlnZ2VyLnYyK2pzb247Y2hhcnNldD1VVEYtOCc7XG5cbiAgLy8gRXh0ZXJuYWwgKERhdGEgU3RvcmUpIEFQSVxuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX0NBU0VfRE9DVU1FTlRTID1cbiAgICAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkuY2FzZS1kb2N1bWVudHMudjIranNvbjtjaGFyc2V0PVVURi04JztcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFYyX01FRElBVFlQRV9DQVNFX0RBVEFfVkFMSURBVEUgPVxuICAgICdhcHBsaWNhdGlvbi92bmQudWsuZ292LmhtY3RzLmNjZC1kYXRhLXN0b3JlLWFwaS5jYXNlLWRhdGEtdmFsaWRhdGUudjIranNvbjtjaGFyc2V0PVVURi04JztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWMl9NRURJQVRZUEVfQ1JFQVRFX0VWRU5UID1cbiAgICAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkuY3JlYXRlLWV2ZW50LnYyK2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVjJfTUVESUFUWVBFX0NSRUFURV9DQVNFID1cbiAgICAnYXBwbGljYXRpb24vdm5kLnVrLmdvdi5obWN0cy5jY2QtZGF0YS1zdG9yZS1hcGkuY3JlYXRlLWNhc2UudjIranNvbjtjaGFyc2V0PVVURi04JztcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBVSV9DQVNFX01BTkFHRVIgPSAncHVpLWNhc2UtbWFuYWdlcic7XG5cbiAgZ2V0ID0gdGhpcy5nZXRDYXNlVmlldztcblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZUNoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0QXR0cmlidXRlcyhodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBjYXNlSWQ6IHN0cmluZywgYXR0cmlidXRlc1RvVXBkYXRlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSlcbiAgICA6IE9ic2VydmFibGU8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4ge1xuICAgIHJldHVybiBodHRwQ2xpZW50LnBvc3Q8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4oYC9hcGkvY2hhbGxlbmdlZC1hY2Nlc3MtcmVxdWVzdC91cGRhdGUtYXR0cmlidXRlc2AsIHtcbiAgICAgIGNhc2VJZCxcbiAgICAgIGF0dHJpYnV0ZXNUb1VwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVTcGVjaWZpY0FjY2Vzc1JlcXVlc3RBdHRyaWJ1dGVzKGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGNhc2VJZDogc3RyaW5nLCBhdHRyaWJ1dGVzVG9VcGRhdGU6IHsgW3g6IHN0cmluZ106IGFueSB9KVxuICAgIDogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGh0dHBDbGllbnQucG9zdDxSb2xlQXNzaWdubWVudFJlc3BvbnNlPihgL2FwaS9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdC91cGRhdGUtYXR0cmlidXRlc2AsIHtcbiAgICAgIGNhc2VJZCxcbiAgICAgIGF0dHJpYnV0ZXNUb1VwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWcsXG4gICAgcHJpdmF0ZSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogSHR0cEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHdpemFyZFBhZ2VGaWVsZFRvQ2FzZUZpZWxkTWFwcGVyOiBXaXphcmRQYWdlRmllbGRUb0Nhc2VGaWVsZE1hcHBlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtBbGxvY2F0aW9uU2VydmljZTogV29ya0FsbG9jYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICBnZXRDYXNlVmlldyhqdXJpc2RpY3Rpb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgICBjYXNlVHlwZUlkOiBzdHJpbmcsXG4gICAgICAgICAgICAgIGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlVmlldz4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldEFwaVVybCgpXG4gICAgICArIGAvY2FzZXdvcmtlcnMvOnVpZGBcbiAgICAgICsgYC9qdXJpc2RpY3Rpb25zLyR7anVyaXNkaWN0aW9uSWR9YFxuICAgICAgKyBgL2Nhc2UtdHlwZXMvJHtjYXNlVHlwZUlkfWBcbiAgICAgICsgYC9jYXNlcy8ke2Nhc2VJZH1gO1xuXG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTZXJ2aWNlLnVucmVnaXN0ZXIobG9hZGluZ1Rva2VuKSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRDYXNlVmlld1YyKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlVmlldz4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCl9L2ludGVybmFsL2Nhc2VzLyR7Y2FzZUlkfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfVklFVylcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICBjb25zdCBsb2FkaW5nVG9rZW4gPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLnJlZ2lzdGVyKCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmwsIHtoZWFkZXJzLCBvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdTZXJ2aWNlLnVucmVnaXN0ZXIobG9hZGluZ1Rva2VuKSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRFdmVudFRyaWdnZXIoY2FzZVR5cGVJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgZXZlbnRUcmlnZ2VySWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIGNhc2VJZD86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIGlnbm9yZVdhcm5pbmc/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPENhc2VFdmVudFRyaWdnZXI+IHtcbiAgICBpZ25vcmVXYXJuaW5nID0gdW5kZWZpbmVkICE9PSBpZ25vcmVXYXJuaW5nID8gaWdub3JlV2FybmluZyA6ICdmYWxzZSc7XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRXZlbnRUcmlnZ2VyVXJsKGNhc2VUeXBlSWQsIGV2ZW50VHJpZ2dlcklkLCBjYXNlSWQsIGlnbm9yZVdhcm5pbmcpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgIGlmIChEcmFmdC5pc0RyYWZ0KGNhc2VJZCkpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9TVEFSVF9EUkFGVF9UUklHR0VSKTtcbiAgICB9IGVsc2UgaWYgKGNhc2VJZCAhPT0gdW5kZWZpbmVkICYmIGNhc2VJZCAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX1NUQVJUX0VWRU5UX1RSSUdHRVIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIENhc2VzU2VydmljZS5WMl9NRURJQVRZUEVfU1RBUlRfQ0FTRV9UUklHR0VSKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwge2hlYWRlcnMsIG9ic2VydmU6ICdib2R5J30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGJvZHkgPT4ge1xuICAgICAgICAgIHJldHVybiBGaWVsZHNVdGlscy5oYW5kbGVOZXN0ZWREeW5hbWljTGlzdHMoYm9keSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKChwKSA9PiBwbGFpblRvQ2xhc3MoQ2FzZUV2ZW50VHJpZ2dlciwgcCkpLFxuICAgICAgICB0YXAoZXZlbnRUcmlnZ2VyID0+IHRoaXMuaW5pdGlhbGlzZUV2ZW50VHJpZ2dlcihldmVudFRyaWdnZXIpKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVFdmVudChjYXNlRGV0YWlsczogQ2FzZVZpZXcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8e30+IHtcbiAgICBjb25zdCBjYXNlSWQgPSBjYXNlRGV0YWlscy5jYXNlX2lkO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBwQ29uZmlnLmdldENhc2VEYXRhVXJsKCkgKyBgL2Nhc2VzLyR7Y2FzZUlkfS9ldmVudHNgO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NSRUFURV9FVkVOVClcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIGV2ZW50RGF0YSwge2hlYWRlcnMsIG9ic2VydmU6ICdib2R5J30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGJvZHkgPT4gdGhpcy5wcm9jZXNzUmVzcG9uc2VCb2R5KGJvZHksIGV2ZW50RGF0YSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlQ2FzZShjdGlkOiBzdHJpbmcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSwgcGFnZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IHBhZ2VJZFN0cmluZyA9IHBhZ2VJZCA/ICc/cGFnZUlkPScgKyBwYWdlSWQgOiAnJztcbiAgICBjb25zdCB1cmwgPSB0aGlzLmFwcENvbmZpZy5nZXRDYXNlRGF0YVVybCgpXG4gICAgICArIGAvY2FzZS10eXBlcy8ke2N0aWR9L3ZhbGlkYXRlJHtwYWdlSWRTdHJpbmd9YDtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DQVNFX0RBVEFfVkFMSURBVEUpXG4gICAgICAuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCBldmVudERhdGEsIHtoZWFkZXJzLCBvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlQ2FzZShjdGlkOiBzdHJpbmcsIGV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgbGV0IGlnbm9yZVdhcm5pbmcgPSAnZmFsc2UnO1xuXG4gICAgaWYgKGV2ZW50RGF0YS5pZ25vcmVfd2FybmluZykge1xuICAgICAgaWdub3JlV2FybmluZyA9ICd0cnVlJztcbiAgICB9XG4gICAgY29uc3QgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKVxuICAgICAgKyBgL2Nhc2UtdHlwZXMvJHtjdGlkfS9jYXNlcz9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgnZXhwZXJpbWVudGFsJywgJ3RydWUnKVxuICAgICAgLnNldCgnQWNjZXB0JywgQ2FzZXNTZXJ2aWNlLlYyX01FRElBVFlQRV9DUkVBVEVfQ0FTRSlcbiAgICAgIC5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIGV2ZW50RGF0YSwge2hlYWRlcnMsIG9ic2VydmU6ICdib2R5J30pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKGJvZHkgPT4gdGhpcy5wcm9jZXNzUmVzcG9uc2VCb2R5KGJvZHksIGV2ZW50RGF0YSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFByaW50RG9jdW1lbnRzKGNhc2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlUHJpbnREb2N1bWVudFtdPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKVxuICAgICAgKyBgL2Nhc2VzLyR7Y2FzZUlkfWBcbiAgICAgICsgYC9kb2N1bWVudHNgO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCdleHBlcmltZW50YWwnLCAndHJ1ZScpXG4gICAgICAuc2V0KCdBY2NlcHQnLCBDYXNlc1NlcnZpY2UuVjJfTUVESUFUWVBFX0NBU0VfRE9DVU1FTlRTKVxuICAgICAgLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsLCB7aGVhZGVycywgb2JzZXJ2ZTogJ2JvZHknfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoYm9keSA9PiBib2R5LmRvY3VtZW50UmVzb3VyY2VzKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRXZlbnRUcmlnZ2VyVXJsKGNhc2VUeXBlSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFRyaWdnZXJJZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VJZD86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVXYXJuaW5nPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0Q2FzZURhdGFVcmwoKSArIGAvaW50ZXJuYWxgO1xuXG4gICAgaWYgKERyYWZ0LmlzRHJhZnQoY2FzZUlkKSkge1xuICAgICAgdXJsICs9IGAvZHJhZnRzLyR7Y2FzZUlkfWBcbiAgICAgICAgKyBgL2V2ZW50LXRyaWdnZXJgXG4gICAgICAgICsgYD9pZ25vcmUtd2FybmluZz0ke2lnbm9yZVdhcm5pbmd9YDtcbiAgICB9IGVsc2UgaWYgKGNhc2VUeXBlSWQgPT09IHVuZGVmaW5lZCB8fCBjYXNlVHlwZUlkID09PSBudWxsKSB7XG4gICAgICB1cmwgKz0gYC9jYXNlcy8ke2Nhc2VJZH1gXG4gICAgICAgICsgYC9ldmVudC10cmlnZ2Vycy8ke2V2ZW50VHJpZ2dlcklkfWBcbiAgICAgICAgKyBgP2lnbm9yZS13YXJuaW5nPSR7aWdub3JlV2FybmluZ31gO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgKz0gYC9jYXNlLXR5cGVzLyR7Y2FzZVR5cGVJZH1gXG4gICAgICAgICsgYC9ldmVudC10cmlnZ2Vycy8ke2V2ZW50VHJpZ2dlcklkfWBcbiAgICAgICAgKyBgP2lnbm9yZS13YXJuaW5nPSR7aWdub3JlV2FybmluZ31gO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NSZXNwb25zZUJvZHkoYm9keTogYW55LCBldmVudERhdGE6IENhc2VFdmVudERhdGEpOiBhbnkge1xuICAgIHRoaXMucHJvY2Vzc1Rhc2tzT25TdWNjZXNzKGJvZHksIGV2ZW50RGF0YS5ldmVudCk7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpc2VFdmVudFRyaWdnZXIoZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyKSB7XG4gICAgaWYgKCFldmVudFRyaWdnZXIud2l6YXJkX3BhZ2VzKSB7XG4gICAgICBldmVudFRyaWdnZXIud2l6YXJkX3BhZ2VzID0gW107XG4gICAgfVxuXG4gICAgZXZlbnRUcmlnZ2VyLndpemFyZF9wYWdlcy5mb3JFYWNoKCh3aXphcmRQYWdlOiBXaXphcmRQYWdlKSA9PiB7XG4gICAgICB3aXphcmRQYWdlLnBhcnNlZFNob3dDb25kaXRpb24gPSBTaG93Q29uZGl0aW9uLmdldEluc3RhbmNlKHdpemFyZFBhZ2Uuc2hvd19jb25kaXRpb24pO1xuICAgICAgd2l6YXJkUGFnZS5jYXNlX2ZpZWxkcyA9IHRoaXMub3JkZXJTZXJ2aWNlLnNvcnQoXG4gICAgICAgIHRoaXMud2l6YXJkUGFnZUZpZWxkVG9DYXNlRmllbGRNYXBwZXIubWFwQWxsKHdpemFyZFBhZ2Uud2l6YXJkX3BhZ2VfZmllbGRzLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1Rhc2tzT25TdWNjZXNzKGNhc2VEYXRhOiBhbnksIGV2ZW50RGF0YTogYW55KTogdm9pZCB7XG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHdvcmsgYWxsb2NhdGlvbiAxIHJlbGF0ZWRcbiAgICBpZiAodGhpcy5hcHBDb25maWcuZ2V0V29ya0FsbG9jYXRpb25BcGlVcmwoKS50b0xvd2VyQ2FzZSgpID09PSAnd29ya2FsbG9jYXRpb24nKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgYSBmZWF0dXJlIHRvZ2dsZSB0b1xuICAgICAgLy8gY29udHJvbCB0aGUgd29yayBhbGxvY2F0aW9uXG4gICAgICBpZiAoIXRoaXMuaXNQdWlDYXNlTWFuYWdlcigpKSB7XG4gICAgICAgIHRoaXMud29ya0FsbG9jYXRpb25TZXJ2aWNlLmNvbXBsZXRlQXBwcm9wcmlhdGVUYXNrKGNhc2VEYXRhLmlkLCBldmVudERhdGEuaWQsIGNhc2VEYXRhLmp1cmlzZGljdGlvbiwgY2FzZURhdGEuY2FzZV90eXBlKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gU3VjY2Vzcy4gRG8gbm90aGluZy5cbiAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAvLyBTaG93IGFuIGFwcHJvcHJpYXRlIHdhcm5pbmcgYWJvdXQgc29tZXRoaW5nIHRoYXQgd2VudCB3cm9uZy5cbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IHByb2Nlc3MgdGFza3MgZm9yIHRoaXMgY2FzZSBldmVudCcsIGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKlxuICBDaGVja3MgaWYgdGhlIHVzZXIgaGFzIHJvbGUgb2YgcHVpLWNhc2UtbWFuYWdlciBhbmQgcmV0dXJucyB0cnVlIG9yIGZhbHNlXG4gICovXG4gIHByaXZhdGUgaXNQdWlDYXNlTWFuYWdlcigpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG4gICAgaWYgKHVzZXJJbmZvU3RyKSB7XG4gICAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKTtcbiAgICAgIHJldHVybiB1c2VySW5mbyAmJiB1c2VySW5mby5yb2xlcyAmJiAodXNlckluZm8ucm9sZXMuaW5kZXhPZihDYXNlc1NlcnZpY2UuUFVJX0NBU0VfTUFOQUdFUikgIT09IC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldENvdXJ0T3JIZWFyaW5nQ2VudHJlTmFtZShsb2NhdGlvbklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgL2FwaS9sb2NhdGlvbnMvZ2V0TG9jYXRpb25zQnlJZGAsIHsgbG9jYXRpb25zIDogW3sgbG9jYXRpb25JZCB9XX0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUNoYWxsZW5nZWRBY2Nlc3NSZXF1ZXN0KGNhc2VJZDogc3RyaW5nLCByZXF1ZXN0OiBDaGFsbGVuZ2VkQWNjZXNzUmVxdWVzdCk6IE9ic2VydmFibGU8Um9sZUFzc2lnbm1lbnRSZXNwb25zZT4ge1xuICAgIC8vIEFzc2lnbm1lbnQgQVBJIGVuZHBvaW50XG4gICAgY29uc3QgdXNlckluZm9TdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpO1xuXG4gICAgY29uc3QgY2FtVXRpbHMgPSBuZXcgQ2FzZUFjY2Vzc1V0aWxzKCk7XG4gICAgbGV0IHVzZXJJbmZvOiBVc2VySW5mbztcbiAgICBpZiAodXNlckluZm9TdHIpIHtcbiAgICAgIHVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZUNhdGVnb3J5OiBSb2xlQ2F0ZWdvcnkgPSBjYW1VdGlscy5nZXRNYXBwZWRSb2xlQ2F0ZWdvcnkodXNlckluZm8ucm9sZXMsIHVzZXJJbmZvLnJvbGVDYXRlZ29yaWVzKTtcbiAgICBjb25zdCByb2xlTmFtZSA9IGNhbVV0aWxzLmdldEFNUm9sZU5hbWUoJ2NoYWxsZW5nZWQnLCByb2xlQ2F0ZWdvcnkpO1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0VVRDSG91cnMoMjMsIDU5LCA1OSwgOTk5KSk7XG4gICAgY29uc3QgaWQgPSB1c2VySW5mby5pZCA/IHVzZXJJbmZvLmlkIDogdXNlckluZm8udWlkO1xuICAgIGNvbnN0IGlzTmV3ID0gdHJ1ZTtcblxuICAgIGNvbnN0IHBheWxvYWQ6IFJvbGVSZXF1ZXN0UGF5bG9hZCA9IGNhbVV0aWxzLmdldEFNUGF5bG9hZChpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlQ2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDSEFMTEVOR0VEJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpblRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTmV3XG4gICAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAvYXBpL2NoYWxsZW5nZWQtYWNjZXNzLXJlcXVlc3RgLCBwYXlsb2FkKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTcGVjaWZpY0FjY2Vzc1JlcXVlc3QoY2FzZUlkOiBzdHJpbmcsIHNhcjogU3BlY2lmaWNBY2Nlc3NSZXF1ZXN0KTogT2JzZXJ2YWJsZTxSb2xlQXNzaWdubWVudFJlc3BvbnNlPiB7XG4gICAgLy8gQXNzaWdubWVudCBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG5cbiAgICBjb25zdCBjYW1VdGlscyA9IG5ldyBDYXNlQWNjZXNzVXRpbHMoKTtcbiAgICBsZXQgdXNlckluZm86IFVzZXJJbmZvO1xuICAgIGlmICh1c2VySW5mb1N0cikge1xuICAgICAgdXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKTtcbiAgICB9XG5cbiAgICBjb25zdCByb2xlQ2F0ZWdvcnk6IFJvbGVDYXRlZ29yeSA9IGNhbVV0aWxzLmdldE1hcHBlZFJvbGVDYXRlZ29yeSh1c2VySW5mby5yb2xlcywgdXNlckluZm8ucm9sZUNhdGVnb3JpZXMpO1xuICAgIGNvbnN0IHJvbGVOYW1lID0gY2FtVXRpbHMuZ2V0QU1Sb2xlTmFtZSgnc3BlY2lmaWMnLCByb2xlQ2F0ZWdvcnkpO1xuICAgIGNvbnN0IGlkID0gdXNlckluZm8uaWQgPyB1c2VySW5mby5pZCA6IHVzZXJJbmZvLnVpZDtcbiAgICBjb25zdCBwYXlsb2FkOiBSb2xlUmVxdWVzdFBheWxvYWQgPSBjYW1VdGlscy5nZXRBTVBheWxvYWQobnVsbCwgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVOYW1lLCByb2xlQ2F0ZWdvcnksICdTUEVDSUZJQycsIGNhc2VJZCwgc2FyLCBudWxsLCBudWxsLCB0cnVlKTtcblxuICAgIHBheWxvYWQucm9sZVJlcXVlc3QgPSB7XG4gICAgICAuLi5wYXlsb2FkLnJvbGVSZXF1ZXN0LFxuICAgICAgcHJvY2VzczogJ3NwZWNpZmljLWFjY2VzcycsXG4gICAgICByZXBsYWNlRXhpc3Rpbmc6IHRydWUsXG4gICAgICBhc3NpZ25lcklkOiBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmFjdG9ySWQsXG4gICAgICByZWZlcmVuY2U6IGAke2Nhc2VJZH0vJHtyb2xlTmFtZX0vJHtwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmFjdG9ySWR9YFxuICAgIH07XG5cbiAgICBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdID0ge1xuICAgICAgLi4ucGF5bG9hZC5yZXF1ZXN0ZWRSb2xlc1swXSxcbiAgICAgIHJvbGVOYW1lOiAnc3BlY2lmaWMtYWNjZXNzLXJlcXVlc3RlZCcsXG4gICAgICByb2xlQ2F0ZWdvcnksXG4gICAgICBjbGFzc2lmaWNhdGlvbjogJ1BSSVZBVEUnLFxuICAgICAgZW5kVGltZTogbmV3IERhdGUobmV3IERhdGUoKS5zZXREYXRlKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpICsgMzApKSxcbiAgICAgIGJlZ2luVGltZTogbnVsbCxcbiAgICAgIGdyYW50VHlwZTogJ0JBU0lDJyxcbiAgICAgIHJlYWRPbmx5OiB0cnVlXG4gICAgfTtcblxuICAgIHBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0uYXR0cmlidXRlcyA9IHtcbiAgICAgIC4uLnBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0uYXR0cmlidXRlcyxcbiAgICAgIHJlcXVlc3RlZFJvbGU6IHJvbGVOYW1lLFxuICAgICAgc3BlY2lmaWNBY2Nlc3NSZWFzb246IHNhci5zcGVjaWZpY1JlYXNvblxuICAgIH1cblxuICAgIHBheWxvYWQucmVxdWVzdGVkUm9sZXNbMF0ubm90ZXNbMF0gPSB7XG4gICAgICAuLi5wYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLm5vdGVzWzBdLFxuICAgICAgdXNlcklkOiBwYXlsb2FkLnJlcXVlc3RlZFJvbGVzWzBdLmFjdG9ySWRcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICBgL2FwaS9zcGVjaWZpYy1hY2Nlc3MtcmVxdWVzdGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { throwError } from 'rxjs';
|
|
2
|
+
import { of, throwError } from 'rxjs';
|
|
3
3
|
import { catchError, map } from 'rxjs/operators';
|
|
4
4
|
import { AbstractAppConfig } from '../../../../app.config';
|
|
5
|
-
import { AlertService } from '../../../services
|
|
6
|
-
import { HttpErrorService } from '../../../services/http/http-error.service';
|
|
7
|
-
import { HttpService } from '../../../services/http/http.service';
|
|
5
|
+
import { AlertService, HttpErrorService, HttpService, SessionStorageService } from '../../../services';
|
|
8
6
|
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "../../../services
|
|
7
|
+
import * as i1 from "../../../services";
|
|
10
8
|
import * as i2 from "../../../../app.config";
|
|
11
|
-
import * as i3 from "../../../services/http/http-error.service";
|
|
12
|
-
import * as i4 from "../../../services/alert/alert.service";
|
|
13
9
|
export const MULTIPLE_TASKS_FOUND = 'More than one task found!';
|
|
14
10
|
export class WorkAllocationService {
|
|
15
|
-
constructor(http, appConfig, errorService, alertService) {
|
|
11
|
+
constructor(http, appConfig, errorService, alertService, sessionStorageService) {
|
|
16
12
|
this.http = http;
|
|
17
13
|
this.appConfig = appConfig;
|
|
18
14
|
this.errorService = errorService;
|
|
19
15
|
this.alertService = alertService;
|
|
16
|
+
this.sessionStorageService = sessionStorageService;
|
|
17
|
+
// Check to see if work allocation is enabled
|
|
20
18
|
}
|
|
21
19
|
/**
|
|
22
20
|
* Call the API to get tasks matching the search criteria.
|
|
23
21
|
* @param searchRequest The search parameters that specify which tasks to match.
|
|
24
22
|
*/
|
|
25
23
|
searchTasks(searchRequest) {
|
|
24
|
+
// Do not need to check if WA enabled as parent method will do that
|
|
26
25
|
const url = `${this.appConfig.getWorkAllocationApiUrl()}/searchForCompletable`;
|
|
27
26
|
return this.http
|
|
28
27
|
.post(url, { searchRequest }, null, false)
|
|
@@ -38,12 +37,33 @@ export class WorkAllocationService {
|
|
|
38
37
|
}
|
|
39
38
|
}));
|
|
40
39
|
}
|
|
40
|
+
isWAEnabled(jurisdiction, caseType) {
|
|
41
|
+
this.features = this.appConfig.getWAServiceConfig();
|
|
42
|
+
let enabled = false;
|
|
43
|
+
if (!jurisdiction || !caseType) {
|
|
44
|
+
const caseInfo = JSON.parse(this.sessionStorageService.getItem('caseInfo'));
|
|
45
|
+
jurisdiction = caseInfo.jurisdiction;
|
|
46
|
+
caseType = caseInfo.caseType;
|
|
47
|
+
}
|
|
48
|
+
if (!this.features || !this.features.configurations) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
this.features.configurations.forEach(serviceConfig => {
|
|
52
|
+
if (serviceConfig.serviceName === jurisdiction && (serviceConfig.caseTypes.indexOf(caseType) !== -1)) {
|
|
53
|
+
enabled = true;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return enabled;
|
|
57
|
+
}
|
|
41
58
|
/**
|
|
42
59
|
* Call the API to assign a task.
|
|
43
60
|
* @param taskId specifies which task should be assigned.
|
|
44
61
|
* @param userId specifies the user the task should be assigned to.
|
|
45
62
|
*/
|
|
46
63
|
assignTask(taskId, userId) {
|
|
64
|
+
if (!this.isWAEnabled()) {
|
|
65
|
+
return of(null);
|
|
66
|
+
}
|
|
47
67
|
const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/assign`;
|
|
48
68
|
return this.http
|
|
49
69
|
.post(url, { userId })
|
|
@@ -57,6 +77,9 @@ export class WorkAllocationService {
|
|
|
57
77
|
* @param taskId specifies which task should be completed.
|
|
58
78
|
*/
|
|
59
79
|
completeTask(taskId) {
|
|
80
|
+
if (!this.isWAEnabled()) {
|
|
81
|
+
return of(null);
|
|
82
|
+
}
|
|
60
83
|
const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/complete`;
|
|
61
84
|
return this.http
|
|
62
85
|
.post(url, {})
|
|
@@ -74,6 +97,9 @@ export class WorkAllocationService {
|
|
|
74
97
|
* @param taskId specifies which task should be completed.
|
|
75
98
|
*/
|
|
76
99
|
assignAndCompleteTask(taskId) {
|
|
100
|
+
if (!this.isWAEnabled()) {
|
|
101
|
+
return of(null);
|
|
102
|
+
}
|
|
77
103
|
const url = `${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}/complete`;
|
|
78
104
|
return this.http
|
|
79
105
|
.post(url, {
|
|
@@ -123,6 +149,9 @@ export class WorkAllocationService {
|
|
|
123
149
|
* @param eventId The ID of the event to find tasks for.
|
|
124
150
|
*/
|
|
125
151
|
completeAppropriateTask(ccdId, eventId, jurisdiction, caseTypeId) {
|
|
152
|
+
if (!this.isWAEnabled(jurisdiction, caseTypeId)) {
|
|
153
|
+
return of(null);
|
|
154
|
+
}
|
|
126
155
|
const taskSearchParameter = {
|
|
127
156
|
ccdId,
|
|
128
157
|
eventId,
|
|
@@ -151,20 +180,30 @@ export class WorkAllocationService {
|
|
|
151
180
|
* Return tasks for case and event.
|
|
152
181
|
*/
|
|
153
182
|
getTasksByCaseIdAndEventId(eventId, caseId, caseType, jurisdiction) {
|
|
183
|
+
const defaultPayload = {
|
|
184
|
+
task_required_for_event: false,
|
|
185
|
+
tasks: []
|
|
186
|
+
};
|
|
187
|
+
if (!this.isWAEnabled()) {
|
|
188
|
+
return of(defaultPayload);
|
|
189
|
+
}
|
|
154
190
|
return this.http.get(`${this.appConfig.getWorkAllocationApiUrl()}/case/tasks/${caseId}/event/${eventId}/caseType/${caseType}/jurisdiction/${jurisdiction}`);
|
|
155
191
|
}
|
|
156
192
|
/**
|
|
157
193
|
* Call the API to get a task
|
|
158
194
|
*/
|
|
159
195
|
getTask(taskId) {
|
|
196
|
+
if (!this.isWAEnabled()) {
|
|
197
|
+
return of({ task: null });
|
|
198
|
+
}
|
|
160
199
|
return this.http.get(`${this.appConfig.getWorkAllocationApiUrl()}/task/${taskId}`);
|
|
161
200
|
}
|
|
162
201
|
}
|
|
163
202
|
WorkAllocationService.iACCaseOfficer = 'caseworker-ia-caseofficer';
|
|
164
203
|
WorkAllocationService.iACAdmOfficer = 'caseworker-ia-admofficer';
|
|
165
|
-
WorkAllocationService.ɵfac = function WorkAllocationService_Factory(t) { return new (t || WorkAllocationService)(i0.ɵɵinject(i1.HttpService), i0.ɵɵinject(i2.AbstractAppConfig), i0.ɵɵinject(
|
|
204
|
+
WorkAllocationService.ɵfac = function WorkAllocationService_Factory(t) { return new (t || WorkAllocationService)(i0.ɵɵinject(i1.HttpService), i0.ɵɵinject(i2.AbstractAppConfig), i0.ɵɵinject(i1.HttpErrorService), i0.ɵɵinject(i1.AlertService), i0.ɵɵinject(i1.SessionStorageService)); };
|
|
166
205
|
WorkAllocationService.ɵprov = i0.ɵɵdefineInjectable({ token: WorkAllocationService, factory: WorkAllocationService.ɵfac });
|
|
167
206
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WorkAllocationService, [{
|
|
168
207
|
type: Injectable
|
|
169
|
-
}], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type:
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1hbGxvY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3Ivc2VydmljZXMvd29yay1hbGxvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFLM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0FBRWxFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDJCQUEyQixDQUFDO0FBR2hFLE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFDbUIsSUFBaUIsRUFDakIsU0FBNEIsRUFDNUIsWUFBOEIsRUFDOUIsWUFBMEI7UUFIMUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7SUFFN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxhQUFrQztRQUNuRCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLENBQUM7UUFDL0UsT0FBTyxJ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UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7O0FBektjLG9DQUFjLEdBQUcsMkJBQTJCLENBQUM7QUFDN0MsbUNBQWEsR0FBRywwQkFBMEIsQ0FBQzswRkFIOUMscUJBQXFCOzZEQUFyQixxQkFBcUIsV0FBckIscUJBQXFCO3VGQUFyQixxQkFBcUI7Y0FEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFic3RyYWN0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBwLmNvbmZpZyc7XG5pbXBvcnQgeyBVc2VyRGV0YWlscyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItZGV0YWlscy5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrUmVzcG9uZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vdGFzay1yZXNwb25zZS5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrU2VhcmNoUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3dvcmstYWxsb2NhdGlvbi90YXNrLXNlYXJjaC1wYXJhbWV0ZXIubW9kZWwnO1xuaW1wb3J0IHsgVGFza1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2tQYXlsb2FkJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC9odHRwLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgTVVMVElQTEVfVEFTS1NfRk9VTkQgPSAnTW9yZSB0aGFuIG9uZSB0YXNrIGZvdW5kISc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXb3JrQWxsb2NhdGlvblNlcnZpY2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgaUFDQ2FzZU9mZmljZXIgPSAnY2FzZXdvcmtlci1pYS1jYXNlb2ZmaWNlcic7XG4gIHB1YmxpYyBzdGF0aWMgaUFDQWRtT2ZmaWNlciA9ICdjYXNld29ya2VyLWlhLWFkbW9mZmljZXInO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JTZXJ2aWNlOiBIdHRwRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGdldCB0YXNrcyBtYXRjaGluZyB0aGUgc2VhcmNoIGNyaXRlcmlhLlxuICAgKiBAcGFyYW0gc2VhcmNoUmVxdWVzdCBUaGUgc2VhcmNoIHBhcmFtZXRlcnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRhc2tzIHRvIG1hdGNoLlxuICAgKi9cbiAgcHVibGljIHNlYXJjaFRhc2tzKHNlYXJjaFJlcXVlc3Q6IFRhc2tTZWFyY2hQYXJhbWV0ZXIpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3NlYXJjaEZvckNvbXBsZXRhYmxlYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHtzZWFyY2hSZXF1ZXN0fSwgbnVsbCwgZmFsc2UpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIC8vIGV4cGxpY2l0bHkgZWF0IGF3YXkgNDAxIGVycm9yIGFuZCA0MDAgZXJyb3JcbiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzICYmIChlcnJvci5zdGF0dXMgPT09IDQwMSB8fCBlcnJvci5zdGF0dXMgPT09IDQwMCkpIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBzdGF0dXMgNDAxIG9yIDQwMCcsIGVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGFzc2lnbiBhIHRhc2suXG4gICAqIEBwYXJhbSB0YXNrSWQgc3BlY2lmaWVzIHdoaWNoIHRhc2sgc2hvdWxkIGJlIGFzc2lnbmVkLlxuICAgKiBAcGFyYW0gdXNlcklkIHNwZWNpZmllcyB0aGUgdXNlciB0aGUgdGFzayBzaG91bGQgYmUgYXNzaWduZWQgdG8uXG4gICAqL1xuICBwdWJsaWMgYXNzaWduVGFzayh0YXNrSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3Rhc2svJHt0YXNrSWR9L2Fzc2lnbmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7dXNlcklkfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBBUEkgdG8gY29tcGxldGUgYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFza0lkIHNwZWNpZmllcyB3aGljaCB0YXNrIHNob3VsZCBiZSBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVUYXNrKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfS9jb21wbGV0ZWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7fSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgLy8gdGhpcyB3aWxsIHN1YnNjcmliZSB0byBnZXQgdGhlIHVzZXIgZGV0YWlscyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgdGhpcy5odHRwLmdldCh0aGlzLmFwcENvbmZpZy5nZXRVc2VySW5mb0FwaVVybCgpKS5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZSkpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVGFza0NvbXBsZXRpb25FcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBBUEkgdG8gYXNzaWduIGFuZCBjb21wbGV0ZSBhIHRhc2suXG4gICAqIEBwYXJhbSB0YXNrSWQgc3BlY2lmaWVzIHdoaWNoIHRhc2sgc2hvdWxkIGJlIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3NpZ25BbmRDb21wbGV0ZVRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3Rhc2svJHt0YXNrSWR9L2NvbXBsZXRlYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHtcbiAgICAgICAgY29tcGxldGlvbl9vcHRpb25zOiB7XG4gICAgICAgICAgYXNzaWduX2FuZF9jb21wbGV0ZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICAvLyB0aGlzIHdpbGwgc3Vic2NyaWJlIHRvIGdldCB0aGUgdXNlciBkZXRhaWxzIGFuZCBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldFVzZXJJbmZvQXBpVXJsKCkpLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVUYXNrQ29tcGxldGlvbkVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIG9ic2VydmFibGUgdG8gZ2V0IHRoZSB1c2VyIGRldGFpbHMgd2hlbiB0YXNrIGlzIGNvbXBsZXRlZC5cbiAgICogQHBhcmFtIHJlc3BvbnNlIGlzIHRoZSByZXNwb25zZSBnaXZlbiBmcm9tIHRoZSBvYnNlcnZhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VyIGRldGFpbGQuXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlVGFza0NvbXBsZXRpb25FcnJvcihyZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdXNlckRldGFpbHMgPSByZXNwb25zZSBhcyBVc2VyRGV0YWlscztcbiAgICBpZiAodGhpcy51c2VySXNDYXNld29ya2VyKHVzZXJEZXRhaWxzLnVzZXJJbmZvLnJvbGVzKSkge1xuICAgICAgLy8gd2hlbiBzdWJtaXR0aW5nIHRoZSBjb21wbGV0aW9uIG9mIHRhc2sgaWYgbm90IHlldCByZW5kZXJlZCBjYXNlcy9jYXNlIGNvbmZpcm0gdGhlbiBwcmVzZXJ2ZSB0aGUgYWxlcnQgZm9yIHJlLXJlbmRlcmluZ1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2V0UHJlc2VydmVBbGVydHModHJ1ZSwgWydjYXNlcy9jYXNlJywgJ3N1Ym1pdCddKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm5pbmcoJ0EgdGFzayBjb3VsZCBub3QgYmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gUGxlYXNlIGNvbXBsZXRlIHRoZSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FzZSBtYW51YWxseS4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyJ3Mgcm9sZSBpcyBlcXVpdmFsZW50IHRvIGEgY2FzZXdvcmtlci5cbiAgICogQHBhcmFtIHJvbGVzIGlzIHRoZSBsaXN0IG9mIHJvbGVzIGZvdW5kIGZyb20gdGhlIGN1cnJlbnQgdXNlci5cbiAgICovXG4gIHB1YmxpYyB1c2VySXNDYXNld29ya2VyKHJvbGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvd2VyQ2FzZVJvbGVzID0gcm9sZXMubWFwKHJvbGUgPT4gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAvLyBXaGVuL2lmIGxpYiAmIHRhcmdldCBwZXJtYW5lbnRseSBjaGFuZ2UgdG8gZXMyMDE2LCByZXBsYWNlIGluZGV4T2Ygd2l0aCBpbmNsdWRlc1xuICAgIHJldHVybiAobG93ZXJDYXNlUm9sZXMuaW5kZXhPZihXb3JrQWxsb2NhdGlvblNlcnZpY2UuaUFDQ2FzZU9mZmljZXIpICE9PSAtMSlcbiAgICAgIHx8IChsb3dlckNhc2VSb2xlcy5pbmRleE9mKFdvcmtBbGxvY2F0aW9uU2VydmljZS5pQUNBZG1PZmZpY2VyKSAhPT0gLTEpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgZm9yIG9wZW4gdGFza3MgZm9yIGEgY2FzZSBhbmQgZXZlbnQgY29tYmluYXRpb24uIFRoZXJlIGFyZSA1IHBvc3NpYmxlIHNjZW5hcmlvczpcbiAgICogICAxLiBObyB0YXNrcyBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFN1Y2Nlc3MuXG4gICAqICAgMi4gT25lIHRhc2sgZm91bmQgPT4gTWFyayBhcyBkb25lICAgICAgICAgICAgICA9PiBTdWNjZXNzLlxuICAgKiAgIDMuIE9uZSB0YXNrIGZvdW5kID0+IE1hcmsgYXMgZG9uZSB0aHJvd3MgZXJyb3IgPT4gRmFpbHVyZS5cbiAgICogICA0LiBNb3JlIHRoYW4gb25lIHRhc2sgZm91bmQgICAgICAgICAgICAgICAgICAgID0+IEZhaWx1cmUuXG4gICAqICAgNS4gU2VhcmNoIGNhbGwgdGhyb3dzIGFuIGVycm9yICAgICAgICAgICAgICAgICA9PiBGYWlsdXJlLlxuICAgKiBAcGFyYW0gY2NkSWQgVGhlIElEIG9mIHRoZSBjYXNlIHRvIGZpbmQgdGFza3MgZm9yLlxuICAgKiBAcGFyYW0gZXZlbnRJZCBUaGUgSUQgb2YgdGhlIGV2ZW50IHRvIGZpbmQgdGFza3MgZm9yLlxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlQXBwcm9wcmlhdGVUYXNrKGNjZElkOiBzdHJpbmcsIGV2ZW50SWQ6IHN0cmluZywganVyaXNkaWN0aW9uOiBzdHJpbmcsIGNhc2VUeXBlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdGFza1NlYXJjaFBhcmFtZXRlcjogVGFza1NlYXJjaFBhcmFtZXRlciA9IHtcbiAgICAgIGNjZElkLFxuICAgICAgZXZlbnRJZCxcbiAgICAgIGp1cmlzZGljdGlvbixcbiAgICAgIGNhc2VUeXBlSWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRhc2tzKHRhc2tTZWFyY2hQYXJhbWV0ZXIpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFza3M6IGFueVtdID0gcmVzcG9uc2UudGFza3M7XG4gICAgICAgICAgaWYgKHRhc2tzICYmIHRhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVRhc2sodGFza3NbMF0uaWQpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHByb2JsZW0uIFRocm93IGFuIGFwcHJvcHJpYXRlIGVycm9yLlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTVVMVElQTEVfVEFTS1NfRk9VTkQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQWxsIGdvb2QuIE5vdGhpbmcgdG8gc2VlIGhlcmUuXG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBTaW1wbHkgcmV0aHJvdyBpdC5cbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0YXNrcyBmb3IgY2FzZSBhbmQgZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFza3NCeUNhc2VJZEFuZEV2ZW50SWQoZXZlbnRJZDogc3RyaW5nLCBjYXNlSWQ6IHN0cmluZywgY2FzZVR5cGU6IHN0cmluZywganVyaXNkaWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tQYXlsb2FkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hcHBDb25maWcuZ2V0V29ya0FsbG9jYXRpb25BcGlVcmwoKX0vY2FzZS90YXNrcy8ke2Nhc2VJZH0vZXZlbnQvJHtldmVudElkfS9jYXNlVHlwZS8ke2Nhc2VUeXBlfS9qdXJpc2RpY3Rpb24vJHtqdXJpc2RpY3Rpb259YCk7XG4gIH1cblxuIC8qKlxuICAqIENhbGwgdGhlIEFQSSB0byBnZXQgYSB0YXNrXG4gICovXG4gcHVibGljIGdldFRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tSZXNwb25lPiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3Rhc2svJHt0YXNrSWR9YCk7XG4gfVxufVxuIl19
|
|
208
|
+
}], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type: i1.HttpErrorService }, { type: i1.AlertService }, { type: i1.SessionStorageService }]; }, null); })();
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1hbGxvY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3Ivc2VydmljZXMvd29yay1hbGxvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFdkcsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFHaEUsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUNtQixJQUFpQixFQUNqQixTQUE0QixFQUM1QixZQUE4QixFQUM5QixZQUEwQixFQUMxQixxQkFBNEM7UUFKNUMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUU3RCw2Q0FBNkM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxhQUFrQztRQUNuRCxtRUFBbUU7UUFDbkUsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFF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LEdBQWdCO1lBQ2xDLHVCQUF1QixFQUFFLEtBQUs7WUFDOUIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFBO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLGVBQWUsTUFBTSxVQUFVLE9BQU8sYUFBYSxRQUFRLGlCQUFpQixZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzlKLENBQUM7SUFFRjs7T0FFRztJQUNJLE9BQU8sQ0FBQyxNQUFjO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDOztBQXZOYyxvQ0FBYyxHQUFHLDJCQUEyQixDQUFDO0FBQzdDLG1DQUFhLEdBQUcsMEJBQTBCLENBQUM7MEZBSDlDLHFCQUFxQjs2REFBckIscUJBQXFCLFdBQXJCLHFCQUFxQjt1RkFBckIscUJBQXFCO2NBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IFRhc2tTZWFyY2hQYXJhbWV0ZXIsIFdBRmVhdHVyZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBVc2VyRGV0YWlscyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItZGV0YWlscy5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrUmVzcG9uZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vdGFzay1yZXNwb25zZS5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrUGF5bG9hZCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vVGFza1BheWxvYWQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBIdHRwRXJyb3JTZXJ2aWNlLCBIdHRwU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuXG5leHBvcnQgY29uc3QgTVVMVElQTEVfVEFTS1NfRk9VTkQgPSAnTW9yZSB0aGFuIG9uZSB0YXNrIGZvdW5kISc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXb3JrQWxsb2NhdGlvblNlcnZpY2Uge1xuXG4gIHB1YmxpYyBzdGF0aWMgaUFDQ2FzZU9mZmljZXIgPSAnY2FzZXdvcmtlci1pYS1jYXNlb2ZmaWNlcic7XG4gIHB1YmxpYyBzdGF0aWMgaUFDQWRtT2ZmaWNlciA9ICdjYXNld29ya2VyLWlhLWFkbW9mZmljZXInO1xuXG4gIHByaXZhdGUgZmVhdHVyZXM6IFdBRmVhdHVyZUNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnOiBBYnN0cmFjdEFwcENvbmZpZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yU2VydmljZTogSHR0cEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2VcbiAgKSB7XG4gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdvcmsgYWxsb2NhdGlvbiBpcyBlbmFibGVkXG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGdldCB0YXNrcyBtYXRjaGluZyB0aGUgc2VhcmNoIGNyaXRlcmlhLlxuICAgKiBAcGFyYW0gc2VhcmNoUmVxdWVzdCBUaGUgc2VhcmNoIHBhcmFtZXRlcnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHRhc2tzIHRvIG1hdGNoLlxuICAgKi9cbiAgcHVibGljIHNlYXJjaFRhc2tzKHNlYXJjaFJlcXVlc3Q6IFRhc2tTZWFyY2hQYXJhbWV0ZXIpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIC8vIERvIG5vdCBuZWVkIHRvIGNoZWNrIGlmIFdBIGVuYWJsZWQgYXMgcGFyZW50IG1ldGhvZCB3aWxsIGRvIHRoYXRcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS9zZWFyY2hGb3JDb21wbGV0YWJsZWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7c2VhcmNoUmVxdWVzdH0sIG51bGwsIGZhbHNlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICAvLyBleHBsaWNpdGx5IGVhdCBhd2F5IDQwMSBlcnJvciBhbmQgNDAwIGVycm9yXG4gICAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnN0YXR1cyAmJiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgfHwgZXJyb3Iuc3RhdHVzID09PSA0MDApKSB7XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Igc3RhdHVzIDQwMSBvciA0MDAnLCBlcnJvcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1dBRW5hYmxlZChqdXJpc2RpY3Rpb24/OiBzdHJpbmcsIGNhc2VUeXBlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhpcy5mZWF0dXJlcyA9IHRoaXMuYXBwQ29uZmlnLmdldFdBU2VydmljZUNvbmZpZygpO1xuICAgIGxldCBlbmFibGVkID0gZmFsc2U7XG4gICAgaWYgKCFqdXJpc2RpY3Rpb24gfHwgIWNhc2VUeXBlKSB7XG4gICAgICBjb25zdCBjYXNlSW5mbyA9IEpTT04ucGFyc2UodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY2FzZUluZm8nKSk7XG4gICAgICBqdXJpc2RpY3Rpb24gPSBjYXNlSW5mby5qdXJpc2RpY3Rpb247XG4gICAgICBjYXNlVHlwZSA9IGNhc2VJbmZvLmNhc2VUeXBlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmVhdHVyZXMgfHwgIXRoaXMuZmVhdHVyZXMuY29uZmlndXJhdGlvbnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5mZWF0dXJlcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKHNlcnZpY2VDb25maWcgPT4ge1xuICAgICAgaWYgKHNlcnZpY2VDb25maWcuc2VydmljZU5hbWUgPT09IGp1cmlzZGljdGlvbiAmJiAoc2VydmljZUNvbmZpZy5jYXNlVHlwZXMuaW5kZXhPZihjYXNlVHlwZSkgIT09IC0xKSkge1xuICAgICAgICAgIGVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGFzc2lnbiBhIHRhc2suXG4gICAqIEBwYXJhbSB0YXNrSWQgc3BlY2lmaWVzIHdoaWNoIHRhc2sgc2hvdWxkIGJlIGFzc2lnbmVkLlxuICAgKiBAcGFyYW0gdXNlcklkIHNwZWNpZmllcyB0aGUgdXNlciB0aGUgdGFzayBzaG91bGQgYmUgYXNzaWduZWQgdG8uXG4gICAqL1xuICBwdWJsaWMgYXNzaWduVGFzayh0YXNrSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5pc1dBRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3Rhc2svJHt0YXNrSWR9L2Fzc2lnbmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7dXNlcklkfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBBUEkgdG8gY29tcGxldGUgYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFza0lkIHNwZWNpZmllcyB3aGljaCB0YXNrIHNob3VsZCBiZSBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVUYXNrKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfS9jb21wbGV0ZWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7fSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgLy8gdGhpcyB3aWxsIHN1YnNjcmliZSB0byBnZXQgdGhlIHVzZXIgZGV0YWlscyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgdGhpcy5odHRwLmdldCh0aGlzLmFwcENvbmZpZy5nZXRVc2VySW5mb0FwaVVybCgpKS5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZSkpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVGFza0NvbXBsZXRpb25FcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBBUEkgdG8gYXNzaWduIGFuZCBjb21wbGV0ZSBhIHRhc2suXG4gICAqIEBwYXJhbSB0YXNrSWQgc3BlY2lmaWVzIHdoaWNoIHRhc2sgc2hvdWxkIGJlIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3NpZ25BbmRDb21wbGV0ZVRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5pc1dBRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3Rhc2svJHt0YXNrSWR9L2NvbXBsZXRlYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHtcbiAgICAgICAgY29tcGxldGlvbl9vcHRpb25zOiB7XG4gICAgICAgICAgYXNzaWduX2FuZF9jb21wbGV0ZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICAvLyB0aGlzIHdpbGwgc3Vic2NyaWJlIHRvIGdldCB0aGUgdXNlciBkZXRhaWxzIGFuZCBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldFVzZXJJbmZvQXBpVXJsKCkpLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVUYXNrQ29tcGxldGlvbkVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIG9ic2VydmFibGUgdG8gZ2V0IHRoZSB1c2VyIGRldGFpbHMgd2hlbiB0YXNrIGlzIGNvbXBsZXRlZC5cbiAgICogQHBhcmFtIHJlc3BvbnNlIGlzIHRoZSByZXNwb25zZSBnaXZlbiBmcm9tIHRoZSBvYnNlcnZhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VyIGRldGFpbGQuXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlVGFza0NvbXBsZXRpb25FcnJvcihyZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdXNlckRldGFpbHMgPSByZXNwb25zZSBhcyBVc2VyRGV0YWlscztcbiAgICBpZiAodGhpcy51c2VySXNDYXNld29ya2VyKHVzZXJEZXRhaWxzLnVzZXJJbmZvLnJvbGVzKSkge1xuICAgICAgLy8gd2hlbiBzdWJtaXR0aW5nIHRoZSBjb21wbGV0aW9uIG9mIHRhc2sgaWYgbm90IHlldCByZW5kZXJlZCBjYXNlcy9jYXNlIGNvbmZpcm0gdGhlbiBwcmVzZXJ2ZSB0aGUgYWxlcnQgZm9yIHJlLXJlbmRlcmluZ1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2V0UHJlc2VydmVBbGVydHModHJ1ZSwgWydjYXNlcy9jYXNlJywgJ3N1Ym1pdCddKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm5pbmcoJ0EgdGFzayBjb3VsZCBub3QgYmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gUGxlYXNlIGNvbXBsZXRlIHRoZSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FzZSBtYW51YWxseS4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyJ3Mgcm9sZSBpcyBlcXVpdmFsZW50IHRvIGEgY2FzZXdvcmtlci5cbiAgICogQHBhcmFtIHJvbGVzIGlzIHRoZSBsaXN0IG9mIHJvbGVzIGZvdW5kIGZyb20gdGhlIGN1cnJlbnQgdXNlci5cbiAgICovXG4gIHB1YmxpYyB1c2VySXNDYXNld29ya2VyKHJvbGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvd2VyQ2FzZVJvbGVzID0gcm9sZXMubWFwKHJvbGUgPT4gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAvLyBXaGVuL2lmIGxpYiAmIHRhcmdldCBwZXJtYW5lbnRseSBjaGFuZ2UgdG8gZXMyMDE2LCByZXBsYWNlIGluZGV4T2Ygd2l0aCBpbmNsdWRlc1xuICAgIHJldHVybiAobG93ZXJDYXNlUm9sZXMuaW5kZXhPZihXb3JrQWxsb2NhdGlvblNlcnZpY2UuaUFDQ2FzZU9mZmljZXIpICE9PSAtMSlcbiAgICAgIHx8IChsb3dlckNhc2VSb2xlcy5pbmRleE9mKFdvcmtBbGxvY2F0aW9uU2VydmljZS5pQUNBZG1PZmZpY2VyKSAhPT0gLTEpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgZm9yIG9wZW4gdGFza3MgZm9yIGEgY2FzZSBhbmQgZXZlbnQgY29tYmluYXRpb24uIFRoZXJlIGFyZSA1IHBvc3NpYmxlIHNjZW5hcmlvczpcbiAgICogICAxLiBObyB0YXNrcyBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFN1Y2Nlc3MuXG4gICAqICAgMi4gT25lIHRhc2sgZm91bmQgPT4gTWFyayBhcyBkb25lICAgICAgICAgICAgICA9PiBTdWNjZXNzLlxuICAgKiAgIDMuIE9uZSB0YXNrIGZvdW5kID0+IE1hcmsgYXMgZG9uZSB0aHJvd3MgZXJyb3IgPT4gRmFpbHVyZS5cbiAgICogICA0LiBNb3JlIHRoYW4gb25lIHRhc2sgZm91bmQgICAgICAgICAgICAgICAgICAgID0+IEZhaWx1cmUuXG4gICAqICAgNS4gU2VhcmNoIGNhbGwgdGhyb3dzIGFuIGVycm9yICAgICAgICAgICAgICAgICA9PiBGYWlsdXJlLlxuICAgKiBAcGFyYW0gY2NkSWQgVGhlIElEIG9mIHRoZSBjYXNlIHRvIGZpbmQgdGFza3MgZm9yLlxuICAgKiBAcGFyYW0gZXZlbnRJZCBUaGUgSUQgb2YgdGhlIGV2ZW50IHRvIGZpbmQgdGFza3MgZm9yLlxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlQXBwcm9wcmlhdGVUYXNrKGNjZElkOiBzdHJpbmcsIGV2ZW50SWQ6IHN0cmluZywganVyaXNkaWN0aW9uOiBzdHJpbmcsIGNhc2VUeXBlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCF0aGlzLmlzV0FFbmFibGVkKGp1cmlzZGljdGlvbiwgY2FzZVR5cGVJZCkpIHtcbiAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG4gICAgY29uc3QgdGFza1NlYXJjaFBhcmFtZXRlcjogVGFza1NlYXJjaFBhcmFtZXRlciA9IHtcbiAgICAgIGNjZElkLFxuICAgICAgZXZlbnRJZCxcbiAgICAgIGp1cmlzZGljdGlvbixcbiAgICAgIGNhc2VUeXBlSWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRhc2tzKHRhc2tTZWFyY2hQYXJhbWV0ZXIpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFza3M6IGFueVtdID0gcmVzcG9uc2UudGFza3M7XG4gICAgICAgICAgaWYgKHRhc2tzICYmIHRhc2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZVRhc2sodGFza3NbMF0uaWQpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHByb2JsZW0uIFRocm93IGFuIGFwcHJvcHJpYXRlIGVycm9yLlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTVVMVElQTEVfVEFTS1NfRk9VTkQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQWxsIGdvb2QuIE5vdGhpbmcgdG8gc2VlIGhlcmUuXG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBTaW1wbHkgcmV0aHJvdyBpdC5cbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0YXNrcyBmb3IgY2FzZSBhbmQgZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFza3NCeUNhc2VJZEFuZEV2ZW50SWQoZXZlbnRJZDogc3RyaW5nLCBjYXNlSWQ6IHN0cmluZywgY2FzZVR5cGU6IHN0cmluZywganVyaXNkaWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tQYXlsb2FkPiB7XG4gICAgY29uc3QgZGVmYXVsdFBheWxvYWQ6IFRhc2tQYXlsb2FkID0ge1xuICAgICAgdGFza19yZXF1aXJlZF9mb3JfZXZlbnQ6IGZhbHNlLFxuICAgICAgdGFza3M6IFtdXG4gICAgfVxuICAgIGlmICghdGhpcy5pc1dBRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gb2YoZGVmYXVsdFBheWxvYWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS9jYXNlL3Rhc2tzLyR7Y2FzZUlkfS9ldmVudC8ke2V2ZW50SWR9L2Nhc2VUeXBlLyR7Y2FzZVR5cGV9L2p1cmlzZGljdGlvbi8ke2p1cmlzZGljdGlvbn1gKTtcbiAgfVxuXG4gLyoqXG4gICogQ2FsbCB0aGUgQVBJIHRvIGdldCBhIHRhc2tcbiAgKi9cbiBwdWJsaWMgZ2V0VGFzayh0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1Jlc3BvbmU+IHtcbiAgaWYgKCF0aGlzLmlzV0FFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gb2Yoe3Rhc2s6IG51bGx9KTtcbiAgfVxuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfWApO1xuIH1cbn1cbiJdfQ==
|