@datagrok-libraries/utils 3.1.4 → 3.3.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.
@@ -45,28 +45,34 @@ class HistoryPanelStore {
45
45
  return this.allRuns.value.filter((run) => run.options['isShared']);
46
46
  }
47
47
  get filteredMyRuns() {
48
- return this.myRuns.filter((val) => {
49
- const startedAfter = (this.filteringOptions.startedAfter ? val.started > this.filteringOptions.startedAfter : true);
50
- const titleContainsText = (!this.filteringOptions.text.length) ? true : (!!val.options['title']) ? val.options['title'].includes(this.filteringOptions.text) : false;
51
- const descContainsText = (!this.filteringOptions.text.length) ? true : (!!val.options['description']) ? val.options['description'].includes(this.filteringOptions.text) : false;
52
- return (titleContainsText || descContainsText) && startedAfter;
48
+ return this.myRuns.filter((run) => {
49
+ const startedAfter = (this.filteringOptions.startedAfter ? run.started > this.filteringOptions.startedAfter : true);
50
+ const titleContainsText = (!this.filteringOptions.text.length) ? true : (!!run.options['title']) ? run.options['title'].includes(this.filteringOptions.text) : false;
51
+ const descContainsText = (!this.filteringOptions.text.length) ? true : (!!run.options['description']) ? run.options['description'].includes(this.filteringOptions.text) : false;
52
+ const hasTags = (!this.filteringOptions.tags || this.filteringOptions.tags.length === 0) ? true :
53
+ (!!run.options['tags']) ? this.filteringOptions.tags.every((searchedTag) => run.options['tags'].includes(searchedTag)) : false;
54
+ return (titleContainsText || descContainsText) && startedAfter && hasTags;
53
55
  });
54
56
  }
55
57
  get filteredFavoriteRuns() {
56
- return this.favoriteRuns.filter((val) => {
57
- const startedAfter = (this.filteringOptions.startedAfter ? val.started > this.filteringOptions.startedAfter : true);
58
- const titleContainsText = (!this.filteringOptions.text.length) ? true : (!!val.options['title']) ? val.options['title'].includes(this.filteringOptions.text) : false;
59
- const descContainsText = (!this.filteringOptions.text.length) ? true : (!!val.options['description']) ? val.options['description'].includes(this.filteringOptions.text) : false;
60
- return (titleContainsText || descContainsText) && startedAfter;
58
+ return this.favoriteRuns.filter((run) => {
59
+ const startedAfter = (this.filteringOptions.startedAfter ? run.started > this.filteringOptions.startedAfter : true);
60
+ const titleContainsText = (!this.filteringOptions.text.length) ? true : (!!run.options['title']) ? run.options['title'].includes(this.filteringOptions.text) : false;
61
+ const descContainsText = (!this.filteringOptions.text.length) ? true : (!!run.options['description']) ? run.options['description'].includes(this.filteringOptions.text) : false;
62
+ const hasTags = (!this.filteringOptions.tags || this.filteringOptions.tags.length === 0) ? true :
63
+ (!!run.options['tags']) ? this.filteringOptions.tags.every((searchedTag) => run.options['tags'].includes(searchedTag)) : false;
64
+ return (titleContainsText || descContainsText) && startedAfter && hasTags;
61
65
  });
62
66
  }
63
67
  get filteredSharedRuns() {
64
- return this.sharedRuns.filter((val) => {
65
- const isAuthored = this.filteringOptions.author ? val.author.id === this.filteringOptions.author.id : true;
66
- const startedAfter = (this.filteringOptions.startedAfter ? val.started > this.filteringOptions.startedAfter : true);
67
- const titleContainsText = (!this.filteringOptions.text.length) ? true : (!!val.options['title']) ? val.options['title'].includes(this.filteringOptions.text) : false;
68
- const descContainsText = (!this.filteringOptions.text.length) ? true : (!!val.options['description']) ? val.options['description'].includes(this.filteringOptions.text) : false;
69
- return (titleContainsText || descContainsText) && startedAfter && isAuthored;
68
+ return this.sharedRuns.filter((run) => {
69
+ const isAuthored = this.filteringOptions.author ? run.author.id === this.filteringOptions.author.id : true;
70
+ const startedAfter = (this.filteringOptions.startedAfter ? run.started > this.filteringOptions.startedAfter : true);
71
+ const titleContainsText = (!this.filteringOptions.text.length) ? true : (!!run.options['title']) ? run.options['title'].includes(this.filteringOptions.text) : false;
72
+ const descContainsText = (!this.filteringOptions.text.length) ? true : (!!run.options['description']) ? run.options['description'].includes(this.filteringOptions.text) : false;
73
+ const hasTags = (!this.filteringOptions.tags || this.filteringOptions.tags.length === 0) ? true :
74
+ (!!run.options['tags']) ? this.filteringOptions.tags.every((searchedTag) => run.options['tags'].includes(searchedTag)) : false;
75
+ return (titleContainsText || descContainsText) && startedAfter && isAuthored && hasTags;
70
76
  });
71
77
  }
72
78
  }
@@ -74,106 +80,6 @@ const MY_PANE_LABEL = 'HISTORY';
74
80
  const FAVORITES_LABEL = 'FAVORITES';
75
81
  const SHARED_LABEL = 'SHARED';
76
82
  export class HistoryPanel {
77
- constructor(func) {
78
- this.func = func;
79
- // Emitted when FuncCall should is chosen. Contains FuncCall ID
80
- this.onRunChosen = new Subject();
81
- // Emitted when FuncCall is added to favorites
82
- this.beforeRunAddToFavorites = new Subject();
83
- // Emitted when FuncCall is added to shared
84
- this.beforeRunAddToShared = new Subject();
85
- // Emitted when FuncCall is removed from favorites
86
- this.beforeRunRemoveFromFavorites = new Subject();
87
- // Emitted when FuncCall is removed from shared
88
- this.beforeRunRemoveFromShared = new Subject();
89
- // Emitted when FuncCall is deleted
90
- this.beforeRunDeleted = new Subject();
91
- // Emitted when FuncCall is added to favorites
92
- this.afterRunAddToFavorites = new Subject();
93
- // Emitted when FuncCall is added to shared
94
- this.afterRunAddToShared = new Subject();
95
- // Emitted when FuncCall is removed from favorites
96
- this.afterRunRemoveFromFavorites = new Subject();
97
- // Emitted when FuncCall is removed from shared
98
- this.afterRunRemoveFromShared = new Subject();
99
- // Emitted when FuncCall is deleted
100
- this.afterRunDeleted = new Subject();
101
- this.store = new HistoryPanelStore();
102
- this.myRunsFilter = new Subject();
103
- this.favRunsFilter = new Subject();
104
- this.sharedRunsFilter = new Subject();
105
- this.allRunsFetch = new Subject();
106
- this.historyTab = ui.div();
107
- this.favTab = ui.div();
108
- this.sharedTab = ui.div();
109
- this.filterPane = ui.div();
110
- this.tabs = ui.tabControl({
111
- [MY_PANE_LABEL]: ui.box(this.historyTab),
112
- [FAVORITES_LABEL]: ui.box(this.favTab),
113
- [SHARED_LABEL]: ui.box(this.sharedTab),
114
- });
115
- this._root = ui.divV([
116
- this.tabs.root,
117
- ], { style: { width: '100%', height: '100%' } });
118
- this.myCards = [];
119
- this.favoriteCards = [];
120
- this.sharedCards = [];
121
- this.myPaneFilter = this.buildFilterPane(MY_PANE_LABEL);
122
- this.favoritesPaneFilter = this.buildFilterPane(FAVORITES_LABEL);
123
- this.sharedPaneFilter = this.buildFilterPane(SHARED_LABEL);
124
- this.tabs.root.style.width = '100%';
125
- this.tabs.root.style.height = '100%';
126
- this.myRunsFilter.subscribe(() => this.updateMyPane(this.store.filteredMyRuns));
127
- this.favRunsFilter.subscribe(() => this.updateFavoritesPane(this.store.filteredFavoriteRuns));
128
- this.sharedRunsFilter.subscribe(() => this.updateSharedPane(this.store.filteredSharedRuns));
129
- this.store.allRuns.subscribe(() => {
130
- this.updateMyPane(this.store.filteredMyRuns);
131
- this.updateFavoritesPane(this.store.filteredFavoriteRuns);
132
- this.updateSharedPane(this.store.filteredSharedRuns);
133
- });
134
- this.allRunsFetch.subscribe(() => __awaiter(this, void 0, void 0, function* () {
135
- ui.setUpdateIndicator(this.root, true);
136
- const allRuns = (yield historyUtils.pullRunsByName(this.func.name, [], { order: 'started' }, ['session.user', 'options'])).reverse();
137
- this.store.allRuns.next(allRuns);
138
- ui.setUpdateIndicator(this.root, false);
139
- }));
140
- const clearMetadata = (funcCall) => {
141
- if (!funcCall.options['isFavorite'] && !funcCall.options['isShared']) {
142
- funcCall.options['title'] = null;
143
- funcCall.options['description'] = null;
144
- }
145
- };
146
- this.afterRunAddToFavorites.subscribe((added) => {
147
- const editedRun = this.store.allRuns.value.find((call) => call.id === added.id);
148
- editedRun.options['title'] = added.options['title'];
149
- editedRun.options['description'] = added.options['description'];
150
- editedRun.options['isFavorite'] = true;
151
- this.store.allRuns.next(this.store.allRuns.value);
152
- });
153
- this.afterRunAddToShared.subscribe((added) => {
154
- const editedRun = this.store.allRuns.value.find((call) => call.id === added.id);
155
- editedRun.options['title'] = added.options['title'];
156
- editedRun.options['description'] = added.options['description'];
157
- editedRun.options['isShared'] = true;
158
- this.store.allRuns.next(this.store.allRuns.value);
159
- });
160
- this.afterRunRemoveFromFavorites.subscribe((removed) => {
161
- const editedRun = this.store.allRuns.value.find((call) => call.id === removed.id);
162
- editedRun.options['isFavorite'] = false;
163
- clearMetadata(editedRun);
164
- this.store.allRuns.next(this.store.allRuns.value);
165
- });
166
- this.afterRunRemoveFromShared.subscribe((removed) => {
167
- const editedRun = this.store.allRuns.value.find((call) => call.id === removed.id);
168
- editedRun.options['isShared'] = false;
169
- clearMetadata(editedRun);
170
- this.store.allRuns.next(this.store.allRuns.value);
171
- });
172
- this.afterRunDeleted.subscribe((id) => {
173
- this.store.allRuns.next(this.store.allRuns.value.filter((call) => call.id !== id));
174
- });
175
- this.allRunsFetch.next();
176
- }
177
83
  buildFilterPane(currentTabName) {
178
84
  return ui.wait(() => __awaiter(this, void 0, void 0, function* () {
179
85
  const filteringText = new Subject();
@@ -198,11 +104,44 @@ export class HistoryPanel {
198
104
  this.sharedRunsFilter.next();
199
105
  });
200
106
  authorInput.root.style.display = 'none';
107
+ let tagInput = ui.choiceInput('Tag', 'Choose tag to filter', ['Choose tag to filter']);
108
+ const filterTagEditor = DG.TagEditor.create();
109
+ const dummyInput = ui.stringInput(' ', '');
110
+ dummyInput.input.replaceWith(filterTagEditor.root);
111
+ filterTagEditor.onChanged(() => {
112
+ //@ts-ignore
113
+ this.store.filteringOptions.tags = filterTagEditor.tags.filter((tag) => !!tag);
114
+ this.myRunsFilter.next();
115
+ this.favRunsFilter.next();
116
+ this.sharedRunsFilter.next();
117
+ });
118
+ this.store.allRuns.subscribe(() => {
119
+ const tags = this.store.allRuns.value
120
+ .map((run) => run.options['tags'])
121
+ .reduce((acc, runTags) => {
122
+ if (!!runTags)
123
+ runTags.forEach((runTag) => { if (!acc.includes(runTag))
124
+ acc.push(runTag); });
125
+ return acc;
126
+ }, []);
127
+ const newTagInput = ui.choiceInput('Tag', 'Choose tag to filter', ['Choose tag to filter', ...tags]);
128
+ tagInput.root.replaceWith(newTagInput.root);
129
+ tagInput = newTagInput;
130
+ tagInput.onChanged(() => {
131
+ if (tagInput.value &&
132
+ tagInput.value !== 'Choose tag to filter' &&
133
+ //@ts-ignore
134
+ !filterTagEditor.tags.includes(tagInput.value))
135
+ filterTagEditor.addTag(tagInput.value);
136
+ });
137
+ });
201
138
  dateInput.addPatternMenu('datetime');
202
139
  const form = ui.divV([
203
140
  textInput,
204
141
  dateInput,
205
142
  authorInput,
143
+ tagInput,
144
+ dummyInput,
206
145
  ], 'ui-form ui-form-wide ui-form-left');
207
146
  if (currentTabName === MY_PANE_LABEL) {
208
147
  dateInput.root.style.removeProperty('display');
@@ -232,32 +171,35 @@ export class HistoryPanel {
232
171
  }
233
172
  ;
234
173
  updateSharedPane(sharedRuns) {
235
- const newTab = (sharedRuns.length > 0) ? this.renderSharedCards(sharedRuns) : ui.divText('No runs are marked as shared', 'no-elements-label');
236
- this.sharedTab.replaceWith(ui.divV([
174
+ const sharedCards = (sharedRuns.length > 0) ? this.renderSharedCards(sharedRuns) : ui.divText('No runs are marked as shared', 'no-elements-label');
175
+ const sharedTab = ui.divV([
237
176
  this.sharedPaneFilter,
238
177
  ui.element('div', 'splitbar-horizontal'),
239
- newTab
240
- ]));
241
- this.sharedTab = newTab;
178
+ sharedCards
179
+ ]);
180
+ this.sharedTab.replaceWith(sharedTab);
181
+ this.sharedTab = sharedTab;
242
182
  }
243
183
  ;
244
184
  updateFavoritesPane(favoriteRuns) {
245
- const newTab = (favoriteRuns.length > 0) ? this.renderFavoriteCards(favoriteRuns) : ui.divText('No runs are marked as favorites', 'no-elements-label');
246
- this.favTab.replaceWith(ui.divV([
185
+ const favCards = (favoriteRuns.length > 0) ? this.renderFavoriteCards(favoriteRuns) : ui.divText('No runs are marked as favorites', 'no-elements-label');
186
+ const favTab = ui.divV([
247
187
  this.favoritesPaneFilter,
248
188
  ui.element('div', 'splitbar-horizontal'),
249
- newTab
250
- ]));
251
- this.favTab = newTab;
189
+ favCards
190
+ ]);
191
+ this.favTab.replaceWith(favTab);
192
+ this.favTab = favTab;
252
193
  }
253
194
  ;
254
195
  updateMyPane(myRuns) {
255
- const newTab = (myRuns.length > 0) ? this.renderHistoryCards(myRuns) : ui.divText('No runs are found in history', 'no-elements-label');
256
- this.historyTab.replaceWith(ui.divV([
196
+ const myCards = (myRuns.length > 0) ? this.renderHistoryCards(myRuns) : ui.divText('No runs are found in history', 'no-elements-label');
197
+ const newTab = ui.divV([
257
198
  this.myPaneFilter,
258
199
  ui.element('div', 'splitbar-horizontal'),
259
- newTab
260
- ]));
200
+ myCards
201
+ ]);
202
+ this.historyTab.replaceWith(newTab);
261
203
  this.historyTab = newTab;
262
204
  }
263
205
  ;
@@ -292,6 +234,8 @@ export class HistoryPanel {
292
234
  cardLabel,
293
235
  ui.span([dateStarted]),
294
236
  ...(funcCall.options['description']) ? [ui.divText(funcCall.options['description'], 'description')] : [],
237
+ ...(funcCall.options['tags'] && funcCall.options['tags'].length > 0) ?
238
+ [ui.div(funcCall.options['tags'].map((tag) => ui.span([tag], 'd4-tag')))] : [],
295
239
  ], 'cv-card-content'),
296
240
  ]),
297
241
  ui.divH([
@@ -306,7 +250,8 @@ export class HistoryPanel {
306
250
  allCards.forEach((c) => c.classList.remove('clicked'));
307
251
  card.classList.add('clicked');
308
252
  }));
309
- ui.tooltip.bind(card, () => ui.tableFromMap(Object.assign(Object.assign({ Author: grok.shell.user.toMarkup(), Date: dateStarted }, (funcCall.options['title']) ? { 'Title': funcCall.options['title'] } : {}), (funcCall.options['description']) ? { 'Description': funcCall.options['description'] } : {})));
253
+ ui.tooltip.bind(card, () => ui.tableFromMap(Object.assign(Object.assign(Object.assign({ Author: grok.shell.user.toMarkup(), Date: dateStarted }, (funcCall.options['title']) ? { 'Title': funcCall.options['title'] } : {}), (funcCall.options['description']) ? { 'Description': funcCall.options['description'] } : {}), (funcCall.options['tags'] && funcCall.options['tags'].length > 0) ?
254
+ { 'Tags': ui.div(funcCall.options['tags'].map((tag) => ui.span([tag], 'd4-tag')), 'd4-tag-editor') } : {})));
310
255
  return card;
311
256
  }
312
257
  showEditDialog(funcCall) {
@@ -314,37 +259,44 @@ export class HistoryPanel {
314
259
  const dlg = ui.dialog({ title: 'Edit run' });
315
260
  let title = (_a = funcCall.options['title']) !== null && _a !== void 0 ? _a : '';
316
261
  let description = (_b = funcCall.options['description']) !== null && _b !== void 0 ? _b : '';
317
- const titleInput = ui.stringInput('Title', title, (s) => {
318
- title = s;
319
- if (s.length === 0) {
320
- titleInput.setTooltip('Title cannot be empty');
321
- setTimeout(() => titleInput.input.classList.add('d4-invalid'), 100);
322
- dlg.getButton('OK').disabled = true;
323
- }
324
- else {
325
- titleInput.setTooltip('');
326
- setTimeout(() => titleInput.input.classList.remove('d4-invalid'), 100);
327
- dlg.getButton('OK').disabled = false;
328
- }
329
- });
262
+ const titleInput = ui.stringInput('Title', title, (s) => title = s);
330
263
  let isShared = (_c = funcCall.options['isShared']) !== null && _c !== void 0 ? _c : false;
331
264
  let isFavorite = (_d = funcCall.options['isFavorite']) !== null && _d !== void 0 ? _d : false;
265
+ const tagsLine = DG.TagEditor.create();
266
+ (funcCall.options['tags'] || []).forEach((tag) => {
267
+ tagsLine.addTag(tag);
268
+ });
269
+ const dummyInput = ui.stringInput(' ', '');
270
+ dummyInput.input.replaceWith(tagsLine.root);
271
+ const tagInput = ui.stringInput('Tag', '');
272
+ tagInput.addOptions(ui.iconFA('plus', () => {
273
+ if (tagInput.value === '')
274
+ return;
275
+ tagsLine.addTag(tagInput.value);
276
+ tagInput.value = '';
277
+ }));
332
278
  dlg.add(ui.form([
333
279
  titleInput,
334
280
  ui.stringInput('Description', description, (s) => { description = s; }),
335
281
  ui.boolInput('Favorites', isFavorite, (b) => isFavorite = b),
336
282
  ui.boolInput('Share', isShared, (b) => isShared = b),
283
+ tagInput,
284
+ dummyInput
337
285
  ]))
338
286
  .onOK(() => __awaiter(this, void 0, void 0, function* () {
339
287
  funcCall = yield historyUtils.loadRun(funcCall.id);
340
- funcCall.options['title'] = title;
341
- funcCall.options['description'] = description;
288
+ funcCall.options['title'] = title !== '' ? title : null;
289
+ funcCall.options['description'] = description !== '' ? description : null;
290
+ funcCall.options['tags'] = tagsLine.tags;
342
291
  if (!!isShared === !!funcCall.options['isShared'] && !!isFavorite === !!funcCall.options['isFavorite']) {
292
+ ui.setUpdateIndicator(this.tabs.root, true);
343
293
  yield historyUtils.saveRun(funcCall);
344
294
  const editedRun = this.store.allRuns.value.find((call) => call.id === funcCall.id);
345
- editedRun.options['title'] = funcCall.options['title'];
346
- editedRun.options['description'] = funcCall.options['description'];
295
+ editedRun.options['title'] = title !== '' ? title : null;
296
+ editedRun.options['description'] = description !== '' ? description : null;
297
+ editedRun.options['tags'] = funcCall.options['tags'];
347
298
  this.store.allRuns.next(this.store.allRuns.value);
299
+ ui.setUpdateIndicator(this.tabs.root, false);
348
300
  return;
349
301
  }
350
302
  if (isShared && !funcCall.options['isShared']) {
@@ -372,8 +324,7 @@ export class HistoryPanel {
372
324
  ui.setUpdateIndicator(this.tabs.root, false);
373
325
  }
374
326
  }))
375
- .show({ center: true });
376
- titleInput.fireChanged();
327
+ .show({ center: true, width: 500 });
377
328
  }
378
329
  renderFavoriteCards(funcCalls) {
379
330
  this.favoriteCards = funcCalls.map((funcCall) => this.renderCard(funcCall));
@@ -390,6 +341,102 @@ export class HistoryPanel {
390
341
  return ui.divV(this.myCards, { style: { height: '100%' } });
391
342
  }
392
343
  ;
344
+ constructor(func) {
345
+ this.func = func;
346
+ // Emitted when FuncCall should is chosen. Contains FuncCall ID
347
+ this.onRunChosen = new Subject();
348
+ // Emitted when FuncCall is added to favorites
349
+ this.beforeRunAddToFavorites = new Subject();
350
+ // Emitted when FuncCall is added to shared
351
+ this.beforeRunAddToShared = new Subject();
352
+ // Emitted when FuncCall is removed from favorites
353
+ this.beforeRunRemoveFromFavorites = new Subject();
354
+ // Emitted when FuncCall is removed from shared
355
+ this.beforeRunRemoveFromShared = new Subject();
356
+ // Emitted when FuncCall is deleted
357
+ this.beforeRunDeleted = new Subject();
358
+ // Emitted when FuncCall is added to favorites
359
+ this.afterRunAddToFavorites = new Subject();
360
+ // Emitted when FuncCall is added to shared
361
+ this.afterRunAddToShared = new Subject();
362
+ // Emitted when FuncCall is removed from favorites
363
+ this.afterRunRemoveFromFavorites = new Subject();
364
+ // Emitted when FuncCall is removed from shared
365
+ this.afterRunRemoveFromShared = new Subject();
366
+ // Emitted when FuncCall is deleted
367
+ this.afterRunDeleted = new Subject();
368
+ this.store = new HistoryPanelStore();
369
+ this.myRunsFilter = new Subject();
370
+ this.favRunsFilter = new Subject();
371
+ this.sharedRunsFilter = new Subject();
372
+ this.allRunsFetch = new Subject();
373
+ this.historyTab = ui.div();
374
+ this.favTab = ui.div();
375
+ this.sharedTab = ui.div();
376
+ this.filterPane = ui.div();
377
+ this.tabs = ui.tabControl({
378
+ [MY_PANE_LABEL]: ui.box(this.historyTab),
379
+ [FAVORITES_LABEL]: ui.box(this.favTab),
380
+ [SHARED_LABEL]: ui.box(this.sharedTab),
381
+ });
382
+ this._root = ui.divV([
383
+ this.tabs.root,
384
+ ], { style: { width: '100%', height: '100%' } });
385
+ this.myCards = [];
386
+ this.favoriteCards = [];
387
+ this.sharedCards = [];
388
+ this.myPaneFilter = this.buildFilterPane(MY_PANE_LABEL);
389
+ this.favoritesPaneFilter = this.buildFilterPane(FAVORITES_LABEL);
390
+ this.sharedPaneFilter = this.buildFilterPane(SHARED_LABEL);
391
+ this.tabs.root.style.width = '100%';
392
+ this.tabs.root.style.height = '100%';
393
+ this.myRunsFilter.subscribe(() => this.updateMyPane(this.store.filteredMyRuns));
394
+ this.favRunsFilter.subscribe(() => this.updateFavoritesPane(this.store.filteredFavoriteRuns));
395
+ this.sharedRunsFilter.subscribe(() => this.updateSharedPane(this.store.filteredSharedRuns));
396
+ this.store.allRuns.subscribe(() => {
397
+ this.updateMyPane(this.store.filteredMyRuns);
398
+ this.updateFavoritesPane(this.store.filteredFavoriteRuns);
399
+ this.updateSharedPane(this.store.filteredSharedRuns);
400
+ });
401
+ this.allRunsFetch.subscribe(() => __awaiter(this, void 0, void 0, function* () {
402
+ ui.setUpdateIndicator(this.root, true);
403
+ const allRuns = (yield historyUtils.pullRunsByName(this.func.name, [], { order: 'started' }, ['session.user', 'options'])).reverse();
404
+ this.store.allRuns.next(allRuns);
405
+ ui.setUpdateIndicator(this.root, false);
406
+ }));
407
+ this.afterRunAddToFavorites.subscribe((added) => {
408
+ const editedRun = this.store.allRuns.value.find((call) => call.id === added.id);
409
+ editedRun.options['title'] = added.options['title'];
410
+ editedRun.options['description'] = added.options['description'];
411
+ editedRun.options['isFavorite'] = true;
412
+ this.store.allRuns.next(this.store.allRuns.value);
413
+ });
414
+ this.afterRunAddToShared.subscribe((added) => {
415
+ const editedRun = this.store.allRuns.value.find((call) => call.id === added.id);
416
+ editedRun.options['title'] = added.options['title'];
417
+ editedRun.options['description'] = added.options['description'];
418
+ editedRun.options['isShared'] = true;
419
+ this.store.allRuns.next(this.store.allRuns.value);
420
+ });
421
+ this.afterRunRemoveFromFavorites.subscribe((removed) => {
422
+ const editedRun = this.store.allRuns.value.find((call) => call.id === removed.id);
423
+ editedRun.options['title'] = removed.options['title'];
424
+ editedRun.options['description'] = removed.options['description'];
425
+ editedRun.options['isFavorite'] = false;
426
+ this.store.allRuns.next(this.store.allRuns.value);
427
+ });
428
+ this.afterRunRemoveFromShared.subscribe((removed) => {
429
+ const editedRun = this.store.allRuns.value.find((call) => call.id === removed.id);
430
+ editedRun.options['title'] = removed.options['title'];
431
+ editedRun.options['description'] = removed.options['description'];
432
+ editedRun.options['isShared'] = false;
433
+ this.store.allRuns.next(this.store.allRuns.value);
434
+ });
435
+ this.afterRunDeleted.subscribe((id) => {
436
+ this.store.allRuns.next(this.store.allRuns.value.filter((call) => call.id !== id));
437
+ });
438
+ this.allRunsFetch.next();
439
+ }
393
440
  addRunToFavorites(callToFavorite) {
394
441
  return __awaiter(this, void 0, void 0, function* () {
395
442
  callToFavorite.options['isFavorite'] = true;
@@ -401,8 +448,6 @@ export class HistoryPanel {
401
448
  }
402
449
  removeRunFromFavorites(callToUnfavorite) {
403
450
  return __awaiter(this, void 0, void 0, function* () {
404
- callToUnfavorite.options['title'] = null;
405
- callToUnfavorite.options['description'] = null;
406
451
  callToUnfavorite.options['isFavorite'] = false;
407
452
  this.beforeRunRemoveFromFavorites.next(callToUnfavorite);
408
453
  const favoriteSave = yield grok.dapi.functions.calls.allPackageVersions().save(callToUnfavorite);
@@ -434,8 +479,6 @@ export class HistoryPanel {
434
479
  }
435
480
  removeRunFromShared(callToUnshare) {
436
481
  return __awaiter(this, void 0, void 0, function* () {
437
- callToUnshare.options['title'] = null;
438
- callToUnshare.options['description'] = null;
439
482
  callToUnshare.options['isShared'] = false;
440
483
  this.beforeRunRemoveFromShared.next(callToUnshare);
441
484
  const savedShared = yield grok.dapi.functions.calls.allPackageVersions().save(callToUnshare);
@@ -447,4 +490,4 @@ export class HistoryPanel {
447
490
  return this._root;
448
491
  }
449
492
  }
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0NBQ2pELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELGdCQUFnQixFQUFFLHNDQUFzQztDQUN6RCxDQUFDO0FBRUYsTUFBTSxpQkFBaUI7SUFBdkI7UUFDRSxxQkFBZ0IsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBSTNCLENBQUM7UUFFRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBNENuRCxDQUFDO0lBMUNDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFB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QUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztLQUFBO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7aGlzdG9yeVV0aWxzfSBmcm9tICcuLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCAnLi4vLi4vY3NzL2hpc3RvcnktcGFuZWwuY3NzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2Vyc0lkcyA9IHtcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItZDJjNjhlNjhkMzgwJyxcbiAgJ0FkbWluJzogJzg3OGM0MmIwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnM2UzMmM1ZmEtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBzSWRzID0ge1xuICAnQWxsIHVzZXJzJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi05Y2M5LTg1NDZiOGJmNjJlNicsXG4gICdEZXZlbG9wZXJzJzogJ2JhOWNkMTkxLTlhNTAtMTFlNi05Y2M5LTkxMGJmODI3ZjBhYicsXG4gICdOZWVkIHRvIGNyZWF0ZSc6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi04NTQ2YjhiZjYyZTYnLFxuICAnQWRtaW4nOiAnYTRiNDU4NDAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICdhNGI0NTg0MC1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxuICAnQWRtaW5pc3RyYXRvcnMnOiAnMWFiOGIzOGQtOWM0ZS00YjFlLTgxYzMtYWUyYmRlM2UxMmM1Jyxcbn07XG5cbmNsYXNzIEhpc3RvcnlQYW5lbFN0b3JlIHtcbiAgZmlsdGVyaW5nT3B0aW9ucyA9IHt0ZXh0OiAnJ30gYXMge1xuICAgIHRleHQ6IHN0cmluZyxcbiAgICBhdXRob3I/OiBERy5Vc2VyLFxuICAgIHN0YXJ0ZWRBZnRlcj86IGRheWpzLkRheWpzLFxuICB9O1xuXG4gIGFsbFJ1bnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERHLkZ1bmNDYWxsW10+KFtdKTtcblxuICBnZXQgbXlSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5hdXRob3IuaWQgPT09IGdyb2suc2hlbGwudXNlci5pZCk7XG4gIH1cblxuICBnZXQgZmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gJiYgIXJ1bi5vcHRpb25zWydpc0ltcG9ydGVkJ10pO1xuICB9XG5cbiAgZ2V0IHNoYXJlZFJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsUnVucy52YWx1ZS5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzU2hhcmVkJ10pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkTXlSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLm15UnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkRmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmZhdm9yaXRlUnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkU2hhcmVkUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRSdW5zLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICBjb25zdCBpc0F1dGhvcmVkID0gdGhpcy5maWx0ZXJpbmdPcHRpb25zLmF1dGhvciA/IHZhbC5hdXRob3IuaWQgPT09IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IuaWQ6IHRydWU7XG4gICAgICBjb25zdCBzdGFydGVkQWZ0ZXIgPSAodGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA/IHZhbC5zdGFydGVkID4gdGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA6IHRydWUpO1xuICAgICAgY29uc3QgdGl0bGVDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ3RpdGxlJ10pID8gdmFsLm9wdGlvbnNbJ3RpdGxlJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcbiAgICAgIGNvbnN0IGRlc2NDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8gdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcblxuICAgICAgcmV0dXJuICh0aXRsZUNvbnRhaW5zVGV4dCB8fCBkZXNjQ29udGFpbnNUZXh0KSAmJiBzdGFydGVkQWZ0ZXIgJiYgaXNBdXRob3JlZDtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBNWV9QQU5FX0xBQkVMID0gJ0hJU1RPUlknIGFzIGNvbnN0O1xuY29uc3QgRkFWT1JJVEVTX0xBQkVMID0gJ0ZBVk9SSVRFUycgYXMgY29uc3Q7XG5jb25zdCBTSEFSRURfTEFCRUwgPSAnU0hBUkVEJyBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIEhpc3RvcnlQYW5lbCB7XG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBzaG91bGQgaXMgY2hvc2VuLiBDb250YWlucyBGdW5jQ2FsbCBJRFxuICBwdWJsaWMgb25SdW5DaG9zZW4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIGZhdm9yaXRlc1xuICBwdWJsaWMgYmVmb3JlUnVuQWRkVG9GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gc2hhcmVkXG4gIHB1YmxpYyBiZWZvcmVSdW5BZGRUb1NoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gZmF2b3JpdGVzXG4gIHB1YmxpYyBiZWZvcmVSdW5SZW1vdmVGcm9tRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBzaGFyZWRcbiAgcHVibGljIGJlZm9yZVJ1blJlbW92ZUZyb21TaGFyZWQgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgZGVsZXRlZFxuICBwdWJsaWMgYmVmb3JlUnVuRGVsZXRlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gZmF2b3JpdGVzXG4gIHB1YmxpYyBhZnRlclJ1bkFkZFRvRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIHNoYXJlZFxuICBwdWJsaWMgYWZ0ZXJSdW5BZGRUb1NoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gZmF2b3JpdGVzXG4gIHB1YmxpYyBhZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIHNoYXJlZFxuICBwdWJsaWMgYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGRlbGV0ZWRcbiAgcHVibGljIGFmdGVyUnVuRGVsZXRlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHN0b3JlID0gbmV3IEhpc3RvcnlQYW5lbFN0b3JlKCk7XG5cbiAgcHJpdmF0ZSBteVJ1bnNGaWx0ZXIgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuICBwcml2YXRlIGZhdlJ1bnNGaWx0ZXIgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuICBwcml2YXRlIHNoYXJlZFJ1bnNGaWx0ZXIgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuXG4gIHB1YmxpYyBhbGxSdW5zRmV0Y2ggPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuXG4gIGhpc3RvcnlUYWIgPSB1aS5kaXYoKTtcbiAgZmF2VGFiID0gdWkuZGl2KCk7XG4gIHNoYXJlZFRhYiA9IHVpLmRpdigpO1xuICBmaWx0ZXJQYW5lID0gdWkuZGl2KCk7XG4gIHRhYnMgPSB1aS50YWJDb250cm9sKHtcbiAgICBbTVlfUEFORV9MQUJFTF06IHVpLmJveCh0aGlzLmhpc3RvcnlUYWIpLFxuICAgIFtGQVZPUklURVNfTEFCRUxdOiB1aS5ib3godGhpcy5mYXZUYWIpLFxuICAgIFtTSEFSRURfTEFCRUxdOiB1aS5ib3godGhpcy5zaGFyZWRUYWIpLFxuICB9KTtcblxuICBwcml2YXRlIF9yb290ID0gdWkuZGl2VihbXG4gICAgdGhpcy50YWJzLnJvb3QsXG4gIF0sIHtzdHlsZToge3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfX0pO1xuXG4gIG15Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIGJ1aWxkRmlsdGVyUGFuZShjdXJyZW50VGFiTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyaW5nVGV4dCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgIGNvbnN0IHRleHRJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdTZWFyY2gnLCAnJywgKHY6IHN0cmluZykgPT4gZmlsdGVyaW5nVGV4dC5uZXh0KHYpKTtcbiAgICAgIERHLmRlYm91bmNlKGZpbHRlcmluZ1RleHQuYXNPYnNlcnZhYmxlKCksIDYwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5maWx0ZXJpbmdPcHRpb25zLnRleHQgPSB0ZXh0SW5wdXQuc3RyaW5nVmFsdWU7XG4gICAgICAgIHRoaXMubXlSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgdGhpcy5mYXZSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkYXRlSW5wdXQgPSB1aS5kYXRlSW5wdXQoJ1N0YXJ0ZWQgYWZ0ZXInLCBkYXlqcygpLnN1YnRyYWN0KDEsICd3ZWVrJyksICh2OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID0gdjtcbiAgICAgICAgdGhpcy5teVJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLmZhdlJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRVc2VycyA9IE9iamVjdC52YWx1ZXMoZGVmYXVsdFVzZXJzSWRzKTtcbiAgICAgIGNvbnN0IGFsbFVzZXJzID0gYXdhaXQgZ3Jvay5kYXBpLnVzZXJzLmxpc3QoKSBhcyBERy5Vc2VyW107XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJzID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIuaWQpKTtcblxuICAgICAgY29uc3QgYXV0aG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxERy5Vc2VyIHwgc3RyaW5nPignQXV0aG9yJywgJ0FueW9uZScsIFsnQW55b25lJywgLi4uZmlsdGVyZWRVc2Vyc10sICh2OiBERy5Vc2VyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IgPSAodiA9PT0gJ0FueW9uZScpID8gdW5kZWZpbmVkIDogdiBhcyBERy5Vc2VyO1xuICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgfSk7XG4gICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIGRhdGVJbnB1dC5hZGRQYXR0ZXJuTWVudSgnZGF0ZXRpbWUnKTtcbiAgICAgIGNvbnN0IGZvcm0gPSB1aS5kaXZWKFtcbiAgICAgICAgdGV4dElucHV0LFxuICAgICAgICBkYXRlSW5wdXQsXG4gICAgICAgIGF1dGhvcklucHV0LFxuICAgICAgXSwgJ3VpLWZvcm0gdWktZm9ybS13aWRlIHVpLWZvcm0tbGVmdCcpO1xuXG4gICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09IE1ZX1BBTkVfTEFCRUwpIHtcbiAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRUYWJOYW1lID09PSBGQVZPUklURVNfTEFCRUwpIHtcbiAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRUYWJOYW1lID09PSBTSEFSRURfTEFCRUwpIHtcbiAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9KTtcbiAgfTtcblxuICBteVBhbmVGaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyUGFuZShNWV9QQU5FX0xBQkVMKTtcbiAgZmF2b3JpdGVzUGFuZUZpbHRlciA9dGhpcy5idWlsZEZpbHRlclBhbmUoRkFWT1JJVEVTX0xBQkVMKTtcbiAgc2hhcmVkUGFuZUZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXJQYW5lKFNIQVJFRF9MQUJFTCk7XG5cbiAgc2hvd0RlbGV0ZVJ1bkRpYWxvZyhmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgLmFkZCh1aS5kaXZUZXh0KCdUaGUgZGVsZXRlZCBydW4gaXMgaW1wb3NzaWJsZSB0byByZXN0b3JlLiBBcmUgeW91IHN1cmU/JykpXG4gICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmVmb3JlUnVuRGVsZXRlZC5uZXh0KGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgYXdhaXQgaGlzdG9yeVV0aWxzLmRlbGV0ZVJ1bihmdW5jQ2FsbCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJSdW5EZWxldGVkLm5leHQoZnVuY0NhbGwuaWQpO1xuICAgICAgfSlcbiAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgfTtcblxuICB1cGRhdGVTaGFyZWRQYW5lKHNoYXJlZFJ1bnM6IERHLkZ1bmNDYWxsW10pIHtcbiAgICBjb25zdCBuZXdUYWIgPSAoc2hhcmVkUnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVyU2hhcmVkQ2FyZHMoc2hhcmVkUnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgc2hhcmVkJywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5zaGFyZWRUYWIucmVwbGFjZVdpdGgodWkuZGl2VihbXG4gICAgICB0aGlzLnNoYXJlZFBhbmVGaWx0ZXIsXG4gICAgICB1aS5lbGVtZW50KCdkaXYnLCAnc3BsaXRiYXItaG9yaXpvbnRhbCcpLFxuICAgICAgbmV3VGFiXSkpO1xuICAgIHRoaXMuc2hhcmVkVGFiID0gbmV3VGFiO1xuICB9O1xuXG4gIHVwZGF0ZUZhdm9yaXRlc1BhbmUoZmF2b3JpdGVSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKGZhdm9yaXRlUnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIGZhdm9yaXRlcycsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIHRoaXMuZmF2VGFiLnJlcGxhY2VXaXRoKHVpLmRpdlYoW1xuICAgICAgdGhpcy5mYXZvcml0ZXNQYW5lRmlsdGVyLFxuICAgICAgdWkuZWxlbWVudCgnZGl2JywgJ3NwbGl0YmFyLWhvcml6b250YWwnKSxcbiAgICAgIG5ld1RhYlxuICAgIF0pKTtcbiAgICB0aGlzLmZhdlRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICB1cGRhdGVNeVBhbmUobXlSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKG15UnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVySGlzdG9yeUNhcmRzKG15UnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBmb3VuZCBpbiBoaXN0b3J5JywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5oaXN0b3J5VGFiLnJlcGxhY2VXaXRoKHVpLmRpdlYoW1xuICAgICAgdGhpcy5teVBhbmVGaWx0ZXIsXG4gICAgICB1aS5lbGVtZW50KCdkaXYnLCAnc3BsaXRiYXItaG9yaXpvbnRhbCcpLFxuICAgICAgbmV3VGFiXG4gICAgXSkpO1xuICAgIHRoaXMuaGlzdG9yeVRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICByZW5kZXJDYXJkKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICBpY29uLnN0eWxlLndpZHRoID0gJzI1cHgnO1xuICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gJzI1cHgnO1xuICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgY29uc3QgY2FyZExhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBmdW5jQ2FsbC5hdXRob3IuZnJpZW5kbHlOYW1lLCB7c3R5bGU6IHsnY29sb3InOiAndmFyKC0tYmx1ZS0xKSd9fSk7XG4gICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIGljb24pO1xuXG4gICAgY29uc3QgZWRpdEljb24gPSB1aS5pY29uRkEoJ2VkaXQnLCAoZXYpID0+IHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zaG93RWRpdERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgfSk7XG4gICAgZWRpdEljb24uY2xhc3NMaXN0LmFkZCgnY3YtZnVuY2NhbGwtY2FyZC1ob3Zlci1pY29uJyk7XG5cbiAgICBjb25zdCBkZWxldGVJY29uID0gdWkuaWNvbkZBKCd0cmFzaC1hbHQnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICB9LCAnRGVsZXRlIHRoZSBydW4nKTtcbiAgICBkZWxldGVJY29uLmNsYXNzTGlzdC5hZGQoJ2N2LWZ1bmNjYWxsLWNhcmQtaG92ZXItaWNvbicpO1xuXG4gICAgY29uc3QgZmF2b3JpdGVkSWNvbiA9IHVpLmljb25GQSgnc3RhcicsIG51bGwsICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICBmYXZvcml0ZWRJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhcycsICdjdi1mdW5jY2FsbC1jYXJkLWRlZi1pY29uJyk7XG5cbiAgICBjb25zdCBzaGFyZWRJY29uID0gdWkuaWNvbkZBKCdzaGFyZS1hbHQnLCBudWxsLCAnQWRkIHRvIHNoYXJlZCcpO1xuICAgIHNoYXJlZEljb24uY2xhc3NMaXN0LmFkZCgnZmFzJywgJ2N2LWZ1bmNjYWxsLWNhcmQtZGVmLWljb24nKTtcbiAgICBzaGFyZWRJY29uLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJsdWUtMSknO1xuXG4gICAgY29uc3QgZGF0ZVN0YXJ0ZWQgPSBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KTtcblxuICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgIHVpLmRpdkgoW1xuICAgICAgICBpY29uLFxuICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICBjYXJkTGFiZWwsXG4gICAgICAgICAgdWkuc3BhbihbZGF0ZVN0YXJ0ZWRdKSxcbiAgICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICBdLCAnY3YtY2FyZC1jb250ZW50JyksXG4gICAgICBdKSxcbiAgICAgIHVpLmRpdkgoW1xuICAgICAgICBlZGl0SWNvbiwgZGVsZXRlSWNvbixcbiAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkgPyBbZmF2b3JpdGVkSWNvbl0gOiBbXSxcbiAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pID8gW3NoYXJlZEljb25dOiBbXSxcbiAgICAgIF0pXG4gICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9uUnVuQ2hvc2VuLm5leHQoZnVuY0NhbGwuaWQpO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi50aGlzLm15Q2FyZHMsIC4uLnRoaXMuZmF2b3JpdGVDYXJkcywgLi4udGhpcy5zaGFyZWRDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSk7XG5cbiAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgIH0pO1xuICAgIHVpLnRvb2x0aXAuYmluZChjYXJkLCAoKSA9PiB1aS50YWJsZUZyb21NYXAoe1xuICAgICAgQXV0aG9yOiBncm9rLnNoZWxsLnVzZXIudG9NYXJrdXAoKSxcbiAgICAgIERhdGU6IGRhdGVTdGFydGVkLFxuICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10pID8geydUaXRsZSc6IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ119Ont9LFxuICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8geydEZXNjcmlwdGlvbic6IGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ119Ont9LFxuICAgIH0pKTtcbiAgICByZXR1cm4gY2FyZDtcbiAgfVxuXG4gIHNob3dFZGl0RGlhbG9nKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRsZyA9IHVpLmRpYWxvZyh7dGl0bGU6ICdFZGl0IHJ1bid9KTtcblxuICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgbGV0IGRlc2NyaXB0aW9uID0gZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA/PyAnJztcbiAgICBjb25zdCB0aXRsZUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RpdGxlJywgdGl0bGUsIChzOiBzdHJpbmcpID0+IHtcbiAgICAgIHRpdGxlID0gcztcbiAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJ1RpdGxlIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICBkbGcuZ2V0QnV0dG9uKCdPSycpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIGRsZy5nZXRCdXR0b24oJ09LJykuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgaXNTaGFyZWQgPSBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddID8/IGZhbHNlO1xuICAgIGxldCBpc0Zhdm9yaXRlID0gZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID8/IGZhbHNlO1xuXG4gICAgZGxnLmFkZCh1aS5mb3JtKFtcbiAgICAgIHRpdGxlSW5wdXQsXG4gICAgICB1aS5zdHJpbmdJbnB1dCgnRGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbiwgKHM6IHN0cmluZykgPT4geyBkZXNjcmlwdGlvbiA9IHM7IH0pLFxuICAgICAgdWkuYm9vbElucHV0KCdGYXZvcml0ZXMnLCBpc0Zhdm9yaXRlLCAoYjogYm9vbGVhbikgPT4gaXNGYXZvcml0ZSA9IGIpLFxuICAgICAgdWkuYm9vbElucHV0KCdTaGFyZScsIGlzU2hhcmVkLCAoYjogYm9vbGVhbikgPT4gaXNTaGFyZWQgPSBiKSxcbiAgICBdKSlcbiAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgZnVuY0NhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMubG9hZFJ1bihmdW5jQ2FsbC5pZCk7XG4gICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGRlc2NyaXB0aW9uO1xuXG4gICAgICAgIGlmICghIWlzU2hhcmVkID09PSAhIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gJiYgISFpc0Zhdm9yaXRlID09PSAhIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGF3YWl0IGhpc3RvcnlVdGlscy5zYXZlUnVuKGZ1bmNDYWxsKTtcblxuICAgICAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBmdW5jQ2FsbC5pZCk7XG4gICAgICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuXG4gICAgICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTaGFyZWQgJiYgIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pIHtcbiAgICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddID0gaXNTaGFyZWQ7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNTaGFyZWQgJiYgZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbVNoYXJlZChmdW5jQ2FsbCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGYXZvcml0ZSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID0gaXNGYXZvcml0ZTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zhdm9yaXRlICYmIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGlzRmF2b3JpdGU7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnNob3coe2NlbnRlcjogdHJ1ZX0pO1xuICAgIHRpdGxlSW5wdXQuZmlyZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHJlbmRlckZhdm9yaXRlQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5mYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMuZmF2b3JpdGVDYXJkcyk7XG4gIH07XG5cbiAgcmVuZGVyU2hhcmVkQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5zaGFyZWRDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLnNoYXJlZENhcmRzKTtcbiAgfTtcblxuICByZW5kZXJIaXN0b3J5Q2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5teUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMubXlDYXJkcywge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmdW5jOiBERy5GdW5jXG4gICkge1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblxuICAgIHRoaXMubXlSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZU15UGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkTXlSdW5zKSk7XG4gICAgdGhpcy5mYXZSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUZhdm9yaXRlc1BhbmUodGhpcy5zdG9yZS5maWx0ZXJlZEZhdm9yaXRlUnVucykpO1xuICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKSk7XG5cbiAgICB0aGlzLnN0b3JlLmFsbFJ1bnMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTXlQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRNeVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXNQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRGYXZvcml0ZVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCB0cnVlKTtcbiAgICAgIGNvbnN0IGFsbFJ1bnMgPSAoYXdhaXQgaGlzdG9yeVV0aWxzLnB1bGxSdW5zQnlOYW1lKHRoaXMuZnVuYy5uYW1lLCBbXSwge29yZGVyOiAnc3RhcnRlZCd9LCBbJ3Nlc3Npb24udXNlcicsICdvcHRpb25zJ10pKS5yZXZlcnNlKCk7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dChhbGxSdW5zKTtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsZWFyTWV0YWRhdGEgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBpZiAoIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5zdWJzY3JpYmUoKGFkZGVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gYWRkZWQuaWQpO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gYWRkZWQub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGFkZGVkLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkFkZFRvU2hhcmVkLnN1YnNjcmliZSgoYWRkZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBhZGRlZC5pZCk7XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ3RpdGxlJ10gPSBhZGRlZC5vcHRpb25zWyd0aXRsZSddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gYWRkZWQub3B0aW9uc1snZGVzY3JpcHRpb24nXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMuc3Vic2NyaWJlKChyZW1vdmVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gcmVtb3ZlZC5pZCkhO1xuICAgICAgZWRpdGVkUnVuLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgICAgY2xlYXJNZXRhZGF0YShlZGl0ZWRSdW4pO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLnN1YnNjcmliZSgocmVtb3ZlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IHJlbW92ZWQuaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG4gICAgICBjbGVhck1ldGFkYXRhKGVkaXRlZFJ1bik7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkRlbGV0ZWQuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbHRlcigoY2FsbCkgPT4gY2FsbC5pZCAhPT0gaWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvRmF2b3JpdGVzLm5leHQoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGNvbnN0IHNhdmVkRmF2b3JpdGUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvRmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5uZXh0KHNhdmVkRmF2b3JpdGUpO1xuICAgIHJldHVybiBzYXZlZEZhdm9yaXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuXG4gICAgdGhpcy5iZWZvcmVSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLm5leHQoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgY29uc3QgZmF2b3JpdGVTYXZlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLm5leHQoZmF2b3JpdGVTYXZlKTtcbiAgICByZXR1cm4gZmF2b3JpdGVTYXZlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvU2hhcmVkLm5leHQoY2FsbFRvU2hhcmUpO1xuXG4gICAgY29uc3QgYWxsR3JvdXAgPSBhd2FpdCBncm9rLmRhcGkuZ3JvdXBzLmZpbmQoZGVmYXVsdEdyb3Vwc0lkc1snQWxsIHVzZXJzJ10pO1xuXG4gICAgY29uc3QgZGZPdXRwdXRzID0gd3UoY2FsbFRvU2hhcmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cykge1xuICAgICAgY29uc3QgZGYgPSBjYWxsVG9TaGFyZS5vdXRwdXRzW291dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB3dShjYWxsVG9TaGFyZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUuaW5wdXRzW2lucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZTtcbiAgICAgIGF3YWl0IGdyb2suZGFwaS5wZXJtaXNzaW9ucy5ncmFudChkZi5nZXRUYWJsZUluZm8oKSwgYWxsR3JvdXAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9TaGFyZSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9TaGFyZWQubmV4dChzYXZlZFNoYXJlZCk7XG4gICAgcmV0dXJuIHNhdmVkU2hhcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tU2hhcmVkKGNhbGxUb1Vuc2hhcmU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcblxuICAgIHRoaXMuYmVmb3JlUnVuUmVtb3ZlRnJvbVNoYXJlZC5uZXh0KGNhbGxUb1Vuc2hhcmUpO1xuICAgIGNvbnN0IHNhdmVkU2hhcmVkID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1Vuc2hhcmUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLm5leHQoc2F2ZWRTaGFyZWQpO1xuICAgIHJldHVybiBzYXZlZFNoYXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxufVxuIl19
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0NBQ2pELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELGdCQUFnQixFQUFFLHNDQUFzQztDQUN6RCxDQUFDO0FBRUYsTUFBTSxpQkFBaUI7SUFBdkI7UUFDRSxxQkFBZ0IsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBSzNCLENBQUM7UUFFRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBcURuRCxDQUFDO0lBbkRDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFB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QUFVLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFMUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7S0FBQTtJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi4vaGlzdG9yeS11dGlscyc7XG5pbXBvcnQgJy4uLy4uL2Nzcy9oaXN0b3J5LXBhbmVsLmNzcyc7XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VXNlcnNJZHMgPSB7XG4gICdUZXN0JzogJ2NhMWU2NzJlLWUzYmUtNDBlMC1iNzliLWQyYzY4ZTY4ZDM4MCcsXG4gICdBZG1pbic6ICc4NzhjNDJiMC05YTUwLTExZTYtYzUzNy02YmY4ZTlhYjAyZWUnLFxuICAnU3lzdGVtJzogJzNlMzJjNWZhLWFjOWMtNGQzOS04YjRiLTRkYjNlNTc2YjNjMycsXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEdyb3Vwc0lkcyA9IHtcbiAgJ0FsbCB1c2Vycyc6ICdhNGI0NTg0MC05YTUwLTExZTYtOWNjOS04NTQ2YjhiZjYyZTYnLFxuICAnRGV2ZWxvcGVycyc6ICdiYTljZDE5MS05YTUwLTExZTYtOWNjOS05MTBiZjgyN2YwYWInLFxuICAnTmVlZCB0byBjcmVhdGUnOiAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyxcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItODU0NmI4YmY2MmU2JyxcbiAgJ0FkbWluJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnYTRiNDU4NDAtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbiAgJ0FkbWluaXN0cmF0b3JzJzogJzFhYjhiMzhkLTljNGUtNGIxZS04MWMzLWFlMmJkZTNlMTJjNScsXG59O1xuXG5jbGFzcyBIaXN0b3J5UGFuZWxTdG9yZSB7XG4gIGZpbHRlcmluZ09wdGlvbnMgPSB7dGV4dDogJyd9IGFzIHtcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgYXV0aG9yPzogREcuVXNlcixcbiAgICBzdGFydGVkQWZ0ZXI/OiBkYXlqcy5EYXlqcyxcbiAgICB0YWdzPzogc3RyaW5nW11cbiAgfTtcblxuICBhbGxSdW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxERy5GdW5jQ2FsbFtdPihbXSk7XG5cbiAgZ2V0IG15UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxSdW5zLnZhbHVlLmZpbHRlcigocnVuKSA9PiBydW4uYXV0aG9yLmlkID09PSBncm9rLnNoZWxsLnVzZXIuaWQpO1xuICB9XG5cbiAgZ2V0IGZhdm9yaXRlUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5hbGxSdW5zLnZhbHVlLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgfVxuXG4gIGdldCBzaGFyZWRSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc1NoYXJlZCddKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZE15UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5teVJ1bnMuZmlsdGVyKChydW4pID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ZWRBZnRlciA9ICh0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID8gcnVuLnN0YXJ0ZWQgPiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyIDogdHJ1ZSk7XG4gICAgICBjb25zdCB0aXRsZUNvbnRhaW5zVGV4dCA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQubGVuZ3RoKSA/IHRydWUgOiAoISFydW4ub3B0aW9uc1sndGl0bGUnXSkgPyBydW4ub3B0aW9uc1sndGl0bGUnXS5pbmNsdWRlcyh0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dCk6IGZhbHNlO1xuICAgICAgY29uc3QgZGVzY0NvbnRhaW5zVGV4dCA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQubGVuZ3RoKSA/IHRydWUgOiAoISFydW4ub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyBydW4ub3B0aW9uc1snZGVzY3JpcHRpb24nXS5pbmNsdWRlcyh0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dCk6IGZhbHNlO1xuXG5cbiAgICAgIGNvbnN0IGhhc1RhZ3MgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50YWdzIHx8IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50YWdzLmxlbmd0aCA9PT0gMCkgPyB0cnVlIDpcbiAgICAgICAgKCEhcnVuLm9wdGlvbnNbJ3RhZ3MnXSkgPyB0aGlzLmZpbHRlcmluZ09wdGlvbnMudGFncy5ldmVyeSgoc2VhcmNoZWRUYWcpID0+IHJ1bi5vcHRpb25zWyd0YWdzJ10uaW5jbHVkZXMoc2VhcmNoZWRUYWcpKTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyICYmIGhhc1RhZ3M7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRGYXZvcml0ZVJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmF2b3JpdGVSdW5zLmZpbHRlcigocnVuKSA9PiB7XG4gICAgICBjb25zdCBzdGFydGVkQWZ0ZXIgPSAodGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA/IHJ1bi5zdGFydGVkID4gdGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA6IHRydWUpO1xuICAgICAgY29uc3QgdGl0bGVDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhcnVuLm9wdGlvbnNbJ3RpdGxlJ10pID8gcnVuLm9wdGlvbnNbJ3RpdGxlJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcbiAgICAgIGNvbnN0IGRlc2NDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhcnVuLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8gcnVuLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcbiAgICAgIGNvbnN0IGhhc1RhZ3MgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50YWdzIHx8IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50YWdzLmxlbmd0aCA9PT0gMCkgPyB0cnVlIDpcbiAgICAgICAgKCEhcnVuLm9wdGlvbnNbJ3RhZ3MnXSkgPyB0aGlzLmZpbHRlcmluZ09wdGlvbnMudGFncy5ldmVyeSgoc2VhcmNoZWRUYWcpID0+IHJ1bi5vcHRpb25zWyd0YWdzJ10uaW5jbHVkZXMoc2VhcmNoZWRUYWcpKTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyICYmIGhhc1RhZ3M7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRTaGFyZWRSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZFJ1bnMuZmlsdGVyKChydW4pID0+IHtcbiAgICAgIGNvbnN0IGlzQXV0aG9yZWQgPSB0aGlzLmZpbHRlcmluZ09wdGlvbnMuYXV0aG9yID8gcnVuLmF1dGhvci5pZCA9PT0gdGhpcy5maWx0ZXJpbmdPcHRpb25zLmF1dGhvci5pZDogdHJ1ZTtcbiAgICAgIGNvbnN0IHN0YXJ0ZWRBZnRlciA9ICh0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID8gcnVuLnN0YXJ0ZWQgPiB0aGlzLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyIDogdHJ1ZSk7XG4gICAgICBjb25zdCB0aXRsZUNvbnRhaW5zVGV4dCA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQubGVuZ3RoKSA/IHRydWUgOiAoISFydW4ub3B0aW9uc1sndGl0bGUnXSkgPyBydW4ub3B0aW9uc1sndGl0bGUnXS5pbmNsdWRlcyh0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dCk6IGZhbHNlO1xuICAgICAgY29uc3QgZGVzY0NvbnRhaW5zVGV4dCA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQubGVuZ3RoKSA/IHRydWUgOiAoISFydW4ub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyBydW4ub3B0aW9uc1snZGVzY3JpcHRpb24nXS5pbmNsdWRlcyh0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dCk6IGZhbHNlO1xuICAgICAgY29uc3QgaGFzVGFncyA9ICghdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRhZ3MgfHwgdGhpcy5maWx0ZXJpbmdPcHRpb25zLnRhZ3MubGVuZ3RoID09PSAwKSA/IHRydWUgOlxuICAgICAgICAoISFydW4ub3B0aW9uc1sndGFncyddKSA/IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50YWdzLmV2ZXJ5KChzZWFyY2hlZFRhZykgPT4gcnVuLm9wdGlvbnNbJ3RhZ3MnXS5pbmNsdWRlcyhzZWFyY2hlZFRhZykpOiBmYWxzZTtcblxuXG4gICAgICByZXR1cm4gKHRpdGxlQ29udGFpbnNUZXh0IHx8IGRlc2NDb250YWluc1RleHQpICYmIHN0YXJ0ZWRBZnRlciAmJiBpc0F1dGhvcmVkICYmIGhhc1RhZ3M7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgTVlfUEFORV9MQUJFTCA9ICdISVNUT1JZJyBhcyBjb25zdDtcbmNvbnN0IEZBVk9SSVRFU19MQUJFTCA9ICdGQVZPUklURVMnIGFzIGNvbnN0O1xuY29uc3QgU0hBUkVEX0xBQkVMID0gJ1NIQVJFRCcgYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBIaXN0b3J5UGFuZWwge1xuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgc2hvdWxkIGlzIGNob3Nlbi4gQ29udGFpbnMgRnVuY0NhbGwgSURcbiAgcHVibGljIG9uUnVuQ2hvc2VuID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBmYXZvcml0ZXNcbiAgcHVibGljIGJlZm9yZVJ1bkFkZFRvRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIHNoYXJlZFxuICBwdWJsaWMgYmVmb3JlUnVuQWRkVG9TaGFyZWQgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIGZhdm9yaXRlc1xuICBwdWJsaWMgYmVmb3JlUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gc2hhcmVkXG4gIHB1YmxpYyBiZWZvcmVSdW5SZW1vdmVGcm9tU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGRlbGV0ZWRcbiAgcHVibGljIGJlZm9yZVJ1bkRlbGV0ZWQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIGZhdm9yaXRlc1xuICBwdWJsaWMgYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBzaGFyZWRcbiAgcHVibGljIGFmdGVyUnVuQWRkVG9TaGFyZWQgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIGZhdm9yaXRlc1xuICBwdWJsaWMgYWZ0ZXJSdW5SZW1vdmVGcm9tRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBzaGFyZWRcbiAgcHVibGljIGFmdGVyUnVuUmVtb3ZlRnJvbVNoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBkZWxldGVkXG4gIHB1YmxpYyBhZnRlclJ1bkRlbGV0ZWQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBzdG9yZSA9IG5ldyBIaXN0b3J5UGFuZWxTdG9yZSgpO1xuXG4gIHByaXZhdGUgbXlSdW5zRmlsdGVyID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcbiAgcHJpdmF0ZSBmYXZSdW5zRmlsdGVyID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcbiAgcHJpdmF0ZSBzaGFyZWRSdW5zRmlsdGVyID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcblxuICBwdWJsaWMgYWxsUnVuc0ZldGNoID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKTtcblxuICBoaXN0b3J5VGFiID0gdWkuZGl2KCk7XG4gIGZhdlRhYiA9IHVpLmRpdigpO1xuICBzaGFyZWRUYWIgPSB1aS5kaXYoKTtcbiAgZmlsdGVyUGFuZSA9IHVpLmRpdigpO1xuICB0YWJzID0gdWkudGFiQ29udHJvbCh7XG4gICAgW01ZX1BBTkVfTEFCRUxdOiB1aS5ib3godGhpcy5oaXN0b3J5VGFiKSxcbiAgICBbRkFWT1JJVEVTX0xBQkVMXTogdWkuYm94KHRoaXMuZmF2VGFiKSxcbiAgICBbU0hBUkVEX0xBQkVMXTogdWkuYm94KHRoaXMuc2hhcmVkVGFiKSxcbiAgfSk7XG5cbiAgcHJpdmF0ZSBfcm9vdCA9IHVpLmRpdlYoW1xuICAgIHRoaXMudGFicy5yb290LFxuICBdLCB7c3R5bGU6IHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ319KTtcblxuICBteUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgZmF2b3JpdGVDYXJkcyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gIHNoYXJlZENhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcblxuICBidWlsZEZpbHRlclBhbmUoY3VycmVudFRhYk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmluZ1RleHQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICBjb25zdCB0ZXh0SW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnU2VhcmNoJywgJycsICh2OiBzdHJpbmcpID0+IGZpbHRlcmluZ1RleHQubmV4dCh2KSk7XG4gICAgICBERy5kZWJvdW5jZShmaWx0ZXJpbmdUZXh0LmFzT2JzZXJ2YWJsZSgpLCA2MDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZmlsdGVyaW5nT3B0aW9ucy50ZXh0ID0gdGV4dElucHV0LnN0cmluZ1ZhbHVlO1xuICAgICAgICB0aGlzLm15UnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgIHRoaXMuZmF2UnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGF0ZUlucHV0ID0gdWkuZGF0ZUlucHV0KCdTdGFydGVkIGFmdGVyJywgZGF5anMoKS5zdWJ0cmFjdCgxLCAnd2VlaycpLCAodjogZGF5anMuRGF5anMpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA9IHY7XG4gICAgICAgIHRoaXMubXlSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgdGhpcy5mYXZSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZWZhdWx0VXNlcnMgPSBPYmplY3QudmFsdWVzKGRlZmF1bHRVc2Vyc0lkcyk7XG4gICAgICBjb25zdCBhbGxVc2VycyA9IGF3YWl0IGdyb2suZGFwaS51c2Vycy5saXN0KCkgYXMgREcuVXNlcltdO1xuICAgICAgY29uc3QgZmlsdGVyZWRVc2VycyA9IGFsbFVzZXJzLmZpbHRlcigodXNlcikgPT4gIWRlZmF1bHRVc2Vycy5pbmNsdWRlcyh1c2VyLmlkKSk7XG5cbiAgICAgIGNvbnN0IGF1dGhvcklucHV0ID0gdWkuY2hvaWNlSW5wdXQ8REcuVXNlciB8IHN0cmluZz4oJ0F1dGhvcicsICdBbnlvbmUnLCBbJ0FueW9uZScsIC4uLmZpbHRlcmVkVXNlcnNdLCAodjogREcuVXNlciB8IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMuYXV0aG9yID0gKHYgPT09ICdBbnlvbmUnKSA/IHVuZGVmaW5lZCA6IHYgYXMgREcuVXNlcjtcbiAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgIH0pO1xuICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICBsZXQgdGFnSW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxzdHJpbmc+KCdUYWcnLCAnQ2hvb3NlIHRhZyB0byBmaWx0ZXInLCBbJ0Nob29zZSB0YWcgdG8gZmlsdGVyJ10pO1xuXG4gICAgICBjb25zdCBmaWx0ZXJUYWdFZGl0b3IgPSBERy5UYWdFZGl0b3IuY3JlYXRlKCk7XG4gICAgICBjb25zdCBkdW1teUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJyAnLCAnJyk7XG4gICAgICBkdW1teUlucHV0LmlucHV0LnJlcGxhY2VXaXRoKGZpbHRlclRhZ0VkaXRvci5yb290KTtcblxuICAgICAgZmlsdGVyVGFnRWRpdG9yLm9uQ2hhbmdlZCgoKSA9PiB7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMudGFncyA9IGZpbHRlclRhZ0VkaXRvci50YWdzLmZpbHRlcigodGFnKSA9PiAhIXRhZyk7XG5cbiAgICAgICAgdGhpcy5teVJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLmZhdlJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3RvcmUuYWxsUnVucy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlXG4gICAgICAgICAgLm1hcCgocnVuKSA9PiBydW4ub3B0aW9uc1sndGFncyddIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcnVuVGFncykgPT4ge1xuICAgICAgICAgICAgaWYgKCEhcnVuVGFncykgcnVuVGFncy5mb3JFYWNoKChydW5UYWcpID0+IHsgaWYgKCFhY2MuaW5jbHVkZXMocnVuVGFnKSkgYWNjLnB1c2gocnVuVGFnKTsgfSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIFtdIGFzIHN0cmluZ1tdKTtcblxuICAgICAgICBjb25zdCBuZXdUYWdJbnB1dCA9IHVpLmNob2ljZUlucHV0PHN0cmluZz4oJ1RhZycsICdDaG9vc2UgdGFnIHRvIGZpbHRlcicsIFsnQ2hvb3NlIHRhZyB0byBmaWx0ZXInLCAuLi50YWdzXSk7XG4gICAgICAgIHRhZ0lucHV0LnJvb3QucmVwbGFjZVdpdGgobmV3VGFnSW5wdXQucm9vdCk7XG4gICAgICAgIHRhZ0lucHV0ID0gbmV3VGFnSW5wdXQ7XG5cbiAgICAgICAgdGFnSW5wdXQub25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YWdJbnB1dC52YWx1ZSAmJlxuICAgICAgICAgICAgdGFnSW5wdXQudmFsdWUgIT09ICdDaG9vc2UgdGFnIHRvIGZpbHRlcicgJiZcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgIWZpbHRlclRhZ0VkaXRvci50YWdzLmluY2x1ZGVzKHRhZ0lucHV0LnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGZpbHRlclRhZ0VkaXRvci5hZGRUYWcodGFnSW5wdXQudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRlSW5wdXQuYWRkUGF0dGVybk1lbnUoJ2RhdGV0aW1lJyk7XG4gICAgICBjb25zdCBmb3JtID0gdWkuZGl2VihbXG4gICAgICAgIHRleHRJbnB1dCxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgICBhdXRob3JJbnB1dCxcbiAgICAgICAgdGFnSW5wdXQsXG4gICAgICAgIGR1bW15SW5wdXQsXG4gICAgICBdLCAndWktZm9ybSB1aS1mb3JtLXdpZGUgdWktZm9ybS1sZWZ0Jyk7XG5cbiAgICAgIGlmIChjdXJyZW50VGFiTmFtZSA9PT0gTVlfUEFORV9MQUJFTCkge1xuICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09IEZBVk9SSVRFU19MQUJFTCkge1xuICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09IFNIQVJFRF9MQUJFTCkge1xuICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH0pO1xuICB9O1xuXG4gIG15UGFuZUZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXJQYW5lKE1ZX1BBTkVfTEFCRUwpO1xuICBmYXZvcml0ZXNQYW5lRmlsdGVyID10aGlzLmJ1aWxkRmlsdGVyUGFuZShGQVZPUklURVNfTEFCRUwpO1xuICBzaGFyZWRQYW5lRmlsdGVyID0gdGhpcy5idWlsZEZpbHRlclBhbmUoU0hBUkVEX0xBQkVMKTtcblxuICBzaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdEZWxldGUgcnVuJ30pXG4gICAgICAuYWRkKHVpLmRpdlRleHQoJ1RoZSBkZWxldGVkIHJ1biBpcyBpbXBvc3NpYmxlIHRvIHJlc3RvcmUuIEFyZSB5b3Ugc3VyZT8nKSlcbiAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5iZWZvcmVSdW5EZWxldGVkLm5leHQoZnVuY0NhbGwuaWQpO1xuICAgICAgICBhd2FpdCBoaXN0b3J5VXRpbHMuZGVsZXRlUnVuKGZ1bmNDYWxsKTtcbiAgICAgICAgdGhpcy5hZnRlclJ1bkRlbGV0ZWQubmV4dChmdW5jQ2FsbC5pZCk7XG4gICAgICB9KVxuICAgICAgLnNob3coe2NlbnRlcjogdHJ1ZX0pO1xuICB9O1xuXG4gIHVwZGF0ZVNoYXJlZFBhbmUoc2hhcmVkUnVuczogREcuRnVuY0NhbGxbXSkge1xuICAgIGNvbnN0IHNoYXJlZENhcmRzID0gKHNoYXJlZFJ1bnMubGVuZ3RoID4gMCkgPyB0aGlzLnJlbmRlclNoYXJlZENhcmRzKHNoYXJlZFJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIHNoYXJlZCcsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIGNvbnN0IHNoYXJlZFRhYiA9IHVpLmRpdlYoW1xuICAgICAgdGhpcy5zaGFyZWRQYW5lRmlsdGVyLFxuICAgICAgdWkuZWxlbWVudCgnZGl2JywgJ3NwbGl0YmFyLWhvcml6b250YWwnKSxcbiAgICAgIHNoYXJlZENhcmRzXG4gICAgXSk7XG4gICAgdGhpcy5zaGFyZWRUYWIucmVwbGFjZVdpdGgoc2hhcmVkVGFiKTtcbiAgICB0aGlzLnNoYXJlZFRhYiA9IHNoYXJlZFRhYjtcbiAgfTtcblxuICB1cGRhdGVGYXZvcml0ZXNQYW5lKGZhdm9yaXRlUnVuczogREcuRnVuY0NhbGxbXSkge1xuICAgIGNvbnN0IGZhdkNhcmRzID0gKGZhdm9yaXRlUnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIGZhdm9yaXRlcycsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIGNvbnN0IGZhdlRhYiA9IHVpLmRpdlYoW1xuICAgICAgdGhpcy5mYXZvcml0ZXNQYW5lRmlsdGVyLFxuICAgICAgdWkuZWxlbWVudCgnZGl2JywgJ3NwbGl0YmFyLWhvcml6b250YWwnKSxcbiAgICAgIGZhdkNhcmRzXG4gICAgXSk7XG4gICAgdGhpcy5mYXZUYWIucmVwbGFjZVdpdGgoZmF2VGFiKTtcbiAgICB0aGlzLmZhdlRhYiA9IGZhdlRhYjtcbiAgfTtcblxuICB1cGRhdGVNeVBhbmUobXlSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbXlDYXJkcyA9IChteVJ1bnMubGVuZ3RoID4gMCkgPyB0aGlzLnJlbmRlckhpc3RvcnlDYXJkcyhteVJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgZm91bmQgaW4gaGlzdG9yeScsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIGNvbnN0IG5ld1RhYiA9IHVpLmRpdlYoW1xuICAgICAgdGhpcy5teVBhbmVGaWx0ZXIsXG4gICAgICB1aS5lbGVtZW50KCdkaXYnLCAnc3BsaXRiYXItaG9yaXpvbnRhbCcpLFxuICAgICAgbXlDYXJkc1xuICAgIF0pO1xuICAgIHRoaXMuaGlzdG9yeVRhYi5yZXBsYWNlV2l0aChuZXdUYWIpO1xuICAgIHRoaXMuaGlzdG9yeVRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICByZW5kZXJDYXJkKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICBpY29uLnN0eWxlLndpZHRoID0gJzI1cHgnO1xuICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gJzI1cHgnO1xuICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgY29uc3QgY2FyZExhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBmdW5jQ2FsbC5hdXRob3IuZnJpZW5kbHlOYW1lLCB7c3R5bGU6IHsnY29sb3InOiAndmFyKC0tYmx1ZS0xKSd9fSk7XG4gICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIGljb24pO1xuXG4gICAgY29uc3QgZWRpdEljb24gPSB1aS5pY29uRkEoJ2VkaXQnLCAoZXYpID0+IHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zaG93RWRpdERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgfSk7XG4gICAgZWRpdEljb24uY2xhc3NMaXN0LmFkZCgnY3YtZnVuY2NhbGwtY2FyZC1ob3Zlci1pY29uJyk7XG5cbiAgICBjb25zdCBkZWxldGVJY29uID0gdWkuaWNvbkZBKCd0cmFzaC1hbHQnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICB9LCAnRGVsZXRlIHRoZSBydW4nKTtcbiAgICBkZWxldGVJY29uLmNsYXNzTGlzdC5hZGQoJ2N2LWZ1bmNjYWxsLWNhcmQtaG92ZXItaWNvbicpO1xuXG4gICAgY29uc3QgZmF2b3JpdGVkSWNvbiA9IHVpLmljb25GQSgnc3RhcicsIG51bGwsICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICBmYXZvcml0ZWRJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhcycsICdjdi1mdW5jY2FsbC1jYXJkLWRlZi1pY29uJyk7XG5cbiAgICBjb25zdCBzaGFyZWRJY29uID0gdWkuaWNvbkZBKCdzaGFyZS1hbHQnLCBudWxsLCAnQWRkIHRvIHNoYXJlZCcpO1xuICAgIHNoYXJlZEljb24uY2xhc3NMaXN0LmFkZCgnZmFzJywgJ2N2LWZ1bmNjYWxsLWNhcmQtZGVmLWljb24nKTtcbiAgICBzaGFyZWRJY29uLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJsdWUtMSknO1xuXG4gICAgY29uc3QgZGF0ZVN0YXJ0ZWQgPSBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KTtcblxuICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgIHVpLmRpdkgoW1xuICAgICAgICBpY29uLFxuICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICBjYXJkTGFiZWwsXG4gICAgICAgICAgdWkuc3BhbihbZGF0ZVN0YXJ0ZWRdKSxcbiAgICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWyd0YWdzJ10gJiYgZnVuY0NhbGwub3B0aW9uc1sndGFncyddLmxlbmd0aCA+IDApID9cbiAgICAgICAgICAgIFt1aS5kaXYoZnVuY0NhbGwub3B0aW9uc1sndGFncyddLm1hcCgodGFnOiBzdHJpbmcpID0+IHVpLnNwYW4oW3RhZ10sICdkNC10YWcnKSkpXTpbXSxcbiAgICAgICAgXSwgJ2N2LWNhcmQtY29udGVudCcpLFxuICAgICAgXSksXG4gICAgICB1aS5kaXZIKFtcbiAgICAgICAgZWRpdEljb24sIGRlbGV0ZUljb24sXG4gICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10pID8gW2Zhdm9yaXRlZEljb25dIDogW10sXG4gICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSA/IFtzaGFyZWRJY29uXTogW10sXG4gICAgICBdKVxuICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5vblJ1bkNob3Nlbi5uZXh0KGZ1bmNDYWxsLmlkKTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPSBbLi4udGhpcy5teUNhcmRzLCAuLi50aGlzLmZhdm9yaXRlQ2FyZHMsIC4uLnRoaXMuc2hhcmVkQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpO1xuXG4gICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICB9KTtcbiAgICB1aS50b29sdGlwLmJpbmQoY2FyZCwgKCkgPT4gdWkudGFibGVGcm9tTWFwKHtcbiAgICAgIEF1dGhvcjogZ3Jvay5zaGVsbC51c2VyLnRvTWFya3VwKCksXG4gICAgICBEYXRlOiBkYXRlU3RhcnRlZCxcbiAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddKSA/IHsnVGl0bGUnOiBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddfTp7fSxcbiAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHsnRGVzY3JpcHRpb24nOiBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddfTp7fSxcbiAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWyd0YWdzJ10gJiYgZnVuY0NhbGwub3B0aW9uc1sndGFncyddLmxlbmd0aCA+IDApID9cbiAgICAgICAgeydUYWdzJzogdWkuZGl2KGZ1bmNDYWxsLm9wdGlvbnNbJ3RhZ3MnXS5tYXAoKHRhZzogc3RyaW5nKSA9PiB1aS5zcGFuKFt0YWddLCAnZDQtdGFnJykpLCAnZDQtdGFnLWVkaXRvcicpfTp7fSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIGNhcmQ7XG4gIH1cblxuICBzaG93RWRpdERpYWxvZyhmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBkbGcgPSB1aS5kaWFsb2coe3RpdGxlOiAnRWRpdCBydW4nfSk7XG5cbiAgICBsZXQgdGl0bGUgPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICcnO1xuICAgIGxldCBkZXNjcmlwdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPz8gJyc7XG4gICAgY29uc3QgdGl0bGVJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdUaXRsZScsIHRpdGxlLCAoczogc3RyaW5nKSA9PiB0aXRsZSA9IHMpO1xuICAgIGxldCBpc1NoYXJlZCA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPz8gZmFsc2U7XG4gICAgbGV0IGlzRmF2b3JpdGUgPSBmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPz8gZmFsc2U7XG5cbiAgICBjb25zdCB0YWdzTGluZSA9IERHLlRhZ0VkaXRvci5jcmVhdGUoKTtcbiAgICAoZnVuY0NhbGwub3B0aW9uc1sndGFncyddIHx8IFtdKS5mb3JFYWNoKCh0YWc6IHN0cmluZykgPT4ge1xuICAgICAgdGFnc0xpbmUuYWRkVGFnKHRhZyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkdW1teUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJyAnLCAnJyk7XG4gICAgZHVtbXlJbnB1dC5pbnB1dC5yZXBsYWNlV2l0aCh0YWdzTGluZS5yb290KTtcblxuICAgIGNvbnN0IHRhZ0lucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RhZycsICcnKTtcbiAgICB0YWdJbnB1dC5hZGRPcHRpb25zKHVpLmljb25GQSgncGx1cycsICgpID0+IHtcbiAgICAgIGlmICh0YWdJbnB1dC52YWx1ZSA9PT0gJycpIHJldHVybjtcblxuICAgICAgdGFnc0xpbmUuYWRkVGFnKHRhZ0lucHV0LnZhbHVlKTtcbiAgICAgIHRhZ0lucHV0LnZhbHVlID0gJyc7XG4gICAgfSkpO1xuXG4gICAgZGxnLmFkZCh1aS5mb3JtKFtcbiAgICAgIHRpdGxlSW5wdXQsXG4gICAgICB1aS5zdHJpbmdJbnB1dCgnRGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbiwgKHM6IHN0cmluZykgPT4geyBkZXNjcmlwdGlvbiA9IHM7IH0pLFxuICAgICAgdWkuYm9vbElucHV0KCdGYXZvcml0ZXMnLCBpc0Zhdm9yaXRlLCAoYjogYm9vbGVhbikgPT4gaXNGYXZvcml0ZSA9IGIpLFxuICAgICAgdWkuYm9vbElucHV0KCdTaGFyZScsIGlzU2hhcmVkLCAoYjogYm9vbGVhbikgPT4gaXNTaGFyZWQgPSBiKSxcbiAgICAgIHRhZ0lucHV0LFxuICAgICAgZHVtbXlJbnB1dFxuICAgIF0pKVxuICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICBmdW5jQ2FsbCA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlICE9PSAnJyA/IHRpdGxlIDogbnVsbDtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGRlc2NyaXB0aW9uICE9PSAnJyA/IGRlc2NyaXB0aW9uIDogbnVsbDtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGFncyddID0gdGFnc0xpbmUudGFncztcblxuICAgICAgICBpZiAoISFpc1NoYXJlZCA9PT0gISFmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddICYmICEhaXNGYXZvcml0ZSA9PT0gISFmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10pIHtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IGhpc3RvcnlVdGlscy5zYXZlUnVuKGZ1bmNDYWxsKTtcblxuICAgICAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBmdW5jQ2FsbC5pZCkhO1xuICAgICAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWyd0aXRsZSddID0gdGl0bGUgIT09ICcnID8gdGl0bGUgOiBudWxsO1xuICAgICAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gZGVzY3JpcHRpb24gIT09ICcnID8gZGVzY3JpcHRpb24gOiBudWxsO1xuICAgICAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWyd0YWdzJ10gPSBmdW5jQ2FsbC5vcHRpb25zWyd0YWdzJ107XG5cbiAgICAgICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1NoYXJlZCAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9TaGFyZWQoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1NoYXJlZCAmJiBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSA9IGlzU2hhcmVkO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgdHJ1ZSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0Zhdm9yaXRlICYmICFmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10pIHtcbiAgICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBpc0Zhdm9yaXRlO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgdHJ1ZSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGRSdW5Ub0Zhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRmF2b3JpdGUgJiYgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID0gaXNGYXZvcml0ZTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlLCB3aWR0aDogNTAwfSk7XG4gIH1cblxuICByZW5kZXJGYXZvcml0ZUNhcmRzKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkge1xuICAgIHRoaXMuZmF2b3JpdGVDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLmZhdm9yaXRlQ2FyZHMpO1xuICB9O1xuXG4gIHJlbmRlclNoYXJlZENhcmRzKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkge1xuICAgIHRoaXMuc2hhcmVkQ2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4gdGhpcy5yZW5kZXJDYXJkKGZ1bmNDYWxsKSk7XG4gICAgcmV0dXJuIHVpLmRpdlYodGhpcy5zaGFyZWRDYXJkcyk7XG4gIH07XG5cbiAgcmVuZGVySGlzdG9yeUNhcmRzKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkge1xuICAgIHRoaXMubXlDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLm15Q2FyZHMsIHtzdHlsZToge2hlaWdodDogJzEwMCUnfX0pO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnVuYzogREcuRnVuY1xuICApIHtcbiAgICB0aGlzLnRhYnMucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnRhYnMucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG5cbiAgICB0aGlzLm15UnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVNeVBhbmUodGhpcy5zdG9yZS5maWx0ZXJlZE15UnVucykpO1xuICAgIHRoaXMuZmF2UnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVGYXZvcml0ZXNQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRGYXZvcml0ZVJ1bnMpKTtcbiAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlU2hhcmVkUGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkU2hhcmVkUnVucykpO1xuXG4gICAgdGhpcy5zdG9yZS5hbGxSdW5zLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZU15UGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkTXlSdW5zKTtcbiAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzUGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkRmF2b3JpdGVSdW5zKTtcbiAgICAgIHRoaXMudXBkYXRlU2hhcmVkUGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkU2hhcmVkUnVucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFsbFJ1bnNGZXRjaC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMucm9vdCwgdHJ1ZSk7XG4gICAgICBjb25zdCBhbGxSdW5zID0gKGF3YWl0IGhpc3RvcnlVdGlscy5wdWxsUnVuc0J5TmFtZSh0aGlzLmZ1bmMubmFtZSwgW10sIHtvcmRlcjogJ3N0YXJ0ZWQnfSwgWydzZXNzaW9uLnVzZXInLCAnb3B0aW9ucyddKSkucmV2ZXJzZSgpO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQoYWxsUnVucyk7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9GYXZvcml0ZXMuc3Vic2NyaWJlKChhZGRlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IGFkZGVkLmlkKTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1sndGl0bGUnXSA9IGFkZGVkLm9wdGlvbnNbJ3RpdGxlJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBhZGRlZC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSB0cnVlO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb1NoYXJlZC5zdWJzY3JpYmUoKGFkZGVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gYWRkZWQuaWQpO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gYWRkZWQub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGFkZGVkLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSB0cnVlO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLnN1YnNjcmliZSgocmVtb3ZlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IHJlbW92ZWQuaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWyd0aXRsZSddID0gcmVtb3ZlZC5vcHRpb25zWyd0aXRsZSddO1xuICAgICAgZWRpdGVkUnVuLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSByZW1vdmVkLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICBlZGl0ZWRSdW4ub3B0aW9uc1snaXNGYXZvcml0ZSddID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1blJlbW92ZUZyb21TaGFyZWQuc3Vic2NyaWJlKChyZW1vdmVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gcmVtb3ZlZC5pZCkhO1xuICAgICAgZWRpdGVkUnVuLm9wdGlvbnNbJ3RpdGxlJ10gPSByZW1vdmVkLm9wdGlvbnNbJ3RpdGxlJ107XG4gICAgICBlZGl0ZWRSdW4ub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IHJlbW92ZWQub3B0aW9uc1snZGVzY3JpcHRpb24nXTtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkRlbGV0ZWQuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbHRlcigoY2FsbCkgPT4gY2FsbC5pZCAhPT0gaWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvRmF2b3JpdGVzLm5leHQoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGNvbnN0IHNhdmVkRmF2b3JpdGUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvRmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5uZXh0KHNhdmVkRmF2b3JpdGUpO1xuICAgIHJldHVybiBzYXZlZEZhdm9yaXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1snaXNGYXZvcml0ZSddID0gZmFsc2U7XG5cbiAgICB0aGlzLmJlZm9yZVJ1blJlbW92ZUZyb21GYXZvcml0ZXMubmV4dChjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBjb25zdCBmYXZvcml0ZVNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgdGhpcy5hZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMubmV4dChmYXZvcml0ZVNhdmUpO1xuICAgIHJldHVybiBmYXZvcml0ZVNhdmU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFJ1blRvU2hhcmVkKGNhbGxUb1NoYXJlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9TaGFyZS5vcHRpb25zWydpc1NoYXJlZCddID0gdHJ1ZTtcblxuICAgIHRoaXMuYmVmb3JlUnVuQWRkVG9TaGFyZWQubmV4dChjYWxsVG9TaGFyZSk7XG5cbiAgICBjb25zdCBhbGxHcm91cCA9IGF3YWl0IGdyb2suZGFwaS5ncm91cHMuZmluZChkZWZhdWx0R3JvdXBzSWRzWydBbGwgdXNlcnMnXSk7XG5cbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShjYWxsVG9TaGFyZS5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKSB7XG4gICAgICBjb25zdCBkZiA9IGNhbGxUb1NoYXJlLm91dHB1dHNbb3V0cHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZTtcbiAgICAgIGF3YWl0IGdyb2suZGFwaS5wZXJtaXNzaW9ucy5ncmFudChkZi5nZXRUYWJsZUluZm8oKSwgYWxsR3JvdXAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KGNhbGxUb1NoYXJlLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKGlucHV0KSA9PiBpbnB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cykge1xuICAgICAgY29uc3QgZGYgPSBjYWxsVG9TaGFyZS5pbnB1dHNbaW5wdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lO1xuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnBlcm1pc3Npb25zLmdyYW50KGRmLmdldFRhYmxlSW5mbygpLCBhbGxHcm91cCwgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVkU2hhcmVkID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1NoYXJlKTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb1NoYXJlZC5uZXh0KHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVJ1bkZyb21TaGFyZWQoY2FsbFRvVW5zaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG5cbiAgICB0aGlzLmJlZm9yZVJ1blJlbW92ZUZyb21TaGFyZWQubmV4dChjYWxsVG9VbnNoYXJlKTtcbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9VbnNoYXJlKTtcbiAgICB0aGlzLmFmdGVyUnVuUmVtb3ZlRnJvbVNoYXJlZC5uZXh0KHNhdmVkU2hhcmVkKTtcbiAgICByZXR1cm4gc2F2ZWRTaGFyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gIH1cbn1cbiJdfQ==