tnx-shared 5.2.28 → 5.2.29
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/assets/docker/docker-entrypoint.sh +1 -1
- package/classes/base/list-component-base.d.ts +19 -5
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/environment-schema.d.ts +23 -20
- package/classes/environment-schema.d.ts.map +1 -1
- package/classes/public-function.d.ts +1 -0
- package/classes/public-function.d.ts.map +1 -1
- package/components/chat/chat-box/chat-box.component.d.ts.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +1 -3
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/advance-search/advance-search.component.d.ts +6 -6
- package/components/crud/advance-search/advance-search.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +6 -0
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts +5 -3
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +3 -0
- package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts.map +1 -1
- package/components/tn-custom-scrollbar/tn-custom-scrollbar.component.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts +2 -0
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/congviec/congviec/congviec-form/congviec-form.component.d.ts +1 -0
- package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
- package/directives/primeng/tn-table.directive.d.ts +7 -6
- package/directives/primeng/tn-table.directive.d.ts.map +1 -1
- package/esm2020/classes/base/list-component-base.mjs +56 -32
- package/esm2020/classes/environment-schema.mjs +10 -1
- package/esm2020/classes/public-function.mjs +3 -1
- package/esm2020/components/add-news/add-news.component.mjs +3 -3
- package/esm2020/components/autocomplete-picker/autocomplete-picker.component.mjs +2 -2
- package/esm2020/components/chat/chat-box/chat-box.component.mjs +3 -4
- package/esm2020/components/chat/chat-send-message-box/chat-send-message-box.component.mjs +2 -2
- package/esm2020/components/common-app-component/common-app-component.mjs +57 -57
- package/esm2020/components/common-dashboard/common-dashboard.component.mjs +3 -3
- package/esm2020/components/crud/advance-search/advance-search.component.mjs +28 -19
- package/esm2020/components/crud/crud-form/crud-form.component.mjs +12 -4
- package/esm2020/components/crud/crud-list/crud-list.component.mjs +3 -3
- package/esm2020/components/crud/tree-table/tree-table.component.mjs +3 -3
- package/esm2020/components/dropdown/dropdown.component.mjs +29 -24
- package/esm2020/components/entity-permission/entity-permission.component.mjs +3 -3
- package/esm2020/components/entity-picker/entity-picker-box/entity-picker-box.component.mjs +3 -3
- package/esm2020/components/entity-picker/entity-picker-dialog/entity-picker-dialog.component.mjs +3 -3
- package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +3 -3
- package/esm2020/components/main-list/main-list.component.mjs +3 -3
- package/esm2020/components/query-builders/query-builder-rule/query-builder-rule.component.mjs +8 -3
- package/esm2020/components/radio-button-list/radio-button-list.component.mjs +3 -3
- package/esm2020/components/report-queue/report-queue.component.mjs +2 -2
- package/esm2020/components/settings/settings.component.mjs +3 -3
- package/esm2020/components/tn-app-help/tn-app-help.component.mjs +3 -3
- package/esm2020/components/tn-app-notification/tn-app-notification.component.mjs +3 -3
- package/esm2020/components/tn-custom-scrollbar/tn-custom-scrollbar.component.mjs +5 -4
- package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +7 -3
- package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +3 -3
- package/esm2020/components/user-picker/user-picker.component.mjs +2 -2
- package/esm2020/components/workflow/workflow-picker/workflow-picker.component.mjs +3 -3
- package/esm2020/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.mjs +3 -3
- package/esm2020/congviec/congviec/congviec-form/congviec-form.component.mjs +6 -3
- package/esm2020/congviec/congviec/congviec.component.mjs +3 -3
- package/esm2020/directives/primeng/tn-table.directive.mjs +28 -13
- package/esm2020/services/common.service.mjs +11 -3
- package/esm2020/services/environment.service.mjs +48 -7
- package/esm2020/services/permission.service.mjs +12 -15
- package/esm2020/services/position.service.mjs +2 -2
- package/esm2020/services/signalr.service.mjs +3 -3
- package/esm2020/services/tn-client.service.mjs +30 -25
- package/esm2020/tnx-shared.module.mjs +14 -8
- package/fesm2015/tnx-shared.mjs +587 -445
- package/fesm2015/tnx-shared.mjs.map +1 -1
- package/fesm2020/tnx-shared.mjs +587 -445
- package/fesm2020/tnx-shared.mjs.map +1 -1
- package/package.json +2 -2
- package/services/common.service.d.ts +6 -0
- package/services/common.service.d.ts.map +1 -1
- package/services/environment.service.d.ts +32 -23
- package/services/environment.service.d.ts.map +1 -1
- package/services/permission.service.d.ts +5 -0
- package/services/permission.service.d.ts.map +1 -1
- package/services/position.service.d.ts.map +1 -1
- package/services/signalr.service.d.ts +1 -1
- package/services/signalr.service.d.ts.map +1 -1
- package/services/tn-client.service.d.ts +3 -1
- package/services/tn-client.service.d.ts.map +1 -1
- package/tnx-shared.module.d.ts +12 -11
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
|
-
import { SignalRConfiguration } from 'ng2-signalr';
|
|
2
|
+
// import { SignalRConfiguration } from 'ng2-signalr';
|
|
3
|
+
import { ObjectApp } from '../classes/environment-schema';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export function moduleConfigFunc() {
|
|
5
6
|
return new InjectionToken('');
|
|
@@ -24,7 +25,15 @@ export class EnvironmentService {
|
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
getSignalRConfig() {
|
|
27
|
-
const c =
|
|
28
|
+
const c = {
|
|
29
|
+
hubName: '',
|
|
30
|
+
qs: { key: '' },
|
|
31
|
+
url: '',
|
|
32
|
+
logging: true,
|
|
33
|
+
executeEventsInZone: true,
|
|
34
|
+
executeErrorsInZone: false,
|
|
35
|
+
executeStatusChangeInZone: true,
|
|
36
|
+
};
|
|
28
37
|
c.hubName = 'tnclient';
|
|
29
38
|
c.qs = { key: 'webapp' };
|
|
30
39
|
if (this.environment.signalr.useSSL) {
|
|
@@ -85,7 +94,6 @@ export class EnvironmentService {
|
|
|
85
94
|
console.error(`Không tìm thấy endpoint của service ${serviceCode} trong cấu hình`);
|
|
86
95
|
return '';
|
|
87
96
|
}
|
|
88
|
-
;
|
|
89
97
|
if (!includeVersion) {
|
|
90
98
|
return this.getServiceEndpointByServiceInfo(serviceInfo);
|
|
91
99
|
}
|
|
@@ -104,7 +112,6 @@ export class EnvironmentService {
|
|
|
104
112
|
console.error(`Không tìm thấy endpoint của service ${serviceCode} trong cấu hình`);
|
|
105
113
|
return '';
|
|
106
114
|
}
|
|
107
|
-
;
|
|
108
115
|
let endpoint = '';
|
|
109
116
|
if (serviceInfo.useLocal) {
|
|
110
117
|
endpoint = serviceInfo.localHttpEndpointOld;
|
|
@@ -130,7 +137,6 @@ export class EnvironmentService {
|
|
|
130
137
|
console.error(`Không tìm thấy endpoint của service ${serviceCode} trong cấu hình`);
|
|
131
138
|
return false;
|
|
132
139
|
}
|
|
133
|
-
;
|
|
134
140
|
return serviceInfo.useOldVersion;
|
|
135
141
|
}
|
|
136
142
|
getEnableHub() {
|
|
@@ -163,7 +169,36 @@ export class EnvironmentService {
|
|
|
163
169
|
return Object.values(this.environment.apps);
|
|
164
170
|
}
|
|
165
171
|
getObjectApp(module) {
|
|
166
|
-
|
|
172
|
+
const appObject = Object.values(this.environment.apps).find(q => q.code === module.toLowerCase());
|
|
173
|
+
this.checkKeysAndAddValue(appObject, ObjectApp.KeysNeedReCheck);
|
|
174
|
+
return appObject;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check cac property co the bi lech case cua object
|
|
178
|
+
* @date 10/20/2022 - 9:00:11 AM
|
|
179
|
+
*
|
|
180
|
+
* @private
|
|
181
|
+
* @param {Object} object
|
|
182
|
+
* @param {string[]} keys cac property can check
|
|
183
|
+
*/
|
|
184
|
+
checkKeysAndAddValue(object, keys) {
|
|
185
|
+
for (const key of keys) {
|
|
186
|
+
this.checkKeyAndAddValue(object, key);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Check property co the bi lech case cua object
|
|
191
|
+
* @date 10/20/2022 - 9:00:11 AM
|
|
192
|
+
*
|
|
193
|
+
* @private
|
|
194
|
+
* @param {Object} object
|
|
195
|
+
* @param {string} key
|
|
196
|
+
*/
|
|
197
|
+
checkKeyAndAddValue(object, key) {
|
|
198
|
+
const lowerCaseKey = key.toLowerCase();
|
|
199
|
+
if (object[key] == null && object[lowerCaseKey] != null) {
|
|
200
|
+
object[key] = object[lowerCaseKey];
|
|
201
|
+
}
|
|
167
202
|
}
|
|
168
203
|
getModuleName(module) {
|
|
169
204
|
const objApp = this.getObjectApp(module);
|
|
@@ -293,6 +328,12 @@ export class EnvironmentService {
|
|
|
293
328
|
getEnableBaseHref() {
|
|
294
329
|
return this.environment.enableBaseHref;
|
|
295
330
|
}
|
|
331
|
+
getAuthorizationPrivateKey() {
|
|
332
|
+
if (!this.getIsProduction()) {
|
|
333
|
+
return 'testkey';
|
|
334
|
+
}
|
|
335
|
+
return this.environment.authorizationPrivateKey;
|
|
336
|
+
}
|
|
296
337
|
getDefaultRedirect() {
|
|
297
338
|
return this.environment.clientDomain?.defaultRedirect;
|
|
298
339
|
}
|
|
@@ -335,4 +376,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
335
376
|
type: Inject,
|
|
336
377
|
args: [moduleConfigFunc]
|
|
337
378
|
}] }]; } });
|
|
338
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBR25ELE1BQU0sVUFBVSxnQkFBZ0I7SUFDNUIsT0FBTyxJQUFJLGNBQWMsQ0FBZSxFQUFFLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBSUQsTUFBTSxPQUFPLGtCQUFrQjtJQUczQixZQUVJLGtCQUF1QixJQUFJO1FBRTNCLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDbEIsMkJBQTJCO1lBQzNCLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN2RCxJQUFJLElBQUksRUFBRTtnQkFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0o7YUFDSTtZQUNELE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7WUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7WUFDMUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQy9FO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtR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VCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFLUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhDb25maWcgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuaW1wb3J0IHsgU2lnbmFsUkNvbmZpZ3VyYXRpb24gfSBmcm9tICduZzItc2lnbmFscic7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2NoZW1hIH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xyXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlQ29uZmlnRnVuYygpIHtcclxuICAgIHJldHVybiBuZXcgSW5qZWN0aW9uVG9rZW48TW9kdWxlQ29uZmlnPignJyk7XHJcbn1cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFNlcnZpY2Uge1xyXG4gICAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2NoZW1hO1xyXG4gICAgcHJpdmF0ZSBhcHBDb2RlOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KG1vZHVsZUNvbmZpZ0Z1bmMpXHJcbiAgICAgICAgbW9kdWxlQ29uZmlnVmFsOiBhbnkgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoIW1vZHVsZUNvbmZpZ1ZhbCkge1xyXG4gICAgICAgICAgICAvLyBnZXQgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ21vZHVsZUNvbmZpZ1ZhbCcpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdjYW5ub3QgZmluZCBtb2R1bGVDb25maWdWYWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqTW9kdWxlQ29uZmlnVmFsID0gbW9kdWxlQ29uZmlnVmFsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBvYmpNb2R1bGVDb25maWdWYWwuZW52aXJvbm1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29kZSA9IG9iak1vZHVsZUNvbmZpZ1ZhbC5hcHBDb2RlO1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdtb2R1bGVDb25maWdWYWwnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmVudmlyb25tZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNpZ25hbFJDb25maWcoKTogU2lnbmFsUkNvbmZpZ3VyYXRpb24ge1xyXG4gICAgICAgIGNvbnN0IGMgPSBuZXcgU2lnbmFsUkNvbmZpZ3VyYXRpb24oKTtcclxuICAgICAgICBjLmh1Yk5hbWUgPSAndG5jbGllbnQnO1xyXG4gICAgICAgIGMucXMgPSB7IGtleTogJ3dlYmFwcCcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci51c2VTU0wpIHtcclxuICAgICAgICAgICAgYy51cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuZW5kcG9pbnRTU0x9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGMudXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmVuZHBvaW50fWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjLmxvZ2dpbmcgPSB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuc2hvd0xvZztcclxuXHJcbiAgICAgICAgYy5leGVjdXRlRXZlbnRzSW5ab25lID0gdHJ1ZTtcclxuICAgICAgICBjLmV4ZWN1dGVFcnJvcnNJblpvbmUgPSBmYWxzZTtcclxuICAgICAgICBjLmV4ZWN1dGVTdGF0dXNDaGFuZ2VJblpvbmUgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gYztcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRoQ29uZmlnKCk6IEF1dGhDb25maWcge1xyXG4gICAgICAgIGxldCBzY29wZSA9ICdvcGVuaWQgcHJvZmlsZSBlbWFpbCc7XHJcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5zY29wZSkge1xyXG4gICAgICAgICAgICBzY29wZSA9IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5zY29wZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxBdXRoQ29uZmlnPntcclxuICAgICAgICAgICAgaXNzdWVyOiBgJHt0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuaXNzdWVyfWAsXHJcbiAgICAgICAgICAgIGNsaWVudElkOiBgJHt0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuY2xpZW50SWR9YCxcclxuICAgICAgICAgICAgcmVkaXJlY3RVcmk6IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5jdXN0b21SZWRpcmVjdFVyaSB8fCB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxyXG4gICAgICAgICAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXHJcbiAgICAgICAgICAgIHNpbGVudFJlZnJlc2hSZWRpcmVjdFVyaTogd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvc2lsZW50LXJlZnJlc2guaHRtbCcsXHJcbiAgICAgICAgICAgIHJlcXVpcmVIdHRwczogdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLnJlcXVpcmVIdHRwcyA/IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5yZXF1aXJlSHR0cHMgOiBmYWxzZSxcclxuICAgICAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgICAgIHNob3dEZWJ1Z0luZm9ybWF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVxdWVzdEFjY2Vzc1Rva2VuOiB0cnVlLFxyXG4gICAgICAgICAgICB1c2VTaWxlbnRSZWZyZXNoOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xlYXJIYXNoQWZ0ZXJMb2dpbjogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlRW5kcG9pbnRCeVNlcnZpY2VJbmZvKHNlcnZpY2VJbmZvOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBlbmRwb2ludCA9ICcnO1xyXG4gICAgICAgIGlmIChzZXJ2aWNlSW5mby51c2Vsb2NhbGVuZHBvaW50KSB7XHJcbiAgICAgICAgICAgIGVuZHBvaW50ID0gc2VydmljZUluZm8ubG9jYWxodHRwZW5kcG9pbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBnYXRld2F5ID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5nYXRld2F5O1xyXG4gICAgICAgICAgICBlbmRwb2ludCA9IGAke2dhdGV3YXl9LyR7c2VydmljZUluZm8uY29kZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5kcG9pbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTZXJ2aWNlRW5kcG9pbnRXaXRoVmVyc2lvbkJ5U2VydmljZUluZm8oc2VydmljZUluZm86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmdldFNlcnZpY2VFbmRwb2ludEJ5U2VydmljZUluZm8oc2VydmljZUluZm8pO1xyXG4gICAgICAgIGxldCBhcGlWZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC5tYWpvckFwaVZlcnNpb247XHJcbiAgICAgICAgaWYgKHNlcnZpY2VJbmZvLmFwaVZlcnNpb24pIHtcclxuICAgICAgICAgICAgYXBpVmVyc2lvbiA9IHNlcnZpY2VJbmZvLmFwaVZlcnNpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGAke2VuZHBvaW50fS92JHthcGlWZXJzaW9ufWA7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRIdHRwU2VydmljZUVuZHBvaW50KHNlcnZpY2VDb2RlOiBzdHJpbmcsIGluY2x1ZGVWZXJzaW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBzZXJ2aWNlQ29kZSA9IHNlcnZpY2VDb2RlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUluZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuc2VydmljZXMpLmZpbmQocSA9PiBxLmNvZGUudG9Mb3dlckNhc2UoKSA9PSBzZXJ2aWNlQ29kZSk7XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5mbykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBLaMO0bmcgdMOsbSB0aOG6pXkgZW5kcG9pbnQgY+G7p2Egc2VydmljZSAke3NlcnZpY2VDb2RlfSB0cm9uZyBj4bqldSBow6xuaGApO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWluY2x1ZGVWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlcnZpY2VFbmRwb2ludEJ5U2VydmljZUluZm8oc2VydmljZUluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXJ2aWNlRW5kcG9pbnRXaXRoVmVyc2lvbkJ5U2VydmljZUluZm8oc2VydmljZUluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEh0dHBTZXJ2aWNlRW5kcG9pbnQoc2VydmljZUNvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEh0dHBTZXJ2aWNlRW5kcG9pbnQoc2VydmljZUNvZGUsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIdHRwU2VydmljZUVuZHBvaW50V2l0aFZlcnNpb24oc2VydmljZUNvZGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRIdHRwU2VydmljZUVuZHBvaW50KHNlcnZpY2VDb2RlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIdHRwU2VydmljZUVuZHBvaW50T2xkKHNlcnZpY2VDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHNlcnZpY2VDb2RlID0gc2VydmljZUNvZGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5lbnZpcm9ubWVudC5zZXJ2aWNlcykuZmluZChxID0+IHEuY29kZSA9PSBzZXJ2aWNlQ29kZSk7XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5mbykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBLaMO0bmcgdMOsbSB0aOG6pXkgZW5kcG9pbnQgY+G7p2Egc2VydmljZSAke3NlcnZpY2VDb2RlfSB0cm9uZyBj4bqldSBow6xuaGApO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZW5kcG9pbnQgPSAnJztcclxuICAgICAgICBpZiAoc2VydmljZUluZm8udXNlTG9jYWwpIHtcclxuICAgICAgICAgICAgZW5kcG9pbnQgPSBzZXJ2aWNlSW5mby5sb2NhbEh0dHBFbmRwb2ludE9sZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdhdGV3YXkgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmdhdGV3YXlPbGQ7XHJcbiAgICAgICAgICAgIGVuZHBvaW50ID0gYCR7Z2F0ZXdheX0vJHtzZXJ2aWNlQ29kZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5kcG9pbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlclNldHRpbmdDb25maWcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQudXNlclNldHRpbmdDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcnNIYXNQZXJtaXNzaW9uUmVzZXRQYXNzd29yZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC51c2VySGFzUGVybWlzc2lvblJlc2V0UGFzc3dvcmQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SHR0cENsaWVudEVuZHBvaW50KHNlcnZpY2VDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpc1VzZU9sZFNlcnZpY2Uoc2VydmljZUNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VJbmZvID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVudmlyb25tZW50LnNlcnZpY2VzKS5maW5kKHEgPT4gcS5jb2RlID09IHNlcnZpY2VDb2RlKTtcclxuICAgICAgICBpZiAoIXNlcnZpY2VJbmZvKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEtow7RuZyB0w6xtIHRo4bqleSBlbmRwb2ludCBj4bunYSBzZXJ2aWNlICR7c2VydmljZUNvZGV9IHRyb25nIGPhuqV1IGjDrG5oYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBzZXJ2aWNlSW5mby51c2VPbGRWZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuYWJsZUh1YigpIHtcclxuICAgICAgICBsZXQgb2JqRW5hYmxlSHVicyA9IHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsUkNvbmZpZy5lbmFibGVIdWJzO1xyXG4gICAgICAgIGlmICghb2JqRW5hYmxlSHVicykgb2JqRW5hYmxlSHVicyA9IHt9O1xyXG4gICAgICAgIE9iamVjdC5rZXlzKG9iakVuYWJsZUh1YnMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKChvYmpFbmFibGVIdWJzW2tleV0gYXMgYW55KSA9PT0gJ3RydWUnIHx8IG9iakVuYWJsZUh1YnNba2V5XSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgb2JqRW5hYmxlSHVic1trZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9iakVuYWJsZUh1YnNba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG9iakVuYWJsZUh1YnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdE1hbGVBdmF0YXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5kZWZhdWx0TWFsZUF2YXRhcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZWZhdWx0RmVtYWxlQXZhdGFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdEZlbWFsZUF2YXRhcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVHJ1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9nb3V0T25VbmF1dGhvcml6ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUcnVlKHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5sb2dvdXRPblVuYXV0aG9yaXplZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlzdEFwcCgpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5lbnZpcm9ubWVudC5hcHBzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPYmplY3RBcHAobW9kdWxlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmVudmlyb25tZW50LmFwcHMpLmZpbmQocSA9PiBxLmNvZGUgPT0gbW9kdWxlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZHVsZU5hbWUobW9kdWxlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvYmpBcHAgPSB0aGlzLmdldE9iamVjdEFwcChtb2R1bGUpO1xyXG4gICAgICAgIHJldHVybiBvYmpBcHA/LnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExvbmdNb2R1bGVOYW1lKG1vZHVsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqQXBwID0gdGhpcy5nZXRPYmplY3RBcHAobW9kdWxlKTtcclxuICAgICAgICByZXR1cm4gb2JqQXBwPy5sb25nVGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2hvd1dhcm5pbmdNZXNzYWdlSW5Ub2FzdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5zaG93V2FybmluZ01lc3NhZ2VJblRvYXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaG93RXJyb3JNZXNzYWdlSW5Ub2FzdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5zaG93RXJyb3JNZXNzYWdlSW5Ub2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNJZ25vcmVBZG1pbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5pc0lnbm9yZUFkbWluKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBcHBDb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlzdEFwcENvZGUoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuYXBwcykubWFwKHEgPT4gcS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMaXN0QXBpRG9tYWluKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuc2VydmljZXMpLmZvckVhY2goc2VydmljZSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U2VydmljZUVuZHBvaW50QnlTZXJ2aWNlSW5mbyhzZXJ2aWNlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdG9yYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LnN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW5hYmxlVG5DbGllbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUcnVlKHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlVG5DbGllbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElzRm9yY2VMb2dvdXRJZjQwMSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmlzRm9yY2VMb2dvdXRJZjQwMSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzYWJsZUF1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZGlzYWJsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhlbnRpY2F0aW9uVHlwZSgpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5hdXRoZW5UeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuYWJsZVBvcHVsYXRlTG9nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmVuYWJsZVBvcHVsYXRlTG9nKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaG93RGVmYXVsdFNldHRpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gdGhpcy5nZXRPYmplY3RBcHAodGhpcy5hcHBDb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUoYXBwPy5zaG93ZGVmYXVsdHNldHRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmZpZ0RlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IHRoaXMuZ2V0T2JqZWN0QXBwKHRoaXMuYXBwQ29kZSk7XHJcbiAgICAgICAgcmV0dXJuIGFwcD8uY29uZmlnZGVmYXVsdHNldHRpbmc/LmNvbHVtbiA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNhYmxlTm90aWZpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmRpc2FibGVOb3RpZmljYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhlbHBDb25maWdfRXhwZXJ0TmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5oZWxwQ29uZmlnLmV4cGVydE5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVscENvbmZpZ19FeHBlcnRQaG9uZU51bW1iZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaGVscENvbmZpZy5leHBlcnRQaG9uZU51bW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVscENvbmZpZ19FeHBlcnRFbWFpbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5oZWxwQ29uZmlnLmV4cGVydEVtYWlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhlbHBDb25maWdfTG9nb0NvbXBhbnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaGVscENvbmZpZy5sb2dvQ29tcGFueTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIZWxwQ29uZmlnX0RvY3VtZW50cygpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaGVscENvbmZpZy5kb2N1bWVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3BsYXNoU2NyZWVuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVbmRlcmNvbnN0cnVjdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC51bmRlcmNvbnN0cnVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduYWxyX0NsaWVudEtleSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBcGlHYXRld2F5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmdhdGV3YXk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0R2F0ZXdheVN1YnBhdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuZ2F0ZXdheVN1YnBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RG9jdW1lbnRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuZG9jdW1lbnRTZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNpbmdJbnRlcm5hbEZpbGVFbmRwb2ludEZvclZpZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lbnZpcm9ubWVudC5pbnRlcm5hbEZpbGVFbmRwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbnRlcm5hbEZpbGVFbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5pbnRlcm5hbEZpbGVFbmRwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRLeVNvU2ltX1RzYVVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0VmFsdWU/Lmt5U29TaW0/LnRzYVVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCdXR0b25QZXJtaXNzaW9ucygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5idXR0b25QZXJtaXNzaW9ucyA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWVsZHNJbkRlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmZpZWxkc0luRGVmYXVsdFNldHRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VzdG9taXplVWkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGl0bGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2dvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4ubG9nbztcclxuICAgIH1cclxuXHJcbiAgICBnZXRPd25lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLm93bmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wZW5OZXdUYWIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5vcGVuTmV3VGFiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuYWJsZUJhc2VIcmVmKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlZmF1bHRSZWRpcmVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4/LmRlZmF1bHRSZWRpcmVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJc1Byb2R1Y3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUcnVlKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlua0Rvd25sb2FkQ2xpZW50QXBwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIubGlua0Rvd25sb2FkQ2xpZW50QXBwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1c3RvbUNvbmZpZyhrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5jdXN0b21Db25maWcpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmN1c3RvbUNvbmZpZ1trZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpc3REb25WaVF1YW5MeU5nYW5oKCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMaXN0RG9uVmlRdWFuTHlIb2NQaGFuKCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1VzZVZlcnNpb24odGFibGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgdmVyc2lvbmluZ1RhYmxlcyA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbmluZ1RhYmxlO1xyXG4gICAgICAgIGlmICghdmVyc2lvbmluZ1RhYmxlcykgdmVyc2lvbmluZ1RhYmxlcyA9ICcnO1xyXG4gICAgICAgIHZlcnNpb25pbmdUYWJsZXMgPSB2ZXJzaW9uaW5nVGFibGVzLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGFibGVOYW1lID0gdGFibGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIGA7JHt2ZXJzaW9uaW5nVGFibGVzfTtgLmluZGV4T2YoYDske3RhYmxlTmFtZX07YCkgPiAtMTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RSxzREFBc0Q7QUFDdEQsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFHN0UsTUFBTSxVQUFVLGdCQUFnQjtJQUM1QixPQUFPLElBQUksY0FBYyxDQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFLRCxNQUFNLE9BQU8sa0JBQWtCO0lBSTNCLFlBRUksa0JBQXVCLElBQUk7UUFFM0IsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQiwyQkFBMkI7WUFDM0IsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxFQUFFO2dCQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztpQkFDSTtnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDaEQ7U0FDSjthQUNJO1lBQ0QsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztZQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztZQUMxQyxjQUFjLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDL0U7SUFDTCxDQUFD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Y3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG4vLyBpbXBvcnQgeyBTaWduYWxSQ29uZmlndXJhdGlvbiB9IGZyb20gJ25nMi1zaWduYWxyJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTY2hlbWEsIE9iamVjdEFwcCB9IGZyb20gJy4uL2NsYXNzZXMvZW52aXJvbm1lbnQtc2NoZW1hJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb2R1bGVDb25maWdGdW5jKCkge1xyXG4gICAgcmV0dXJuIG5ldyBJbmplY3Rpb25Ub2tlbjxNb2R1bGVDb25maWc+KCcnKTtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFNlcnZpY2Uge1xyXG4gICAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2NoZW1hO1xyXG4gICAgcHJpdmF0ZSBhcHBDb2RlOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChtb2R1bGVDb25maWdGdW5jKVxyXG4gICAgICAgIG1vZHVsZUNvbmZpZ1ZhbDogYW55ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVDb25maWdWYWwpIHtcclxuICAgICAgICAgICAgLy8gZ2V0IGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdtb2R1bGVDb25maWdWYWwnKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignY2Fubm90IGZpbmQgbW9kdWxlQ29uZmlnVmFsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iak1vZHVsZUNvbmZpZ1ZhbCA9IG1vZHVsZUNvbmZpZ1ZhbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gb2JqTW9kdWxlQ29uZmlnVmFsLmVudmlyb25tZW50O1xyXG4gICAgICAgICAgICB0aGlzLmFwcENvZGUgPSBvYmpNb2R1bGVDb25maWdWYWwuYXBwQ29kZTtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnbW9kdWxlQ29uZmlnVmFsJywgSlNPTi5zdHJpbmdpZnkodGhpcy5lbnZpcm9ubWVudCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduYWxSQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IGMgPSB7XHJcbiAgICAgICAgICAgIGh1Yk5hbWU6ICcnLFxyXG4gICAgICAgICAgICBxczogeyBrZXk6ICcnIH0sXHJcbiAgICAgICAgICAgIHVybDogJycsXHJcbiAgICAgICAgICAgIGxvZ2dpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGV4ZWN1dGVFdmVudHNJblpvbmU6IHRydWUsXHJcbiAgICAgICAgICAgIGV4ZWN1dGVFcnJvcnNJblpvbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICBleGVjdXRlU3RhdHVzQ2hhbmdlSW5ab25lOiB0cnVlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYy5odWJOYW1lID0gJ3RuY2xpZW50JztcclxuICAgICAgICBjLnFzID0geyBrZXk6ICd3ZWJhcHAnIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnNpZ25hbHIudXNlU1NMKSB7XHJcbiAgICAgICAgICAgIGMudXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmVuZHBvaW50U1NMfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjLnVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludH1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYy5sb2dnaW5nID0gdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLnNob3dMb2c7XHJcblxyXG4gICAgICAgIGMuZXhlY3V0ZUV2ZW50c0luWm9uZSA9IHRydWU7XHJcbiAgICAgICAgYy5leGVjdXRlRXJyb3JzSW5ab25lID0gZmFsc2U7XHJcbiAgICAgICAgYy5leGVjdXRlU3RhdHVzQ2hhbmdlSW5ab25lID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aENvbmZpZygpOiBBdXRoQ29uZmlnIHtcclxuICAgICAgICBsZXQgc2NvcGUgPSAnb3BlbmlkIHByb2ZpbGUgZW1haWwnO1xyXG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3Muc2NvcGUpIHtcclxuICAgICAgICAgICAgc2NvcGUgPSB0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3Muc2NvcGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8QXV0aENvbmZpZz57XHJcbiAgICAgICAgICAgIGlzc3VlcjogYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmlzc3Vlcn1gLFxyXG4gICAgICAgICAgICBjbGllbnRJZDogYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmNsaWVudElkfWAsXHJcbiAgICAgICAgICAgIHJlZGlyZWN0VXJpOiB0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuY3VzdG9tUmVkaXJlY3RVcmkgfHwgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcclxuICAgICAgICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxyXG4gICAgICAgICAgICBzaWxlbnRSZWZyZXNoUmVkaXJlY3RVcmk6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAnL3NpbGVudC1yZWZyZXNoLmh0bWwnLFxyXG4gICAgICAgICAgICByZXF1aXJlSHR0cHM6IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5yZXF1aXJlSHR0cHMgPyB0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MucmVxdWlyZUh0dHBzIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHNjb3BlLFxyXG4gICAgICAgICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlcXVlc3RBY2Nlc3NUb2tlbjogdHJ1ZSxcclxuICAgICAgICAgICAgdXNlU2lsZW50UmVmcmVzaDogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsZWFySGFzaEFmdGVyTG9naW46IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U2VydmljZUVuZHBvaW50QnlTZXJ2aWNlSW5mbyhzZXJ2aWNlSW5mbzogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgZW5kcG9pbnQgPSAnJztcclxuICAgICAgICBpZiAoc2VydmljZUluZm8udXNlbG9jYWxlbmRwb2ludCkge1xyXG4gICAgICAgICAgICBlbmRwb2ludCA9IHNlcnZpY2VJbmZvLmxvY2FsaHR0cGVuZHBvaW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZ2F0ZXdheSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuZ2F0ZXdheTtcclxuICAgICAgICAgICAgZW5kcG9pbnQgPSBgJHtnYXRld2F5fS8ke3NlcnZpY2VJbmZvLmNvZGV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVuZHBvaW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U2VydmljZUVuZHBvaW50V2l0aFZlcnNpb25CeVNlcnZpY2VJbmZvKHNlcnZpY2VJbmZvOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5nZXRTZXJ2aWNlRW5kcG9pbnRCeVNlcnZpY2VJbmZvKHNlcnZpY2VJbmZvKTtcclxuICAgICAgICBsZXQgYXBpVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQubWFqb3JBcGlWZXJzaW9uO1xyXG4gICAgICAgIGlmIChzZXJ2aWNlSW5mby5hcGlWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIGFwaVZlcnNpb24gPSBzZXJ2aWNlSW5mby5hcGlWZXJzaW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBgJHtlbmRwb2ludH0vdiR7YXBpVmVyc2lvbn1gO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0SHR0cFNlcnZpY2VFbmRwb2ludChzZXJ2aWNlQ29kZTogc3RyaW5nLCBpbmNsdWRlVmVyc2lvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgc2VydmljZUNvZGUgPSBzZXJ2aWNlQ29kZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VJbmZvID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVudmlyb25tZW50LnNlcnZpY2VzKS5maW5kKHEgPT4gcS5jb2RlLnRvTG93ZXJDYXNlKCkgPT0gc2VydmljZUNvZGUpO1xyXG4gICAgICAgIGlmICghc2VydmljZUluZm8pIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgS2jDtG5nIHTDrG0gdGjhuqV5IGVuZHBvaW50IGPhu6dhIHNlcnZpY2UgJHtzZXJ2aWNlQ29kZX0gdHJvbmcgY+G6pXUgaMOsbmhgKTtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWluY2x1ZGVWZXJzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlcnZpY2VFbmRwb2ludEJ5U2VydmljZUluZm8oc2VydmljZUluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXJ2aWNlRW5kcG9pbnRXaXRoVmVyc2lvbkJ5U2VydmljZUluZm8oc2VydmljZUluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEh0dHBTZXJ2aWNlRW5kcG9pbnQoc2VydmljZUNvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEh0dHBTZXJ2aWNlRW5kcG9pbnQoc2VydmljZUNvZGUsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIdHRwU2VydmljZUVuZHBvaW50V2l0aFZlcnNpb24oc2VydmljZUNvZGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRIdHRwU2VydmljZUVuZHBvaW50KHNlcnZpY2VDb2RlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIdHRwU2VydmljZUVuZHBvaW50T2xkKHNlcnZpY2VDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHNlcnZpY2VDb2RlID0gc2VydmljZUNvZGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlSW5mbyA9IE9iamVjdC52YWx1ZXModGhpcy5lbnZpcm9ubWVudC5zZXJ2aWNlcykuZmluZChxID0+IHEuY29kZSA9PSBzZXJ2aWNlQ29kZSk7XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlSW5mbykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBLaMO0bmcgdMOsbSB0aOG6pXkgZW5kcG9pbnQgY+G7p2Egc2VydmljZSAke3NlcnZpY2VDb2RlfSB0cm9uZyBj4bqldSBow6xuaGApO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBlbmRwb2ludCA9ICcnO1xyXG4gICAgICAgIGlmIChzZXJ2aWNlSW5mby51c2VMb2NhbCkge1xyXG4gICAgICAgICAgICBlbmRwb2ludCA9IHNlcnZpY2VJbmZvLmxvY2FsSHR0cEVuZHBvaW50T2xkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZ2F0ZXdheSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuZ2F0ZXdheU9sZDtcclxuICAgICAgICAgICAgZW5kcG9pbnQgPSBgJHtnYXRld2F5fS8ke3NlcnZpY2VDb2RlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbmRwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VyU2V0dGluZ0NvbmZpZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC51c2VyU2V0dGluZ0NvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2Vyc0hhc1Blcm1pc3Npb25SZXNldFBhc3N3b3JkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LnVzZXJIYXNQZXJtaXNzaW9uUmVzZXRQYXNzd29yZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIdHRwQ2xpZW50RW5kcG9pbnQoc2VydmljZUNvZGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVXNlT2xkU2VydmljZShzZXJ2aWNlQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUluZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuc2VydmljZXMpLmZpbmQocSA9PiBxLmNvZGUgPT0gc2VydmljZUNvZGUpO1xyXG4gICAgICAgIGlmICghc2VydmljZUluZm8pIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgS2jDtG5nIHTDrG0gdGjhuqV5IGVuZHBvaW50IGPhu6dhIHNlcnZpY2UgJHtzZXJ2aWNlQ29kZX0gdHJvbmcgY+G6pXUgaMOsbmhgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VydmljZUluZm8udXNlT2xkVmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbmFibGVIdWIoKSB7XHJcbiAgICAgICAgbGV0IG9iakVuYWJsZUh1YnMgPSB0aGlzLmVudmlyb25tZW50LnNpZ25hbFJDb25maWcuZW5hYmxlSHVicztcclxuICAgICAgICBpZiAoIW9iakVuYWJsZUh1YnMpIG9iakVuYWJsZUh1YnMgPSB7fTtcclxuICAgICAgICBPYmplY3Qua2V5cyhvYmpFbmFibGVIdWJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgob2JqRW5hYmxlSHVic1trZXldIGFzIGFueSkgPT09ICd0cnVlJyB8fCBvYmpFbmFibGVIdWJzW2tleV0gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIG9iakVuYWJsZUh1YnNba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYmpFbmFibGVIdWJzW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvYmpFbmFibGVIdWJzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlZmF1bHRNYWxlQXZhdGFyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZGVmYXVsdE1hbGVBdmF0YXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVmYXVsdEZlbWFsZUF2YXRhcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLmRlZmF1bHRGZW1hbGVBdmF0YXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1RydWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExvZ291dE9uVW5hdXRob3JpemVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MubG9nb3V0T25VbmF1dGhvcml6ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpc3RBcHAoKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuYXBwcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T2JqZWN0QXBwKG1vZHVsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYXBwT2JqZWN0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmVudmlyb25tZW50LmFwcHMpLmZpbmQocSA9PiBxLmNvZGUgPT09IG1vZHVsZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB0aGlzLmNoZWNrS2V5c0FuZEFkZFZhbHVlKGFwcE9iamVjdCwgT2JqZWN0QXBwLktleXNOZWVkUmVDaGVjayk7XHJcbiAgICAgICAgcmV0dXJuIGFwcE9iamVjdDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBjYWMgcHJvcGVydHkgY28gdGhlIGJpIGxlY2ggY2FzZSBjdWEgb2JqZWN0XHJcbiAgICAgKiBAZGF0ZSAxMC8yMC8yMDIyIC0gOTowMDoxMSBBTVxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBrZXlzIGNhYyBwcm9wZXJ0eSBjYW4gY2hlY2tcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjaGVja0tleXNBbmRBZGRWYWx1ZShvYmplY3Q6IE9iamVjdCwga2V5czogc3RyaW5nW10pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tLZXlBbmRBZGRWYWx1ZShvYmplY3QsIGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgcHJvcGVydHkgY28gdGhlIGJpIGxlY2ggY2FzZSBjdWEgb2JqZWN0XHJcbiAgICAgKiBAZGF0ZSAxMC8yMC8yMDIyIC0gOTowMDoxMSBBTVxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2hlY2tLZXlBbmRBZGRWYWx1ZShvYmplY3Q6IE9iamVjdCwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBsb3dlckNhc2VLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCAmJiBvYmplY3RbbG93ZXJDYXNlS2V5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gb2JqZWN0W2xvd2VyQ2FzZUtleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZHVsZU5hbWUobW9kdWxlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvYmpBcHAgPSB0aGlzLmdldE9iamVjdEFwcChtb2R1bGUpO1xyXG4gICAgICAgIHJldHVybiBvYmpBcHA/LnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExvbmdNb2R1bGVOYW1lKG1vZHVsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqQXBwID0gdGhpcy5nZXRPYmplY3RBcHAobW9kdWxlKTtcclxuICAgICAgICByZXR1cm4gb2JqQXBwPy5sb25nVGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2hvd1dhcm5pbmdNZXNzYWdlSW5Ub2FzdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5zaG93V2FybmluZ01lc3NhZ2VJblRvYXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaG93RXJyb3JNZXNzYWdlSW5Ub2FzdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5zaG93RXJyb3JNZXNzYWdlSW5Ub2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNJZ25vcmVBZG1pbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5pc0lnbm9yZUFkbWluKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBcHBDb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlzdEFwcENvZGUoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuYXBwcykubWFwKHEgPT4gcS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMaXN0QXBpRG9tYWluKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuZW52aXJvbm1lbnQuc2VydmljZXMpLmZvckVhY2goc2VydmljZSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2V0U2VydmljZUVuZHBvaW50QnlTZXJ2aWNlSW5mbyhzZXJ2aWNlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdG9yYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LnN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW5hYmxlVG5DbGllbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUcnVlKHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlVG5DbGllbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElzRm9yY2VMb2dvdXRJZjQwMSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUodGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmlzRm9yY2VMb2dvdXRJZjQwMSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzYWJsZUF1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZGlzYWJsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhlbnRpY2F0aW9uVHlwZSgpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5hdXRoZW5UeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuYWJsZVBvcHVsYXRlTG9nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmVuYWJsZVBvcHVsYXRlTG9nKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaG93RGVmYXVsdFNldHRpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gdGhpcy5nZXRPYmplY3RBcHAodGhpcy5hcHBDb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1RydWUoYXBwPy5zaG93ZGVmYXVsdHNldHRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmZpZ0RlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IHRoaXMuZ2V0T2JqZWN0QXBwKHRoaXMuYXBwQ29kZSk7XHJcbiAgICAgICAgcmV0dXJuIGFwcD8uY29uZmlnZGVmYXVsdHNldHRpbmc/LmNvbHVtbiA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNhYmxlTm90aWZpY2F0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LmRpc2FibGVOb3RpZmljYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhlbHBDb25maWdfRXhwZXJ0TmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5oZWxwQ29uZmlnLmV4cGVydE5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVscENvbmZpZ19FeHBlcnRQaG9uZU51bW1iZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaGVscENvbmZpZy5leHBlcnRQaG9uZU51bW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVscENvbmZpZ19FeHBlcnRFbWFpbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5oZWxwQ29uZmlnLmV4cGVydEVtYWlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEhlbHBDb25maWdfTG9nb0NvbXBhbnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaGVscENvbmZpZy5sb2dvQ29tcGFueTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRIZWxwQ29uZmlnX0RvY3VtZW50cygpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuaGVscENvbmZpZy5kb2N1bWVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3BsYXNoU2NyZWVuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVbmRlcmNvbnN0cnVjdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC51bmRlcmNvbnN0cnVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduYWxyX0NsaWVudEtleSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBcGlHYXRld2F5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmdhdGV3YXk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0R2F0ZXdheVN1YnBhdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuZ2F0ZXdheVN1YnBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RG9jdW1lbnRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuZG9jdW1lbnRTZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNpbmdJbnRlcm5hbEZpbGVFbmRwb2ludEZvclZpZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lbnZpcm9ubWVudC5pbnRlcm5hbEZpbGVFbmRwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbnRlcm5hbEZpbGVFbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5pbnRlcm5hbEZpbGVFbmRwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRLeVNvU2ltX1RzYVVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0VmFsdWU/Lmt5U29TaW0/LnRzYVVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCdXR0b25QZXJtaXNzaW9ucygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5idXR0b25QZXJtaXNzaW9ucyA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWVsZHNJbkRlZmF1bHRTZXR0aW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmZpZWxkc0luRGVmYXVsdFNldHRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0S2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VzdG9taXplVWkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGl0bGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2dvKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4ubG9nbztcclxuICAgIH1cclxuXHJcbiAgICBnZXRPd25lcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5tYWluLm93bmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wZW5OZXdUYWIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5vcGVuTmV3VGFiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVuYWJsZUJhc2VIcmVmKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF1dGhvcml6YXRpb25Qcml2YXRlS2V5KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5nZXRJc1Byb2R1Y3Rpb24oKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3Rlc3RrZXknO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5hdXRob3JpemF0aW9uUHJpdmF0ZUtleTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZWZhdWx0UmVkaXJlY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluPy5kZWZhdWx0UmVkaXJlY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXNQcm9kdWN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJ1ZSh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmtEb3dubG9hZENsaWVudEFwcCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmxpbmtEb3dubG9hZENsaWVudEFwcDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXN0b21Db25maWcoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQuY3VzdG9tQ29uZmlnKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5jdXN0b21Db25maWdba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMaXN0RG9uVmlRdWFuTHlOZ2FuaCgpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlzdERvblZpUXVhbkx5SG9jUGhhbigpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tVc2VWZXJzaW9uKHRhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHZlcnNpb25pbmdUYWJsZXMgPSB0aGlzLmVudmlyb25tZW50LnZlcnNpb25pbmdUYWJsZTtcclxuICAgICAgICBpZiAoIXZlcnNpb25pbmdUYWJsZXMpIHZlcnNpb25pbmdUYWJsZXMgPSAnJztcclxuICAgICAgICB2ZXJzaW9uaW5nVGFibGVzID0gdmVyc2lvbmluZ1RhYmxlcy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRhYmxlTmFtZSA9IHRhYmxlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHJldHVybiBgOyR7dmVyc2lvbmluZ1RhYmxlc307YC5pbmRleE9mKGA7JHt0YWJsZU5hbWV9O2ApID4gLTE7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -24,16 +24,7 @@ export class PermissionService extends BaseService {
|
|
|
24
24
|
this.appCode = _environmentService.getAppCode();
|
|
25
25
|
}
|
|
26
26
|
clearPermissionCacheAll() {
|
|
27
|
-
|
|
28
|
-
const lstApiEndpoint = [];
|
|
29
|
-
const apiDomain = this._environmentService.getListApiDomain();
|
|
30
|
-
for (const domainName of apiDomain) {
|
|
31
|
-
if (domainName.startsWith('-') || domainName.startsWith('1') || domainName == 'gateway')
|
|
32
|
-
continue;
|
|
33
|
-
const realDomainName = domainName.split('Endpoint') ? domainName.split('Endpoint')[0] : domainName;
|
|
34
|
-
lstApiEndpoint.push(realDomainName.toUpperCase());
|
|
35
|
-
}
|
|
36
|
-
return this.clearPermissionCache([...lstAppCodes, ...lstApiEndpoint]);
|
|
27
|
+
return this.clearPermissionCache([]);
|
|
37
28
|
}
|
|
38
29
|
clearPermissionCache(lstModule) {
|
|
39
30
|
const url = `${this.serviceUri}/ClearPermissionCache`;
|
|
@@ -107,11 +98,11 @@ export class PermissionService extends BaseService {
|
|
|
107
98
|
}
|
|
108
99
|
this.getPermissions(service).then(permissions => {
|
|
109
100
|
if (permissions && permissions.length) {
|
|
110
|
-
const
|
|
101
|
+
const hashPermission = this._commonService.hmacSha256(permission, this._environmentService.getAuthorizationPrivateKey());
|
|
102
|
+
const isAuthorized = permissions.includes(hashPermission);
|
|
111
103
|
resolve(isAuthorized);
|
|
112
104
|
}
|
|
113
105
|
else {
|
|
114
|
-
console.log(`Lỗi không lấy được permission cho module: ${service}`);
|
|
115
106
|
resolve(false);
|
|
116
107
|
}
|
|
117
108
|
}, error => {
|
|
@@ -135,14 +126,15 @@ export class PermissionService extends BaseService {
|
|
|
135
126
|
}
|
|
136
127
|
await permissions.forEach(item => {
|
|
137
128
|
this.getPermissions(item.service).then(permissionResult => {
|
|
129
|
+
const hashPermission = this._commonService.hmacSha256(item.permission, this._environmentService.getAuthorizationPrivateKey());
|
|
138
130
|
if (operator.toUpperCase() == 'OR') {
|
|
139
|
-
if (permissionResult.includes(
|
|
131
|
+
if (permissionResult.includes(hashPermission)) {
|
|
140
132
|
isAuthorized = true;
|
|
141
133
|
return;
|
|
142
134
|
}
|
|
143
135
|
}
|
|
144
136
|
else {
|
|
145
|
-
if (!permissionResult.includes(
|
|
137
|
+
if (!permissionResult.includes(hashPermission)) {
|
|
146
138
|
isAuthorized = false;
|
|
147
139
|
return;
|
|
148
140
|
}
|
|
@@ -154,6 +146,11 @@ export class PermissionService extends BaseService {
|
|
|
154
146
|
resolve(isAuthorized);
|
|
155
147
|
});
|
|
156
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
*
|
|
151
|
+
* @param service tên dịch vụ
|
|
152
|
+
* @returns hash base permission
|
|
153
|
+
*/
|
|
157
154
|
getPermissions(service) {
|
|
158
155
|
return new Promise((resolve, reject) => {
|
|
159
156
|
const url = `${this.serviceUri}/GetPermissionsByService?service=${service}`;
|
|
@@ -182,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
182
179
|
providedIn: 'root'
|
|
183
180
|
}]
|
|
184
181
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Injector }, { type: i2.EnvironmentService }, { type: i3.UserService }, { type: i4.OAuthService }, { type: i5.ApplicationContextService }]; } });
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFPckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBUTdDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBUTlDLFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDVixtQkFBdUMsRUFDdkMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IsV0FBc0M7UUFFOUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMbEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBMkI7UUFibEQsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDckIsWUFBTyxHQUFHLGNBQWMsQ0FBQztRQUNsQywwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsWUFBTyxHQUFXLElBQUksQ0FBQztRQVduQixJQUFJLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsYUFBYSxDQUFDO1FBRWhELElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFD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LENBQUM7WUFDNUUsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBRXJELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksV0FBVyxJQUFJLFdBQVcsS0FBSyxNQUFNLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtnQkFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ25CO2lCQUNJO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNQLE1BQU0sRUFBRSxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzhHQWpNUSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZkLE1BQU07MkZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb24gfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbic7XHJcbmltcG9ydCB7IFRuVXNlciB9IGZyb20gJy4uL21vZGVscy90bi11c2VyJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuICAgIHNlcnZpY2VDb2RlID0gJ2F1dGhvcml6YXRpb24nO1xyXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgZGVsYXlDaGVja1Blcm1pc3Npb25zID0gW107XHJcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGlnbm9yZUFkbWluID0gZmFsc2U7XHJcbiAgICBhcHBDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX2Vudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hcHBDb250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgJycpO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfZW52aXJvbm1lbnRTZXJ2aWNlLmdldEh0dHBTZXJ2aWNlRW5kcG9pbnRXaXRoVmVyc2lvbih0aGlzLnNlcnZpY2VDb2RlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBgJHt0aGlzLmVuZFBvaW50fS9wZXJtaXNzaW9uYDtcclxuXHJcbiAgICAgICAgdGhpcy5pZ25vcmVBZG1pbiA9IF9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SXNJZ25vcmVBZG1pbigpO1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IF9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBwQ29kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlQWxsKCkge1xyXG4gICAgICAgIGNvbnN0IGxzdEFwcENvZGVzID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldExpc3RBcHBDb2RlKCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBpRW5kcG9pbnQgPSBbXTtcclxuICAgICAgICBjb25zdCBhcGlEb21haW4gPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0TGlzdEFwaURvbWFpbigpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZG9tYWluTmFtZSBvZiBhcGlEb21haW4pIHtcclxuICAgICAgICAgICAgaWYgKGRvbWFpbk5hbWUuc3RhcnRzV2l0aCgnLScpIHx8IGRvbWFpbk5hbWUuc3RhcnRzV2l0aCgnMScpIHx8IGRvbWFpbk5hbWUgPT0gJ2dhdGV3YXknKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgcmVhbERvbWFpbk5hbWUgPSBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpID8gZG9tYWluTmFtZS5zcGxpdCgnRW5kcG9pbnQnKVswXSA6IGRvbWFpbk5hbWU7XHJcbiAgICAgICAgICAgIGxzdEFwaUVuZHBvaW50LnB1c2gocmVhbERvbWFpbk5hbWUudG9VcHBlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFyUGVybWlzc2lvbkNhY2hlKFsuLi5sc3RBcHBDb2RlcywgLi4ubHN0QXBpRW5kcG9pbnRdKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZShsc3RNb2R1bGU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DbGVhclBlcm1pc3Npb25DYWNoZWA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBsc3RNb2R1bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRVc2VyUGVybWlzc2lvbigpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDdXJyZW50VXNlclBlcm1pc3Npb25gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLmFwcENvZGUsIHBlcm1pc3Npb24sIHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbjogc3RyaW5nLCByZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuXHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucyhzZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdXRob3JpemVkID0gcGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgTOG7l2kga2jDtG5nIGzhuqV5IMSRxrDhu6NjIHBlcm1pc3Npb24gY2hvIG1vZHVsZTogJHtzZXJ2aWNlfWApO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkQnlQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogQXJyYXk8UGVybWlzc2lvbj4sIG9wZXJhdG9yID0gJ09SJywgaWdub3JlQWRtaW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCBwZXJtaXNzaW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucyhpdGVtLnNlcnZpY2UpLnRoZW4ocGVybWlzc2lvblJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUoaXNBdXRob3JpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9ucyhzZXJ2aWNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVVRIT1JJWkFUSU9OLiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAmJiBzdG9yYWdlSXRlbSAhPT0gJ251bGwnICYmIHN0b3JhZ2VJdGVtICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShzdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRHZXQodXJsKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFPckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBUTdDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBUTlDLFlBQ0ksSUFBZ0IsRUFDaEIsUUFBa0IsRUFDVixtQkFBdUMsRUFDdkMsWUFBeUIsRUFDekIsYUFBMkIsRUFDM0IsV0FBc0M7UUFFOUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMbEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBMkI7UUFibEQsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDckIsWUFBTyxHQUFHLGNBQWMsQ0FBQztRQUNsQywwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFM0IsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsWUFBTyxHQUFXLElBQUksQ0FBQztRQVduQixJQUFJLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsYUFBYSxDQUFDO1FBRWhELElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCx1QkFBdUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQW1CO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsMkJBQTJCLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsaUJBQTJCO1FBQy9DLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN6QyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBVyxDQUFDO1lBQ2xFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksTUFBTSxFQUFFO2dCQUNsRCxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNWO1lBRUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNuRSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNWO1lBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksaUJBQWlCLEVBQUU7Z0JBQ2xDLElBQUksTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3JCO2FBQ0o7WUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsVUFBa0I7UUFDckMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUM5QyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxVQUFVLEVBQUUsQ0FBQztnQkFDYixJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUU7b0JBQ2pCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWUsRUFBRSxVQUFrQixFQUFFLGNBQXVCLEtBQUs7UUFDMUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtnQkFDOUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckMsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFO29CQUNqQixNQUFNO2lCQUNUO2FBQ0o7WUFDRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsVUFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTTtRQUM5RCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBVyxDQUFDO1FBRWxFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkYsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtnQkFDbkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUM7Z0JBQ3pILE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN6QjtpQkFDSTtnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7UUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDUCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQseUJBQXlCLENBQUMsV0FBOEIsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLGNBQXVCLEtBQUs7UUFDbkcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBRXpDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFXLENBQUM7WUFDbEUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFeEIsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNoQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO1lBRUQsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDdEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO29CQUM5SCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUU7d0JBQ2hDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFOzRCQUMzQyxZQUFZLEdBQUcsSUFBSSxDQUFDOzRCQUNwQixPQUFPO3lCQUNWO3FCQUNKO3lCQUNJO3dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7NEJBQzVDLFlBQVksR0FBRyxLQUFLLENBQUM7NEJBQ3JCLE9BQU87eUJBQ1Y7cUJBQ0o7Z0JBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLE9BQU87UUFDbEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLG9DQUFvQyxPQUFPLEVBQUUsQ0FBQztZQUM1RSxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFFckQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxXQUFXLElBQUksV0FBVyxLQUFLLE1BQU0sSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFO2dCQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkI7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUN6RCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7OEdBL0xRLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmQsTUFBTTsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG4gICAgc2VydmljZUNvZGUgPSAnYXV0aG9yaXphdGlvbic7XHJcbiAgICByZWFkb25seSBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XHJcbiAgICBkZWxheUNoZWNrUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIHJvb3Q6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgaWdub3JlQWRtaW4gPSBmYWxzZTtcclxuICAgIGFwcENvZGU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCAnJyk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SHR0cFNlcnZpY2VFbmRwb2ludFdpdGhWZXJzaW9uKHRoaXMuc2VydmljZUNvZGUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IGAke3RoaXMuZW5kUG9pbnR9L3Blcm1pc3Npb25gO1xyXG5cclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gX2Vudmlyb25tZW50U2VydmljZS5nZXRJc0lnbm9yZUFkbWluKCk7XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gX2Vudmlyb25tZW50U2VydmljZS5nZXRBcHBDb2RlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJ1eeG7gW4gdsOgbyBkYW5oIHPDoWNoIHBlcm1pc2lvbiBj4bqnbiBjaGVja1xyXG4gICAgICogQHBhcmFtIGxzdFBlcm1pc3Npb25Db2RlIG5o4buvbmcgcGVycm1pc2lvbiBjb2RlIGPhuqduIGNoZWNrID0+IG7Dqm4gZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGNoZWNrIGPDoWMgYnV0dG9uIHRyb25nIGNvZGVcclxuICAgICAqIEByZXR1cm5zIHRy4bqjIHJhIGPDoWMgcGVycm1pc2lvbkNvZGUgY8OzIHF1eeG7gW5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVybWlzc2lvbkF1dGhvcml6ZWQobHN0UGVybWlzc2lvbkNvZGU6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RQZXJtaXNzaW9uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuaXNBdXRob3JpemVkUGVybWlzc2lvbihpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhvcml6ZWQoc2VydmljZTogc3RyaW5nLCBwZXJtaXNzaW9uOiBzdHJpbmcsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLl9hcHBDb250ZXh0LmdldFJvb3RDb250ZXh0KCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCByZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uOiBzdHJpbmcsIHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG5cclxuICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKHNlcnZpY2UpLnRoZW4ocGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNoUGVybWlzc2lvbiA9IHRoaXMuX2NvbW1vblNlcnZpY2UuaG1hY1NoYTI1NihwZXJtaXNzaW9uLCB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblByaXZhdGVLZXkoKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBwZXJtaXNzaW9ucy5pbmNsdWRlcyhoYXNoUGVybWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNoUGVybWlzc2lvbiA9IHRoaXMuX2NvbW1vblNlcnZpY2UuaG1hY1NoYTI1NihpdGVtLnBlcm1pc3Npb24sIHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRBdXRob3JpemF0aW9uUHJpdmF0ZUtleSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGhhc2hQZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGhhc2hQZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUoaXNBdXRob3JpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHNlcnZpY2UgdMOqbiBk4buLY2ggduG7pVxyXG4gICAgICogQHJldHVybnMgaGFzaCBiYXNlIHBlcm1pc3Npb25cclxuICAgICAqL1xyXG4gICAgZ2V0UGVybWlzc2lvbnMoc2VydmljZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uc0J5U2VydmljZT9zZXJ2aWNlPSR7c2VydmljZX1gO1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gJiYgc3RvcmFnZUl0ZW0gIT09ICdudWxsJyAmJiBzdG9yYWdlSXRlbSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0R2V0KHVybCkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -10,7 +10,7 @@ export class PositionService extends BaseService {
|
|
|
10
10
|
this.entityName = 'DmChucVu';
|
|
11
11
|
this.serviceCode = 'UserOrg';
|
|
12
12
|
this.endPoint = _environmentService.getHttpServiceEndpointWithVersion(this.serviceCode);
|
|
13
|
-
this.serviceUri = `${this.endPoint}/
|
|
13
|
+
this.serviceUri = `${this.endPoint}/DmChucVu`;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
PositionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: PositionService, deps: [{ token: i1.HttpClient }, { token: i0.Injector }, { token: i2.EnvironmentService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -21,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
21
21
|
providedIn: 'root'
|
|
22
22
|
}]
|
|
23
23
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Injector }, { type: i2.EnvironmentService }]; } });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3Bvc2l0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNN0MsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQUk1QyxZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ1YsbUJBQXVDO1FBRS9DLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRmxCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFObkQsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQVFwQixJQUFJLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsV0FBVyxDQUFDO0lBQ2xELENBQUM7OzRHQVpRLGVBQWU7Z0hBQWYsZUFBZSxjQUZaLE1BQU07MkZBRVQsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zaXRpb25TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG4gICAgZW50aXR5TmFtZSA9ICdEbUNodWNWdSc7XHJcbiAgICBzZXJ2aWNlQ29kZSA9ICdVc2VyT3JnJztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9lbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsICcnKTtcclxuICAgICAgICB0aGlzLmVuZFBvaW50ID0gX2Vudmlyb25tZW50U2VydmljZS5nZXRIdHRwU2VydmljZUVuZHBvaW50V2l0aFZlcnNpb24odGhpcy5zZXJ2aWNlQ29kZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpID0gYCR7dGhpcy5lbmRQb2ludH0vRG1DaHVjVnVgO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as signalR from '@aspnet/signalr';
|
|
3
2
|
import { SERVICE_CODES } from '../const/common';
|
|
3
|
+
import { HubConnectionBuilder } from '@microsoft/signalr';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "./environment.service";
|
|
6
6
|
import * as i2 from "./authen.service";
|
|
@@ -89,7 +89,7 @@ export class SignalRService {
|
|
|
89
89
|
}
|
|
90
90
|
createConnection(topic) {
|
|
91
91
|
const accessToken = this._authenService.getAccessToken();
|
|
92
|
-
return new
|
|
92
|
+
return new HubConnectionBuilder()
|
|
93
93
|
.withUrl(`${this._environmentService.getHttpServiceEndpointWithVersion(SERVICE_CODES.NOTIFICATION)}/${topic}`, { accessTokenFactory: () => accessToken })
|
|
94
94
|
.build();
|
|
95
95
|
}
|
|
@@ -141,4 +141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
141
141
|
providedIn: 'root'
|
|
142
142
|
}]
|
|
143
143
|
}], ctorParameters: function () { return [{ type: i1.EnvironmentService }, { type: i2.AuthenService }]; } });
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFPaEQsTUFBTSxPQUFPLGNBQWM7SUFrQnZCLFlBQ1ksbUJBQXVDLEVBQ3ZDLGNBQTZCO1FBRDdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFsQnpDLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBdUhYLFNBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBeEdyRCxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFHLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxH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QUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RixhQUFhLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsYUFBNEIsRUFBRSxRQUFnQjtRQUM5RCxJQUFJLFFBQVEsSUFBSSxhQUFhLEVBQUU7WUFDM0IsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0I7SUFDTCxDQUFDOzsyR0F0S1EsY0FBYzsrR0FBZCxjQUFjLGNBRlgsTUFBTTsyRkFFVCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgc2lnbmFsUiBmcm9tICdAYXNwbmV0L3NpZ25hbHInO1xyXG5pbXBvcnQgeyBIdWJDb25uZWN0aW9uIH0gZnJvbSAnQGFzcG5ldC9zaWduYWxyJztcclxuaW1wb3J0IHsgU0VSVklDRV9DT0RFUyB9IGZyb20gJy4uL2NvbnN0L2NvbW1vbic7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnbmFsUlNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBfaHViQ29ubmVjdGlvbjogSHViQ29ubmVjdGlvbjtcclxuICAgIGNvbm5lY3Rpb25zID0gW107XHJcbiAgICBodWJzID0ge307XHJcbiAgICBkZWxheVN0YXJ0ZXJzID0gW107XHJcbiAgICBjb25uZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBtYXhSZXRyeVRpbWVzID0gMTA7XHJcbiAgICB2aWV3Q29kZVN1YnM6IHtcclxuICAgICAgICB2aWV3Q29kZTogc3RyaW5nLFxyXG4gICAgICAgIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkXHJcbiAgICB9W107XHJcblxyXG4gICAgZW5hYmxlQ29tbW9uSHViOiBib29sZWFuO1xyXG4gICAgZW5hYmxlQ29uc2lzdGVuY3lIdWI6IGJvb2xlYW47XHJcbiAgICBlbmFibGVOb3RpZmljYXRpb25IdWI6IGJvb2xlYW47XHJcbiAgICBlbmFibGVQdWJsaWNIdWI6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgeyBjb21tb25IdWIsIGNvbnNpc3RlbmN5SHViLCBub3RpZmljYXRpb25IdWIsIHB1YmxpY0h1YiB9ID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVuYWJsZUh1YigpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlQ29tbW9uSHViID0gISFjb21tb25IdWI7XHJcbiAgICAgICAgdGhpcy5lbmFibGVDb25zaXN0ZW5jeUh1YiA9ICEhY29uc2lzdGVuY3lIdWI7XHJcbiAgICAgICAgdGhpcy5lbmFibGVOb3RpZmljYXRpb25IdWIgPSAhIW5vdGlmaWNhdGlvbkh1YjtcclxuICAgICAgICB0aGlzLmVuYWJsZVB1YmxpY0h1YiA9ICEhcHVibGljSHViO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlQ29tbW9uSHViKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSHViKCdDb21tb25IdWInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUNvbnNpc3RlbmN5SHViKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSHViKCdDb25zaXN0ZW5jeUh1YicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlTm90aWZpY2F0aW9uSHViKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSHViKCdOb3RpZmljYXRpb25IdWInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVB1YmxpY0h1Yikge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUh1YignUHVibGljSHViJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAodGhpcy5kZWxheVN0YXJ0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxheVN0YXJ0ZXJzLnBvcCgpKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlSHViKGh1YkNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuaHVic1todWJDb2RlXSA9IHRoaXMuY3JlYXRlQ29ubmVjdGlvbihodWJDb2RlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Q29ubmVjdGlvbih0aGlzLmh1YnNbaHViQ29kZV0pO1xyXG4gICAgICAgIHRoaXMuYXV0b1JlY29ubmVjdCh0aGlzLmh1YnNbaHViQ29kZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KHRvcGljOiBzdHJpbmcsIHZpZXdDb2RlOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKCF0b3BpYykge1xyXG4gICAgICAgICAgICB0b3BpYyA9ICdDb21tb25IdWInO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSHViRW5hYmxlZCh0b3BpYykpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsYXlTdGFydGVycy5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVmlld0NvZGUodGhpcy5odWJzW3RvcGljXSwgdmlld0NvZGUsIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVZpZXdDb2RlKHRoaXMuaHVic1t0b3BpY10sIHZpZXdDb2RlLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzSHViRW5hYmxlZCh0b3BpYykge1xyXG4gICAgICAgIHJldHVybiAodG9waWMgPT09ICdDb21tb25IdWInICYmIHRoaXMuZW5hYmxlQ29tbW9uSHViKVxyXG4gICAgICAgICAgICB8fCAodG9waWMgPT09ICdDb25zaXN0ZW5jeUh1YicgJiYgdGhpcy5lbmFibGVDb25zaXN0ZW5jeUh1YilcclxuICAgICAgICAgICAgfHwgKHRvcGljID09PSAnTm90aWZpY2F0aW9uSHViJyAmJiB0aGlzLmVuYWJsZU5vdGlmaWNhdGlvbkh1YilcclxuICAgICAgICAgICAgfHwgKHRvcGljID09PSAnUHVibGljSHViJyk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5faHViQ29ubmVjdGlvbi5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlVmlld0NvZGUoaHViQ29ubmVjdGlvbjogSHViQ29ubmVjdGlvbiwgdmlld0NvZGU6IHN0cmluZywgY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IHZvaWQpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdDb2RlU3Vicykge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDb2RlU3VicyA9IFt7IHZpZXdDb2RlLCBjYWxsYmFjayB9XTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoaHViQ29ubmVjdGlvbiwgdmlld0NvZGUsIGNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZXdDb2RlU3Vicy5maW5kSW5kZXgoeCA9PiB4LnZpZXdDb2RlID09PSB2aWV3Q29kZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvZGVTdWJzLnB1c2goeyB2aWV3Q29kZSwgY2FsbGJhY2sgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlKGh1YkNvbm5lY3Rpb24sIHZpZXdDb2RlLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVuU3Vic2NyaWJlVmlld0NvZGUodG9waWM6IHN0cmluZywgdmlld0NvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdG9waWMpIHtcclxuICAgICAgICAgICAgdG9waWMgPSAnQ29tbW9uSHViJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaHViQ29ubmVjdGlvbiA9IHRoaXMuaHVic1t0b3BpY107XHJcbiAgICAgICAgaWYgKHRoaXMudmlld0NvZGVTdWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvZGVTdWJzID0gdGhpcy52aWV3Q29kZVN1YnMuZmlsdGVyKHggPT4geC52aWV3Q29kZSAhPT0gdmlld0NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLnVuU3Vic2NyaWJlKGh1YkNvbm5lY3Rpb24sIHZpZXdDb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVDb25uZWN0aW9uKHRvcGljOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcclxuICAgICAgICByZXR1cm4gbmV3IHNpZ25hbFIuSHViQ29ubmVjdGlvbkJ1aWxkZXIoKVxyXG4gICAgICAgICAgICAud2l0aFVybChgJHt0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SHR0cFNlcnZpY2VFbmRwb2ludFdpdGhWZXJzaW9uKFNFUlZJQ0VfQ09ERVMuTk9USUZJQ0FUSU9OKX0vJHt0b3BpY31gLFxyXG4gICAgICAgICAgICAgICAgeyBhY2Nlc3NUb2tlbkZhY3Rvcnk6ICgpID0+IGFjY2Vzc1Rva2VuIH0pXHJcbiAgICAgICAgICAgIC5idWlsZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXV0b1JlY29ubmVjdChodWJDb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uKSB7XHJcbiAgICAgICAgaHViQ29ubmVjdGlvbi5vbmNsb3NlKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydENvbm5lY3Rpb24oaHViQ29ubmVjdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB3YWl0ID0gbXMgPT4gbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydENvbm5lY3Rpb24oaHViQ29ubmVjdGlvbjogSHViQ29ubmVjdGlvbiwgcmV0cnlDb3VudCA9IDEpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBub3Qgc3VyZSBhYm91dCBpdCA6KSkpXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hc3BuZXQvU2lnbmFsUi9pc3N1ZXMvMjM4OVxyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViU29ja2V0LCAnT1BFTicsIHsgdmFsdWU6IDEsIH0pO1xyXG5cclxuICAgICAgICAgICAgaHViQ29ubmVjdGlvblxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heFJldHJ5VGltZXMgLSByZXRyeUNvdW50ID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdChyZXRyeUNvdW50ICogcmV0cnlDb3VudCAqIDEwMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbih0aGlzLnN0YXJ0Q29ubmVjdGlvbi5iaW5kKHRoaXMsIGh1YkNvbm5lY3Rpb24sICsrcmV0cnlDb3VudCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlKGh1YkNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24sIHZpZXdDb2RlOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKHZpZXdDb2RlICYmIGh1YkNvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgaHViQ29ubmVjdGlvbi5pbnZva2UoJ0pvaW5Sb29tJywgdmlld0NvZGUpLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGVyci50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICAgIGh1YkNvbm5lY3Rpb24ub24odmlld0NvZGUsIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1blN1YnNjcmliZShodWJDb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uLCB2aWV3Q29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZpZXdDb2RlICYmIGh1YkNvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgaHViQ29ubmVjdGlvbi5pbnZva2UoJ2xlYXZlUm9vbScsIHZpZXdDb2RlKS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgICBodWJDb25uZWN0aW9uLm9mZih2aWV3Q29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2hELE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUt6RSxNQUFNLE9BQU8sY0FBYztJQWtCdkIsWUFDWSxtQkFBdUMsRUFDdkMsY0FBNkI7UUFEN0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQWxCekMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUF1SFgsU0FBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUF4R3JELE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQy9DLElBQUksQ0FB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QUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLGFBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxhQUE0QixFQUFFLFFBQWdCO1FBQzlELElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRTtZQUMzQixhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEYsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7OzJHQXRLUSxjQUFjOytHQUFkLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTRVJWSUNFX0NPREVTIH0gZnJvbSAnLi4vY29uc3QvY29tbW9uJztcclxuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4vYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuL2Vudmlyb25tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJDb25uZWN0aW9uLCBIdWJDb25uZWN0aW9uQnVpbGRlciB9IGZyb20gJ0BtaWNyb3NvZnQvc2lnbmFscic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpZ25hbFJTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgX2h1YkNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb247XHJcbiAgICBjb25uZWN0aW9ucyA9IFtdO1xyXG4gICAgaHVicyA9IHt9O1xyXG4gICAgZGVsYXlTdGFydGVycyA9IFtdO1xyXG4gICAgY29ubmVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgbWF4UmV0cnlUaW1lcyA9IDEwO1xyXG4gICAgdmlld0NvZGVTdWJzOiB7XHJcbiAgICAgICAgdmlld0NvZGU6IHN0cmluZyxcclxuICAgICAgICBjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZFxyXG4gICAgfVtdO1xyXG5cclxuICAgIGVuYWJsZUNvbW1vbkh1YjogYm9vbGVhbjtcclxuICAgIGVuYWJsZUNvbnNpc3RlbmN5SHViOiBib29sZWFuO1xyXG4gICAgZW5hYmxlTm90aWZpY2F0aW9uSHViOiBib29sZWFuO1xyXG4gICAgZW5hYmxlUHVibGljSHViOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2Vudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IHsgY29tbW9uSHViLCBjb25zaXN0ZW5jeUh1Yiwgbm90aWZpY2F0aW9uSHViLCBwdWJsaWNIdWIgfSA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRFbmFibGVIdWIoKTtcclxuICAgICAgICB0aGlzLmVuYWJsZUNvbW1vbkh1YiA9ICEhY29tbW9uSHViO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlQ29uc2lzdGVuY3lIdWIgPSAhIWNvbnNpc3RlbmN5SHViO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlTm90aWZpY2F0aW9uSHViID0gISFub3RpZmljYXRpb25IdWI7XHJcbiAgICAgICAgdGhpcy5lbmFibGVQdWJsaWNIdWIgPSAhIXB1YmxpY0h1YjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUNvbW1vbkh1Yikge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUh1YignQ29tbW9uSHViJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lbmFibGVDb25zaXN0ZW5jeUh1Yikge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUh1YignQ29uc2lzdGVuY3lIdWInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZU5vdGlmaWNhdGlvbkh1Yikge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUh1YignTm90aWZpY2F0aW9uSHViJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5lbmFibGVQdWJsaWNIdWIpIHtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVIdWIoJ1B1YmxpY0h1YicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKHRoaXMuZGVsYXlTdGFydGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsYXlTdGFydGVycy5wb3AoKSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUh1YihodWJDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmh1YnNbaHViQ29kZV0gPSB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oaHViQ29kZSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydENvbm5lY3Rpb24odGhpcy5odWJzW2h1YkNvZGVdKTtcclxuICAgICAgICB0aGlzLmF1dG9SZWNvbm5lY3QodGhpcy5odWJzW2h1YkNvZGVdKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCh0b3BpYzogc3RyaW5nLCB2aWV3Q29kZTogc3RyaW5nLCBjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICAgIGlmICghdG9waWMpIHtcclxuICAgICAgICAgICAgdG9waWMgPSAnQ29tbW9uSHViJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0h1YkVuYWJsZWQodG9waWMpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGF5U3RhcnRlcnMucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZVZpZXdDb2RlKHRoaXMuaHVic1t0b3BpY10sIHZpZXdDb2RlLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVWaWV3Q29kZSh0aGlzLmh1YnNbdG9waWNdLCB2aWV3Q29kZSwgY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0h1YkVuYWJsZWQodG9waWMpIHtcclxuICAgICAgICByZXR1cm4gKHRvcGljID09PSAnQ29tbW9uSHViJyAmJiB0aGlzLmVuYWJsZUNvbW1vbkh1YilcclxuICAgICAgICAgICAgfHwgKHRvcGljID09PSAnQ29uc2lzdGVuY3lIdWInICYmIHRoaXMuZW5hYmxlQ29uc2lzdGVuY3lIdWIpXHJcbiAgICAgICAgICAgIHx8ICh0b3BpYyA9PT0gJ05vdGlmaWNhdGlvbkh1YicgJiYgdGhpcy5lbmFibGVOb3RpZmljYXRpb25IdWIpXHJcbiAgICAgICAgICAgIHx8ICh0b3BpYyA9PT0gJ1B1YmxpY0h1YicpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuX2h1YkNvbm5lY3Rpb24uc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZVZpZXdDb2RlKGh1YkNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24sIHZpZXdDb2RlOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy52aWV3Q29kZVN1YnMpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3Q29kZVN1YnMgPSBbeyB2aWV3Q29kZSwgY2FsbGJhY2sgfV07XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlKGh1YkNvbm5lY3Rpb24sIHZpZXdDb2RlLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3Q29kZVN1YnMuZmluZEluZGV4KHggPT4geC52aWV3Q29kZSA9PT0gdmlld0NvZGUpID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDb2RlU3Vicy5wdXNoKHsgdmlld0NvZGUsIGNhbGxiYWNrIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZShodWJDb25uZWN0aW9uLCB2aWV3Q29kZSwgY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1blN1YnNjcmliZVZpZXdDb2RlKHRvcGljOiBzdHJpbmcsIHZpZXdDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRvcGljKSB7XHJcbiAgICAgICAgICAgIHRvcGljID0gJ0NvbW1vbkh1Yic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGh1YkNvbm5lY3Rpb24gPSB0aGlzLmh1YnNbdG9waWNdO1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdDb2RlU3Vicykge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDb2RlU3VicyA9IHRoaXMudmlld0NvZGVTdWJzLmZpbHRlcih4ID0+IHgudmlld0NvZGUgIT09IHZpZXdDb2RlKTtcclxuICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZShodWJDb25uZWN0aW9uLCB2aWV3Q29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQ29ubmVjdGlvbih0b3BpYzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLl9hdXRoZW5TZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBIdWJDb25uZWN0aW9uQnVpbGRlcigpXHJcbiAgICAgICAgICAgIC53aXRoVXJsKGAke3RoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRIdHRwU2VydmljZUVuZHBvaW50V2l0aFZlcnNpb24oU0VSVklDRV9DT0RFUy5OT1RJRklDQVRJT04pfS8ke3RvcGljfWAsXHJcbiAgICAgICAgICAgICAgICB7IGFjY2Vzc1Rva2VuRmFjdG9yeTogKCkgPT4gYWNjZXNzVG9rZW4gfSlcclxuICAgICAgICAgICAgLmJ1aWxkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhdXRvUmVjb25uZWN0KGh1YkNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24pIHtcclxuICAgICAgICBodWJDb25uZWN0aW9uLm9uY2xvc2UoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Q29ubmVjdGlvbihodWJDb25uZWN0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHdhaXQgPSBtcyA9PiBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgbXMpKTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXJ0Q29ubmVjdGlvbihodWJDb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uLCByZXRyeUNvdW50ID0gMSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCBzdXJlIGFib3V0IGl0IDopKSlcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FzcG5ldC9TaWduYWxSL2lzc3Vlcy8yMzg5XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJTb2NrZXQsICdPUEVOJywgeyB2YWx1ZTogMSwgfSk7XHJcblxyXG4gICAgICAgICAgICBodWJDb25uZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAuc3RhcnQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heFJldHJ5VGltZXMgLSByZXRyeUNvdW50ID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdChyZXRyeUNvdW50ICogcmV0cnlDb3VudCAqIDEwMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbih0aGlzLnN0YXJ0Q29ubmVjdGlvbi5iaW5kKHRoaXMsIGh1YkNvbm5lY3Rpb24sICsrcmV0cnlDb3VudCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlKGh1YkNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24sIHZpZXdDb2RlOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKHZpZXdDb2RlICYmIGh1YkNvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgaHViQ29ubmVjdGlvbi5pbnZva2UoJ0pvaW5Sb29tJywgdmlld0NvZGUpLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGVyci50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICAgIGh1YkNvbm5lY3Rpb24ub24odmlld0NvZGUsIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1blN1YnNjcmliZShodWJDb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uLCB2aWV3Q29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZpZXdDb2RlICYmIGh1YkNvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgaHViQ29ubmVjdGlvbi5pbnZva2UoJ2xlYXZlUm9vbScsIHZpZXdDb2RlKS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgICBodWJDb25uZWN0aW9uLm9mZih2aWV3Q29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|