barsa-novin-ray-core 2.2.11 → 2.2.13
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/esm2022/lib/barsa-novin-ray-core.module.mjs +15 -9
- package/esm2022/lib/constants.mjs +35 -1
- package/esm2022/lib/directives/index.mjs +2 -1
- package/esm2022/lib/directives/print-files.directive.mjs +39 -0
- package/esm2022/lib/pipes/index.mjs +2 -1
- package/esm2022/lib/pipes/isimage.pipe.mjs +20 -0
- package/esm2022/lib/services/notification.service.mjs +9 -128
- package/fesm2022/barsa-novin-ray-core.mjs +109 -135
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/barsa-novin-ray-core.module.d.ts +40 -38
- package/lib/constants.d.ts +3 -0
- package/lib/directives/index.d.ts +1 -0
- package/lib/directives/print-files.directive.d.ts +13 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/pipes/isimage.pipe.d.ts +7 -0
- package/lib/services/notification.service.d.ts +1 -12
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import { isImage } from '../constants';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class IsImagePipe {
|
|
5
|
+
transform(type
|
|
6
|
+
// fileCount: number
|
|
7
|
+
) {
|
|
8
|
+
return isImage(type);
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsImagePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
11
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IsImagePipe, name: "isImageType" }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsImagePipe, decorators: [{
|
|
14
|
+
type: Pipe,
|
|
15
|
+
args: [{
|
|
16
|
+
name: 'isImageType',
|
|
17
|
+
standalone: false
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNpbWFnZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9waXBlcy9pc2ltYWdlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLFdBQVc7SUFDcEIsU0FBUyxDQUNMLElBQVk7SUFDWixvQkFBb0I7O1FBRXBCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7K0dBTlEsV0FBVzs2R0FBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUp2QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxhQUFhO29CQUNuQixVQUFVLEVBQUUsS0FBSztpQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlVHJhbnNmb3JtLCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzSW1hZ2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5AUGlwZSh7XHJcbiAgICBuYW1lOiAnaXNJbWFnZVR5cGUnLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIElzSW1hZ2VQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7ICAgIFxyXG4gICAgdHJhbnNmb3JtKFxyXG4gICAgICAgIHR5cGU6IHN0cmluZ1xyXG4gICAgICAgIC8vIGZpbGVDb3VudDogbnVtYmVyXHJcbiAgICApOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaXNJbWFnZSh0eXBlKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -20,7 +20,6 @@ export class NotificationService {
|
|
|
20
20
|
this._portalService = _portalService;
|
|
21
21
|
this._ngZone = _ngZone;
|
|
22
22
|
this._notifications$ = new BehaviorSubject([]);
|
|
23
|
-
this._notificationCount$ = new BehaviorSubject({ unread: 0, all: 0 });
|
|
24
23
|
this._notificationUnreadCount$ = new BehaviorSubject(0);
|
|
25
24
|
this._notificationLoading$ = new BehaviorSubject(false);
|
|
26
25
|
this._notifiationCountLoaded$ = new BehaviorSubject(false);
|
|
@@ -33,8 +32,8 @@ export class NotificationService {
|
|
|
33
32
|
get notificationCountLoaded$() {
|
|
34
33
|
return this._notifiationCountLoaded$.asObservable();
|
|
35
34
|
}
|
|
36
|
-
get
|
|
37
|
-
return this.
|
|
35
|
+
get notificationUnreadCount$() {
|
|
36
|
+
return this._notificationUnreadCount$.asObservable();
|
|
38
37
|
}
|
|
39
38
|
get notifications$() {
|
|
40
39
|
return this._notifications$.asObservable().pipe();
|
|
@@ -42,28 +41,6 @@ export class NotificationService {
|
|
|
42
41
|
get notificationLoading$() {
|
|
43
42
|
return this._notificationLoading$.asObservable();
|
|
44
43
|
}
|
|
45
|
-
loadMore() {
|
|
46
|
-
this.loadNotifications(this.pageIndex);
|
|
47
|
-
}
|
|
48
|
-
setNotificationViewed(tags) {
|
|
49
|
-
BarsaApi.Bw.RunBlMethodAsync({
|
|
50
|
-
Parameters: [tags],
|
|
51
|
-
Method: 'SetNotificationViewed',
|
|
52
|
-
SuccessFn: () => {
|
|
53
|
-
const molistCurr = this._notifications$.getValue();
|
|
54
|
-
const updatedUnreadMoList = molistCurr.map((c) => ({
|
|
55
|
-
...c,
|
|
56
|
-
Unread: tags.indexOf(c.Tag) > -1 ? false : c.Unread
|
|
57
|
-
}));
|
|
58
|
-
this._notifications$.next([...updatedUnreadMoList]);
|
|
59
|
-
this.increaseNotifcationCount(-tags.length, 0);
|
|
60
|
-
return tags;
|
|
61
|
-
},
|
|
62
|
-
FailFn: (e) => {
|
|
63
|
-
this._logService.error(e);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
44
|
ShowNotificationRelatedMo(e) {
|
|
68
45
|
const ee = {
|
|
69
46
|
...e,
|
|
@@ -80,51 +57,12 @@ export class NotificationService {
|
|
|
80
57
|
this._portalService.ShowForm(ee);
|
|
81
58
|
}
|
|
82
59
|
handleTopic(eventTopic, content, ownerKey) {
|
|
83
|
-
if (eventTopic === '
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (findInNotifications) {
|
|
88
|
-
this._notifications$.next(notifications.filter((c) => !Tags.includes(c.Tag)));
|
|
89
|
-
}
|
|
90
|
-
if (unreadCount > 0) {
|
|
91
|
-
this.increaseNotifcationCount(-unreadCount, -count);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else if (eventTopic === 'SetReadNotificationMessage') {
|
|
95
|
-
const notifications = this._notifications$.getValue();
|
|
96
|
-
const { Tags } = content;
|
|
97
|
-
Tags.forEach((tag) => {
|
|
98
|
-
const foundIndex = notifications.findIndex((c) => c.Tag === tag);
|
|
99
|
-
if (foundIndex > -1) {
|
|
100
|
-
notifications[foundIndex] = {
|
|
101
|
-
...notifications[foundIndex],
|
|
102
|
-
Unread: false,
|
|
103
|
-
Unread$Caption: 'نادرست'
|
|
104
|
-
};
|
|
105
|
-
this._notifications$.next([...notifications]);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
const notificationsCount = this._notificationCount$.getValue();
|
|
109
|
-
this.increaseNotifcationCount(-Tags.length, notificationsCount.all);
|
|
60
|
+
if (eventTopic === 'RefreshNotificationUnreadCount') {
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
this.loadUnreadNotificationCount();
|
|
63
|
+
}, 1000);
|
|
110
64
|
}
|
|
111
65
|
}
|
|
112
|
-
_findNotificationsMessage(Tags, notifications) {
|
|
113
|
-
let findInNotifications = false;
|
|
114
|
-
let unreadCount = 0;
|
|
115
|
-
let count = 0;
|
|
116
|
-
Tags.forEach((tag) => {
|
|
117
|
-
const foundNotification = notifications.find((c) => c.Tag === tag);
|
|
118
|
-
if (foundNotification) {
|
|
119
|
-
findInNotifications = true;
|
|
120
|
-
count++;
|
|
121
|
-
if (foundNotification.Unread) {
|
|
122
|
-
unreadCount++;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
return { findInNotifications, unreadCount, count };
|
|
127
|
-
}
|
|
128
66
|
addNotification(msg, title, type, image, mo, uiOptions, otherOptions) {
|
|
129
67
|
this._ngZone.run(() => {
|
|
130
68
|
if (otherOptions) {
|
|
@@ -150,81 +88,24 @@ export class NotificationService {
|
|
|
150
88
|
if (parsedMo) {
|
|
151
89
|
const molist = this._notifications$.getValue();
|
|
152
90
|
this._notifications$.next([newNotification, ...molist]);
|
|
153
|
-
this.increaseNotifcationCount(1, 1);
|
|
154
91
|
}
|
|
155
92
|
this.showNotification(newNotification, parsedMo, uiOptions, otherOptions);
|
|
156
93
|
}
|
|
157
94
|
});
|
|
158
95
|
}
|
|
159
|
-
increaseNotifcationCount(unread, count) {
|
|
160
|
-
const countValue = this._notificationCount$.getValue();
|
|
161
|
-
const sumUnread = countValue.unread + +unread;
|
|
162
|
-
const sumAll = countValue.all + +count;
|
|
163
|
-
this._notificationCount$.next({ unread: sumUnread > 0 ? sumUnread : 0, all: sumAll > 0 ? sumAll : 0 });
|
|
164
|
-
}
|
|
165
96
|
loadUnreadNotificationCount() {
|
|
166
97
|
BarsaApi.Bw.RunBlMethodAsync({
|
|
167
98
|
Parameters: [BarsaApi.LoginFormData.PortalId],
|
|
168
|
-
Method: '
|
|
99
|
+
Method: 'GetShellbarNotificationUnreadCountByPortalId',
|
|
169
100
|
SuccessFn: (e) => {
|
|
170
|
-
this._updateUnreadAndCount(e);
|
|
171
101
|
this._notifiationCountLoaded$.next(true);
|
|
102
|
+
this._notificationUnreadCount$.next(e);
|
|
172
103
|
},
|
|
173
104
|
FailFn: (e) => {
|
|
174
105
|
this._logService.error(e);
|
|
175
106
|
}
|
|
176
107
|
});
|
|
177
108
|
}
|
|
178
|
-
loadNotifications(pageIndex = 0) {
|
|
179
|
-
if (pageIndex + 1 > this.pageCount) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
this.notificationLoading(true);
|
|
183
|
-
BarsaApi.Bw.RunBlMethodAsync({
|
|
184
|
-
Parameters: [pageIndex, BarsaApi.LoginFormData.PortalId],
|
|
185
|
-
Method: 'GetShellbarNotificationsByPortalId',
|
|
186
|
-
SuccessFn: (e) => {
|
|
187
|
-
const notifications = this._notifications$.getValue();
|
|
188
|
-
const notifListOfTags = notifications.map((c) => c.Tag);
|
|
189
|
-
const molist = e.MoList.filter((c) => notifListOfTags.indexOf(c.Tag) === -1).map((mo) => this._prepareProperties(mo, mo, mo.IMessage?.Content));
|
|
190
|
-
this._notifications$.next([...notifications, ...molist]);
|
|
191
|
-
this.pageCount = +e.PageCount;
|
|
192
|
-
this.pageIndex = pageIndex + 1;
|
|
193
|
-
this.notificationLoading(false);
|
|
194
|
-
},
|
|
195
|
-
FailFn: (e) => {
|
|
196
|
-
this._logService.error(e);
|
|
197
|
-
this.notificationLoading(false);
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
removeNotification(molist, closeNotification = true) {
|
|
202
|
-
const moIds = this._setNotificationLoading(molist, true);
|
|
203
|
-
BarsaApi.Bw.RunBlMethodAsync({
|
|
204
|
-
Parameters: [moIds, BarsaApi.LoginFormData.PortalId],
|
|
205
|
-
Method: 'RemoveShellbarNotification',
|
|
206
|
-
SuccessFn: (e) => {
|
|
207
|
-
const notificationList = this._notifications$.getValue();
|
|
208
|
-
this._updateUnreadAndCount(e);
|
|
209
|
-
const newMoList = notificationList.filter((c) => moIds.indexOf(c.Id) === -1);
|
|
210
|
-
this._notifications$.next(newMoList);
|
|
211
|
-
if (closeNotification) {
|
|
212
|
-
this._serviceWorkerNotification.closeNotifications(moIds);
|
|
213
|
-
}
|
|
214
|
-
if (this._notificationCount$.getValue().all > 0) {
|
|
215
|
-
this.loadNotifications(this.pageIndex - 1);
|
|
216
|
-
}
|
|
217
|
-
},
|
|
218
|
-
FailFn: (e) => {
|
|
219
|
-
this._logService.error(e);
|
|
220
|
-
this._setNotificationLoading(molist, false);
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
_updateUnreadAndCount(e) {
|
|
225
|
-
this._notificationUnreadCount$.next(+e.Unread);
|
|
226
|
-
this._notificationCount$.next({ unread: +e.Unread, all: +e.All });
|
|
227
|
-
}
|
|
228
109
|
get SupportNotifications() {
|
|
229
110
|
return typeof Notification !== 'undefined' && this._serviceWorkerNotification.isEnabled;
|
|
230
111
|
}
|
|
@@ -305,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
305
186
|
type: Inject,
|
|
306
187
|
args: [NOTIFICATAION_POPUP_SERVER]
|
|
307
188
|
}] }, { type: i1.LogService }, { type: i2.LowerCasePipe }, { type: i3.BbbTranslatePipe }, { type: i4.DomSanitizer }, { type: i5.ServiceWorkerNotificationService }, { type: i6.PortalService }, { type: i0.NgZone }] });
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQVFsRSxNQUFNLE9BQU8sbUJBQW1CO0lBUzVCLFlBQ2tELGFBQXVDLEVBQzdFLFdBQXVCLEVBQ3ZCLFVBQXlCLEVBQ3pCLGFBQStCLEVBQy9CLGFBQTJCLEVBQzNCLDBCQUE0RCxFQUM1RCxjQUE2QixFQUM3QixPQUFlO1FBUHVCLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUM3RSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQWtDO1FBQzVELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFoQm5CLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFrQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEcsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENB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WUFDdEMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7WUFDdEQsV0FBVyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVztZQUNwQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtZQUNwRCxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRTtZQUN2RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7U0FDcEUsQ0FBQztJQUNOLENBQUM7SUFDTyxZQUFZLENBQUMsZ0JBQWtDO1FBQ25ELFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQzVDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXZELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLENBQUM7b0JBQzdDLGdCQUFnQjtvQkFDaEIsS0FBSztvQkFDTCxJQUFJO2lCQUNQLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDSix5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F6VVEsbUJBQW1CLGtCQVVoQiwwQkFBMEI7bUhBVjdCLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVTs7MEJBV0YsTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb3dlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XHJcbmltcG9ydCB7IE1ldGFvYmplY3REYXRhTW9kZWwsIE1vRm9yUmVwb3J0TW9kZWwsIE5vdGlmaWNhdGlvbkl0ZW0sIE5vdGlmeU9wdGlvbnMgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IE5PVElGSUNBVEFJT05fUE9QVVBfU0VSVkVSIH0gZnJvbSAnLi4vaW5qZGVjdGlvbi10b2tlbnMnO1xyXG5pbXBvcnQgeyBCYmJUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvYmJiLXRyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25Qb3B1cFNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VydmljZVdvcmtlck5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1zdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9ydGFsU2VydmljZSB9IGZyb20gJy4vcG9ydGFsLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZSB7XHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbFtdPihbXSk7XHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25Db3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgdW5yZWFkOiBudW1iZXI7IGFsbDogbnVtYmVyIH0+KHsgdW5yZWFkOiAwLCBhbGw6IDAgfSk7XHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25VbnJlYWRDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25Mb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfbm90aWZpYXRpb25Db3VudExvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHBhZ2VDb3VudCA9IDE7XHJcbiAgICBwYWdlSW5kZXggPSAwO1xyXG4gICAgdXNlck5vdGlmaWNhdGlvblNldHRpbmdzOiBVc2VyTm90aWZpY2F0aW9uU2V0dGluZztcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoTk9USUZJQ0FUQUlPTl9QT1BVUF9TRVJWRVIpIHByb3RlY3RlZCBfcG9wdXBTZXJ2aWNlOiBOb3RpZmljYXRpb25Qb3B1cFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9sb3dlckNhc2U6IExvd2VyQ2FzZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfYmJiVHJhbnNsYXRlOiBCYmJUcmFuc2xhdGVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgX3NlcnZpY2VXb3JrZXJOb3RpZmljYXRpb246IFNlcnZpY2VXb3JrZXJOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2UudXNlclBvcnRhbFNldHRpbmdzJC5waXBlKCkuc3Vic2NyaWJlKCh1c2VyUG9ydGFsU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyTm90aWZpY2F0aW9uU2V0dGluZ3MgPSA8VXNlck5vdGlmaWNhdGlvblNldHRpbmc+dXNlclBvcnRhbFNldHRpbmdzWydVc2VyTm90aWZpY2F0aW9uU2V0dGluZyddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5vdGlmaWNhdGlvbkNvdW50TG9hZGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpYXRpb25Db3VudExvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgbm90aWZpY2F0aW9uQ291bnQkKCk6IE9ic2VydmFibGU8eyB1bnJlYWQ6IG51bWJlcjsgYWxsOiBudW1iZXIgfT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25Db3VudCQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdGlmaWNhdGlvbnMkKCk6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoKTtcclxuICAgIH1cclxuICAgIGdldCBub3RpZmljYXRpb25Mb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucyh0aGlzLnBhZ2VJbmRleCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Tm90aWZpY2F0aW9uVmlld2VkKHRhZ3M6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFt0YWdzXSxcclxuICAgICAgICAgICAgTWV0aG9kOiAnU2V0Tm90aWZpY2F0aW9uVmlld2VkJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2xpc3RDdXJyID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRVbnJlYWRNb0xpc3QgPSBtb2xpc3RDdXJyLm1hcCgoYykgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5jLFxyXG4gICAgICAgICAgICAgICAgICAgIFVucmVhZDogdGFncy5pbmRleE9mKGMuVGFnKSA+IC0xID8gZmFsc2UgOiBjLlVucmVhZFxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4udXBkYXRlZFVucmVhZE1vTGlzdF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmNyZWFzZU5vdGlmY2F0aW9uQ291bnQoLXRhZ3MubGVuZ3RoLCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YWdzO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBGYWlsRm46IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgU2hvd05vdGlmaWNhdGlvblJlbGF0ZWRNbyhlOiB7IHRhZzogc3RyaW5nOyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgbmFtYTogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlZSA9IHtcclxuICAgICAgICAgICAgLi4uZSxcclxuICAgICAgICAgICAgYWZ0ZXJSZWFkeTogKGUyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtlLnRhZ10sXHJcbiAgICAgICAgICAgICAgICAgICAgTWV0aG9kOiAnQmFyc2FfU2V0UmVhZFJhZGlmQ2FydGFibGVCeVRhZycsXHJcbiAgICAgICAgICAgICAgICAgICAgRmFpbEZuOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZS5TaG93Rm9ybShlZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFuZGxlVG9waWMoZXZlbnRUb3BpYywgY29udGVudCwgb3duZXJLZXkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnRUb3BpYyA9PT0gJ0RlbGV0ZU5vdGlmaWNhdGlvbk1lc3NhZ2UnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgVGFncyB9OiB7IFRhZ3M6IHN0cmluZ1tdIH0gPSBjb250ZW50O1xyXG4gICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgY29uc3QgeyBmaW5kSW5Ob3RpZmljYXRpb25zLCB1bnJlYWRDb3VudCwgY291bnQgfSA9IHRoaXMuX2ZpbmROb3RpZmljYXRpb25zTWVzc2FnZShUYWdzLCBub3RpZmljYXRpb25zKTtcclxuICAgICAgICAgICAgaWYgKGZpbmRJbk5vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobm90aWZpY2F0aW9ucy5maWx0ZXIoKGMpID0+ICFUYWdzLmluY2x1ZGVzKGMuVGFnKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1bnJlYWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVhc2VOb3RpZmNhdGlvbkNvdW50KC11bnJlYWRDb3VudCwgLWNvdW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUb3BpYyA9PT0gJ1NldFJlYWROb3RpZmljYXRpb25NZXNzYWdlJykge1xyXG4gICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgY29uc3QgeyBUYWdzIH06IHsgVGFnczogc3RyaW5nW10gfSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIFRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZEluZGV4ID0gbm90aWZpY2F0aW9ucy5maW5kSW5kZXgoKGMpID0+IGMuVGFnID09PSB0YWcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbnNbZm91bmRJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbnNbZm91bmRJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVucmVhZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVucmVhZCRDYXB0aW9uOiAn2YbYp9iv2LHYs9iqJ1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4ubm90aWZpY2F0aW9uc10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNDb3VudCA9IHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluY3JlYXNlTm90aWZjYXRpb25Db3VudCgtVGFncy5sZW5ndGgsIG5vdGlmaWNhdGlvbnNDb3VudC5hbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX2ZpbmROb3RpZmljYXRpb25zTWVzc2FnZShcclxuICAgICAgICBUYWdzOiBzdHJpbmdbXSxcclxuICAgICAgICBub3RpZmljYXRpb25zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW11cclxuICAgICk6IHsgZmluZEluTm90aWZpY2F0aW9uczogYm9vbGVhbjsgdW5yZWFkQ291bnQ6IG51bWJlcjsgY291bnQ6IG51bWJlciB9IHtcclxuICAgICAgICBsZXQgZmluZEluTm90aWZpY2F0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB1bnJlYWRDb3VudCA9IDA7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgICBUYWdzLmZvckVhY2goKHRhZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3VuZE5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbnMuZmluZCgoYykgPT4gYy5UYWcgPT09IHRhZyk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZE5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZmluZEluTm90aWZpY2F0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTm90aWZpY2F0aW9uLlVucmVhZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVucmVhZENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4geyBmaW5kSW5Ob3RpZmljYXRpb25zLCB1bnJlYWRDb3VudCwgY291bnQgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkTm90aWZpY2F0aW9uKFxyXG4gICAgICAgIG1zZzogc3RyaW5nLFxyXG4gICAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgICAgdHlwZTogc3RyaW5nLFxyXG4gICAgICAgIGltYWdlOiBzdHJpbmcsXHJcbiAgICAgICAgbW8sXHJcbiAgICAgICAgdWlPcHRpb25zOiBOb3RpZnlPcHRpb25zLFxyXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvdGhlck9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgTW9JZCwgVHlwZURlZklkIH0gPSBvdGhlck9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3Tm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25JdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICRDYXB0aW9uOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICBJZDogTW9JZCxcclxuICAgICAgICAgICAgICAgICAgICAkVHlwZURlZklkOiBUeXBlRGVmSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgVGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIFVucmVhZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBJY29uOiBpbWFnZSxcclxuICAgICAgICAgICAgICAgICAgICBJbWFnZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgQ29udGVudDogbXNnLFxyXG4gICAgICAgICAgICAgICAgICAgIFRhZzogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgU3ViamVjdDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgJFNhZmVDb250ZW50OiB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwobXNnKSxcclxuICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbkRhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgQ3JlYXRpb25EYXRlJENhcHRpb246IHRoaXMuX2JiYlRyYW5zbGF0ZS50cmFuc2Zvcm0oJ0RhdGVSX1RvZGF5JylcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRNbyA9IG1vID8gQmFyc2FBcGkuRXh0LmRlY29kZShtbykgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgbmV3Tm90aWZpY2F0aW9uID0gdGhpcy5fcHJlcGFyZVByb3BlcnRpZXMobmV3Tm90aWZpY2F0aW9uLCBwYXJzZWRNbywgbXNnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkTW8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2xpc3QgPSB0aGlzLl9ub3RpZmljYXRpb25zJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQoW25ld05vdGlmaWNhdGlvbiwgLi4ubW9saXN0XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmNyZWFzZU5vdGlmY2F0aW9uQ291bnQoMSwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dOb3RpZmljYXRpb24obmV3Tm90aWZpY2F0aW9uLCBwYXJzZWRNbywgdWlPcHRpb25zLCBvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluY3JlYXNlTm90aWZjYXRpb25Db3VudCh1bnJlYWQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvdW50VmFsdWUgPSB0aGlzLl9ub3RpZmljYXRpb25Db3VudCQuZ2V0VmFsdWUoKTtcclxuICAgICAgICBjb25zdCBzdW1VbnJlYWQgPSBjb3VudFZhbHVlLnVucmVhZCArICt1bnJlYWQ7XHJcbiAgICAgICAgY29uc3Qgc3VtQWxsID0gY291bnRWYWx1ZS5hbGwgKyArY291bnQ7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uQ291bnQkLm5leHQoeyB1bnJlYWQ6IHN1bVVucmVhZCA+IDAgPyBzdW1VbnJlYWQgOiAwLCBhbGw6IHN1bUFsbCA+IDAgPyBzdW1BbGwgOiAwIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWRVbnJlYWROb3RpZmljYXRpb25Db3VudCgpOiB2b2lkIHtcclxuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcclxuICAgICAgICAgICAgUGFyYW1ldGVyczogW0JhcnNhQXBpLkxvZ2luRm9ybURhdGEuUG9ydGFsSWRdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdHZXRTaGVsbGJhck5vdGlmaWNhdGlvbkNvdW50QnlQb3J0YWxJZCcsXHJcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGU6IHsgVW5yZWFkOiBudW1iZXI7IEFsbDogbnVtYmVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVVucmVhZEFuZENvdW50KGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpYXRpb25Db3VudExvYWRlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGxvYWROb3RpZmljYXRpb25zKHBhZ2VJbmRleDogbnVtYmVyID0gMCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChwYWdlSW5kZXggKyAxID4gdGhpcy5wYWdlQ291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRpbmcodHJ1ZSk7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtwYWdlSW5kZXgsIEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuUG9ydGFsSWRdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdHZXRTaGVsbGJhck5vdGlmaWNhdGlvbnNCeVBvcnRhbElkJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZTogeyBQYWdlQ291bnQ6IG51bWJlcjsgTW9MaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3RpZkxpc3RPZlRhZ3MgPSBub3RpZmljYXRpb25zLm1hcCgoYykgPT4gYy5UYWcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9saXN0ID0gZS5Nb0xpc3QuZmlsdGVyKChjKSA9PiBub3RpZkxpc3RPZlRhZ3MuaW5kZXhPZihjLlRhZykgPT09IC0xKS5tYXAoKG1vKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVQcm9wZXJ0aWVzKDxOb3RpZmljYXRpb25JdGVtPm1vLCBtbywgbW8uSU1lc3NhZ2U/LkNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4ubm90aWZpY2F0aW9ucywgLi4ubW9saXN0XSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICtlLlBhZ2VDb3VudDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZUluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZU5vdGlmaWNhdGlvbihtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY2xvc2VOb3RpZmljYXRpb24gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9JZHMgPSB0aGlzLl9zZXROb3RpZmljYXRpb25Mb2FkaW5nKG1vbGlzdCwgdHJ1ZSk7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFttb0lkcywgQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZF0sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ1JlbW92ZVNoZWxsYmFyTm90aWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZTogeyBVbnJlYWQ6IG51bWJlcjsgQWxsOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uTGlzdCA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVbnJlYWRBbmRDb3VudChlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld01vTGlzdCA9IG5vdGlmaWNhdGlvbkxpc3QuZmlsdGVyKChjKSA9PiBtb0lkcy5pbmRleE9mKGMuSWQpID09PSAtMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KG5ld01vTGlzdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VOb3RpZmljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlV29ya2VyTm90aWZpY2F0aW9uLmNsb3NlTm90aWZpY2F0aW9ucyhtb0lkcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbm90aWZpY2F0aW9uQ291bnQkLmdldFZhbHVlKCkuYWxsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE5vdGlmaWNhdGlvbnModGhpcy5wYWdlSW5kZXggLSAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldE5vdGlmaWNhdGlvbkxvYWRpbmcobW9saXN0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3VwZGF0ZVVucmVhZEFuZENvdW50KGU6IHsgVW5yZWFkOiBudW1iZXI7IEFsbDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25VbnJlYWRDb3VudCQubmV4dCgrZS5VbnJlYWQpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5uZXh0KHsgdW5yZWFkOiArZS5VbnJlYWQsIGFsbDogK2UuQWxsIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBTdXBwb3J0Tm90aWZpY2F0aW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIE5vdGlmaWNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5fc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbi5pc0VuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbihcclxuICAgICAgICBub3RpZmljYXRpb25JdGVtOiBOb3RpZmljYXRpb25JdGVtLFxyXG4gICAgICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCxcclxuICAgICAgICB1aU9wdGlvbnM6IE5vdGlmeU9wdGlvbnMsXHJcbiAgICAgICAgb3RoZXJPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uSXRlbS5UaXRsZSAmJiBub3RpZmljYXRpb25JdGVtLlRpdGxlLnN0YXJ0c1dpdGgoJ1snKSAmJiBub3RpZmljYXRpb25JdGVtLlRpdGxlLmVuZHNXaXRoKCddJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uSXRlbS5UaXRsZSAmJiBub3RpZmljYXRpb25JdGVtLlRpdGxlLnN0YXJ0c1dpdGgoJ3snKSAmJiBub3RpZmljYXRpb25JdGVtLlRpdGxlLmVuZHNXaXRoKCd9JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobW8gJiYgIW1vLlNob3dQb3B1cCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5TdXBwb3J0Tm90aWZpY2F0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLndhcm4oYEluQXBwIE5vdGlmaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLmApO1xyXG4gICAgICAgICAgICB1aU9wdGlvbnMgPSB1aU9wdGlvbnMgPz8ge307XHJcbiAgICAgICAgICAgIHVpT3B0aW9ucy5Ob3RpZmljYXRpb25JdGVtID0gbm90aWZpY2F0aW9uSXRlbTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXBOb3RpZnkobm90aWZpY2F0aW9uSXRlbSwgbW8sIHVpT3B0aW9ucywgb3RoZXJPcHRpb25zKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pbkFwcE5vdGlmeShub3RpZmljYXRpb25JdGVtKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uTG9hZGluZyhsb2FkaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uTG9hZGluZyQubmV4dChsb2FkaW5nKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldE5vdGlmaWNhdGlvbkxvYWRpbmcobW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGNvbnN0IG1vbGlzdEN1cnIgPSB0aGlzLl9ub3RpZmljYXRpb25zJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IG1vSWRzID0gbW9saXN0Lm1hcCgoYykgPT4gYy5JZCk7XHJcbiAgICAgICAgY29uc3QgbW9saXN0V2l0aExvYWRpbmdQcm9wZXJ0eSA9IG1vbGlzdEN1cnIubWFwKChjKSA9PiAoe1xyXG4gICAgICAgICAgICAuLi5jLFxyXG4gICAgICAgICAgICAkTm90aWZpY2F0b2luTG9hZGluZzogbW9JZHMuaW5kZXhPZihjLklkKSAhPT0gLTEgPyBsb2FkaW5nIDogYy4kTm90aWZpY2F0b2luTG9hZGluZ1xyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KFsuLi5tb2xpc3RXaXRoTG9hZGluZ1Byb3BlcnR5XSk7XHJcbiAgICAgICAgcmV0dXJuIG1vSWRzO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcG9wdXBOb3RpZnkoXHJcbiAgICAgICAgbm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSxcclxuICAgICAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwsXHJcbiAgICAgICAgdWlPcHRpb25zOiBOb3RpZnlPcHRpb25zLFxyXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcG9wdXBTZXJ2aWNlLnBvcHVwTm90aWZ5KFxyXG4gICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLiRTYWZlQ29udGVudCxcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uSXRlbS5UaXRsZSxcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uSXRlbS5TdWJqZWN0LFxyXG4gICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLkltYWdlLFxyXG4gICAgICAgICAgICBtbyxcclxuICAgICAgICAgICAgdWlPcHRpb25zLFxyXG4gICAgICAgICAgICBvdGhlck9wdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVByb3BlcnRpZXMoXHJcbiAgICAgICAgbm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSxcclxuICAgICAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgICAgICBjb250ZW50OiBzdHJpbmdcclxuICAgICk6IE5vdGlmaWNhdGlvbkl0ZW0ge1xyXG4gICAgICAgIGlmICghbW8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbkl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbkl0ZW0sXHJcbiAgICAgICAgICAgIC4uLm1vLFxyXG4gICAgICAgICAgICBVaUFjdGlvbnM6ICFtby5VaUFjdGlvbnMgPyBbXSA6IEpTT04ucGFyc2UobW8uVWlBY3Rpb25zKSxcclxuICAgICAgICAgICAgQ3JlYXRpb25EYXRlOiBtby5JTWVzc2FnZS5DcmVhdGlvbkRhdGUsXHJcbiAgICAgICAgICAgIENyZWF0aW9uRGF0ZSRDYXB0aW9uOiBtby5JTWVzc2FnZS5DcmVhdGlvbkRhdGUkQ2FwdGlvbixcclxuICAgICAgICAgICAgQ3JlYXRvclVzZXI6IG1vLklNZXNzYWdlLkNyZWF0b3JVc2VyLFxyXG4gICAgICAgICAgICBDcmVhdG9yVXNlciRDYXB0aW9uOiBtby5JTWVzc2FnZS5DcmVhdG9yVXNlciRDYXB0aW9uLFxyXG4gICAgICAgICAgICBJY29uOiBgJHtCYXJzYUFwaS5Cdy5PcmlnaW4oKX0ke25vdGlmaWNhdGlvbkl0ZW0uSWNvbn1gLFxyXG4gICAgICAgICAgICAkU2FmZUNvbnRlbnQ6IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjb250ZW50KVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9pbkFwcE5vdGlmeShub3RpZmljYXRpb25JdGVtOiBOb3RpZmljYXRpb25JdGVtKTogdm9pZCB7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFuZyA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VsdHVyZTtcclxuICAgICAgICAgICAgY29uc3QgaXNSdGwgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmVzUnRsW2xhbmddO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ2dyYW50ZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlV29ya2VyTm90aWZpY2F0aW9uLnNob3dOb3RpZmljYXRpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNSdGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPOnBlcm1pc3Npb24gZGVuaWVkXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLmVycm9yKCdub3RpZmljYXRpb24gcGVybWlzc2lvbiBkZW5pZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIFVzZXJOb3RpZmljYXRpb25TZXR0aW5nIGV4dGVuZHMgTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICBEaXNhYmxlQ2FydGFibGVHcm91cHM6IE1vRm9yUmVwb3J0TW9kZWw7XHJcbiAgICBFbmFibGU6IGJvb2xlYW47XHJcbn1cclxuIl19
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQVFsRSxNQUFNLE9BQU8sbUJBQW1CO0lBUTVCLFlBQ2tELGFBQXVDLEVBQzdFLFdBQXVCLEVBQ3ZCLFVBQXlCLEVBQ3pCLGFBQStCLEVBQy9CLGFBQTJCLEVBQzNCLDBCQUE0RCxFQUM1RCxjQUE2QixFQUM3QixPQUFlO1FBUHVCLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUM3RSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQWtDO1FBQzVELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFmbkIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUFDakUsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDNUQsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxD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bUJBQW1CO2tCQUQvQixVQUFVOzswQkFVRixNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcclxuaW1wb3J0IHsgTWV0YW9iamVjdERhdGFNb2RlbCwgTW9Gb3JSZXBvcnRNb2RlbCwgTm90aWZpY2F0aW9uSXRlbSwgTm90aWZ5T3B0aW9ucyB9IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcclxuaW1wb3J0IHsgTk9USUZJQ0FUQUlPTl9QT1BVUF9TRVJWRVIgfSBmcm9tICcuLi9pbmpkZWN0aW9uLXRva2Vucyc7XHJcbmltcG9ydCB7IEJiYlRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi9waXBlcy9iYmItdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblBvcHVwU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlV29ya2VyTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLXN3LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnLi9wb3J0YWwuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZXRhb2JqZWN0RGF0YU1vZGVsW10+KFtdKTtcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblVucmVhZENvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvbkxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9ub3RpZmlhdGlvbkNvdW50TG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcGFnZUNvdW50ID0gMTtcclxuICAgIHBhZ2VJbmRleCA9IDA7XHJcbiAgICB1c2VyTm90aWZpY2F0aW9uU2V0dGluZ3M6IFVzZXJOb3RpZmljYXRpb25TZXR0aW5nO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdChOT1RJRklDQVRBSU9OX1BPUFVQX1NFUlZFUikgcHJvdGVjdGVkIF9wb3B1cFNlcnZpY2U6IE5vdGlmaWNhdGlvblBvcHVwU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9sb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2xvd2VyQ2FzZTogTG93ZXJDYXNlUGlwZSxcclxuICAgICAgICBwcml2YXRlIF9iYmJUcmFuc2xhdGU6IEJiYlRyYW5zbGF0ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbjogU2VydmljZVdvcmtlck5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZS51c2VyUG9ydGFsU2V0dGluZ3MkLnBpcGUoKS5zdWJzY3JpYmUoKHVzZXJQb3J0YWxTZXR0aW5ncykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25TZXR0aW5ncyA9IDxVc2VyTm90aWZpY2F0aW9uU2V0dGluZz51c2VyUG9ydGFsU2V0dGluZ3NbJ1VzZXJOb3RpZmljYXRpb25TZXR0aW5nJ107XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBnZXQgbm90aWZpY2F0aW9uQ291bnRMb2FkZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmlhdGlvbkNvdW50TG9hZGVkJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBub3RpZmljYXRpb25VbnJlYWRDb3VudCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uVW5yZWFkQ291bnQkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RpZmljYXRpb25zJCgpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25zJC5hc09ic2VydmFibGUoKS5waXBlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgbm90aWZpY2F0aW9uTG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIFNob3dOb3RpZmljYXRpb25SZWxhdGVkTW8oZTogeyB0YWc6IHN0cmluZzsgbW86IE1ldGFvYmplY3REYXRhTW9kZWw7IG5hbWE6IHN0cmluZyB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWUgPSB7XHJcbiAgICAgICAgICAgIC4uLmUsXHJcbiAgICAgICAgICAgIGFmdGVyUmVhZHk6IChlMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcclxuICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzOiBbZS50YWddLFxyXG4gICAgICAgICAgICAgICAgICAgIE1ldGhvZDogJ0JhcnNhX1NldFJlYWRSYWRpZkNhcnRhYmxlQnlUYWcnLFxyXG4gICAgICAgICAgICAgICAgICAgIEZhaWxGbjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2UuU2hvd0Zvcm0oZWUpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhbmRsZVRvcGljKGV2ZW50VG9waWMsIGNvbnRlbnQsIG93bmVyS2V5KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGV2ZW50VG9waWMgPT09ICdSZWZyZXNoTm90aWZpY2F0aW9uVW5yZWFkQ291bnQnKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFVucmVhZE5vdGlmaWNhdGlvbkNvdW50KCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0sMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGROb3RpZmljYXRpb24oXHJcbiAgICAgICAgbXNnOiBzdHJpbmcsXHJcbiAgICAgICAgdGl0bGU6IHN0cmluZyxcclxuICAgICAgICB0eXBlOiBzdHJpbmcsXHJcbiAgICAgICAgaW1hZ2U6IHN0cmluZyxcclxuICAgICAgICBtbyxcclxuICAgICAgICB1aU9wdGlvbnM6IE5vdGlmeU9wdGlvbnMsXHJcbiAgICAgICAgb3RoZXJPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKG90aGVyT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBNb0lkLCBUeXBlRGVmSWQgfSA9IG90aGVyT3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGxldCBuZXdOb3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJENhcHRpb246IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIElkOiBNb0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICRUeXBlRGVmSWQ6IFR5cGVEZWZJZCxcclxuICAgICAgICAgICAgICAgICAgICBUaXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgVW5yZWFkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIEljb246IGltYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgIEltYWdlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBDb250ZW50OiBtc2csXHJcbiAgICAgICAgICAgICAgICAgICAgVGFnOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBQcmlvcml0eTogMCxcclxuICAgICAgICAgICAgICAgICAgICBTdWJqZWN0OiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAkU2FmZUNvbnRlbnQ6IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtc2cpLFxyXG4gICAgICAgICAgICAgICAgICAgIENyZWF0aW9uRGF0ZTogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbkRhdGUkQ2FwdGlvbjogdGhpcy5fYmJiVHJhbnNsYXRlLnRyYW5zZm9ybSgnRGF0ZVJfVG9kYXknKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE1vID0gbW8gPyBCYXJzYUFwaS5FeHQuZGVjb2RlKG1vKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBuZXdOb3RpZmljYXRpb24gPSB0aGlzLl9wcmVwYXJlUHJvcGVydGllcyhuZXdOb3RpZmljYXRpb24sIHBhcnNlZE1vLCBtc2cpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRNbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbGlzdCA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbbmV3Tm90aWZpY2F0aW9uLCAuLi5tb2xpc3RdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbihuZXdOb3RpZmljYXRpb24sIHBhcnNlZE1vLCB1aU9wdGlvbnMsIG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZFVucmVhZE5vdGlmaWNhdGlvbkNvdW50KCk6IHZvaWQge1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Qb3J0YWxJZF0sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ0dldFNoZWxsYmFyTm90aWZpY2F0aW9uVW5yZWFkQ291bnRCeVBvcnRhbElkJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmlhdGlvbkNvdW50TG9hZGVkJC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uVW5yZWFkQ291bnQkLm5leHQoZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgU3VwcG9ydE5vdGlmaWNhdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBOb3RpZmljYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuX3NlcnZpY2VXb3JrZXJOb3RpZmljYXRpb24uaXNFbmFibGVkO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNob3dOb3RpZmljYXRpb24oXHJcbiAgICAgICAgbm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSxcclxuICAgICAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwsXHJcbiAgICAgICAgdWlPcHRpb25zOiBOb3RpZnlPcHRpb25zLFxyXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKG5vdGlmaWNhdGlvbkl0ZW0uVGl0bGUgJiYgbm90aWZpY2F0aW9uSXRlbS5UaXRsZS5zdGFydHNXaXRoKCdbJykgJiYgbm90aWZpY2F0aW9uSXRlbS5UaXRsZS5lbmRzV2l0aCgnXScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vdGlmaWNhdGlvbkl0ZW0uVGl0bGUgJiYgbm90aWZpY2F0aW9uSXRlbS5UaXRsZS5zdGFydHNXaXRoKCd7JykgJiYgbm90aWZpY2F0aW9uSXRlbS5UaXRsZS5lbmRzV2l0aCgnfScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1vICYmICFtby5TaG93UG9wdXApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuU3VwcG9ydE5vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKGBJbkFwcCBOb3RpZmljYXRpb24gaXMgbm90IHN1cHBvcnRlZC5gKTtcclxuICAgICAgICAgICAgdWlPcHRpb25zID0gdWlPcHRpb25zID8/IHt9O1xyXG4gICAgICAgICAgICB1aU9wdGlvbnMuTm90aWZpY2F0aW9uSXRlbSA9IG5vdGlmaWNhdGlvbkl0ZW07XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwTm90aWZ5KG5vdGlmaWNhdGlvbkl0ZW0sIG1vLCB1aU9wdGlvbnMsIG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faW5BcHBOb3RpZnkobm90aWZpY2F0aW9uSXRlbSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkxvYWRpbmcobG9hZGluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkxvYWRpbmckLm5leHQobG9hZGluZyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXROb3RpZmljYXRpb25Mb2FkaW5nKG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCBtb2xpc3RDdXJyID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICBjb25zdCBtb0lkcyA9IG1vbGlzdC5tYXAoKGMpID0+IGMuSWQpO1xyXG4gICAgICAgIGNvbnN0IG1vbGlzdFdpdGhMb2FkaW5nUHJvcGVydHkgPSBtb2xpc3RDdXJyLm1hcCgoYykgPT4gKHtcclxuICAgICAgICAgICAgLi4uYyxcclxuICAgICAgICAgICAgJE5vdGlmaWNhdG9pbkxvYWRpbmc6IG1vSWRzLmluZGV4T2YoYy5JZCkgIT09IC0xID8gbG9hZGluZyA6IGMuJE5vdGlmaWNhdG9pbkxvYWRpbmdcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4ubW9saXN0V2l0aExvYWRpbmdQcm9wZXJ0eV0pO1xyXG4gICAgICAgIHJldHVybiBtb0lkcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3BvcHVwTm90aWZ5KFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbkl0ZW06IE5vdGlmaWNhdGlvbkl0ZW0sXHJcbiAgICAgICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLFxyXG4gICAgICAgIHVpT3B0aW9uczogTm90aWZ5T3B0aW9ucyxcclxuICAgICAgICBvdGhlck9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT5cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BvcHVwU2VydmljZS5wb3B1cE5vdGlmeShcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uSXRlbS4kU2FmZUNvbnRlbnQsXHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0uVGl0bGUsXHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0uU3ViamVjdCxcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uSXRlbS5JbWFnZSxcclxuICAgICAgICAgICAgbW8sXHJcbiAgICAgICAgICAgIHVpT3B0aW9ucyxcclxuICAgICAgICAgICAgb3RoZXJPcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3ByZXBhcmVQcm9wZXJ0aWVzKFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbkl0ZW06IE5vdGlmaWNhdGlvbkl0ZW0sXHJcbiAgICAgICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICAgICAgY29udGVudDogc3RyaW5nXHJcbiAgICApOiBOb3RpZmljYXRpb25JdGVtIHtcclxuICAgICAgICBpZiAoIW1vKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub3RpZmljYXRpb25JdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5ub3RpZmljYXRpb25JdGVtLFxyXG4gICAgICAgICAgICAuLi5tbyxcclxuICAgICAgICAgICAgVWlBY3Rpb25zOiAhbW8uVWlBY3Rpb25zID8gW10gOiBKU09OLnBhcnNlKG1vLlVpQWN0aW9ucyksXHJcbiAgICAgICAgICAgIENyZWF0aW9uRGF0ZTogbW8uSU1lc3NhZ2UuQ3JlYXRpb25EYXRlLFxyXG4gICAgICAgICAgICBDcmVhdGlvbkRhdGUkQ2FwdGlvbjogbW8uSU1lc3NhZ2UuQ3JlYXRpb25EYXRlJENhcHRpb24sXHJcbiAgICAgICAgICAgIENyZWF0b3JVc2VyOiBtby5JTWVzc2FnZS5DcmVhdG9yVXNlcixcclxuICAgICAgICAgICAgQ3JlYXRvclVzZXIkQ2FwdGlvbjogbW8uSU1lc3NhZ2UuQ3JlYXRvclVzZXIkQ2FwdGlvbixcclxuICAgICAgICAgICAgSWNvbjogYCR7QmFyc2FBcGkuQncuT3JpZ2luKCl9JHtub3RpZmljYXRpb25JdGVtLkljb259YCxcclxuICAgICAgICAgICAgJFNhZmVDb250ZW50OiB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGVudClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaW5BcHBOb3RpZnkobm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzUnRsID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdWx0dXJlc1J0bFtsYW5nXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdncmFudGVkJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbi5zaG93Tm90aWZpY2F0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzUnRsLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhbmdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzpwZXJtaXNzaW9uIGRlbmllZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcignbm90aWZpY2F0aW9uIHBlcm1pc3Npb24gZGVuaWVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBVc2VyTm90aWZpY2F0aW9uU2V0dGluZyBleHRlbmRzIE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgRGlzYWJsZUNhcnRhYmxlR3JvdXBzOiBNb0ZvclJlcG9ydE1vZGVsO1xyXG4gICAgRW5hYmxlOiBib29sZWFuO1xyXG59XHJcbiJdfQ==
|