application-sidebar 1.0.41 → 2.0.0
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/app-details.mjs +1 -1
- package/esm2022/lib/application-sidebar.component.mjs +839 -88
- package/esm2022/lib/nav-menu-item.mjs +1 -1
- package/esm2022/lib/nav-menus/nav-menus.component.mjs +33 -9
- package/esm2022/lib/navmenu1.mjs +263 -216
- package/esm2022/lib/revised-navigation.mjs +2 -0
- package/esm2022/lib/services/application-sidebar.service.mjs +305 -8
- package/esm2022/lib/services/rest-api.services.mjs +39 -6
- package/esm2022/lib/sidebar-layout.local.mjs +86 -0
- package/esm2022/lib/translations/translations-en.mjs +57 -31
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/application-sidebar.mjs +3031 -135
- package/fesm2022/application-sidebar.mjs.map +1 -1
- package/lib/app-details.d.ts +2 -0
- package/lib/application-sidebar.component.d.ts +132 -1
- package/lib/nav-menu-item.d.ts +7 -0
- package/lib/navmenu1.d.ts +146 -77
- package/lib/revised-navigation.d.ts +83 -0
- package/lib/services/application-sidebar.service.d.ts +49 -1
- package/lib/services/rest-api.services.d.ts +12 -0
- package/lib/sidebar-layout.local.d.ts +19 -0
- package/lib/translations/translations-en.d.ts +53 -27
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -55,11 +55,255 @@ export class ApplicationSidebarService {
|
|
|
55
55
|
this.translate = translate;
|
|
56
56
|
this.urlContextService = urlContextService;
|
|
57
57
|
}
|
|
58
|
+
/** `true` when the sectioned (new) sidebar should render — default unless host sets `useLegacyNavigation`. */
|
|
59
|
+
isRevisedNavigationEnabled(appDetails = this.appDetails) {
|
|
60
|
+
return !this.isLegacyNavigationEnabled(appDetails);
|
|
61
|
+
}
|
|
62
|
+
/** `true` when the host requested the classic per-app sidebar via `revisedNavigation.useLegacyNavigation`. */
|
|
63
|
+
isLegacyNavigationEnabled(appDetails = this.appDetails) {
|
|
64
|
+
return !!(appDetails && appDetails.revisedNavigation && appDetails.revisedNavigation.useLegacyNavigation === true);
|
|
65
|
+
}
|
|
66
|
+
annotateMenusWithSource(menus = []) {
|
|
67
|
+
return menus.map((menu) => this.annotateMenuTree(menu, menu && menu.id ? menu.id : undefined, [], undefined));
|
|
68
|
+
}
|
|
69
|
+
buildRevisedNavigationState(appDetails, appMenus = [], globalSettingsMenus = [], communityLinks = []) {
|
|
70
|
+
const revisedConfig = appDetails && appDetails.revisedNavigation
|
|
71
|
+
? appDetails.revisedNavigation
|
|
72
|
+
: { useLegacyNavigation: false, sections: [] };
|
|
73
|
+
const annotatedApps = this.annotateMenusWithSource(this.cloneMenus(appMenus));
|
|
74
|
+
const annotatedGlobalSettings = this.annotateMenusWithSource(this.cloneMenus(globalSettingsMenus));
|
|
75
|
+
const annotatedCommunityLinks = this.annotateMenusWithSource(this.cloneMenus(communityLinks));
|
|
76
|
+
const sections = this.buildRevisedSections(annotatedApps, revisedConfig.sections || []);
|
|
77
|
+
return {
|
|
78
|
+
sections,
|
|
79
|
+
globalSettings: annotatedGlobalSettings,
|
|
80
|
+
communityLinks: annotatedCommunityLinks
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
findRevisedMenuById(menuList = [], menuId) {
|
|
84
|
+
for (const menu of menuList) {
|
|
85
|
+
if (!menu) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (menu.id === menuId || menu.sourceMenuId === menuId) {
|
|
89
|
+
return menu;
|
|
90
|
+
}
|
|
91
|
+
if (menu.children && menu.children.length > 0) {
|
|
92
|
+
const childMenu = this.findRevisedMenuById(menu.children, menuId);
|
|
93
|
+
if (childMenu) {
|
|
94
|
+
return childMenu;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
findFirstNavigableMenu(menuList = []) {
|
|
101
|
+
for (const menu of menuList) {
|
|
102
|
+
if (!menu) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (menu.type !== 'expandable' && (menu.route || menu.link || menu.defaulturl)) {
|
|
106
|
+
return menu;
|
|
107
|
+
}
|
|
108
|
+
if (menu.children && menu.children.length > 0) {
|
|
109
|
+
const childMenu = this.findFirstNavigableMenu(menu.children);
|
|
110
|
+
if (childMenu) {
|
|
111
|
+
return childMenu;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
buildRevisedIntelligenceGroups(appMenus, intelligenceGroups) {
|
|
118
|
+
return intelligenceGroups.map((group) => {
|
|
119
|
+
const items = this.collectIntelligenceItems(appMenus, group);
|
|
120
|
+
return {
|
|
121
|
+
id: group.id,
|
|
122
|
+
title: group.title,
|
|
123
|
+
items
|
|
124
|
+
};
|
|
125
|
+
}).filter((group) => group.items.length > 0);
|
|
126
|
+
}
|
|
127
|
+
buildRevisedSections(appMenus, sections) {
|
|
128
|
+
return (sections || []).map((section) => {
|
|
129
|
+
if (section.type === 'app-tabs') {
|
|
130
|
+
const apps = this.filterOptimizeApps(appMenus, section.appIds || []);
|
|
131
|
+
if (apps.length === 0) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
id: section.id,
|
|
136
|
+
title: section.title,
|
|
137
|
+
type: 'app-tabs',
|
|
138
|
+
iconSvg: section.iconSvg,
|
|
139
|
+
apps,
|
|
140
|
+
defaultAppId: section.defaultAppId
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const groups = this.buildRevisedIntelligenceGroups(appMenus, section.groups || []);
|
|
144
|
+
if (groups.length === 0) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
id: section.id,
|
|
149
|
+
title: section.title,
|
|
150
|
+
type: 'grouped-menus',
|
|
151
|
+
iconSvg: section.iconSvg,
|
|
152
|
+
groups
|
|
153
|
+
};
|
|
154
|
+
}).filter((section) => !!section);
|
|
155
|
+
}
|
|
156
|
+
collectIntelligenceItems(appMenus, group) {
|
|
157
|
+
const items = [];
|
|
158
|
+
const seenIds = new Set();
|
|
159
|
+
const menuIds = group.menuIds || [];
|
|
160
|
+
const routeIds = group.routeIds || [];
|
|
161
|
+
const configuredItems = group.items || [];
|
|
162
|
+
configuredItems.forEach((configuredItem) => {
|
|
163
|
+
const matchedItem = this.resolveConfiguredGroupItem(appMenus, configuredItem);
|
|
164
|
+
if (matchedItem && !seenIds.has(matchedItem.id)) {
|
|
165
|
+
seenIds.add(matchedItem.id);
|
|
166
|
+
items.push(matchedItem);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
menuIds.forEach((menuId) => {
|
|
170
|
+
const matchedMenu = this.findRevisedMenuById(appMenus, menuId);
|
|
171
|
+
if (matchedMenu && !seenIds.has(matchedMenu.id)) {
|
|
172
|
+
seenIds.add(matchedMenu.id);
|
|
173
|
+
items.push(this.cloneMenus([matchedMenu])[0]);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
if (routeIds.length > 0) {
|
|
177
|
+
this.walkMenus(appMenus, (menu) => {
|
|
178
|
+
if (menu.route && routeIds.indexOf(menu.route) > -1 && !seenIds.has(menu.id)) {
|
|
179
|
+
seenIds.add(menu.id);
|
|
180
|
+
items.push(this.cloneMenus([menu])[0]);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return items;
|
|
185
|
+
}
|
|
186
|
+
resolveConfiguredGroupItem(appMenus, configuredItem, depth = 0) {
|
|
187
|
+
const maxDepth = 8;
|
|
188
|
+
if (depth > maxDepth) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
const normalizedConfig = typeof configuredItem === 'string'
|
|
192
|
+
? { menuId: configuredItem }
|
|
193
|
+
: configuredItem;
|
|
194
|
+
const matchedMenu = this.findRevisedMenuById(appMenus, normalizedConfig.menuId);
|
|
195
|
+
if (!matchedMenu) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const clonedMenu = this.cloneMenus([matchedMenu])[0];
|
|
199
|
+
if (normalizedConfig.title) {
|
|
200
|
+
clonedMenu.name = normalizedConfig.title;
|
|
201
|
+
}
|
|
202
|
+
const nestedConfigs = normalizedConfig.children || [];
|
|
203
|
+
if (nestedConfigs.length > 0) {
|
|
204
|
+
const nested = [];
|
|
205
|
+
nestedConfigs.forEach((childCfg) => {
|
|
206
|
+
const resolved = this.resolveConfiguredGroupItem(appMenus, childCfg, depth + 1);
|
|
207
|
+
if (resolved) {
|
|
208
|
+
nested.push(resolved);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
clonedMenu.children = nested;
|
|
212
|
+
if (nested.length > 0) {
|
|
213
|
+
clonedMenu.type = 'expandable';
|
|
214
|
+
}
|
|
215
|
+
return clonedMenu;
|
|
216
|
+
}
|
|
217
|
+
const injectedChildIds = normalizedConfig.childMenuIds || [];
|
|
218
|
+
if (injectedChildIds.length > 0) {
|
|
219
|
+
const injected = [];
|
|
220
|
+
injectedChildIds.forEach((childId) => {
|
|
221
|
+
const child = this.findRevisedMenuById(appMenus, childId);
|
|
222
|
+
if (child) {
|
|
223
|
+
injected.push(this.cloneMenus([child])[0]);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
clonedMenu.children = injected;
|
|
227
|
+
if (injected.length > 0 && clonedMenu.type === 'leaf') {
|
|
228
|
+
clonedMenu.type = 'expandable';
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else if (clonedMenu.children && clonedMenu.children.length > 0) {
|
|
232
|
+
clonedMenu.children = this.filterConfiguredChildren(clonedMenu.children, normalizedConfig);
|
|
233
|
+
}
|
|
234
|
+
return clonedMenu;
|
|
235
|
+
}
|
|
236
|
+
filterConfiguredChildren(children, configuredItem) {
|
|
237
|
+
const includeIds = configuredItem.includeChildMenuIds || [];
|
|
238
|
+
const excludeIds = configuredItem.excludeChildMenuIds || [];
|
|
239
|
+
return (children || []).filter((child) => {
|
|
240
|
+
if (includeIds.length > 0 && includeIds.indexOf(child.id) === -1) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
if (excludeIds.length > 0 && excludeIds.indexOf(child.id) > -1) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
return true;
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
walkMenus(menuList, iterator) {
|
|
250
|
+
menuList.forEach((menu) => {
|
|
251
|
+
if (!menu) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
iterator(menu);
|
|
255
|
+
if (menu.children && menu.children.length > 0) {
|
|
256
|
+
this.walkMenus(menu.children, iterator);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
filterOptimizeApps(appMenus, optimizeAppIds = []) {
|
|
261
|
+
const appIdsToDisplay = optimizeAppIds || [];
|
|
262
|
+
if (!appIdsToDisplay || appIdsToDisplay.length === 0) {
|
|
263
|
+
return appMenus;
|
|
264
|
+
}
|
|
265
|
+
return appIdsToDisplay
|
|
266
|
+
.map((appId) => appMenus.find((menu) => menu.id === appId))
|
|
267
|
+
.filter((menu) => !!menu);
|
|
268
|
+
}
|
|
269
|
+
annotateMenuTree(menu, ownerAppId, sourcePath = [], sourceParentId) {
|
|
270
|
+
const annotatedMenu = menu;
|
|
271
|
+
if (!annotatedMenu) {
|
|
272
|
+
return annotatedMenu;
|
|
273
|
+
}
|
|
274
|
+
const currentPath = [...sourcePath, annotatedMenu.id];
|
|
275
|
+
annotatedMenu.ownerAppId = ownerAppId;
|
|
276
|
+
annotatedMenu.sourceMenuId = annotatedMenu.id;
|
|
277
|
+
annotatedMenu.sourceParentId = sourceParentId;
|
|
278
|
+
annotatedMenu.sourcePath = currentPath;
|
|
279
|
+
if (annotatedMenu.children && annotatedMenu.children.length > 0) {
|
|
280
|
+
annotatedMenu.children = annotatedMenu.children.map((child) => this.annotateMenuTree(child, ownerAppId, currentPath, annotatedMenu.id));
|
|
281
|
+
}
|
|
282
|
+
return annotatedMenu;
|
|
283
|
+
}
|
|
284
|
+
cloneMenus(menus) {
|
|
285
|
+
return JSON.parse(JSON.stringify(menus || []));
|
|
286
|
+
}
|
|
58
287
|
getTypeStatusConfigs() {
|
|
59
288
|
return this.typeStatusConfigs;
|
|
60
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Optional merge: replace current app’s `children` from `appDetails.listMenus`.
|
|
292
|
+
* Only runs when `listMenus` is a **non-empty** array (empty `[]` is ignored so we don’t wipe menus).
|
|
293
|
+
* Account-based visibility is applied separately and does **not** depend on this flag.
|
|
294
|
+
*/
|
|
295
|
+
hasNonEmptyListMenusMerge() {
|
|
296
|
+
const lm = this.appDetails?.listMenus;
|
|
297
|
+
if (lm == null) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
if (Array.isArray(lm)) {
|
|
301
|
+
return lm.length > 0;
|
|
302
|
+
}
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
61
305
|
constructChildMenus(menuItems) {
|
|
62
|
-
if (this.
|
|
306
|
+
if (this.hasNonEmptyListMenusMerge()) {
|
|
63
307
|
for (let item of menuItems) {
|
|
64
308
|
if (this.appDetails.appSet) {
|
|
65
309
|
if (item.id.includes(this.appDetails.applicationId)) {
|
|
@@ -77,16 +321,54 @@ export class ApplicationSidebarService {
|
|
|
77
321
|
}
|
|
78
322
|
return menuItems;
|
|
79
323
|
}
|
|
324
|
+
/** Top-level app id for “Sponsored Ads” in `navmenu` — only this app uses `all_accounts` visibility below. */
|
|
325
|
+
static SPONSORED_ADS_APP_ID = 'ads_amazon_advertising';
|
|
326
|
+
/**
|
|
327
|
+
* Sponsored Ads only — parity with AngularJS `NavMenuService.constructChildMenus` in intentwise-platform-web
|
|
328
|
+
* `src/app/layouts/leftsidenav/leftsidenav.service.js`:
|
|
329
|
+
* - No `currentAccount`: keep only children with `all_accounts === true` (e.g. All Accounts, Signup Overview).
|
|
330
|
+
* - With `currentAccount`: keep only children where `all_accounts` is not truthy (account-scoped items).
|
|
331
|
+
*
|
|
332
|
+
* Applied in `getMenuList` (after optional `constructChildMenus` merge) for `ads_amazon_advertising` only, independent of `listMenus`.
|
|
333
|
+
*/
|
|
334
|
+
filterChildrenByAllAccountsContext(children, hasAccount) {
|
|
335
|
+
if (!children || !children.length) {
|
|
336
|
+
return children || [];
|
|
337
|
+
}
|
|
338
|
+
return children.filter((row) => (hasAccount ? !row.all_accounts : !!row.all_accounts));
|
|
339
|
+
}
|
|
340
|
+
applyAllAccountsVisibilityToAppMenus(menus) {
|
|
341
|
+
if (!menus || !menus.length || !this.appDetails) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const hasAccount = !!this.appDetails.currentAccount;
|
|
345
|
+
for (const app of menus) {
|
|
346
|
+
if (!app || app.id !== ApplicationSidebarService.SPONSORED_ADS_APP_ID || app.id === 'app_global_settings' || app.id === 'app_intentwise_community') {
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
if (app.children && app.children.length) {
|
|
350
|
+
app.children = this.filterChildrenByAllAccountsContext(app.children, hasAccount);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/** Global Settings: no account → only Account Management (`global_account_mgmt`), same as AngularJS. */
|
|
355
|
+
trimGlobalSettingsChildrenWhenNoAccount(globalSettingsApp) {
|
|
356
|
+
if (this.appDetails?.currentAccount) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (!globalSettingsApp?.children?.length) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
globalSettingsApp.children = globalSettingsApp.children.filter((c) => c && c.id === 'global_account_mgmt');
|
|
363
|
+
}
|
|
80
364
|
getMenuList(appDetails, menulists) {
|
|
81
365
|
this.appDetails = appDetails;
|
|
82
366
|
this.MenuList = [];
|
|
83
|
-
let appendChildMenus;
|
|
367
|
+
let appendChildMenus = JSON.parse(JSON.stringify(menulists || []));
|
|
84
368
|
if (window.location.href.indexOf('herokuapp') > -1 || window.location.href.indexOf('localhost') > -1) {
|
|
85
|
-
appendChildMenus = this.constructChildMenus(
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
appendChildMenus = menulists;
|
|
369
|
+
appendChildMenus = this.constructChildMenus(appendChildMenus);
|
|
89
370
|
}
|
|
371
|
+
this.applyAllAccountsVisibilityToAppMenus(appendChildMenus);
|
|
90
372
|
appendChildMenus.forEach((menu) => {
|
|
91
373
|
menu.name = this.translate.translateName(menu.name);
|
|
92
374
|
menu.children && menu.children.forEach((childMenu) => {
|
|
@@ -189,10 +471,12 @@ export class ApplicationSidebarService {
|
|
|
189
471
|
getGlobalSettingsMenu(appDetails, menulists) {
|
|
190
472
|
this.appDetails = appDetails;
|
|
191
473
|
this.SettingsMenuList = [];
|
|
192
|
-
|
|
474
|
+
const clonedMenulists = JSON.parse(JSON.stringify(menulists || []));
|
|
475
|
+
let globalSettingMenus = clonedMenulists.filter(list => list.id == 'app_global_settings');
|
|
193
476
|
let GLOBAL_SETTING_LIST_SORTED = globalSettingMenus.sort((a, b) => (a.order > b.order) ? 1 : -1);
|
|
194
477
|
for (let appName of GLOBAL_SETTING_LIST_SORTED) {
|
|
195
478
|
if (appName.type == 'expandable') {
|
|
479
|
+
this.trimGlobalSettingsChildrenWhenNoAccount(appName);
|
|
196
480
|
let list = this.getApplicationMenuItem(appName);
|
|
197
481
|
if (list && list.children && list.children.length > 0) {
|
|
198
482
|
this.SettingsMenuList.push(list);
|
|
@@ -740,6 +1024,19 @@ export class ApplicationSidebarService {
|
|
|
740
1024
|
return true;
|
|
741
1025
|
}
|
|
742
1026
|
}
|
|
1027
|
+
/**
|
|
1028
|
+
* Nav JSON shape for legacy AngularJS admin screens: `link` is the ui-router state prefix (`triangular.*`)
|
|
1029
|
+
* and `route` is the hash URL (`#!/...`). Cross-app clicks (e.g. User Access from Walmart) must use `route`
|
|
1030
|
+
* plus current `appId`, not `origin/triangular....`.
|
|
1031
|
+
* Does not match test fixtures that swap route/link for triangular vs hash.
|
|
1032
|
+
*/
|
|
1033
|
+
shouldUseHashRouteForCrossAppHostNav(menu) {
|
|
1034
|
+
return !!(menu &&
|
|
1035
|
+
typeof menu.link === 'string' &&
|
|
1036
|
+
menu.link.indexOf('triangular.') === 0 &&
|
|
1037
|
+
typeof menu.route === 'string' &&
|
|
1038
|
+
menu.route.indexOf('#') >= 0);
|
|
1039
|
+
}
|
|
743
1040
|
getHostOriginAndNavigate(route, applicationId = undefined) {
|
|
744
1041
|
// if (window.location.href.indexOf(route) == -1) {
|
|
745
1042
|
this.activatedRoute.queryParams.subscribe(params => {
|
|
@@ -836,4 +1133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
836
1133
|
providedIn: 'root'
|
|
837
1134
|
}]
|
|
838
1135
|
}], ctorParameters: function () { return [{ type: i1.RestApiService }, { type: i2.ActivatedRoute }, { type: i3.TranslationService }, { type: i4.UrlContextService }]; } });
|
|
839
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUszRCxNQUFNLE9BQU8seUJBQXlCO0lBNkM1QjtJQUNBO0lBQ0E7SUFDQTtJQTlDVCxVQUFVLEdBQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFDLGdCQUFnQixFQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUMsd0JBQXdCLEVBQUMsZ0JBQWdCLEVBQUMsdUJBQXVCLEVBQUMsa0JBQWtCLEVBQUMseUJBQXlCLEVBQUMsZUFBZSxDQUFDLENBQUM7SUFDN3FCLFFBQVEsR0FBTSxFQUFFLENBQUM7SUFFakIsY0FBYyxHQUFLLEVBQUUsQ0FBQztJ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QUFDO1NBQzNDO0lBQ0YsQ0FBQzsySEE5ekJXLHlCQUF5QjsrSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4vcmVzdC1hcGkuc2VydmljZXMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVcmxDb250ZXh0U2VydmljZSB9IGZyb20gJy4vdXJsLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBFTl9MQUJFTFMgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLWVuJztcbmltcG9ydCB7IEpBX0xBQkVMUyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMtamEnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSB7XG5cblx0Y29uZGl0aW9ucyBcdFx0XHQ9IFsnb3JnX3VzZXJfY3RybCcsICd2aXNpYmlsaXR5X3JvbGVzJywgJ3Zpc2liaWxpdHlfcm9sZXNfbm90X2luJywgJ2FjY291bnRfaWRzJywgJ2N1c3RvbWVyX3R5cGVzX25vdF9pbicsJ2N1c3RvbWVyX3R5cGVzJywnb3JnYW5pemF0aW9uX2lkcycsICdvcmdhbml6YXRpb25faWRzX25vdF9pbicsICdhY2NvdW50X3R5cGUnLCAnYWNjb3VudF9pZHNfbm90X2luJywgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJywgJ29yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbicsICdhcHBfc3BhY2lmaWNfY29uZmlnX2NoZWNrJywgJ2NhbXBhaWduX3R5cGVzJywgJ2luY29udGV4dF9jYW1wYWlnbl90YXJnZXRpbmcnLCAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0JywgJ3N1YnNjcmlwdGlvbl90eXBlcycsICdzaXRlSWRzJywgJ3NpdGVOb3RJZHMnLCAnbm90X2FjY291bnRfdHlwZScsICdub3RfYWNjb3VudF9uYW1lJywgJ2Rpc2FibGVfcmVhZG9ubHlfb3JnJywgJ3VzZXJfZW1haWxzJywgJ2hpZGVfZm9yX3VzZXInLCAnYXBwX29yZ19zZXR0aW5nJywnYXBwX29yZ19zZXR0aW5nX25vdF9pbicsJ25nX2FwcF9zZXR0aW5nJywnbmdfYXBwX3NldHRpbmdfbm90X2luJywndGFyZ2V0dGluZ190eXBlcycsJ3RhcmdldHRpbmdfdHlwZXNfbm90X2luJywnaGlkZV9mb3JfdXNlciddO1xuXHRNZW51TGlzdCBcdFx0XHQ9IFtdO1xuXG5cdGFwcGxpY2F0aW9uSWRzIFx0XHQ9IFtdO1xuXHRlbmFibGVBbGxNZW51c0J5T3JnID0gWzMwNzgwXVxuXHRcblx0YXBwRGV0YWlsczpcdGFueTtcblx0aXNTdHJ1Y3R1cmVBcGlTdXBwb3J0Olx0YW55O1xuXHRpc01hbmFnZWRTZXJ2aWNlQWNjOiBib29sZWFuO1xuXHRTZXR0aW5nc01lbnVMaXN0OiBhbnlbXTtcblx0YXBwTmFtZXM6IHN0cmluZ1tdO1xuXHRwcml2YXRlIG1lbnVsaXN0czogYW55O1xuXHRjb250ZW50QXBwUm91dGVzXHRcdFx0PVsnY29udGVudC1pbnNpZ2h0JywnY29udGVudC1hbmFseXRpY3MnLCdjb250ZW50JywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncycsJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZSddXG5cdHNvdkFwcFJvdXRlc1x0XHRcdFx0PVsnaW5zaWdodHMnLCdzaGFyZS1vZi12b2ljZScsJ2JyYW5kcycsJ2tleXdvcmRzJywncHJvZHVjdHMnLCdkYWlseS10cmFja2VyJywnZGFpbHktdHJhY2tlci9icmFuZHMnLCdkYWlseS10cmFja2VyL2tleXdvcmRzJywnZGFpbHktdHJhY2tlci9wcm9kdWN0cycsJ3Jhdy1kYXRhJywnb3ZlcnZpZXcnLCdzb3YnLCdwcm9kdWN0LW1ldGEtZGF0YScsJ2JyYW5kLXRlcm1zLXNldHRpbmdzJywnbGFiZWxzLXNldHRpbmdzJywnc3ViLWJyYW5kcycsJ3N1Yi1icmFuZHMtbWFwcGluZycsJ3Nvdi1zZXR0aW5ncycgLCdjb250ZW50LXNldHRpbmdzJywnc2VhcmNoLXF1ZXJ5LXBlcmZvcm1hbmNlJ11cblx0c2VsbGVyQW5hbHl0aWNzQXBwUm91dGVzIFx0PVsnc2VsbGVyL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncycsJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZSddXG5cdHZlbmRvckFuYWx5dGljc0FwcFJvdXRlc1x0PVsndmVuZG9yL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncycsJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZSddXG5cdFxuXHR0eXBlU3RhdHVzQ29uZmlncyA9IHtcbiAgICAgICAgJ1NQT05TT1JFRF9LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9QUk9EVUNUX01BTlVBTF9UQVJHRVRJTkdfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX1BST0RVQ1RfQVVUT19UQVJHRVRJTkdfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkRfQVVUTycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkQnIDogdHJ1ZSxcbiAgICAgICAgJ1NQX0tFWVdPUkRTX0JJRF9HQVAnIDogZmFsc2UsXG4gICAgICAgICdTUF9QTEFDRU1FTlRfQklEJyA6IGZhbHNlLFxuICAgICAgICAnU1BfVEFSR0VUSU5HX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnU1BfTUFUQ0hfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTUF9TQl9LRVlXT1JEX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnSEVBRExJTkVfS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdTQl9LRVlXT1JEU19CSURfR0FQJyA6IGZhbHNlLFxuICAgICAgICAnU0JfTUFUQ0hfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTQl9TUF9LRVlXT1JEX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnTk9fS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdDQU1QQUlHTl9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ0FVVE9fVE9fTUFOVUFMX0FTSU5fUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdNQU5VQUxfVE9fQVVUT19BU0lOX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnQ09NUEVUSVRPUl9QUk9EVUNUJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfQlJBTkRfS0VZV09SRCc6IHRydWVcbiAgICB9XG5cblx0XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBSZXN0QXBpU2VydmljZTogUmVzdEFwaVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxcblx0XHRwcml2YXRlIHRyYW5zbGF0ZTpUcmFuc2xhdGlvblNlcnZpY2UsXG5cdFx0cHJpdmF0ZSB1cmxDb250ZXh0U2VydmljZTogVXJsQ29udGV4dFNlcnZpY2UpIHt9XG5cblx0Z2V0VHlwZVN0YXR1c0NvbmZpZ3MoKXtcblx0XHRyZXR1cm4gdGhpcy50eXBlU3RhdHVzQ29uZmlncztcblx0fVxuXHRjb25zdHJ1Y3RDaGlsZE1lbnVzKG1lbnVJdGVtcykge1xuICAgICAgICBpZiAodGhpcy5hcHBEZXRhaWxzLmxpc3RNZW51cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBtZW51SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcHBEZXRhaWxzLmFwcFNldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZC5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMuYXBwbGljYXRpb25JZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxpc3RNZW51SXRlbSBvZiB0aGlzLmFwcERldGFpbHMubGlzdE1lbnVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT0gbGlzdE1lbnVJdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4gPSBsaXN0TWVudUl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0uaWQgPT0gdGhpcy5hcHBEZXRhaWxzLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbXM7XG4gICAgfVxuXG5cdGdldE1lbnVMaXN0KGFwcERldGFpbHMsIG1lbnVsaXN0cykge1xuICAgICAgICB0aGlzLmFwcERldGFpbHMgPSBhcHBEZXRhaWxzO1xuICAgICAgICB0aGlzLk1lbnVMaXN0ID0gW107XG4gICAgICAgIGxldCBhcHBlbmRDaGlsZE1lbnVzO1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignaGVyb2t1YXBwJykgPiAtMSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCdsb2NhbGhvc3QnKSA+IC0xKSB7XG4gICAgICAgICAgICBhcHBlbmRDaGlsZE1lbnVzID0gdGhpcy5jb25zdHJ1Y3RDaGlsZE1lbnVzKG1lbnVsaXN0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcHBlbmRDaGlsZE1lbnVzID0gbWVudWxpc3RzO1xuICAgICAgICB9XG4gICAgICAgIGFwcGVuZENoaWxkTWVudXMuZm9yRWFjaCgobWVudSkgPT4ge1xuICAgICAgICAgICAgbWVudS5uYW1lID0gdGhpcy50cmFuc2xhdGUudHJhbnNsYXRlTmFtZShtZW51Lm5hbWUpO1xuICAgICAgICAgICAgbWVudS5jaGlsZHJlbiAmJiBtZW51LmNoaWxkcmVuLmZvckVhY2goKGNoaWxkTWVudSkgPT4ge1xuICAgICAgICAgICAgICAgIGNoaWxkTWVudS5uYW1lID0gdGhpcy50cmFuc2xhdGUudHJhbnNsYXRlTmFtZShjaGlsZE1lbnUubmFtZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRNZW51LmNoaWxkcmVuICYmIGNoaWxkTWVudS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lID0gdGhpcy50cmFuc2xhdGUudHJhbnNsYXRlTmFtZShjaGlsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tZW51bGlzdHMgPSBhcHBlbmRDaGlsZE1lbnVzLmZpbHRlcihsaXN0ID0+IGxpc3QuaWQgIT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyAmJiBsaXN0LmlkICE9PSAnYXBwX2ludGVudHdpc2VfY29tbXVuaXR5Jyk7XG4gICAgICAgIGxldCBzb3J0ZWRNZW51bGlzdHMgPSB0aGlzLm1lbnVsaXN0cy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciA+IGIub3JkZXIpID8gMSA6IC0xKTtcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbklkcyA9IHNvcnRlZE1lbnVsaXN0cy5tYXAoKGFwcElkKSA9PiBhcHBJZC5pZCk7XG4gICAgICAgIHRoaXMuYXBwTmFtZXMgPSB0aGlzLmFwcGxpY2F0aW9uSWRzO1xuICAgICAgICAvLyBpZigodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQgPT09IDEwMzkwIHx8XG4gICAgICAgIC8vICAgICB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCA9PT0gMTA1MzApICYmXG4gICAgICAgIC8vICAgICB0aGlzLmFwcERldGFpbHMudXNlckluZm8uZW1haWwgPT0gXCJzcmVlbmF0aEBpbnRlbnR3aXNlLmNvbVwiKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmFwcE5hbWVzID0gdGhpcy5hcHBsaWNhdGlvbklkcy5maWx0ZXIoKG5hbWUpID0+IHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gKG5hbWUgIT0gJ2Fkc19hbWF6b25fY29udGVudF9zaGFyZV9vZl92b2ljZScgJiYgbmFtZSAhPSAnYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzJyk7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgICBmb3IgKGxldCBhcHBOYW1lIG9mIHNvcnRlZE1lbnVsaXN0cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBwTmFtZXMuaW5kZXhPZihhcHBOYW1lLmlkKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5jaGlsZHJlbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcE5hbWUuaWQgPT0gJ2Fkc19hbWF6b25fZHNwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuY2hpbGRyZW4gJiYgbGlzdC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgbGlzdC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01hbmFnZWRTZXJ2aWNlQWNjICYmIGNoaWxkLmlkID09IFwiYW1zX2RzcF9zZXR0aW5nc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihzX2NoaWxkID0+IHNfY2hpbGQuaWQgIT09ICdhbXNfZHNwX3J1bGVzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcHBOYW1lLnR5cGUgIT0gJ2V4cGFuZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxpc3QgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuTWVudUxpc3QucHVzaChsaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuTWVudUxpc3Q7XG4gICAgfVxuXG5cdGdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY3VycmVudE1lbnVJdGVtOmFueSk6IGFueSB7XG5cdFx0bGV0IG1lbnVJdGVtID0ge1xuXHRcdFx0Y2hpbGRyZW4gOiBbXVxuXHRcdH07XG5cblx0XHRpZihjdXJyZW50TWVudUl0ZW0udHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0bGV0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0Y29uc3QgaGFzQ29uZGl0aW9uc3RvQ2hlY2sgPSB0aGlzLmNvbmRpdGlvbnMuc29tZShjb25kaXRpb24gPT4gYWxsS2V5cy5pbmNsdWRlcyhjb25kaXRpb24pKVxuXHRcdFx0aWYoaGFzQ29uZGl0aW9uc3RvQ2hlY2spe1xuXHRcdFx0XHRsZXQgaXNNZW51QWxsb3dlZCA9IHRoaXMuY2hlY2tBbGxDb25kaXRpb25zKGN1cnJlbnRNZW51SXRlbSwgdGhpcy5jb25kaXRpb25zLCBhbGxLZXlzKTtcblx0XHRcdFx0aWYoaXNNZW51QWxsb3dlZCl7XG5cdFx0XHRcdFx0bWVudUl0ZW0gPSBjdXJyZW50TWVudUl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygncmV0dXJuIGVtcHR5Jyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRtZW51SXRlbSA9IGN1cnJlbnRNZW51SXRlbTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdGxldCBhbGxLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKTtcblx0XHRcdGNvbnN0IGhhc0NvbmRpdGlvbnN0b0NoZWNrID0gdGhpcy5jb25kaXRpb25zLnNvbWUoY29uZGl0aW9uID0+IGFsbEtleXMuaW5jbHVkZXMoY29uZGl0aW9uKSlcblx0XHRcdGlmKCFoYXNDb25kaXRpb25zdG9DaGVjayB8fCAoaGFzQ29uZGl0aW9uc3RvQ2hlY2sgJiYgdGhpcy5jaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtLCB0aGlzLmNvbmRpdGlvbnMsIGFsbEtleXMpKSkge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pLmZvckVhY2goKGtleSk9PnsgXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50TWVudUl0ZW1ba2V5XSAhPSBcIm9iamVjdFwiICkge1xuXHRcdFx0XHRcdFx0bWVudUl0ZW1ba2V5XSA9IGN1cnJlbnRNZW51SXRlbVtrZXldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0bWVudUl0ZW0uY2hpbGRyZW4gPSBbXTtcblx0XHRcdFx0Zm9yKGxldCBjaGlsZCBvZiBjdXJyZW50TWVudUl0ZW0uY2hpbGRyZW4pe1xuXHRcdFx0XHRcdGxldCBuYXZfbWVudSA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShjaGlsZCk7XG5cdFx0XHRcdFx0aWYobmF2X21lbnUgIT0gbnVsbCl7IFxuXHRcdFx0XHRcdFx0aWYobmF2X21lbnUuY2hpbGRyZW4gIT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHRcdFx0aWYobmF2X21lbnUuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0bWVudUl0ZW0uY2hpbGRyZW4ucHVzaChuYXZfbWVudSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuLnB1c2gobmF2X21lbnUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cdFx0XHRcblx0XHR9XG5cdFx0cmV0dXJuIG1lbnVJdGVtO1xuXHR9XG5cblx0Z2V0R2xvYmFsU2V0dGluZ3NNZW51KGFwcERldGFpbHMgOiBhbnksIG1lbnVsaXN0cykge1xuXHRcdHRoaXMuYXBwRGV0YWlscyA9IGFwcERldGFpbHM7XHRcblx0XHR0aGlzLlNldHRpbmdzTWVudUxpc3QgPSBbXTtcblx0XHRsZXQgZ2xvYmFsU2V0dGluZ01lbnVzID0gbWVudWxpc3RzLmZpbHRlcihsaXN0PT4gbGlzdC5pZCA9PSAnYXBwX2dsb2JhbF9zZXR0aW5ncycpXG5cdFx0bGV0IEdMT0JBTF9TRVRUSU5HX0xJU1RfU09SVEVEID0gZ2xvYmFsU2V0dGluZ01lbnVzLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID4gYi5vcmRlcikgPyAxIDogLTEpO1xuXHRcdGZvciAobGV0IGFwcE5hbWUgb2YgR0xPQkFMX1NFVFRJTkdfTElTVF9TT1JURUQpIHtcblx0XHRcdGlmKGFwcE5hbWUudHlwZSA9PSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAmJiBsaXN0LmNoaWxkcmVuICYmIGxpc3QuY2hpbGRyZW4ubGVuZ3RoID4gMCl7XG5cdFx0XHRcdFx0dGhpcy5TZXR0aW5nc01lbnVMaXN0LnB1c2gobGlzdCk7XG5cdFx0XHRcdH1cdFx0XHRcdFxuXHRcdFx0fWVsc2UgaWYoYXBwTmFtZS50eXBlICE9ICdleHBhbmRhYmxlJyl7XG5cdFx0XHRcdGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuXHRcdFx0XHRpZihsaXN0ICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0dGhpcy5TZXR0aW5nc01lbnVMaXN0LnB1c2gobGlzdClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cdFx0XG5cdFx0cmV0dXJuIHRoaXMuU2V0dGluZ3NNZW51TGlzdDtcblx0fVxuXG5cdGNoZWNrQWxsQ29uZGl0aW9ucyhjdXJyZW50TWVudUl0ZW06IGFueSwgY29uZGl0aW9ucywgYWxsS2V5czogc3RyaW5nW10pOiBhbnkge1xuXHRcdC8vIEluaXRpYWxpemUgYXMgdHJ1ZSAtIGFsbCBjb25kaXRpb25zIG11c3QgcGFzcyAoQU5EIGxvZ2ljKVxuXHRcdGxldCBpbmNsdWRlTWVudSA9IHRydWU7XG5cdFx0aWYoKCF0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgY3VycmVudE1lbnVJdGVtLmlkID09IFwiYWRzX292ZXJ2aWV3XCIgJiYgXG5cdFx0XHQhdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb25bJ25vQWN0aXZlQWNjb3VudHMnXSkpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2UgaWYoY3VycmVudE1lbnVJdGVtLmlkID09PSBcImFkc19zaWdudXBfb3ZlcnZpZXdcIikge1xuXHRcdFx0aWYoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvblsnbm9BY3RpdmVBY2NvdW50cyddKXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvcihsZXQgY29uZCBvZiBjb25kaXRpb25zKXtcblx0XHRcdGlmKGN1cnJlbnRNZW51SXRlbVtjb25kXSAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRsZXQgY29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XG5cdFx0XHRcdHN3aXRjaChjb25kKXtcblx0XHRcdFx0XHRjYXNlICd2aXNpYmlsaXR5X3JvbGVzJzogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JSb2xlcyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ3Zpc2liaWxpdHlfcm9sZXNfbm90X2luJzogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3J2aXNpYmlsaXR5Um9sZXNOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ2Rpc2FibGVfcmVhZG9ubHlfb3JnJzp7XG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX2lkcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24gJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdfdXNlcl9jdHJsJzp7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yT3JnV2l0aFVzZXJSb2xlKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnYWNjb3VudF9pZHMnIDogeyBcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdhY2NvdW50X2lkc19ub3RfaW4nIDoge1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZEFjY291bnRJZHNOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5hbXNBY2NvdW50SWQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHRjYXNlICdub3RfYWNjb3VudF9uYW1lJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCl7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JOb3RBY2NOYW1lKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfdHlwZScgOiB7IFxuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JBY2NUeXBlKGN1cnJlbnRNZW51SXRlbSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yT3JnU2V0dGluZ3MoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fWNhc2UgJ2FwcF9vcmdfc2V0dGluZycgOiB7IFxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0Zvck9yZ0FwcFNldHRpbmdzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdhcHBfb3JnX3NldHRpbmdfbm90X2luJzoge1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0Zvck9yZ0FwcFNldHRpbmdzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdhbml6YXRpb25fc2V0dGluZ19ub3RfaW4nIDogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdC8vIFRPRE8gOiBUaGlzIGlzIHRlbXBvcmVyeSBzb2x1dGlvbiBmb3IgQW1jIHNwYWNpZmljIG9yZyBzZXR0aW5nIGNoZWNrLlxuXHRcdFx0XHRcdGNhc2UgJ2FwcF9zcGFjaWZpY19jb25maWdfY2hlY2snOiB7XG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmFwcFNwZWNpZmljQ29uZmlnKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ3NpdGVJZHMnIDogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTaXRlSWRzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAnc2l0ZU5vdElkcycgOiB7IFxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclNpdGVOb3RJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdzdWJzY3JpcHRpb25fdHlwZXMnIDogeyBcblx0XHRcdFx0XHRcdGlmKGN1cnJlbnRNZW51SXRlbVsnYWNjb3VudF90eXBlJ10gPT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yU3Vic2NyaXB0aW9ucyhjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAnY2FtcGFpZ25fdHlwZXMnIDoge1xuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0KXtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvckNhbXBhaWduVHlwZShjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICd0YXJnZXR0aW5nX3R5cGVzJzoge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yVGFyZ2V0dGluZ1R5cGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAndGFyZ2V0dGluZ190eXBlc19ub3RfaW4nOiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JOb3RUYXJnZXR0aW5nVHlwZShjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpe1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmcoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0JyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0KXtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvckNhbXBhaWduVGFyZ2V0aW5nV2FsbWFydChjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICd1c2VyX2VtYWlscycgOiB7IFxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5hdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdoaWRlX2Zvcl91c2VyJyA6IHtcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JIaWRkZW5Vc2VyUm9sZShjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnbmdfYXBwX3NldHRpbmcnOiB7XG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrQ29udGV4dFNldHRpbmdzKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICduZ19hcHBfc2V0dGluZ19ub3RfaW4nOiB7XG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrQ29udGV4dFNldHRpbmdOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2N1c3RvbWVyX3R5cGVzJzoge1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0N1c3RvbWVyVHlwZUluKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnY3VzdG9tZXJfdHlwZXNfbm90X2luJzoge1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0N1c3RvbWVyVHlwZU5vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGVmYXVsdDogeyBcblx0XHRcdFx0XHQvLyAvL3N0YXRlbWVudHM7IFxuXHRcdFx0XHRcdC8vIGJyZWFrOyBcblx0XHRcdFx0XHQvLyB9IFxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyBJZiBhbnkgY29uZGl0aW9uIGZhaWxzLCB0aGUgbWVudSBzaG91bGQgYmUgaGlkZGVuIChBTkQgbG9naWMpXG5cdFx0XHRcdGlmKCFjb25kaXRpb25SZXN1bHQpe1xuXHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0YnJlYWs7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBjb25kaXRpb25zXG5cdFx0XHRcdH1cdFx0XHRcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0Ly8gSWYgY29uZGl0aW9uIGlzIHVuZGVmaW5lZCwgaXQgZG9lc24ndCBhZmZlY3QgdGhlIHJlc3VsdCAobmV1dHJhbClcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5jbHVkZU1lbnU7XG5cdH1cblxuXHRjaGVja0Zvck5vdEFjY05hbWUocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm5hbWUpID09IC0xKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yQ2FtcGFpZ25UeXBlKHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLmRhdGFUeXBlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0ZvclRhcmdldHRpbmdUeXBlKHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0dmFyIGFsbG93ID0gZmFsc2U7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLnRhcmdldGluZ1R5cGUpID49IDApe1xuXHRcdFx0YWxsb3cgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblx0Y2hlY2tGb3JOb3RUYXJnZXR0aW5nVHlwZShwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdHZhciBhbGxvdyA9IHRydWU7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLnRhcmdldGluZ1R5cGUpID49IDApe1xuXHRcdFx0YWxsb3cgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGFsbG93O1xuXHR9XG5cdGNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmcocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHRbMF0uY2FtcGFpZ25UYXJnZXRpbmcpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblRhcmdldGluZ1dhbG1hcnQocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0d2FsbWFydFswXS5jYW1wYWlnblRhcmdldGluZykgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRhdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMgJiYgcG9zc2libGVWYWx1ZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLmVtYWlsKTtcblx0fVxuXG5cdGNoZWNrRm9yU3Vic2NyaXB0aW9ucyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbntcblx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pe1xuXHRcdFx0aWYoKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3MudHlwZSkgPj0gMCkgJiYgc2V0dGluZ3Muc3RhdHVzID09IFwiQUNUSVZFXCIpe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y2hlY2tGb3JTaXRlSWRzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8gJiYgdGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCAmJiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhOdW1iZXIodGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCkpKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0ZvclNpdGVOb3RJZHMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mbyAmJiB0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkICYmIHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKE51bWJlcih0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkKSkpe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVE9ETyA6IFRoaXMgaXMgdGVtcG9yZXJ5IHNvbHV0aW9uIGZvciBBbWMgc3BhY2lmaWMgb3JnIHNldHRpbmcgY2hlY2suXG5cdGFwcFNwZWNpZmljQ29uZmlnKHBvc3NpYmxlVmFsdWVzOiBBcnJheTxTdHJpbmc+KTogYm9vbGVhbiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJvbGUgPSBbJ1NVUEVSX0FETUlOJywgJ1NVUEVSX0FETUlOX1JFQURfT05MWSddO1xuXHRcdFx0Ly8gQ2hlY2sgcm9sZSBjb25kaXRpb24gYW5kIG9yZyBzZXR0aW5nIGlzIGF2YWlsYWJsaXR5XG5cdFx0XHRpZiAoIXJvbGUuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpICYmIHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncyAmJiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgYWxsb3cgPSBmYWxzZTtcblxuXHRcdFx0XHQvLyBUbyB2ZXJpZnkgaWYgdGhlIG9yZyBzZXR0aW5nIGlzIGF2YWlsYWJsZVxuXHRcdFx0XHRcblx0XHRcdFx0bGV0IGtleW1hdGNoZWQgPSBwb3NzaWJsZVZhbHVlcy5zb21lKChrZXk6IFN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MuZmluZEluZGV4KGZ1bmN0aW9uIChzZXR0aW5nOiBhbnkpIHsgcmV0dXJuIGtleSA9PSBzZXR0aW5nLnNldHRpbmc7IH0pID4gLTFcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gVG8gdmVyaWZ5ICBpZiB0aGUgb3JnIHNldHRpbmcgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkL0FjdGl2ZVxuXG5cdFx0XHRcdGxldCBBbGxBY3RpdmUgPSBwb3NzaWJsZVZhbHVlcy5ldmVyeSgoa2V5OiBTdHJpbmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmZpbmRJbmRleChmdW5jdGlvbiAoc2V0dGluZzogYW55KSB7IHJldHVybiBrZXkgPT0gc2V0dGluZy5zZXR0aW5nICYmIHNldHRpbmcudmFsdWUgPT0gXCJBQ1RJVkVcIjsgfSkgPiAtMVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyBJZiBObyBvcmcgc2V0dGluZyBpcyBhdmFpbGFibGUgT1Igc2V0dGluZyBpcyBhdmFpbGFibGUgYnV0IHdpdGggYWN0aXZlIHN0YXR1c1xuXHRcdFx0XHRpZiAoIWtleW1hdGNoZWQgfHwgQWxsQWN0aXZlKSB7XG5cdFx0XHRcdFx0YWxsb3cgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhbGxvdztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yT3JnU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHRyeXtcblx0XHRcdHZhciBhbGxvdyA9IGZhbHNlO1xuXHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncyAmJiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRhbGxvdyA9IHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncy5zb21lKGZ1bmN0aW9uKG9yZ1NldHRpbmcpe1xuXHRcdFx0XHRcdGlmKCFvcmdTZXR0aW5nLnZhbHVlIHx8IG9yZ1NldHRpbmcudmFsdWUgJiYgb3JnU2V0dGluZy52YWx1ZSA9PSAnQUNUSVZFJykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKG9yZ1NldHRpbmcuc2V0dGluZyk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSlcblx0XHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdFx0fVxuXHRcdH1jYXRjaChlcnJvcil7XG5cdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yT3JnQXBwU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyl7XG5cdFx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyl7XG5cdFx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3MudHlwZSkgPj0gMCAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gJ0FDVElWRScpe1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fWVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdGNoZWNrRm9yT3JnQXBwU2V0dGluZ3NOb3RJbihwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0dHJ5e1xuXHRcdFx0dmFyIGFsbG93ID0gdHJ1ZTtcblx0XHRcdGlmICh0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3MgJiYgdGhpcy5hcHBEZXRhaWxzLm9yZ0FwcFNldHRpbmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YWxsb3cgPSB0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3Muc29tZSgob3JnQXBwU2V0dGluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAoIXBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKG9yZ0FwcFNldHRpbmcudHlwZSkgfHwgXG5cdFx0XHRcdFx0XHRcdChwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhvcmdBcHBTZXR0aW5nLnR5cGUpICYmIFxuXHRcdFx0XHRcdFx0XHRvcmdBcHBTZXR0aW5nLnN0YXR1cyAmJiBvcmdBcHBTZXR0aW5nLnN0YXR1cyA9PSAnSU5fQUNUSVZFJykpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gYWxsb3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYWxsb3c7XG5cdFx0XHR9XG5cdFx0fWNhdGNoKGVycm9yKXtcblx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpXG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tDdXN0b21lclR5cGVJbihwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLmN1c3RvbWVyVHlwZSAmJiBcblx0XHRcdHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLmN1c3RvbWVyVHlwZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0Y2hlY2tDdXN0b21lclR5cGVOb3RJbihwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5jdXN0b21lclR5cGUgfHwgKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLmN1c3RvbWVyVHlwZSAmJiBcblx0XHRcdCFwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5jdXN0b21lclR5cGUpKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0Zvck5vdE9yZ1NldHRpbmdzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRsZXQgYWxsb3cgPSB0cnVlO1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncyAmJiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MubGVuZ3RoID4gMCl7XG5cdFx0XHQvLyBDaGVjayBpZiBhbnkgb2YgdGhlIHNldHRpbmdzIGluIHBvc3NpYmxlVmFsdWVzIGFyZSBwcmVzZW50IGFuZCBhY3RpdmVcblx0XHRcdGNvbnN0IGhhc0FjdGl2ZVJlc3RyaWN0ZWRTZXR0aW5nID0gdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLnNvbWUoZnVuY3Rpb24ob3JnU2V0dGluZyl7XG5cdFx0XHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhvcmdTZXR0aW5nLnNldHRpbmcpICYmIFxuXHRcdFx0XHRcdCghb3JnU2V0dGluZy52YWx1ZSB8fCBvcmdTZXR0aW5nLnZhbHVlID09ICdBQ1RJVkUnKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgYW55IHJlc3RyaWN0ZWQgc2V0dGluZyBpcyBhY3RpdmUsIGhpZGUgdGhlIG1lbnUgKHJldHVybiBmYWxzZSlcblx0XHRcdC8vIElmIG5vIHJlc3RyaWN0ZWQgc2V0dGluZ3MgYXJlIGFjdGl2ZSwgc2hvdyB0aGUgbWVudSAocmV0dXJuIHRydWUpXG5cdFx0XHRyZXR1cm4gIWhhc0FjdGl2ZVJlc3RyaWN0ZWRTZXR0aW5nO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdH1cblx0fVxuXHRcblx0Y2hlY2tDb250ZXh0U2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHZhciBhbGxvdyA9IGZhbHNlO1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5uZ09yZ1NldHRpbmdzKXtcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgcG9zc2libGVWYWx1ZXMpIHtcblx0XHRcdFx0YWxsb3cgPSB0aGlzLmFwcERldGFpbHMubmdPcmdTZXR0aW5nc1tpdGVtXTtcblx0XHRcdFx0YWxsb3cgPSBhbGxvdyA9PSB1bmRlZmluZWQgPyB0cnVlIDogYWxsb3c7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhbGxvdztcblx0fVxuXG5cdGNoZWNrQ29udGV4dFNldHRpbmdOb3RJbihwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0dmFyIGFsbG93ID0gdHJ1ZTtcblx0XHRpZih0aGlzLmFwcERldGFpbHMubmdPcmdTZXR0aW5ncyl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdGFsbG93ID0gIXRoaXMuYXBwRGV0YWlscy5uZ09yZ1NldHRpbmdzW2l0ZW1dO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblxuXHRjaGVja0ZvckFjY1R5cGUobWVudUl0ZW06IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKG1lbnVJdGVtWydhY2NvdW50X3R5cGUnXS5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0aWYobWVudUl0ZW1bJ3N1YnNjcmlwdGlvbl90eXBlcyddKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zKG1lbnVJdGVtWydzdWJzY3JpcHRpb25fdHlwZXMnXSlcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZElkcyhwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzWzBdLmlkKXtcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgcG9zc2libGVWYWx1ZXMpIHtcblx0XHRcdFx0aWYoIGl0ZW0uaWQgPT09IGlkICl7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaCgoa2V5KT0+eyBcblx0XHRcdFx0XHRcdGlmIChrZXkgIT0gJ2lkJykge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50TWVudUl0ZW1ba2V5XSA9IGl0ZW1ba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdMaW5rIGNoYW5nZWQgdG8gJytjdXJyZW50TWVudUl0ZW0ubGluaysnIGFuZCByb3V0ZSBjaGFuZ2VkIHRvICcrY3VycmVudE1lbnVJdGVtLnJvdXRlKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZihpZCkgPj0gMCl7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjaGVja0Zvck9yZ1dpdGhVc2VyUm9sZShwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGxldCBhbGxvdyA9IHRydWU7XG5cdFx0aWYgKHBvc3NpYmxlVmFsdWVzICYmIHBvc3NpYmxlVmFsdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdHZhciBmbGFnQXJyYXkgPSBbXTtcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgcG9zc2libGVWYWx1ZXMpIHtcblx0XHRcdFx0dmFyIGFsbEtleXMgPSBPYmplY3Qua2V5cyhpdGVtKTtcblx0XHRcdFx0dmFyIGZsYWcgPSB0aGlzLmNoZWNrQWxsQ29uZGl0aW9ucyhpdGVtLCBhbGxLZXlzLCBhbGxLZXlzKVxuXHRcdFx0XHRmbGFnQXJyYXkucHVzaChmbGFnKTtcblx0XHRcdH1cblx0XHRcdGFsbG93ID0gZmxhZ0FycmF5LmluY2x1ZGVzKHRydWUpID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XG5cdFx0fVxuXHRcdHJldHVybiBhbGxvdztcblx0fVxuXHRjaGVja0ZvclNwZWNpZmllZElkc05vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkgLCBjdXJyZW50TWVudUl0ZW06YW55ICwgaWQ6bnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoaWQpIDwgMDtcblx0fVxuXG5cdGNoZWNrRm9yU3BlY2lmaWVkQWNjb3VudElkc05vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkgLCBjdXJyZW50TWVudUl0ZW06YW55ICwgaWQ6bnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoaWQpIDwgMDtcblx0fVxuXG5cdGNoZWNrRm9yUm9sZXMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzICYmIHBvc3NpYmxlVmFsdWVzLmxlbmd0aCA+IDApe1xuXHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgPj0gMCl7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzICYmIHBvc3NpYmxlVmFsdWVzLmxlbmd0aCA+IDApe1xuXHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgPj0gMCl7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjaGVja0ZvckhpZGRlblVzZXJSb2xlKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKXtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDAgJiYgdGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLmlzSGlkZGVuVXNlcil7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBkaXNhYmxlRm9yT3Jnd2l0aFJlYWRPbmx5KHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlID09PSAnUkVBRF9PTkxZJyAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKHJvdXRlICwgYXBwbGljYXRpb25JZD11bmRlZmluZWQpIHtcblx0XHQvLyBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihyb3V0ZSkgPT0gLTEpIHtcblx0XHRcdHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG5cdFx0XHRcdGlmIChhcHBsaWNhdGlvbklkKSB7XG5cdFx0XHRcdFx0cGFyYW1zID0gey4uLnBhcmFtcywgLi4uYXBwbGljYXRpb25JZH07XHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyb3V0ZS5pbmRleE9mKCc/JykgPiAtMSAmJiByb3V0ZS5pbmRleE9mKCd1c2VybWdtdCcpID4gLTEpe1xuXHRcdFx0XHRcdHJvdXRlID0gcm91dGUuc3BsaXQoJz8nKVswXTtcblx0XHRcdFx0XHRsZXQgbmV3UVBhcmFtID0geyB1c2VybWdtdCA6IHRydWV9XG5cdFx0XHRcdFx0cGFyYW1zID0geyAuLi5wYXJhbXMgLCAuLi5uZXdRUGFyYW19XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHVybFRvTmF2aWdhdGUgPSB0aGlzLnVybENvbnRleHRTZXJ2aWNlLnByZXBhcmVVcmxXaXRoUXVlcnlQYXJhbXMocm91dGUsIHBhcmFtcyk7XG5cdFx0XHRcdHVybFRvTmF2aWdhdGUgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS8ke3VybFRvTmF2aWdhdGV9YFxuXHRcdFx0XHQvLyB1cmxUb05hdmlnYXRlID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8ke3VybFRvTmF2aWdhdGV9YFxuXHRcdFx0XHRjb25zb2xlLmxvZygnTmF2aWdhdGluZyB0byAtICcsdXJsVG9OYXZpZ2F0ZSk7XG5cdFx0XHRcdHdpbmRvdy5vcGVuKHVybFRvTmF2aWdhdGUsICdfc2VsZicpO1xuXHRcdFx0fSk7XG5cdFx0Ly8gfVxuICAgIH1cblx0XG5cdHB1YmxpYyBmZXRjaEtleVZhbHVlKGtleTogc3RyaW5nKSB7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCkge1xuXHRcdFx0cmV0dXJuICh0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnRba2V5XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRcblx0fVxuXG5cdHB1YmxpYyBzZXRBY3RpdmVSZWNvQ291bnQoY291bnQ6bnVtYmVyKXtcblx0XHR0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnRbJ2FjdGl2ZVJlY29tbWVuZGF0aW9uJ10gPSBjb3VudDtcblx0fVxuXHRcblx0cHVibGljIGlzSGF2aW5nQW55QWN0aXZlU3VicyhpZCxzdWJzLHR5cGUpe1xuICAgIGlmKGlkID09PSAnYWRzX2FtYXpvbl9hdHRyaWJ1dGlvbicgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQU1TX0FUVFJJQlVUSU9OJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZihpZCA9PT0gJ2Fkc19hbWF6b25fZHNwJyAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdEU1AnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmKChpZCA9PT0gJ2Fkc19hbWF6b25fY29udGVudCcpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0NPTlRFTlQnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmKChpZCA9PT0gJ2Fkc19pbnN0YWNhcnQnKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdJTlNUQUNBUlQnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfWVsc2UgaWYoKGlkID09PSAnYWRzX2NyaXRlbycpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0NSSVRFTycpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1lbHNlIGlmKChpZCA9PT0gJ2Fkc193YWxtYXJ0JykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnV0FMTUFSVCcpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1lbHNlIGlmKGlkID09PSAnYWRzX2RhdGFfcGxhdGZvcm0nfHwgaWQgPT09ICdhbWMtcGxhdGZvcm0td2ViJyB8fCBpZCA9PT0gJ2Fkc19hbWF6b25fc2VsbGVyJykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9ZWxzZSBpZihpZCA9PT0gJ2Fkc19hbWF6b25fYWR2ZXJ0aXNpbmcnIHx8IGlkID09PSAnYWRzX3ZlbmRvcl9zYWxlcycgfHwgaWQgPT09ICdhZHNfc2VsbGVyX3NhbGVzJykge1xuICAgICAgZm9yKGxldCBzZXR0aW5ncyBvZiBzdWJzKXtcbiAgICAgICAgaWYoc2V0dGluZ3MudHlwZSAhPSB0eXBlICYmIHNldHRpbmdzLnN0YXR1cyA9PSBcIkFDVElWRVwiKXtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgXHR9XG5cblx0cHVibGljIGNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIGFjY1R5cGUgLHN1YlR5cGUpIHtcblx0XHRpZihzdWJUeXBlID09PSBhY2NUeXBlKXtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFR5cGVTdWIgPSBzdWJzLmZpbHRlcihzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnR5cGUgPT09IHN1YlR5cGUpO1xuXHRcdGlmKGN1cnJlbnRUeXBlU3ViLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGN1cnJlbnRUeXBlU3ViWzBdLnN0YXR1cyA9PT0gJ0FDVElWRScgfHwgY3VycmVudFR5cGVTdWJbMF0udHlwZSA9PT0gYWNjVHlwZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXBwbGljYXRpb25JRCgpIHtcblx0XHRsZXQgdXJsQXJyYXkgPSB0aGlzLnVybENvbnRleHRTZXJ2aWNlLnJvdXRlci51cmwuc3BsaXQoJy8nKTtcblx0XHRsZXQgY3VycmVudFJvdXRlID0gdXJsQXJyYXlbdXJsQXJyYXkubGVuZ3RoIC0gMV07XG5cdFx0XG5cdFx0aWYodGhpcy5jb250ZW50QXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSApIHtcblx0XHRcdHJldHVybiBcImFkc19hbWF6b25fY29udGVudF9jb250ZW50X2FuYWx5dGljc1wiO1xuXHRcdH0gZWxzZSBpZih0aGlzLnNvdkFwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEpIHtcblx0XHRcdHJldHVybiBcImFkc19hbWF6b25fY29udGVudF9zaGFyZV9vZl92b2ljZVwiO1xuXHRcdH1cblx0fVxufSJdfQ==
|
|
1136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQU0zRCxNQUFNLE9BQU8seUJBQXlCO0lBNEM1QjtJQUNBO0lBQ0E7SUFDQTtJQTlDVCxVQUFVLEdBQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFDLGdCQUFnQixFQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUMsd0JBQXdCLEVBQUMsZ0JBQWdCLEVBQUMsdUJBQXVCLEVBQUMsa0JBQWtCLEVBQUMseUJBQXlCLEVBQUMsZUFBZSxDQUFDLENBQUM7SUFDN3FCLFFBQVEsR0FBTSxFQUFFLENBQUM7SUFFakIsY0FBYyxHQUFLLEVBQUUsQ0FBQztJ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SSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUNoRixPQUFPLElBQUksQ0FBQztTQUNaO2FBQU07WUFDTixPQUFPLEtBQUssQ0FBQztTQUNiO0lBQ0YsQ0FBQztJQUVNLGdCQUFnQjtRQUN0QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakQsSUFBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFHO1lBQ25ELE9BQU8sc0NBQXNDLENBQUM7U0FDOUM7YUFBTSxJQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JELE9BQU8sbUNBQW1DLENBQUM7U0FDM0M7SUFDRixDQUFDOzJIQS9vQ1cseUJBQXlCOytIQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs7NEZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9yZXN0LWFwaS5zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVybENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi91cmwtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IEVOX0xBQkVMUyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMtZW4nO1xuaW1wb3J0IHsgSkFfTEFCRUxTIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy1qYSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmV2aXNlZEFwcFRhYnNTZWN0aW9uLCBSZXZpc2VkR3JvdXBNZW51Q29uZmlnLCBSZXZpc2VkR3JvdXBlZFNlY3Rpb24sIFJldmlzZWRJbnRlbGxpZ2VuY2VHcm91cCwgUmV2aXNlZEludGVsbGlnZW5jZUdyb3VwQ29uZmlnLCBSZXZpc2VkTmF2aWdhdGlvbkNvbmZpZywgUmV2aXNlZE5hdk1lbnVJdGVtLCBSZXZpc2VkTmF2aWdhdGlvblN0YXRlLCBSZXZpc2VkU2VjdGlvbiwgUmV2aXNlZFNlY3Rpb25Db25maWcgfSBmcm9tICcuLi9yZXZpc2VkLW5hdmlnYXRpb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlIHtcblx0Y29uZGl0aW9ucyBcdFx0XHQ9IFsnb3JnX3VzZXJfY3RybCcsICd2aXNpYmlsaXR5X3JvbGVzJywgJ3Zpc2liaWxpdHlfcm9sZXNfbm90X2luJywgJ2FjY291bnRfaWRzJywgJ2N1c3RvbWVyX3R5cGVzX25vdF9pbicsJ2N1c3RvbWVyX3R5cGVzJywnb3JnYW5pemF0aW9uX2lkcycsICdvcmdhbml6YXRpb25faWRzX25vdF9pbicsICdhY2NvdW50X3R5cGUnLCAnYWNjb3VudF9pZHNfbm90X2luJywgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJywgJ29yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbicsICdhcHBfc3BhY2lmaWNfY29uZmlnX2NoZWNrJywgJ2NhbXBhaWduX3R5cGVzJywgJ2luY29udGV4dF9jYW1wYWlnbl90YXJnZXRpbmcnLCAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0JywgJ3N1YnNjcmlwdGlvbl90eXBlcycsICdzaXRlSWRzJywgJ3NpdGVOb3RJZHMnLCAnbm90X2FjY291bnRfdHlwZScsICdub3RfYWNjb3VudF9uYW1lJywgJ2Rpc2FibGVfcmVhZG9ubHlfb3JnJywgJ3VzZXJfZW1haWxzJywgJ2hpZGVfZm9yX3VzZXInLCAnYXBwX29yZ19zZXR0aW5nJywnYXBwX29yZ19zZXR0aW5nX25vdF9pbicsJ25nX2FwcF9zZXR0aW5nJywnbmdfYXBwX3NldHRpbmdfbm90X2luJywndGFyZ2V0dGluZ190eXBlcycsJ3RhcmdldHRpbmdfdHlwZXNfbm90X2luJywnaGlkZV9mb3JfdXNlciddO1xuXHRNZW51TGlzdCBcdFx0XHQ9IFtdO1xuXG5cdGFwcGxpY2F0aW9uSWRzIFx0XHQ9IFtdO1xuXHRlbmFibGVBbGxNZW51c0J5T3JnID0gWzMwNzgwXVxuXHRcblx0YXBwRGV0YWlsczpcdGFueTtcblx0aXNTdHJ1Y3R1cmVBcGlTdXBwb3J0Olx0YW55O1xuXHRpc01hbmFnZWRTZXJ2aWNlQWNjOiBib29sZWFuO1xuXHRTZXR0aW5nc01lbnVMaXN0OiBhbnlbXTtcblx0YXBwTmFtZXM6IHN0cmluZ1tdO1xuXHRwcml2YXRlIG1lbnVsaXN0czogYW55O1xuXHRjb250ZW50QXBwUm91dGVzXHRcdFx0PVsnY29udGVudC1pbnNpZ2h0JywnY29udGVudC1hbmFseXRpY3MnLCdjb250ZW50JywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncycsJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZSddXG5cdHNvdkFwcFJvdXRlc1x0XHRcdFx0PVsnaW5zaWdodHMnLCdzaGFyZS1vZi12b2ljZScsJ2JyYW5kcycsJ2tleXdvcmRzJywncHJvZHVjdHMnLCdkYWlseS10cmFja2VyJywnZGFpbHktdHJhY2tlci9icmFuZHMnLCdkYWlseS10cmFja2VyL2tleXdvcmRzJywnZGFpbHktdHJhY2tlci9wcm9kdWN0cycsJ3Jhdy1kYXRhJywnb3ZlcnZpZXcnLCdzb3YnLCdwcm9kdWN0LW1ldGEtZGF0YScsJ2JyYW5kLXRlcm1zLXNldHRpbmdzJywnbGFiZWxzLXNldHRpbmdzJywnc3ViLWJyYW5kcycsJ3N1Yi1icmFuZHMtbWFwcGluZycsJ3Nvdi1zZXR0aW5ncycgLCdjb250ZW50LXNldHRpbmdzJywnc2VhcmNoLXF1ZXJ5LXBlcmZvcm1hbmNlJ11cblx0c2VsbGVyQW5hbHl0aWNzQXBwUm91dGVzIFx0PVsnc2VsbGVyL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncycsJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZSddXG5cdHZlbmRvckFuYWx5dGljc0FwcFJvdXRlc1x0PVsndmVuZG9yL2luc2lnaHRzJywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncycsJ3NlYXJjaC1xdWVyeS1wZXJmb3JtYW5jZSddXG5cdFxuXHR0eXBlU3RhdHVzQ29uZmlncyA9IHtcbiAgICAgICAgJ1NQT05TT1JFRF9LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9QUk9EVUNUX01BTlVBTF9UQVJHRVRJTkdfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX1BST0RVQ1RfQVVUT19UQVJHRVRJTkdfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkRfQVVUTycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkQnIDogdHJ1ZSxcbiAgICAgICAgJ1NQX0tFWVdPUkRTX0JJRF9HQVAnIDogZmFsc2UsXG4gICAgICAgICdTUF9QTEFDRU1FTlRfQklEJyA6IGZhbHNlLFxuICAgICAgICAnU1BfVEFSR0VUSU5HX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnU1BfTUFUQ0hfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTUF9TQl9LRVlXT1JEX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnSEVBRExJTkVfS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdTQl9LRVlXT1JEU19CSURfR0FQJyA6IGZhbHNlLFxuICAgICAgICAnU0JfTUFUQ0hfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTQl9TUF9LRVlXT1JEX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnTk9fS0VZV09SRF9CSURTJyA6IHRydWUsXG4gICAgICAgICdDQU1QQUlHTl9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ0FVVE9fVE9fTUFOVUFMX0FTSU5fUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdNQU5VQUxfVE9fQVVUT19BU0lOX1BBUklUWScgOiB0cnVlLFxuICAgICAgICAnQ09NUEVUSVRPUl9QUk9EVUNUJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfQlJBTkRfS0VZV09SRCc6IHRydWVcbiAgICB9XG5cblx0XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBSZXN0QXBpU2VydmljZTogUmVzdEFwaVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxcblx0XHRwcml2YXRlIHRyYW5zbGF0ZTpUcmFuc2xhdGlvblNlcnZpY2UsXG5cdFx0cHJpdmF0ZSB1cmxDb250ZXh0U2VydmljZTogVXJsQ29udGV4dFNlcnZpY2UpIHt9XG5cblx0LyoqIGB0cnVlYCB3aGVuIHRoZSBzZWN0aW9uZWQgKG5ldykgc2lkZWJhciBzaG91bGQgcmVuZGVyIOKAlCBkZWZhdWx0IHVubGVzcyBob3N0IHNldHMgYHVzZUxlZ2FjeU5hdmlnYXRpb25gLiAqL1xuXHRpc1JldmlzZWROYXZpZ2F0aW9uRW5hYmxlZChhcHBEZXRhaWxzOiBhbnkgPSB0aGlzLmFwcERldGFpbHMpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuaXNMZWdhY3lOYXZpZ2F0aW9uRW5hYmxlZChhcHBEZXRhaWxzKTtcblx0fVxuXG5cdC8qKiBgdHJ1ZWAgd2hlbiB0aGUgaG9zdCByZXF1ZXN0ZWQgdGhlIGNsYXNzaWMgcGVyLWFwcCBzaWRlYmFyIHZpYSBgcmV2aXNlZE5hdmlnYXRpb24udXNlTGVnYWN5TmF2aWdhdGlvbmAuICovXG5cdGlzTGVnYWN5TmF2aWdhdGlvbkVuYWJsZWQoYXBwRGV0YWlsczogYW55ID0gdGhpcy5hcHBEZXRhaWxzKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKGFwcERldGFpbHMgJiYgYXBwRGV0YWlscy5yZXZpc2VkTmF2aWdhdGlvbiAmJiBhcHBEZXRhaWxzLnJldmlzZWROYXZpZ2F0aW9uLnVzZUxlZ2FjeU5hdmlnYXRpb24gPT09IHRydWUpO1xuXHR9XG5cblx0YW5ub3RhdGVNZW51c1dpdGhTb3VyY2UobWVudXM6IGFueVtdID0gW10pOiBSZXZpc2VkTmF2TWVudUl0ZW1bXSB7XG5cdFx0cmV0dXJuIG1lbnVzLm1hcCgobWVudSkgPT4gdGhpcy5hbm5vdGF0ZU1lbnVUcmVlKG1lbnUsIG1lbnUgJiYgbWVudS5pZCA/IG1lbnUuaWQgOiB1bmRlZmluZWQsIFtdLCB1bmRlZmluZWQpKTtcblx0fVxuXG5cdGJ1aWxkUmV2aXNlZE5hdmlnYXRpb25TdGF0ZShhcHBEZXRhaWxzOiBhbnksIGFwcE1lbnVzOiBhbnlbXSA9IFtdLCBnbG9iYWxTZXR0aW5nc01lbnVzOiBhbnlbXSA9IFtdLCBjb21tdW5pdHlMaW5rczogYW55W10gPSBbXSk6IFJldmlzZWROYXZpZ2F0aW9uU3RhdGUge1xuXHRcdGNvbnN0IHJldmlzZWRDb25maWc6IFJldmlzZWROYXZpZ2F0aW9uQ29uZmlnID0gYXBwRGV0YWlscyAmJiBhcHBEZXRhaWxzLnJldmlzZWROYXZpZ2F0aW9uXG5cdFx0XHQ/IGFwcERldGFpbHMucmV2aXNlZE5hdmlnYXRpb25cblx0XHRcdDogeyB1c2VMZWdhY3lOYXZpZ2F0aW9uOiBmYWxzZSwgc2VjdGlvbnM6IFtdIH07XG5cdFx0Y29uc3QgYW5ub3RhdGVkQXBwcyA9IHRoaXMuYW5ub3RhdGVNZW51c1dpdGhTb3VyY2UodGhpcy5jbG9uZU1lbnVzKGFwcE1lbnVzKSk7XG5cdFx0Y29uc3QgYW5ub3RhdGVkR2xvYmFsU2V0dGluZ3MgPSB0aGlzLmFubm90YXRlTWVudXNXaXRoU291cmNlKHRoaXMuY2xvbmVNZW51cyhnbG9iYWxTZXR0aW5nc01lbnVzKSk7XG5cdFx0Y29uc3QgYW5ub3RhdGVkQ29tbXVuaXR5TGlua3MgPSB0aGlzLmFubm90YXRlTWVudXNXaXRoU291cmNlKHRoaXMuY2xvbmVNZW51cyhjb21tdW5pdHlMaW5rcykpO1xuXHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5idWlsZFJldmlzZWRTZWN0aW9ucyhhbm5vdGF0ZWRBcHBzLCByZXZpc2VkQ29uZmlnLnNlY3Rpb25zIHx8IFtdKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRzZWN0aW9ucyxcblx0XHRcdGdsb2JhbFNldHRpbmdzOiBhbm5vdGF0ZWRHbG9iYWxTZXR0aW5ncyxcblx0XHRcdGNvbW11bml0eUxpbmtzOiBhbm5vdGF0ZWRDb21tdW5pdHlMaW5rc1xuXHRcdH07XG5cdH1cblxuXHRmaW5kUmV2aXNlZE1lbnVCeUlkKG1lbnVMaXN0OiBSZXZpc2VkTmF2TWVudUl0ZW1bXSA9IFtdLCBtZW51SWQ6IHN0cmluZyk6IFJldmlzZWROYXZNZW51SXRlbSB7XG5cdFx0Zm9yIChjb25zdCBtZW51IG9mIG1lbnVMaXN0KSB7XG5cdFx0XHRpZiAoIW1lbnUpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVudS5pZCA9PT0gbWVudUlkIHx8IG1lbnUuc291cmNlTWVudUlkID09PSBtZW51SWQpIHtcblx0XHRcdFx0cmV0dXJuIG1lbnU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVudS5jaGlsZHJlbiAmJiBtZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRNZW51ID0gdGhpcy5maW5kUmV2aXNlZE1lbnVCeUlkKG1lbnUuY2hpbGRyZW4sIG1lbnVJZCk7XG5cdFx0XHRcdGlmIChjaGlsZE1lbnUpIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hpbGRNZW51O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZmluZEZpcnN0TmF2aWdhYmxlTWVudShtZW51TGlzdDogUmV2aXNlZE5hdk1lbnVJdGVtW10gPSBbXSk6IFJldmlzZWROYXZNZW51SXRlbSB7XG5cdFx0Zm9yIChjb25zdCBtZW51IG9mIG1lbnVMaXN0KSB7XG5cdFx0XHRpZiAoIW1lbnUpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVudS50eXBlICE9PSAnZXhwYW5kYWJsZScgJiYgKG1lbnUucm91dGUgfHwgbWVudS5saW5rIHx8IG1lbnUuZGVmYXVsdHVybCkpIHtcblx0XHRcdFx0cmV0dXJuIG1lbnU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobWVudS5jaGlsZHJlbiAmJiBtZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgY2hpbGRNZW51ID0gdGhpcy5maW5kRmlyc3ROYXZpZ2FibGVNZW51KG1lbnUuY2hpbGRyZW4pO1xuXHRcdFx0XHRpZiAoY2hpbGRNZW51KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoaWxkTWVudTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRSZXZpc2VkSW50ZWxsaWdlbmNlR3JvdXBzKGFwcE1lbnVzOiBSZXZpc2VkTmF2TWVudUl0ZW1bXSwgaW50ZWxsaWdlbmNlR3JvdXBzOiBSZXZpc2VkSW50ZWxsaWdlbmNlR3JvdXBDb25maWdbXSk6IFJldmlzZWRJbnRlbGxpZ2VuY2VHcm91cFtdIHtcblx0XHRyZXR1cm4gaW50ZWxsaWdlbmNlR3JvdXBzLm1hcCgoZ3JvdXApID0+IHtcblx0XHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5jb2xsZWN0SW50ZWxsaWdlbmNlSXRlbXMoYXBwTWVudXMsIGdyb3VwKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlkOiBncm91cC5pZCxcblx0XHRcdFx0dGl0bGU6IGdyb3VwLnRpdGxlLFxuXHRcdFx0XHRpdGVtc1xuXHRcdFx0fTtcblx0XHR9KS5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5pdGVtcy5sZW5ndGggPiAwKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRSZXZpc2VkU2VjdGlvbnMoYXBwTWVudXM6IFJldmlzZWROYXZNZW51SXRlbVtdLCBzZWN0aW9uczogUmV2aXNlZFNlY3Rpb25Db25maWdbXSk6IFJldmlzZWRTZWN0aW9uW10ge1xuXHRcdHJldHVybiAoc2VjdGlvbnMgfHwgW10pLm1hcCgoc2VjdGlvbikgPT4ge1xuXHRcdFx0aWYgKHNlY3Rpb24udHlwZSA9PT0gJ2FwcC10YWJzJykge1xuXHRcdFx0XHRjb25zdCBhcHBzID0gdGhpcy5maWx0ZXJPcHRpbWl6ZUFwcHMoYXBwTWVudXMsIHNlY3Rpb24uYXBwSWRzIHx8IFtdKTtcblx0XHRcdFx0aWYgKGFwcHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpZDogc2VjdGlvbi5pZCxcblx0XHRcdFx0XHR0aXRsZTogc2VjdGlvbi50aXRsZSxcblx0XHRcdFx0XHR0eXBlOiAnYXBwLXRhYnMnLFxuXHRcdFx0XHRcdGljb25Tdmc6IHNlY3Rpb24uaWNvblN2Zyxcblx0XHRcdFx0XHRhcHBzLFxuXHRcdFx0XHRcdGRlZmF1bHRBcHBJZDogc2VjdGlvbi5kZWZhdWx0QXBwSWRcblx0XHRcdFx0fSBhcyBSZXZpc2VkQXBwVGFic1NlY3Rpb247XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGdyb3VwcyA9IHRoaXMuYnVpbGRSZXZpc2VkSW50ZWxsaWdlbmNlR3JvdXBzKGFwcE1lbnVzLCBzZWN0aW9uLmdyb3VwcyB8fCBbXSk7XG5cdFx0XHRpZiAoZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlkOiBzZWN0aW9uLmlkLFxuXHRcdFx0XHR0aXRsZTogc2VjdGlvbi50aXRsZSxcblx0XHRcdFx0dHlwZTogJ2dyb3VwZWQtbWVudXMnLFxuXHRcdFx0XHRpY29uU3ZnOiBzZWN0aW9uLmljb25TdmcsXG5cdFx0XHRcdGdyb3Vwc1xuXHRcdFx0fSBhcyBSZXZpc2VkR3JvdXBlZFNlY3Rpb247XG5cdFx0fSkuZmlsdGVyKChzZWN0aW9uKSA9PiAhIXNlY3Rpb24pO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0SW50ZWxsaWdlbmNlSXRlbXMoYXBwTWVudXM6IFJldmlzZWROYXZNZW51SXRlbVtdLCBncm91cDogUmV2aXNlZEludGVsbGlnZW5jZUdyb3VwQ29uZmlnKTogUmV2aXNlZE5hdk1lbnVJdGVtW10ge1xuXHRcdGNvbnN0IGl0ZW1zOiBSZXZpc2VkTmF2TWVudUl0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IHNlZW5JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRjb25zdCBtZW51SWRzID0gZ3JvdXAubWVudUlkcyB8fCBbXTtcblx0XHRjb25zdCByb3V0ZUlkcyA9IGdyb3VwLnJvdXRlSWRzIHx8IFtdO1xuXHRcdGNvbnN0IGNvbmZpZ3VyZWRJdGVtcyA9IGdyb3VwLml0ZW1zIHx8IFtdO1xuXG5cdFx0Y29uZmlndXJlZEl0ZW1zLmZvckVhY2goKGNvbmZpZ3VyZWRJdGVtKSA9PiB7XG5cdFx0XHRjb25zdCBtYXRjaGVkSXRlbSA9IHRoaXMucmVzb2x2ZUNvbmZpZ3VyZWRHcm91cEl0ZW0oYXBwTWVudXMsIGNvbmZpZ3VyZWRJdGVtKTtcblx0XHRcdGlmIChtYXRjaGVkSXRlbSAmJiAhc2Vlbklkcy5oYXMobWF0Y2hlZEl0ZW0uaWQpKSB7XG5cdFx0XHRcdHNlZW5JZHMuYWRkKG1hdGNoZWRJdGVtLmlkKTtcblx0XHRcdFx0aXRlbXMucHVzaChtYXRjaGVkSXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRtZW51SWRzLmZvckVhY2goKG1lbnVJZCkgPT4ge1xuXHRcdFx0Y29uc3QgbWF0Y2hlZE1lbnUgPSB0aGlzLmZpbmRSZXZpc2VkTWVudUJ5SWQoYXBwTWVudXMsIG1lbnVJZCk7XG5cdFx0XHRpZiAobWF0Y2hlZE1lbnUgJiYgIXNlZW5JZHMuaGFzKG1hdGNoZWRNZW51LmlkKSkge1xuXHRcdFx0XHRzZWVuSWRzLmFkZChtYXRjaGVkTWVudS5pZCk7XG5cdFx0XHRcdGl0ZW1zLnB1c2godGhpcy5jbG9uZU1lbnVzKFttYXRjaGVkTWVudV0pWzBdIGFzIFJldmlzZWROYXZNZW51SXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZiAocm91dGVJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy53YWxrTWVudXMoYXBwTWVudXMsIChtZW51KSA9PiB7XG5cdFx0XHRcdGlmIChtZW51LnJvdXRlICYmIHJvdXRlSWRzLmluZGV4T2YobWVudS5yb3V0ZSkgPiAtMSAmJiAhc2Vlbklkcy5oYXMobWVudS5pZCkpIHtcblx0XHRcdFx0XHRzZWVuSWRzLmFkZChtZW51LmlkKTtcblx0XHRcdFx0XHRpdGVtcy5wdXNoKHRoaXMuY2xvbmVNZW51cyhbbWVudV0pWzBdIGFzIFJldmlzZWROYXZNZW51SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtcztcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZUNvbmZpZ3VyZWRHcm91cEl0ZW0oXG5cdFx0YXBwTWVudXM6IFJldmlzZWROYXZNZW51SXRlbVtdLFxuXHRcdGNvbmZpZ3VyZWRJdGVtOiBSZXZpc2VkR3JvdXBNZW51Q29uZmlnIHwgc3RyaW5nLFxuXHRcdGRlcHRoID0gMFxuXHQpOiBSZXZpc2VkTmF2TWVudUl0ZW0ge1xuXHRcdGNvbnN0IG1heERlcHRoID0gODtcblx0XHRpZiAoZGVwdGggPiBtYXhEZXB0aCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm9ybWFsaXplZENvbmZpZzogUmV2aXNlZEdyb3VwTWVudUNvbmZpZyA9XG5cdFx0XHR0eXBlb2YgY29uZmlndXJlZEl0ZW0gPT09ICdzdHJpbmcnXG5cdFx0XHRcdD8geyBtZW51SWQ6IGNvbmZpZ3VyZWRJdGVtIH1cblx0XHRcdFx0OiBjb25maWd1cmVkSXRlbTtcblxuXHRcdGNvbnN0IG1hdGNoZWRNZW51ID0gdGhpcy5maW5kUmV2aXNlZE1lbnVCeUlkKGFwcE1lbnVzLCBub3JtYWxpemVkQ29uZmlnLm1lbnVJZCk7XG5cdFx0aWYgKCFtYXRjaGVkTWVudSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xvbmVkTWVudSA9IHRoaXMuY2xvbmVNZW51cyhbbWF0Y2hlZE1lbnVdKVswXSBhcyBSZXZpc2VkTmF2TWVudUl0ZW07XG5cdFx0aWYgKG5vcm1hbGl6ZWRDb25maWcudGl0bGUpIHtcblx0XHRcdGNsb25lZE1lbnUubmFtZSA9IG5vcm1hbGl6ZWRDb25maWcudGl0bGU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmVzdGVkQ29uZmlncyA9IG5vcm1hbGl6ZWRDb25maWcuY2hpbGRyZW4gfHwgW107XG5cdFx0aWYgKG5lc3RlZENvbmZpZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbmVzdGVkOiBSZXZpc2VkTmF2TWVudUl0ZW1bXSA9IFtdO1xuXHRcdFx0bmVzdGVkQ29uZmlncy5mb3JFYWNoKChjaGlsZENmZykgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZUNvbmZpZ3VyZWRHcm91cEl0ZW0oYXBwTWVudXMsIGNoaWxkQ2ZnLCBkZXB0aCArIDEpO1xuXHRcdFx0XHRpZiAocmVzb2x2ZWQpIHtcblx0XHRcdFx0XHRuZXN0ZWQucHVzaChyZXNvbHZlZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y2xvbmVkTWVudS5jaGlsZHJlbiA9IG5lc3RlZDtcblx0XHRcdGlmIChuZXN0ZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjbG9uZWRNZW51LnR5cGUgPSAnZXhwYW5kYWJsZSc7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2xvbmVkTWVudTtcblx0XHR9XG5cblx0XHRjb25zdCBpbmplY3RlZENoaWxkSWRzID0gbm9ybWFsaXplZENvbmZpZy5jaGlsZE1lbnVJZHMgfHwgW107XG5cdFx0aWYgKGluamVjdGVkQ2hpbGRJZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgaW5qZWN0ZWQ6IFJldmlzZWROYXZNZW51SXRlbVtdID0gW107XG5cdFx0XHRpbmplY3RlZENoaWxkSWRzLmZvckVhY2goKGNoaWxkSWQpID0+IHtcblx0XHRcdFx0Y29uc3QgY2hpbGQgPSB0aGlzLmZpbmRSZXZpc2VkTWVudUJ5SWQoYXBwTWVudXMsIGNoaWxkSWQpO1xuXHRcdFx0XHRpZiAoY2hpbGQpIHtcblx0XHRcdFx0XHRpbmplY3RlZC5wdXNoKHRoaXMuY2xvbmVNZW51cyhbY2hpbGRdKVswXSBhcyBSZXZpc2VkTmF2TWVudUl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNsb25lZE1lbnUuY2hpbGRyZW4gPSBpbmplY3RlZDtcblx0XHRcdGlmIChpbmplY3RlZC5sZW5ndGggPiAwICYmIGNsb25lZE1lbnUudHlwZSA9PT0gJ2xlYWYnKSB7XG5cdFx0XHRcdGNsb25lZE1lbnUudHlwZSA9ICdleHBhbmRhYmxlJztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNsb25lZE1lbnUuY2hpbGRyZW4gJiYgY2xvbmVkTWVudS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRjbG9uZWRNZW51LmNoaWxkcmVuID0gdGhpcy5maWx0ZXJDb25maWd1cmVkQ2hpbGRyZW4oY2xvbmVkTWVudS5jaGlsZHJlbiwgbm9ybWFsaXplZENvbmZpZyk7XG5cdFx0fVxuXHRcdHJldHVybiBjbG9uZWRNZW51O1xuXHR9XG5cblx0cHJpdmF0ZSBmaWx0ZXJDb25maWd1cmVkQ2hpbGRyZW4oY2hpbGRyZW46IFJldmlzZWROYXZNZW51SXRlbVtdLCBjb25maWd1cmVkSXRlbTogUmV2aXNlZEdyb3VwTWVudUNvbmZpZyk6IFJldmlzZWROYXZNZW51SXRlbVtdIHtcblx0XHRjb25zdCBpbmNsdWRlSWRzID0gY29uZmlndXJlZEl0ZW0uaW5jbHVkZUNoaWxkTWVudUlkcyB8fCBbXTtcblx0XHRjb25zdCBleGNsdWRlSWRzID0gY29uZmlndXJlZEl0ZW0uZXhjbHVkZUNoaWxkTWVudUlkcyB8fCBbXTtcblxuXHRcdHJldHVybiAoY2hpbGRyZW4gfHwgW10pLmZpbHRlcigoY2hpbGQpID0+IHtcblx0XHRcdGlmIChpbmNsdWRlSWRzLmxlbmd0aCA+IDAgJiYgaW5jbHVkZUlkcy5pbmRleE9mKGNoaWxkLmlkKSA9PT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGV4Y2x1ZGVJZHMubGVuZ3RoID4gMCAmJiBleGNsdWRlSWRzLmluZGV4T2YoY2hpbGQuaWQpID4gLTEpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHdhbGtNZW51cyhtZW51TGlzdDogUmV2aXNlZE5hdk1lbnVJdGVtW10sIGl0ZXJhdG9yOiAobWVudTogUmV2aXNlZE5hdk1lbnVJdGVtKSA9PiB2b2lkKSB7XG5cdFx0bWVudUxpc3QuZm9yRWFjaCgobWVudSkgPT4ge1xuXHRcdFx0aWYgKCFtZW51KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGl0ZXJhdG9yKG1lbnUpO1xuXHRcdFx0aWYgKG1lbnUuY2hpbGRyZW4gJiYgbWVudS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRoaXMud2Fsa01lbnVzKG1lbnUuY2hpbGRyZW4sIGl0ZXJhdG9yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZmlsdGVyT3B0aW1pemVBcHBzKGFwcE1lbnVzOiBSZXZpc2VkTmF2TWVudUl0ZW1bXSwgb3B0aW1pemVBcHBJZHM6IHN0cmluZ1tdID0gW10pOiBSZXZpc2VkTmF2TWVudUl0ZW1bXSB7XG5cdFx0Y29uc3QgYXBwSWRzVG9EaXNwbGF5ID0gb3B0aW1pemVBcHBJZHMgfHwgW107XG5cdFx0aWYgKCFhcHBJZHNUb0Rpc3BsYXkgfHwgYXBwSWRzVG9EaXNwbGF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIGFwcE1lbnVzO1xuXHRcdH1cblx0XHRyZXR1cm4gYXBwSWRzVG9EaXNwbGF5XG5cdFx0XHQubWFwKChhcHBJZCkgPT4gYXBwTWVudXMuZmluZCgobWVudSkgPT4gbWVudS5pZCA9PT0gYXBwSWQpKVxuXHRcdFx0LmZpbHRlcigobWVudSkgPT4gISFtZW51KTtcblx0fVxuXG5cdHByaXZhdGUgYW5ub3RhdGVNZW51VHJlZShtZW51OiBhbnksIG93bmVyQXBwSWQ6IHN0cmluZywgc291cmNlUGF0aDogc3RyaW5nW10gPSBbXSwgc291cmNlUGFyZW50SWQ/OiBzdHJpbmcpOiBSZXZpc2VkTmF2TWVudUl0ZW0ge1xuXHRcdGNvbnN0IGFubm90YXRlZE1lbnUgPSBtZW51IGFzIFJldmlzZWROYXZNZW51SXRlbTtcblx0XHRpZiAoIWFubm90YXRlZE1lbnUpIHtcblx0XHRcdHJldHVybiBhbm5vdGF0ZWRNZW51O1xuXHRcdH1cblxuXHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gWy4uLnNvdXJjZVBhdGgsIGFubm90YXRlZE1lbnUuaWRdO1xuXHRcdGFubm90YXRlZE1lbnUub3duZXJBcHBJZCA9IG93bmVyQXBwSWQ7XG5cdFx0YW5ub3RhdGVkTWVudS5zb3VyY2VNZW51SWQgPSBhbm5vdGF0ZWRNZW51LmlkO1xuXHRcdGFubm90YXRlZE1lbnUuc291cmNlUGFyZW50SWQgPSBzb3VyY2VQYXJlbnRJZDtcblx0XHRhbm5vdGF0ZWRNZW51LnNvdXJjZVBhdGggPSBjdXJyZW50UGF0aDtcblx0XHRpZiAoYW5ub3RhdGVkTWVudS5jaGlsZHJlbiAmJiBhbm5vdGF0ZWRNZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdGFubm90YXRlZE1lbnUuY2hpbGRyZW4gPSBhbm5vdGF0ZWRNZW51LmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuYW5ub3RhdGVNZW51VHJlZShjaGlsZCwgb3duZXJBcHBJZCwgY3VycmVudFBhdGgsIGFubm90YXRlZE1lbnUuaWQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFubm90YXRlZE1lbnU7XG5cdH1cblxuXHRwcml2YXRlIGNsb25lTWVudXM8VD4obWVudXM6IFRbXSk6IFRbXSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobWVudXMgfHwgW10pKTtcblx0fVxuXG5cdGdldFR5cGVTdGF0dXNDb25maWdzKCl7XG5cdFx0cmV0dXJuIHRoaXMudHlwZVN0YXR1c0NvbmZpZ3M7XG5cdH1cblxuXHQvKipcblx0ICogT3B0aW9uYWwgbWVyZ2U6IHJlcGxhY2UgY3VycmVudCBhcHDigJlzIGBjaGlsZHJlbmAgZnJvbSBgYXBwRGV0YWlscy5saXN0TWVudXNgLlxuXHQgKiBPbmx5IHJ1bnMgd2hlbiBgbGlzdE1lbnVzYCBpcyBhICoqbm9uLWVtcHR5KiogYXJyYXkgKGVtcHR5IGBbXWAgaXMgaWdub3JlZCBzbyB3ZSBkb27igJl0IHdpcGUgbWVudXMpLlxuXHQgKiBBY2NvdW50LWJhc2VkIHZpc2liaWxpdHkgaXMgYXBwbGllZCBzZXBhcmF0ZWx5IGFuZCBkb2VzICoqbm90KiogZGVwZW5kIG9uIHRoaXMgZmxhZy5cblx0ICovXG5cdHByaXZhdGUgaGFzTm9uRW1wdHlMaXN0TWVudXNNZXJnZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBsbSA9IHRoaXMuYXBwRGV0YWlscz8ubGlzdE1lbnVzO1xuXHRcdGlmIChsbSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChBcnJheS5pc0FycmF5KGxtKSkge1xuXHRcdFx0cmV0dXJuIGxtLmxlbmd0aCA+IDA7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3RydWN0Q2hpbGRNZW51cyhtZW51SXRlbXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTm9uRW1wdHlMaXN0TWVudXNNZXJnZSgpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG1lbnVJdGVtcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFwcERldGFpbHMuYXBwU2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy5hcHBsaWNhdGlvbklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbGlzdE1lbnVJdGVtIG9mIHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PSBsaXN0TWVudUl0ZW0uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IGxpc3RNZW51SXRlbS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pZCA9PSB0aGlzLmFwcERldGFpbHMuYXBwbGljYXRpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gdGhpcy5hcHBEZXRhaWxzLmxpc3RNZW51cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgICB9XG5cblx0LyoqIFRvcC1sZXZlbCBhcHAgaWQgZm9yIOKAnFNwb25zb3JlZCBBZHPigJ0gaW4gYG5hdm1lbnVgIOKAlCBvbmx5IHRoaXMgYXBwIHVzZXMgYGFsbF9hY2NvdW50c2AgdmlzaWJpbGl0eSBiZWxvdy4gKi9cblx0cHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU1BPTlNPUkVEX0FEU19BUFBfSUQgPSAnYWRzX2FtYXpvbl9hZHZlcnRpc2luZyc7XG5cblx0LyoqXG5cdCAqIFNwb25zb3JlZCBBZHMgb25seSDigJQgcGFyaXR5IHdpdGggQW5ndWxhckpTIGBOYXZNZW51U2VydmljZS5jb25zdHJ1Y3RDaGlsZE1lbnVzYCBpbiBpbnRlbnR3aXNlLXBsYXRmb3JtLXdlYlxuXHQgKiBgc3JjL2FwcC9sYXlvdXRzL2xlZnRzaWRlbmF2L2xlZnRzaWRlbmF2LnNlcnZpY2UuanNgOlxuXHQgKiAtIE5vIGBjdXJyZW50QWNjb3VudGA6IGtlZXAgb25seSBjaGlsZHJlbiB3aXRoIGBhbGxfYWNjb3VudHMgPT09IHRydWVgIChlLmcuIEFsbCBBY2NvdW50cywgU2lnbnVwIE92ZXJ2aWV3KS5cblx0ICogLSBXaXRoIGBjdXJyZW50QWNjb3VudGA6IGtlZXAgb25seSBjaGlsZHJlbiB3aGVyZSBgYWxsX2FjY291bnRzYCBpcyBub3QgdHJ1dGh5IChhY2NvdW50LXNjb3BlZCBpdGVtcykuXG5cdCAqXG5cdCAqIEFwcGxpZWQgaW4gYGdldE1lbnVMaXN0YCAoYWZ0ZXIgb3B0aW9uYWwgYGNvbnN0cnVjdENoaWxkTWVudXNgIG1lcmdlKSBmb3IgYGFkc19hbWF6b25fYWR2ZXJ0aXNpbmdgIG9ubHksIGluZGVwZW5kZW50IG9mIGBsaXN0TWVudXNgLlxuXHQgKi9cblx0cHJpdmF0ZSBmaWx0ZXJDaGlsZHJlbkJ5QWxsQWNjb3VudHNDb250ZXh0KGNoaWxkcmVuOiBhbnlbXSB8IHVuZGVmaW5lZCwgaGFzQWNjb3VudDogYm9vbGVhbik6IGFueVtdIHtcblx0XHRpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBjaGlsZHJlbiB8fCBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoaWxkcmVuLmZpbHRlcigocm93KSA9PiAoaGFzQWNjb3VudCA/ICFyb3cuYWxsX2FjY291bnRzIDogISFyb3cuYWxsX2FjY291bnRzKSk7XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5QWxsQWNjb3VudHNWaXNpYmlsaXR5VG9BcHBNZW51cyhtZW51czogYW55W10pOiB2b2lkIHtcblx0XHRpZiAoIW1lbnVzIHx8ICFtZW51cy5sZW5ndGggfHwgIXRoaXMuYXBwRGV0YWlscykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBoYXNBY2NvdW50ID0gISF0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQ7XG5cdFx0Zm9yIChjb25zdCBhcHAgb2YgbWVudXMpIHtcblx0XHRcdGlmICghYXBwIHx8IGFwcC5pZCAhPT0gQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5TUE9OU09SRURfQURTX0FQUF9JRCB8fCBhcHAuaWQgPT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyB8fCBhcHAuaWQgPT09ICdhcHBfaW50ZW50d2lzZV9jb21tdW5pdHknKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGFwcC5jaGlsZHJlbiAmJiBhcHAuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdGFwcC5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyQ2hpbGRyZW5CeUFsbEFjY291bnRzQ29udGV4dChhcHAuY2hpbGRyZW4sIGhhc0FjY291bnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBHbG9iYWwgU2V0dGluZ3M6IG5vIGFjY291bnQg4oaSIG9ubHkgQWNjb3VudCBNYW5hZ2VtZW50IChgZ2xvYmFsX2FjY291bnRfbWdtdGApLCBzYW1lIGFzIEFuZ3VsYXJKUy4gKi9cblx0cHJpdmF0ZSB0cmltR2xvYmFsU2V0dGluZ3NDaGlsZHJlbldoZW5Ob0FjY291bnQoZ2xvYmFsU2V0dGluZ3NBcHA6IGFueSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmFwcERldGFpbHM/LmN1cnJlbnRBY2NvdW50KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghZ2xvYmFsU2V0dGluZ3NBcHA/LmNoaWxkcmVuPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Z2xvYmFsU2V0dGluZ3NBcHAuY2hpbGRyZW4gPSBnbG9iYWxTZXR0aW5nc0FwcC5jaGlsZHJlbi5maWx0ZXIoKGM6IGFueSkgPT4gYyAmJiBjLmlkID09PSAnZ2xvYmFsX2FjY291bnRfbWdtdCcpO1xuXHR9XG5cblx0Z2V0TWVudUxpc3QoYXBwRGV0YWlscywgbWVudWxpc3RzKSB7XG4gICAgICAgIHRoaXMuYXBwRGV0YWlscyA9IGFwcERldGFpbHM7XG4gICAgICAgIHRoaXMuTWVudUxpc3QgPSBbXTtcbiAgICAgICAgbGV0IGFwcGVuZENoaWxkTWVudXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1lbnVsaXN0cyB8fCBbXSkpO1xuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignaGVyb2t1YXBwJykgPiAtMSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCdsb2NhbGhvc3QnKSA+IC0xKSB7XG4gICAgICAgICAgICBhcHBlbmRDaGlsZE1lbnVzID0gdGhpcy5jb25zdHJ1Y3RDaGlsZE1lbnVzKGFwcGVuZENoaWxkTWVudXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwbHlBbGxBY2NvdW50c1Zpc2liaWxpdHlUb0FwcE1lbnVzKGFwcGVuZENoaWxkTWVudXMpO1xuICAgICAgICBhcHBlbmRDaGlsZE1lbnVzLmZvckVhY2goKG1lbnUpID0+IHtcbiAgICAgICAgICAgIG1lbnUubmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zbGF0ZU5hbWUobWVudS5uYW1lKTtcbiAgICAgICAgICAgIG1lbnUuY2hpbGRyZW4gJiYgbWVudS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZE1lbnUpID0+IHtcbiAgICAgICAgICAgICAgICBjaGlsZE1lbnUubmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zbGF0ZU5hbWUoY2hpbGRNZW51Lm5hbWUpO1xuICAgICAgICAgICAgICAgIGNoaWxkTWVudS5jaGlsZHJlbiAmJiBjaGlsZE1lbnUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zbGF0ZU5hbWUoY2hpbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWVudWxpc3RzID0gYXBwZW5kQ2hpbGRNZW51cy5maWx0ZXIobGlzdCA9PiBsaXN0LmlkICE9PSAnYXBwX2dsb2JhbF9zZXR0aW5ncycgJiYgbGlzdC5pZCAhPT0gJ2FwcF9pbnRlbnR3aXNlX2NvbW11bml0eScpO1xuICAgICAgICBsZXQgc29ydGVkTWVudWxpc3RzID0gdGhpcy5tZW51bGlzdHMuc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPiBiLm9yZGVyKSA/IDEgOiAtMSk7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25JZHMgPSBzb3J0ZWRNZW51bGlzdHMubWFwKChhcHBJZCkgPT4gYXBwSWQuaWQpO1xuICAgICAgICB0aGlzLmFwcE5hbWVzID0gdGhpcy5hcHBsaWNhdGlvbklkcztcbiAgICAgICAgLy8gaWYoKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkID09PSAxMDM5MCB8fFxuICAgICAgICAvLyAgICAgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQgPT09IDEwNTMwKSAmJlxuICAgICAgICAvLyAgICAgdGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLmVtYWlsID09IFwic3JlZW5hdGhAaW50ZW50d2lzZS5jb21cIikge1xuICAgICAgICAvLyAgICAgdGhpcy5hcHBOYW1lcyA9IHRoaXMuYXBwbGljYXRpb25JZHMuZmlsdGVyKChuYW1lKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIChuYW1lICE9ICdhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2UnICYmIG5hbWUgIT0gJ2Fkc19hbWF6b25fY29udGVudF9jb250ZW50X2FuYWx5dGljcycpO1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgZm9yIChsZXQgYXBwTmFtZSBvZiBzb3J0ZWRNZW51bGlzdHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcE5hbWVzLmluZGV4T2YoYXBwTmFtZS5pZCkgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ICYmIGxpc3QuY2hpbGRyZW4gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBOYW1lLmlkID09ICdhZHNfYW1hem9uX2RzcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmNoaWxkcmVuICYmIGxpc3QuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIGxpc3QuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYW5hZ2VkU2VydmljZUFjYyAmJiBjaGlsZC5pZCA9PSBcImFtc19kc3Bfc2V0dGluZ3NcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4gPSBjaGlsZC5jaGlsZHJlbi5maWx0ZXIoc19jaGlsZCA9PiBzX2NoaWxkLmlkICE9PSAnYW1zX2RzcF9ydWxlcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5NZW51TGlzdC5wdXNoKGxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5NZW51TGlzdC5wdXNoKGxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXBwTmFtZS50eXBlICE9ICdleHBhbmRhYmxlJykge1xuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChsaXN0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLk1lbnVMaXN0O1xuICAgIH1cblxuXHRnZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGN1cnJlbnRNZW51SXRlbTphbnkpOiBhbnkge1xuXHRcdGxldCBtZW51SXRlbSA9IHtcblx0XHRcdGNoaWxkcmVuIDogW11cblx0XHR9O1xuXG5cdFx0aWYoY3VycmVudE1lbnVJdGVtLnR5cGUgIT0gJ2V4cGFuZGFibGUnKXtcblx0XHRcdGxldCBhbGxLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKTtcblx0XHRcdGNvbnN0IGhhc0NvbmRpdGlvbnN0b0NoZWNrID0gdGhpcy5jb25kaXRpb25zLnNvbWUoY29uZGl0aW9uID0+IGFsbEtleXMuaW5jbHVkZXMoY29uZGl0aW9uKSlcblx0XHRcdGlmKGhhc0NvbmRpdGlvbnN0b0NoZWNrKXtcblx0XHRcdFx0bGV0IGlzTWVudUFsbG93ZWQgPSB0aGlzLmNoZWNrQWxsQ29uZGl0aW9ucyhjdXJyZW50TWVudUl0ZW0sIHRoaXMuY29uZGl0aW9ucywgYWxsS2V5cyk7XG5cdFx0XHRcdGlmKGlzTWVudUFsbG93ZWQpe1xuXHRcdFx0XHRcdG1lbnVJdGVtID0gY3VycmVudE1lbnVJdGVtO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3JldHVybiBlbXB0eScpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0bWVudUl0ZW0gPSBjdXJyZW50TWVudUl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRsZXQgYWxsS2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnRNZW51SXRlbSk7XG5cdFx0XHRjb25zdCBoYXNDb25kaXRpb25zdG9DaGVjayA9IHRoaXMuY29uZGl0aW9ucy5zb21lKGNvbmRpdGlvbiA9PiBhbGxLZXlzLmluY2x1ZGVzKGNvbmRpdGlvbikpXG5cdFx0XHRpZighaGFzQ29uZGl0aW9uc3RvQ2hlY2sgfHwgKGhhc0NvbmRpdGlvbnN0b0NoZWNrICYmIHRoaXMuY2hlY2tBbGxDb25kaXRpb25zKGN1cnJlbnRNZW51SXRlbSwgdGhpcy5jb25kaXRpb25zLCBhbGxLZXlzKSkpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKS5mb3JFYWNoKChrZXkpPT57IFxuXHRcdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudE1lbnVJdGVtW2tleV0gIT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0XHRcdG1lbnVJdGVtW2tleV0gPSBjdXJyZW50TWVudUl0ZW1ba2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuID0gW107XG5cdFx0XHRcdGZvcihsZXQgY2hpbGQgb2YgY3VycmVudE1lbnVJdGVtLmNoaWxkcmVuKXtcblx0XHRcdFx0XHRsZXQgbmF2X21lbnUgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY2hpbGQpO1xuXHRcdFx0XHRcdGlmKG5hdl9tZW51ICE9IG51bGwpeyBcblx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuLnB1c2gobmF2X21lbnUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRtZW51SXRlbS5jaGlsZHJlbi5wdXNoKG5hdl9tZW51KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVxuXHRcdHJldHVybiBtZW51SXRlbTtcblx0fVxuXG5cdGdldEdsb2JhbFNldHRpbmdzTWVudShhcHBEZXRhaWxzIDogYW55LCBtZW51bGlzdHMpIHtcblx0XHR0aGlzLmFwcERldGFpbHMgPSBhcHBEZXRhaWxzO1x0XG5cdFx0dGhpcy5TZXR0aW5nc01lbnVMaXN0ID0gW107XG5cdFx0Y29uc3QgY2xvbmVkTWVudWxpc3RzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtZW51bGlzdHMgfHwgW10pKTtcblx0XHRsZXQgZ2xvYmFsU2V0dGluZ01lbnVzID0gY2xvbmVkTWVudWxpc3RzLmZpbHRlcihsaXN0PT4gbGlzdC5pZCA9PSAnYXBwX2dsb2JhbF9zZXR0aW5ncycpXG5cdFx0bGV0IEdMT0JBTF9TRVRUSU5HX0xJU1RfU09SVEVEID0gZ2xvYmFsU2V0dGluZ01lbnVzLnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID4gYi5vcmRlcikgPyAxIDogLTEpO1xuXHRcdGZvciAobGV0IGFwcE5hbWUgb2YgR0xPQkFMX1NFVFRJTkdfTElTVF9TT1JURUQpIHtcblx0XHRcdGlmKGFwcE5hbWUudHlwZSA9PSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHR0aGlzLnRyaW1HbG9iYWxTZXR0aW5nc0NoaWxkcmVuV2hlbk5vQWNjb3VudChhcHBOYW1lKTtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgJiYgbGlzdC5jaGlsZHJlbiAmJiBsaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdH1lbHNlIGlmKGFwcE5hbWUudHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XHRcdFxuXHRcdHJldHVybiB0aGlzLlNldHRpbmdzTWVudUxpc3Q7XG5cdH1cblxuXHRjaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtOiBhbnksIGNvbmRpdGlvbnMsIGFsbEtleXM6IHN0cmluZ1tdKTogYW55IHtcblx0XHQvLyBJbml0aWFsaXplIGFzIHRydWUgLSBhbGwgY29uZGl0aW9ucyBtdXN0IHBhc3MgKEFORCBsb2dpYylcblx0XHRsZXQgaW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdGlmKCghdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIGN1cnJlbnRNZW51SXRlbS5pZCA9PSBcImFkc19vdmVydmlld1wiICYmIFxuXHRcdFx0IXRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uWydub0FjdGl2ZUFjY291bnRzJ10pKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIGlmKGN1cnJlbnRNZW51SXRlbS5pZCA9PT0gXCJhZHNfc2lnbnVwX292ZXJ2aWV3XCIpIHtcblx0XHRcdGlmKCF0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb25bJ25vQWN0aXZlQWNjb3VudHMnXSl7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IobGV0IGNvbmQgb2YgY29uZGl0aW9ucyl7XG5cdFx0XHRpZihjdXJyZW50TWVudUl0ZW1bY29uZF0gIT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0bGV0IGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFxuXHRcdFx0XHRzd2l0Y2goY29uZCl7XG5cdFx0XHRcdFx0Y2FzZSAndmlzaWJpbGl0eV9yb2xlcyc6IHsgXG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yUm9sZXMoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICd2aXNpYmlsaXR5X3JvbGVzX25vdF9pbic6IHsgXG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdkaXNhYmxlX3JlYWRvbmx5X29yZyc6e1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5kaXNhYmxlRm9yT3Jnd2l0aFJlYWRPbmx5KGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9pZHMnIDoge1xuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdhbml6YXRpb25faWRzX25vdF9pbicgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHNOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24gJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnX3VzZXJfY3RybCc6e1xuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24gJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0Zvck9yZ1dpdGhVc2VyUm9sZShjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnYWNjb3VudF9pZHNfbm90X2luJyA6IHtcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRBY2NvdW50SWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y2FzZSAnbm90X2FjY291bnRfbmFtZScgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQpe1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yTm90QWNjTmFtZShjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdhY2NvdW50X3R5cGUnIDogeyBcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQudHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdhbml6YXRpb25fc2V0dGluZycgOiB7IFxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0Zvck9yZ1NldHRpbmdzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1jYXNlICdhcHBfb3JnX3NldHRpbmcnIDogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JPcmdBcHBTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnYXBwX29yZ19zZXR0aW5nX25vdF9pbic6IHtcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JPcmdBcHBTZXR0aW5nc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luJyA6IHsgXG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yTm90T3JnU2V0dGluZ3MoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHQvLyBUT0RPIDogVGhpcyBpcyB0ZW1wb3Jlcnkgc29sdXRpb24gZm9yIEFtYyBzcGFjaWZpYyBvcmcgc2V0dGluZyBjaGVjay5cblx0XHRcdFx0XHRjYXNlICdhcHBfc3BhY2lmaWNfY29uZmlnX2NoZWNrJzoge1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5hcHBTcGVjaWZpY0NvbmZpZyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdzaXRlSWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yU2l0ZUlkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ3NpdGVOb3RJZHMnIDogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JTaXRlTm90SWRzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAnc3Vic2NyaXB0aW9uX3R5cGVzJyA6IHsgXG5cdFx0XHRcdFx0XHRpZihjdXJyZW50TWVudUl0ZW1bJ2FjY291bnRfdHlwZSddID09IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuc3Vic2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclN1YnNjcmlwdGlvbnMoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvckFjY1R5cGUoY3VycmVudE1lbnVJdGVtKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ2NhbXBhaWduX3R5cGVzJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCl7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblR5cGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAndGFyZ2V0dGluZ190eXBlcyc6IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvclRhcmdldHRpbmdUeXBlKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ3RhcmdldHRpbmdfdHlwZXNfbm90X2luJzoge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9yTm90VGFyZ2V0dGluZ1R5cGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZycgOiB7IFxuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0KXtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0ZvckNhbXBhaWduVGFyZ2V0aW5nKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2luY29udGV4dF9jYW1wYWlnbl90YXJnZXRpbmdfd2FsbWFydCcgOiB7IFxuXHRcdFx0XHRcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0d2FsbWFydCl7XG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblRhcmdldGluZ1dhbG1hcnQoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAndXNlcl9lbWFpbHMnIDogeyBcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuYXV0aGVudGljYXRlVXNlck1haWxNZW51KGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnaGlkZV9mb3JfdXNlcicgOiB7XG5cdFx0XHRcdFx0XHRjb25kaXRpb25SZXN1bHQgPSB0aGlzLmNoZWNrRm9ySGlkZGVuVXNlclJvbGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ25nX2FwcF9zZXR0aW5nJzoge1xuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0NvbnRleHRTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnbmdfYXBwX3NldHRpbmdfbm90X2luJzoge1xuXHRcdFx0XHRcdFx0Y29uZGl0aW9uUmVzdWx0ID0gdGhpcy5jaGVja0NvbnRleHRTZXR0aW5nTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdjdXN0b21lcl90eXBlcyc6IHtcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tDdXN0b21lclR5cGVJbihjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2N1c3RvbWVyX3R5cGVzX25vdF9pbic6IHtcblx0XHRcdFx0XHRcdGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuY2hlY2tDdXN0b21lclR5cGVOb3RJbihjdXJyZW50TWVudUl0ZW1bY29uZF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGRlZmF1bHQ6IHsgXG5cdFx0XHRcdFx0Ly8gLy9zdGF0ZW1lbnRzOyBcblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfSBcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0Ly8gSWYgYW55IGNvbmRpdGlvbiBmYWlscywgdGhlIG1lbnUgc2hvdWxkIGJlIGhpZGRlbiAoQU5EIGxvZ2ljKVxuXHRcdFx0XHRpZighY29uZGl0aW9uUmVzdWx0KXtcblx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdGJyZWFrOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgY29uZGl0aW9uc1xuXHRcdFx0XHR9XHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdC8vIElmIGNvbmRpdGlvbiBpcyB1bmRlZmluZWQsIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSByZXN1bHQgKG5ldXRyYWwpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGluY2x1ZGVNZW51O1xuXHR9XG5cblx0Y2hlY2tGb3JOb3RBY2NOYW1lKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5uYW1lKSA9PSAtMSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvckNhbXBhaWduVHlwZShwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dFswXS5kYXRhVHlwZSkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JUYXJnZXR0aW5nVHlwZShwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdHZhciBhbGxvdyA9IGZhbHNlO1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dFswXS50YXJnZXRpbmdUeXBlKSA+PSAwKXtcblx0XHRcdGFsbG93ID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGFsbG93O1xuXHR9XG5cdGNoZWNrRm9yTm90VGFyZ2V0dGluZ1R5cGUocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHR2YXIgYWxsb3cgPSB0cnVlO1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dFswXS50YXJnZXRpbmdUeXBlKSA+PSAwKXtcblx0XHRcdGFsbG93ID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBhbGxvdztcblx0fVxuXHRjaGVja0ZvckNhbXBhaWduVGFyZ2V0aW5nKHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0ICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0WzBdLmNhbXBhaWduVGFyZ2V0aW5nKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yQ2FtcGFpZ25UYXJnZXRpbmdXYWxtYXJ0KHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLmNhbXBhaWduSW5Db250ZXh0d2FsbWFydCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dHdhbG1hcnRbMF0uY2FtcGFpZ25UYXJnZXRpbmcpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0YXV0aGVudGljYXRlVXNlck1haWxNZW51KHBvc3NpYmxlVmFsdWVzOiBhbnkpOmJvb2xlYW57XG5cdFx0cmV0dXJuIHBvc3NpYmxlVmFsdWVzICYmIHBvc3NpYmxlVmFsdWVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5lbWFpbCk7XG5cdH1cblxuXHRjaGVja0ZvclN1YnNjcmlwdGlvbnMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW57XG5cdFx0Zm9yKGxldCBzZXR0aW5ncyBvZiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuc3Vic2NyaXB0aW9uKXtcblx0XHRcdGlmKChwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHNldHRpbmdzLnR5cGUpID49IDApICYmIHNldHRpbmdzLnN0YXR1cyA9PSBcIkFDVElWRVwiKXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNoZWNrRm9yU2l0ZUlkcyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvICYmIHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQgJiYgcG9zc2libGVWYWx1ZXMuaW5jbHVkZXMoTnVtYmVyKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQpKSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JTaXRlTm90SWRzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8gJiYgdGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCAmJiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhOdW1iZXIodGhpcy5hcHBEZXRhaWxzLnNpZGViYXJJbmZvLnNpdGVJZCkpKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRPRE8gOiBUaGlzIGlzIHRlbXBvcmVyeSBzb2x1dGlvbiBmb3IgQW1jIHNwYWNpZmljIG9yZyBzZXR0aW5nIGNoZWNrLlxuXHRhcHBTcGVjaWZpY0NvbmZpZyhwb3NzaWJsZVZhbHVlczogQXJyYXk8U3RyaW5nPik6IGJvb2xlYW4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCByb2xlID0gWydTVVBFUl9BRE1JTicsICdTVVBFUl9BRE1JTl9SRUFEX09OTFknXTtcblx0XHRcdC8vIENoZWNrIHJvbGUgY29uZGl0aW9uIGFuZCBvcmcgc2V0dGluZyBpcyBhdmFpbGFibGl0eVxuXHRcdFx0aWYgKCFyb2xlLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSAmJiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGV0IGFsbG93ID0gZmFsc2U7XG5cblx0XHRcdFx0Ly8gVG8gdmVyaWZ5IGlmIHRoZSBvcmcgc2V0dGluZyBpcyBhdmFpbGFibGVcblx0XHRcdFx0XG5cdFx0XHRcdGxldCBrZXltYXRjaGVkID0gcG9zc2libGVWYWx1ZXMuc29tZSgoa2V5OiBTdHJpbmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmZpbmRJbmRleChmdW5jdGlvbiAoc2V0dGluZzogYW55KSB7IHJldHVybiBrZXkgPT0gc2V0dGluZy5zZXR0aW5nOyB9KSA+IC0xXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIFRvIHZlcmlmeSAgaWYgdGhlIG9yZyBzZXR0aW5nIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC9BY3RpdmVcblxuXHRcdFx0XHRsZXQgQWxsQWN0aXZlID0gcG9zc2libGVWYWx1ZXMuZXZlcnkoKGtleTogU3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncy5maW5kSW5kZXgoZnVuY3Rpb24gKHNldHRpbmc6IGFueSkgeyByZXR1cm4ga2V5ID09IHNldHRpbmcuc2V0dGluZyAmJiBzZXR0aW5nLnZhbHVlID09IFwiQUNUSVZFXCI7IH0pID4gLTFcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gSWYgTm8gb3JnIHNldHRpbmcgaXMgYXZhaWxhYmxlIE9SIHNldHRpbmcgaXMgYXZhaWxhYmxlIGJ1dCB3aXRoIGFjdGl2ZSBzdGF0dXNcblx0XHRcdFx0aWYgKCFrZXltYXRjaGVkIHx8IEFsbEFjdGl2ZSkge1xuXHRcdFx0XHRcdGFsbG93ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYWxsb3c7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjaGVja0Zvck9yZ1NldHRpbmdzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHR0cnl7XG5cdFx0XHR2YXIgYWxsb3cgPSBmYWxzZTtcblx0XHRcdGlmICh0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YWxsb3cgPSB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3Muc29tZShmdW5jdGlvbihvcmdTZXR0aW5nKXtcblx0XHRcdFx0XHRpZighb3JnU2V0dGluZy52YWx1ZSB8fCBvcmdTZXR0aW5nLnZhbHVlICYmIG9yZ1NldHRpbmcudmFsdWUgPT0gJ0FDVElWRScpIHtcblx0XHRcdFx0XHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhvcmdTZXR0aW5nLnNldHRpbmcpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0pXG5cdFx0XHRcdHJldHVybiBhbGxvdztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhbGxvdztcblx0XHRcdH1cblx0XHR9Y2F0Y2goZXJyb3Ipe1xuXHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcilcblx0XHR9XG5cdH1cblxuXHRjaGVja0Zvck9yZ0FwcFNldHRpbmdzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3Mpe1xuXHRcdFx0Zm9yKGxldCBzZXR0aW5ncyBvZiB0aGlzLmFwcERldGFpbHMub3JnQXBwU2V0dGluZ3Mpe1xuXHRcdFx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHNldHRpbmdzLnR5cGUpID49IDAgJiYgc2V0dGluZ3Muc3RhdHVzID09ICdBQ1RJVkUnKXtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRjaGVja0Zvck9yZ0FwcFNldHRpbmdzTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHRyeXtcblx0XHRcdHZhciBhbGxvdyA9IHRydWU7XG5cdFx0XHRpZiAodGhpcy5hcHBEZXRhaWxzLm9yZ0FwcFNldHRpbmdzICYmIHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFsbG93ID0gdGhpcy5hcHBEZXRhaWxzLm9yZ0FwcFNldHRpbmdzLnNvbWUoKG9yZ0FwcFNldHRpbmcpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKCFwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyhvcmdBcHBTZXR0aW5nLnR5cGUpIHx8IFxuXHRcdFx0XHRcdFx0XHQocG9zc2libGVWYWx1ZXMuaW5jbHVkZXMob3JnQXBwU2V0dGluZy50eXBlKSAmJiBcblx0XHRcdFx0XHRcdFx0b3JnQXBwU2V0dGluZy5zdGF0dXMgJiYgb3JnQXBwU2V0dGluZy5zdGF0dXMgPT0gJ0lOX0FDVElWRScpKVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdFx0fVxuXHRcdH1jYXRjaChlcnJvcil7XG5cdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKVxuXHRcdH1cblx0fVxuXG5cdGNoZWNrQ3VzdG9tZXJUeXBlSW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5jdXN0b21lclR5cGUgJiYgXG5cdFx0XHRwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5jdXN0b21lclR5cGUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdGNoZWNrQ3VzdG9tZXJUeXBlTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24uY3VzdG9tZXJUeXBlIHx8ICh0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5jdXN0b21lclR5cGUgJiYgXG5cdFx0XHQhcG9zc2libGVWYWx1ZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24uY3VzdG9tZXJUeXBlKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0bGV0IGFsbG93ID0gdHJ1ZTtcblx0XHRpZih0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gQ2hlY2sgaWYgYW55IG9mIHRoZSBzZXR0aW5ncyBpbiBwb3NzaWJsZVZhbHVlcyBhcmUgcHJlc2VudCBhbmQgYWN0aXZlXG5cdFx0XHRjb25zdCBoYXNBY3RpdmVSZXN0cmljdGVkU2V0dGluZyA9IHRoaXMuYXBwRGV0YWlscy5vcmdTZXR0aW5ncy5zb21lKGZ1bmN0aW9uKG9yZ1NldHRpbmcpe1xuXHRcdFx0XHRyZXR1cm4gcG9zc2libGVWYWx1ZXMuaW5jbHVkZXMob3JnU2V0dGluZy5zZXR0aW5nKSAmJiBcblx0XHRcdFx0XHQoIW9yZ1NldHRpbmcudmFsdWUgfHwgb3JnU2V0dGluZy52YWx1ZSA9PSAnQUNUSVZFJyk7XG5cdFx0XHR9KTtcblx0XHRcdC8vIElmIGFueSByZXN0cmljdGVkIHNldHRpbmcgaXMgYWN0aXZlLCBoaWRlIHRoZSBtZW51IChyZXR1cm4gZmFsc2UpXG5cdFx0XHQvLyBJZiBubyByZXN0cmljdGVkIHNldHRpbmdzIGFyZSBhY3RpdmUsIHNob3cgdGhlIG1lbnUgKHJldHVybiB0cnVlKVxuXHRcdFx0cmV0dXJuICFoYXNBY3RpdmVSZXN0cmljdGVkU2V0dGluZztcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiBhbGxvdztcblx0XHR9XG5cdH1cblx0XG5cdGNoZWNrQ29udGV4dFNldHRpbmdzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHR2YXIgYWxsb3cgPSBmYWxzZTtcblx0XHRpZih0aGlzLmFwcERldGFpbHMubmdPcmdTZXR0aW5ncyl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdGFsbG93ID0gdGhpcy5hcHBEZXRhaWxzLm5nT3JnU2V0dGluZ3NbaXRlbV07XG5cdFx0XHRcdGFsbG93ID0gYWxsb3cgPT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGFsbG93O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblxuXHRjaGVja0NvbnRleHRTZXR0aW5nTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHZhciBhbGxvdyA9IHRydWU7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm5nT3JnU2V0dGluZ3Mpe1xuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBwb3NzaWJsZVZhbHVlcykge1xuXHRcdFx0XHRhbGxvdyA9ICF0aGlzLmFwcERldGFpbHMubmdPcmdTZXR0aW5nc1tpdGVtXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFsbG93O1xuXHR9XG5cblx0Y2hlY2tGb3JBY2NUeXBlKG1lbnVJdGVtOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihtZW51SXRlbVsnYWNjb3VudF90eXBlJ10uaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQudHlwZSkgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdGlmKG1lbnVJdGVtWydzdWJzY3JpcHRpb25fdHlwZXMnXSl7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNoZWNrRm9yU3Vic2NyaXB0aW9ucyhtZW51SXRlbVsnc3Vic2NyaXB0aW9uX3R5cGVzJ10pXG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHMocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlc1swXS5pZCl7XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdGlmKCBpdGVtLmlkID09PSBpZCApe1xuXHRcdFx0XHRcdE9iamVjdC5rZXlzKGl0ZW0pLmZvckVhY2goKGtleSk9PnsgXG5cdFx0XHRcdFx0XHRpZiAoa2V5ICE9ICdpZCcpIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudE1lbnVJdGVtW2tleV0gPSBpdGVtW2tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnTGluayBjaGFuZ2VkIHRvICcrY3VycmVudE1lbnVJdGVtLmxpbmsrJyBhbmQgcm91dGUgY2hhbmdlZCB0byAnK2N1cnJlbnRNZW51SXRlbS5yb3V0ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoaWQpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JPcmdXaXRoVXNlclJvbGUocG9zc2libGVWYWx1ZXM6IGFueSAsIGN1cnJlbnRNZW51SXRlbTphbnkgLCBpZDpudW1iZXIpOiBib29sZWFuIHtcblx0XHRsZXQgYWxsb3cgPSB0cnVlO1xuXHRcdGlmIChwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR2YXIgZmxhZ0FycmF5ID0gW107XG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHBvc3NpYmxlVmFsdWVzKSB7XG5cdFx0XHRcdHZhciBhbGxLZXlzID0gT2JqZWN0LmtleXMoaXRlbSk7XG5cdFx0XHRcdHZhciBmbGFnID0gdGhpcy5jaGVja0FsbENvbmRpdGlvbnMoaXRlbSwgYWxsS2V5cywgYWxsS2V5cylcblx0XHRcdFx0ZmxhZ0FycmF5LnB1c2goZmxhZyk7XG5cdFx0XHR9XG5cdFx0XHRhbGxvdyA9IGZsYWdBcnJheS5pbmNsdWRlcyh0cnVlKSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFxuXHRcdH1cblx0XHRyZXR1cm4gYWxsb3c7XG5cdH1cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZEFjY291bnRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclJvbGVzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKXtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjaGVja0ZvcnZpc2liaWxpdHlSb2xlc05vdEluKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5sZW5ndGggPiAwKXtcblx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDApe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y2hlY2tGb3JIaWRkZW5Vc2VyUm9sZShwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYocG9zc2libGVWYWx1ZXMgJiYgcG9zc2libGVWYWx1ZXMubGVuZ3RoID4gMCl7XG5cdFx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSA+PSAwICYmIHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5pc0hpZGRlblVzZXIpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgZGlzYWJsZUZvck9yZ3dpdGhSZWFkT25seShwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSA9PT0gJ1JFQURfT05MWScgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpID49IDApe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdiBKU09OIHNoYXBlIGZvciBsZWdhY3kgQW5ndWxhckpTIGFkbWluIHNjcmVlbnM6IGBsaW5rYCBpcyB0aGUgdWktcm91dGVyIHN0YXRlIHByZWZpeCAoYHRyaWFuZ3VsYXIuKmApXG5cdCAqIGFuZCBgcm91dGVgIGlzIHRoZSBoYXNoIFVSTCAoYCMhLy4uLmApLiBDcm9zcy1hcHAgY2xpY2tzIChlLmcuIFVzZXIgQWNjZXNzIGZyb20gV2FsbWFydCkgbXVzdCB1c2UgYHJvdXRlYFxuXHQgKiBwbHVzIGN1cnJlbnQgYGFwcElkYCwgbm90IGBvcmlnaW4vdHJpYW5ndWxhci4uLi5gLlxuXHQgKiBEb2VzIG5vdCBtYXRjaCB0ZXN0IGZpeHR1cmVzIHRoYXQgc3dhcCByb3V0ZS9saW5rIGZvciB0cmlhbmd1bGFyIHZzIGhhc2guXG5cdCAqL1xuXHRwdWJsaWMgc2hvdWxkVXNlSGFzaFJvdXRlRm9yQ3Jvc3NBcHBIb3N0TmF2KG1lbnU6IHsgcm91dGU/OiBzdHJpbmc7IGxpbms/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIShcblx0XHRcdG1lbnUgJiZcblx0XHRcdHR5cGVvZiBtZW51LmxpbmsgPT09ICdzdHJpbmcnICYmXG5cdFx0XHRtZW51LmxpbmsuaW5kZXhPZigndHJpYW5ndWxhci4nKSA9PT0gMCAmJlxuXHRcdFx0dHlwZW9mIG1lbnUucm91dGUgPT09ICdzdHJpbmcnICYmXG5cdFx0XHRtZW51LnJvdXRlLmluZGV4T2YoJyMnKSA+PSAwXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUocm91dGUgLCBhcHBsaWNhdGlvbklkPXVuZGVmaW5lZCkge1xuXHRcdC8vIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHJvdXRlKSA9PSAtMSkge1xuXHRcdFx0dGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcblx0XHRcdFx0aWYgKGFwcGxpY2F0aW9uSWQpIHtcblx0XHRcdFx0XHRwYXJhbXMgPSB7Li4ucGFyYW1zLCAuLi5hcHBsaWNhdGlvbklkfTtcdFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJvdXRlLmluZGV4T2YoJz8nKSA+IC0xICYmIHJvdXRlLmluZGV4T2YoJ3VzZXJtZ210JykgPiAtMSl7XG5cdFx0XHRcdFx0cm91dGUgPSByb3V0ZS5zcGxpdCgnPycpWzBdO1xuXHRcdFx0XHRcdGxldCBuZXdRUGFyYW0gPSB7IHVzZXJtZ210IDogdHJ1ZX1cblx0XHRcdFx0XHRwYXJhbXMgPSB7IC4uLnBhcmFtcyAsIC4uLm5ld1FQYXJhbX1cblx0XHRcdFx0fVxuXHRcdFx0XHRsZXQgdXJsVG9OYXZpZ2F0ZSA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2UucHJlcGFyZVVybFdpdGhRdWVyeVBhcmFtcyhyb3V0ZSwgcGFyYW1zKTtcblx0XHRcdFx0dXJsVG9OYXZpZ2F0ZSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59LyR7dXJsVG9OYXZpZ2F0ZX1gXG5cdFx0XHRcdC8vIHVybFRvTmF2aWdhdGUgPSBgaHR0cDovL2xvY2FsaG9zdDozMDAwLyR7dXJsVG9OYXZpZ2F0ZX1gXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdOYXZpZ2F0aW5nIHRvIC0gJyx1cmxUb05hdmlnYXRlKTtcblx0XHRcdFx0d2luZG93Lm9wZW4odXJsVG9OYXZpZ2F0ZSwgJ19zZWxmJyk7XG5cdFx0XHR9KTtcblx0XHQvLyB9XG4gICAgfVxuXHRcblx0cHVibGljIGZldGNoS2V5VmFsdWUoa2V5OiBzdHJpbmcpIHtcblx0XHRpZih0aGlzLmFwcERldGFpbHMgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50KSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudFtrZXldKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdFxuXHR9XG5cblx0cHVibGljIHNldEFjdGl2ZVJlY29Db3VudChjb3VudDpudW1iZXIpe1xuXHRcdHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudFsnYWN0aXZlUmVjb21tZW5kYXRpb24nXSA9IGNvdW50O1xuXHR9XG5cdFxuXHRwdWJsaWMgaXNIYXZpbmdBbnlBY3RpdmVTdWJzKGlkLHN1YnMsdHlwZSl7XG4gICAgaWYoaWQgPT09ICdhZHNfYW1hem9uX2F0dHJpYnV0aW9uJyAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdBTVNfQVRUUklCVVRJT04nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmKGlkID09PSAnYWRzX2FtYXpvbl9kc3AnICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0RTUCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoKGlkID09PSAnYWRzX2FtYXpvbl9jb250ZW50JykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQ09OVEVOVCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoKGlkID09PSAnYWRzX2luc3RhY2FydCcpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0lOU1RBQ0FSVCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9ZWxzZSBpZigoaWQgPT09ICdhZHNfY3JpdGVvJykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnQ1JJVEVPJykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoKGlkID09PSAnYWRzX3dhbG1hcnQnKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdXQUxNQVJUJykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoaWQgPT09ICdhZHNfZGF0YV9wbGF0Zm9ybSd8fCBpZCA9PT0gJ2FtYy1wbGF0Zm9ybS13ZWInIHx8IGlkID09PSAnYWRzX2FtYXpvbl9zZWxsZXInKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1lbHNlIGlmKGlkID09PSAnYWRzX2FtYXpvbl9hZHZlcnRpc2luZycgfHwgaWQgPT09ICdhZHNfdmVuZG9yX3NhbGVzJyB8fCBpZCA9PT0gJ2Fkc19zZWxsZXJfc2FsZXMnKSB7XG4gICAgICBmb3IobGV0IHNldHRpbmdzIG9mIHN1YnMpe1xuICAgICAgICBpZihzZXR0aW5ncy50eXBlICE9IHR5cGUgJiYgc2V0dGluZ3Muc3RhdHVzID09IFwiQUNUSVZFXCIpe1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICBcdH1cblxuXHRwdWJsaWMgY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgYWNjVHlwZSAsc3ViVHlwZSkge1xuXHRcdGlmKHN1YlR5cGUgPT09IGFjY1R5cGUpe1xuXHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50VHlwZVN1YiA9IHN1YnMuZmlsdGVyKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udHlwZSA9PT0gc3ViVHlwZSk7XG5cdFx0aWYoY3VycmVudFR5cGVTdWIubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudFR5cGVTdWJbMF0uc3RhdHVzID09PSAnQUNUSVZFJyB8fCBjdXJyZW50VHlwZVN1YlswXS50eXBlID09PSBhY2NUeXBlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRBcHBsaWNhdGlvbklEKCkge1xuXHRcdGxldCB1cmxBcnJheSA9IHRoaXMudXJsQ29udGV4dFNlcnZpY2Uucm91dGVyLnVybC5zcGxpdCgnLycpO1xuXHRcdGxldCBjdXJyZW50Um91dGUgPSB1cmxBcnJheVt1cmxBcnJheS5sZW5ndGggLSAxXTtcblx0XHRcblx0XHRpZih0aGlzLmNvbnRlbnRBcHBSb3V0ZXMuaW5kZXhPZihjdXJyZW50Um91dGUpPi0xICkge1xuXHRcdFx0cmV0dXJuIFwiYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzXCI7XG5cdFx0fSBlbHNlIGlmKHRoaXMuc292QXBwUm91dGVzLmluZGV4T2YoY3VycmVudFJvdXRlKT4tMSkge1xuXHRcdFx0cmV0dXJuIFwiYWRzX2FtYXpvbl9jb250ZW50X3NoYXJlX29mX3ZvaWNlXCI7XG5cdFx0fVxuXHR9XG59Il19
|