@rivet-health/design-system 40.18.0 → 40.18.1
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.
|
@@ -196,11 +196,16 @@ export var RivSelect;
|
|
|
196
196
|
exactMatch = options?.fuseOptions?.threshold == 0;
|
|
197
197
|
[parents, children] = getRelationshipMaps(topLevelOptions);
|
|
198
198
|
}
|
|
199
|
+
// Leading/trailing whitespace shouldn't affect fuzzy matching (Fuse
|
|
200
|
+
// scores the pattern's length against the text's, so a stray space
|
|
201
|
+
// changes results in surprising ways); a search string of only
|
|
202
|
+
// whitespace is treated the same as no search.
|
|
203
|
+
const search = query.search.trim();
|
|
199
204
|
/*
|
|
200
205
|
If the user is not searching options, return the full set of options
|
|
201
206
|
sorted appropriately.
|
|
202
207
|
*/
|
|
203
|
-
if (!
|
|
208
|
+
if (!search) {
|
|
204
209
|
/*
|
|
205
210
|
The `source` order property allows for opting out of automatic
|
|
206
211
|
sorting, returning the data in its natural input order.
|
|
@@ -258,7 +263,7 @@ export var RivSelect;
|
|
|
258
263
|
descendants match too, per the design specification), whether they
|
|
259
264
|
themselves matched or not.
|
|
260
265
|
*/
|
|
261
|
-
const matchedOptions = fuse.search(
|
|
266
|
+
const matchedOptions = fuse.search(search);
|
|
262
267
|
const matchedIds = new Set(matchedOptions.map(result => result.item.id));
|
|
263
268
|
const matchAncestors = new Set();
|
|
264
269
|
function collectAncestors(ids) {
|
|
@@ -336,7 +341,7 @@ export var RivSelect;
|
|
|
336
341
|
for (const match of result.matches ?? []) {
|
|
337
342
|
// filter out inexact matches
|
|
338
343
|
if (exactMatch && match.value != null) {
|
|
339
|
-
match.indices = match.indices.filter(isFuseMatchExact(match,
|
|
344
|
+
match.indices = match.indices.filter(isFuseMatchExact(match, search));
|
|
340
345
|
}
|
|
341
346
|
if (match.key === 'title') {
|
|
342
347
|
highlights.titleHighlightIndices = [...match.indices];
|
|
@@ -874,4 +879,4 @@ export var RivSelect;
|
|
|
874
879
|
}
|
|
875
880
|
}
|
|
876
881
|
})(RivSelect || (RivSelect = {}));
|
|
877
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUtOLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUNMLFdBQVcsRUFFWCxHQUFHLEVBQ0gsS0FBSyxFQUVMLGFBQWEsRUFDYixJQUFJLEVBQ0osU0FBUyxFQUNULE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUc1RCxNQUFNLEtBQVcsU0FBUyxDQXk3Q3pCO0FBejdDRCxXQUFpQixTQUFTO0lBQ3hCLGFBQWE7SUFDYixhQUFhO0lBQ2IsYUFBYTtJQXNHYjs7O09BR0c7SUFDSCxNQUFhLFNBQWdDLFNBQVEsR0FBb0I7UUFPdkUsWUFBWSxNQUF5QztZQUNuRCxLQUFLLEVBQUUsQ0FBQztZQVBWLHVFQUF1RTtZQUN2RSx1RUFBdUU7WUFDdkUsdUVBQXVFO1lBQ3ZFLDhEQUE4RDtZQUM3QyxTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7WUFJMUQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2pCO2FBQ0Y7UUFDSCxDQUFDO1FBRVEsR0FBRyxDQUFDLE1BQXVDO1lBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFUSxHQUFHLENBQUMsTUFBdUI7WUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxD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QyxDQUFDO1lBQ3RDLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxFQXo3Q2dCLFNBQVMsS0FBVCxTQUFTLFFBeTdDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVzZSwge1xuICBGdXNlUmVzdWx0LFxuICBGdXNlUmVzdWx0TWF0Y2gsXG4gIElGdXNlT3B0aW9ucyxcbiAgUmFuZ2VUdXBsZSxcbn0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGZsYXR0ZW5EZWVwLCBpc051bWJlciwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGNvbm5lY3RhYmxlLFxuICBDb25uZWN0YWJsZSxcbiAgbWFwLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2NhbixcbiAgc3RhcnRXaXRoLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IEhpZ2hsaWdodENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Zpc3VhbGl6YXRpb24vaGlnaGxpZ2h0L2hpZ2hsaWdodC5jb21wb25lbnQnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFJpdlNlbGVjdCB7XG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gT3B0aW9ucyAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC0tLS0tLS0tLS0tLS0tLS0tLS3ilIDilIDilIDilJBcbiAgICog4pSCIEJhc2VPcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBUaGUgY29yZSBkYXRhIHJlcXVpcmVkIGZvciBlYWNoIG9wdGlvbiAgICDilIJcbiAgICog4pSCIChzdWNoIGFzIGlkIGFuZCB0aXRsZSkuICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAtLS0tLS0tLS0tLS0tLS0tLS0t4pSA4pSA4pSkXG4gICAqIOKUgiBPcHRpb24gKEJhc2VPcHRpb24gKyBjaGlsZHJlbikgICAgICAgICAgICDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgUHJvdmlkZXMgcmVjdXJzaXZlIHR5cGUgc2FmZXR5IHRvIHRoZSAgICAg4pSCXG4gICAqIOKUgiB0eXBlIHNhZmV0eSB0byB0aGUgQmFzZU9wdGlvbi4gICAgICAgICAgICDilIJcbiAgICog4pSU4pSALS0tLS0tLS0tLS0tLS0tLS0t4pSsLS0tLS0tLeKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiBTb3VyY2VPcHRpb24gKE9wdGlvbiArIHNlYXJjaCBoaWdobGlnaHRzKSDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgQWRkcyBzZWFyY2ggaGlnaGxpZ2h0cyB0byB0aGUgT3B0aW9uIGFuZCAg4pSCXG4gICAqIOKUgiBpcyB0aGUgcmV0dXJuIHR5cGUgZm9yIHRoZSBvcHRpb24gU291cmNlICDilIJcbiAgICog4pSCIChkYXRhIGZldGNoZXIpIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICogICAgICAgICAgICAgICAgICAgICB8XG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgRnVsbE9wdGlvbiAoU291cmNlT3B0aW9uICsgVUkgc3RhdGUpICAgICAg4pSCXG4gICAqIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICog4pSCIEF1Z21lbnRzIHRoZSBTb3VyY2VPcHRpb24gd2l0aCBhbGwgb2YgdGhlIOKUglxuICAgKiDilIIgVUkgaW5mb3JtYXRpb24gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgICAg4pSCXG4gICAqIOKUgiBzdGF0ZSwgc3VjaCBhcyBzZWxlY3Rpb24gc3RhdHVzLCB3aGV0aGVyICDilIJcbiAgICog4pSCIG9yIG5vdCB0aGUgbm9kZSBpcyBleHBhbmRlZCwgZXRjLiAgICAgICAgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSB1c2FnZXMgb2YgT21pdDwuLi4+IGluIHRoaXMgc2VjdGlvbiBhcmUgbm90IHJlcXVpcmVkLCBidXRcbiAgICogZG8gaGVscCBpbi1lZGl0b3IgdHlwZSBoaW50cyB0byBiZSBtb3JlIGNsZWFyIGFuZCBkaXJlY3QuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIEJhc2VPcHRpb24gPSB7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN1YnRpdGxlPzogc3RyaW5nO1xuICAgIGhlbHA/OiBzdHJpbmc7XG4gICAgY291bnQ/OiBudW1iZXI7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24gPSBCYXNlT3B0aW9uPiA9IE8gJiB7XG4gICAgY2hpbGRyZW4/OiBPcHRpb248Tz5bXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2VPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gT21pdDxcbiAgICBPcHRpb248Tz4sXG4gICAgJ2NoaWxkcmVuJ1xuICA+ICYge1xuICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICBjaGlsZHJlbj86IFNvdXJjZU9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIE11bHRpU2VsZWN0aW9uU3RhdGUgPSBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnO1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gT21pdDxcbiAgICBTb3VyY2VPcHRpb248Tz4sXG4gICAgJ2NoaWxkcmVuJ1xuICA+ICYge1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIHNlbGVjdGFibGU6IGJvb2xlYW47XG4gICAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgICBjaGlsZHJlbj86IEZ1bGxPcHRpb248Tz5bXTtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIE9wdGlvbiBncm91cHMgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIE9wdGlvbkdyb3VwLCBTb3VyY2VPcHRpb25Hcm91cCwgYW5kXG4gICAqIEZ1bGxPcHRpb25Hcm91cCBpcyBhbmFsb2dvdXMgdG8gdGhlIG9wdGlvbiB0eXBlcyBhYm92ZS5cbiAgICpcbiAgICogQXMgd2l0aCBiZWZvcmUsIHRoZSB1c2Ugb2YgT21pdDwuLi4+IGlzIG5vdCByZXF1aXJlZCBidXQgaGVscGZ1bC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgT3B0aW9uR3JvdXA8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICAvKiogSW5mbyBpY29uICsgdG9vbHRpcCBzaG93biBiZXNpZGUgdGhlIGhlYWRlci4gTm8tb3Agd2l0aG91dCBhIGhlYWRlci4gKi9cbiAgICBoZWxwPzogc3RyaW5nO1xuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgU291cmNlT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgT3B0aW9uU2V0IGNsYXNzIHByb3ZpZGVzIFNldC1saWtlIGZ1bmN0aW9uYWxpdHksIGJ1dCB1bmlxdWVuZXNzIGlzXG4gICAqIGRldGVybWluZWQgYnkgdGhlIG9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE9wdGlvblNldDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gZXh0ZW5kcyBTZXQ8U291cmNlT3B0aW9uPE8+PiB7XG4gICAgLy8gUGFyYWxsZWwgaWQg4oaSIG9wdGlvbiBtYXAgc28gaGFzKCkvYWRkKCkvZGVsZXRlKCkgYXJlIE8oMSkgaW5zdGVhZCBvZlxuICAgIC8vIHNwcmVhZGluZyB0aGUgU2V0IGFuZCBsaW5lYXItc2Nhbm5pbmcgaXQuIFJlYnVpbGRpbmcgYW4gTyhOwrIpIGxvb2t1cFxuICAgIC8vIGZvciBhIDE2ay1vcHRpb24gc2VsZWN0aW9uIHdhcyB0aGUgcHJpbWFyeSBjYXVzZSBvZiB0aGUgbXVsdGktbWludXRlXG4gICAgLy8gZnJlZXplIHRoYXQgc3VyZmFjZWQgUlZULTI1MzgzJ3MgdHJlZS1zZWxlY3Qgc2NhbGUgcHJvYmxlbS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ5SWQgPSBuZXcgTWFwPE9bJ2lkJ10sIFNvdXJjZU9wdGlvbjxPPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcz86IEl0ZXJhYmxlPFNvdXJjZU9wdGlvbjxPPj4gfCBudWxsKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgIHRoaXMuYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGhhcyhvcHRpb246IFNvdXJjZU9wdGlvbjxPPiB8IEZ1bGxPcHRpb248Tz4pIHtcbiAgICAgIHJldHVybiB0aGlzLmJ5SWQuaGFzKG9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgYWRkKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYnlJZC5nZXQob3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZyA9PT0gb3B0aW9uKSB7XG4gICAgICAgIC8vIFNhbWUgb2JqZWN0IHJlZmVyZW5jZSDigJQgbm90aGluZyB0byB1cGRhdGUuIEFuY2VzdG9yIHJlLWFkZHNcbiAgICAgICAgLy8gZHVyaW5nIGEgc2VsZWN0aW9uIHNuYXBzaG90IGhpdCB0aGlzIHBhdGggcmVwZWF0ZWRseSwgc28ga2VlcGluZ1xuICAgICAgICAvLyBpdCBPKDEpIGlzIHdoYXQgcHJldmVudHMgdGhlIHRyZWUtc2VsZWN0IE7CsiBibG93LXVwIHNlZW4gaW5cbiAgICAgICAgLy8gUlZULTI1NDcwLlxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIERpZmZlcmVudCByZWZlcmVuY2UsIHNhbWUgaWQg4oCUIHN3YXAgdGhlIHN0b3JlZCByZWYgd2hpbGVcbiAgICAgICAgLy8gcHJlc2VydmluZyBTZXQgaW5zZXJ0aW9uIG9yZGVyLiBUaGUgcmVidWlsZCBpcyBPKE4pLCBidXQgdGhpc1xuICAgICAgICAvLyBwYXRoIGlzIHJhcmUgaW4gcHJhY3RpY2UgKHRoZSBob3QgYW5jZXN0b3Itc25hcHNob3QgbG9vcCB0YWtlc1xuICAgICAgICAvLyB0aGUgaWRlbnRpdHkgZmFzdC1wYXRoIGFib3ZlKS5cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpc10ubWFwKG8gPT4gKG8uaWQgPT09IG9wdGlvbi5pZCA/IG9wdGlvbiA6IG8pKTtcbiAgICAgICAgdGhpcy5ieUlkLnNldChvcHRpb24uaWQsIG9wdGlvbik7XG4gICAgICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgc3VwZXIuYWRkKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ieUlkLnNldChvcHRpb24uaWQsIG9wdGlvbik7XG4gICAgICAgIHN1cGVyLmFkZChvcHRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYnlJZC5nZXQob3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICB0aGlzLmJ5SWQuZGVsZXRlKG9wdGlvbi5pZCk7XG4gICAgICAgIHN1cGVyLmRlbGV0ZShleGlzdGluZyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGNsZWFyKCkge1xuICAgICAgdGhpcy5ieUlkLmNsZWFyKCk7XG4gICAgICBzdXBlci5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vLy8vLy8vLy8vXG4gIC8vIFN0YXRlIC8vXG4gIC8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSBDb3JlU3RhdGUgcHJvdmlkZXMgYWxsIG9mIHRoZSBmb3VuZGF0aW9uYWwgcGllY2VzIG9mIHN0YXRlIHJlcXVpcmVkXG4gICAqIGZvciBhIHdvcmtpbmcgY29tcG9uZW50LiBGdWxsU3RhdGUgaXMgYSBwdXJlIGRlcml2YXRpb24gb2YgQ29yZVN0YXRlIHBsdXNcbiAgICogdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHByb3ZpZGVzIGNvbnZlbmllbmNlcyBmb3IgcmVuZGVyaW5nIHRoZVxuICAgKiBjb21wb25lbnRzLiBBY3Rpb25zIGFuZCB0aGUgY29yZSBzdGF0ZSBhcmUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIHRvXG4gICAqIHByb2R1Y2UgbmV3IENvcmVTdGF0ZXMgKHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gY2FsY3VsYXRlIG5ldyBGdWxsU3RhdGVzKS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKi9cblxuICBleHBvcnQgdHlwZSBPcmRlckJ5ID0gJ3RpdGxlJyB8ICdjb3VudCcgfCAnc291cmNlJztcblxuICBjb25zdCBNSU5fT1BUSU9OU19GT1JfQ09OVFJPTFMgPSA1O1xuXG4gIGNvbnN0IERFRkFVTFRfRElTUExBWV9MSU1JVCA9IDEwMDtcblxuICBleHBvcnQgdHlwZSBDb3JlU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBzZWFyY2g6IHN0cmluZztcbiAgICAgIG9yZGVyOiBPcmRlckJ5O1xuICAgIH07XG4gICAgbG9hZDoge1xuICAgICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgICB9O1xuICAgIHNvdXJjZU9wdGlvbkdyb3VwczogU291cmNlT3B0aW9uR3JvdXA8Tz5bXTtcbiAgICAvKipcbiAgICAgKiBTdG9yZXMgdGhlIHVuZmlsdGVyZWQgb3JpZ2luYWwgb3B0aW9uIGdyb3VwcyB3aGVuIHNlYXJjaCBmaWx0ZXJpbmcgaXMgYWN0aXZlLlxuICAgICAqIFVzZWQgYnkgYGFsbG93U2VsZWN0Tm9uTGVhZkR1cmluZ1NlYXJjaGAgdG8gc2VsZWN0IGFsbCBjaGlsZHJlbiBvZiBhIHBhcmVudCxcbiAgICAgKiBpbmNsdWRpbmcgdGhvc2Ugbm90IHZpc2libGUgaW4gdGhlIGZpbHRlcmVkIHNlYXJjaCByZXN1bHRzLlxuICAgICAqL1xuICAgIG9yaWdpbmFsT3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgc2VsZWN0ZWQ6IE9wdGlvblNldDxPPjtcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgICBvcGVuOiBib29sZWFuO1xuICAgICAgZXhwYW5kZWRPcHRpb25zOiBTZXQ8T1snaWQnXT47XG4gICAgfTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gQ29yZVN0YXRlPE8+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBzaG93U2VhcmNoOiBib29sZWFuO1xuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICAgIHNob3dPcmRlcjogYm9vbGVhbjtcbiAgICB9O1xuICAgIGZ1bGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgZm9ybWF0dGVkU2VsZWN0ZWRPcHRpb25zOiBzdHJpbmc7XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgZGl2aWRlcnM6IGJvb2xlYW47XG4gICAgICBpbmxpbmU6IGJvb2xlYW47XG4gICAgICBtYXhIZWlnaHQ6IHN0cmluZyB8IG51bGw7XG4gICAgICBtYXhXaWR0aDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1pbkhlaWdodDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1pbldpZHRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgZGlzcGxheUxpbWl0TWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHNob3dTaW5nbGVTZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgIHBpbGxDb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBBY3Rpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWQnIH1cbiAgICB8IHsgdHlwZTogJ29wZW5DaGFuZ2UnOyBvcGVuOiBib29sZWFuIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNoYW5nZSc7IHBheWxvYWQ6IE9yZGVyQnkgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogQ29yZVN0YXRlPE8+WydzZWxlY3Rpb24nXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbic7XG4gICAgICAgIGlkOiBPWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9O1xuXG4gIHR5cGUgSW50ZXJuYWxBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2xvYWRDb21wbGV0ZSc7XG4gICAgICAgIGRhdGE6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W107XG4gICAgICAgIC8qKiBPcmlnaW5hbCB1bmZpbHRlcmVkIGRhdGEsIHByb3ZpZGVkIHdoZW4gc2VhcmNoIGlzIGFjdGl2ZSAqL1xuICAgICAgICBvcmlnaW5hbERhdGE/OiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgICAgfVxuICAgIHwgeyB0eXBlOiAnbG9hZEVycm9yJzsgZXJyb3I6IHVua25vd24gfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gU291cmNlIC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgU291cmNlJ3Mgam9iIGlzIHRvIGZldGNoIG9wdGlvbnMgKGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlKSB3aGljaFxuICAgKiB0aGVuIGJsZW5kIHdpdGggdGhlIG90aGVyIHBpZWNlcyBvZiBzdGF0ZSB0byBwcm9kdWNlIHRoZSBGdWxsU3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZVJlc3VsdDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIHwgU291cmNlT3B0aW9uR3JvdXA8Tz5bXVxuICAgIHwge1xuICAgICAgICBkYXRhOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgICAgICAvKipcbiAgICAgICAgICogT3JpZ2luYWwgdW5maWx0ZXJlZCBkYXRhLCBwcm92aWRlZCB3aGVuIHNlYXJjaCBmaWx0ZXJpbmcgaXMgYWN0aXZlLlxuICAgICAgICAgKiBVc2VkIGJ5IGBhbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2hgIHRvIHNlbGVjdCBhbGwgY2hpbGRyZW4gb2ZcbiAgICAgICAgICogYSBwYXJlbnQsIGluY2x1ZGluZyB0aG9zZSBub3QgdmlzaWJsZSBpbiB0aGUgZmlsdGVyZWQgc2VhcmNoIHJlc3VsdHMuXG4gICAgICAgICAqL1xuICAgICAgICBvcmlnaW5hbERhdGE/OiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2U8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gKFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPE8+LFxuICApID0+IFByb21pc2U8U291cmNlUmVzdWx0PE8+PjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIE1hbmFnZXIgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPE8+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPE8+PjtcbiAgICBhbGxvd011bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgICBhbGxvd1NlYXJjaD86IGJvb2xlYW47XG4gICAgYWxsb3dTZWxlY3RBbGw/OiBib29sZWFuO1xuICAgIGFsbG93T3JkZXI/OiBib29sZWFuO1xuICAgIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIGRpdmlkZXJzPzogYm9vbGVhbjtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIG1heEhlaWdodD86IHN0cmluZyB8IG51bGw7XG4gICAgbWF4V2lkdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1pbkhlaWdodD86IHN0cmluZyB8IG51bGw7XG4gICAgbWluV2lkdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIGRpc3BsYXlMaW1pdD86IG51bWJlcjtcbiAgICBzZWxlY3RlZE9wdGlvbkxpbWl0PzogbnVtYmVyO1xuICAgIHNob3dTaW5nbGVTZWxlY3RlZD86IGJvb2xlYW47XG4gICAgdXNlVG9wTGV2ZWxPcHRpb25zRm9yRGlzcGxheT86IGJvb2xlYW47XG4gICAgZ2V0Q3VzdG9tT3B0aW9uRGlzcGxheT86IChzZWxlY3RlZE9wdGlvbnM6IFNvdXJjZU9wdGlvbjxPPltdKSA9PiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCBub24tbGVhZiBub2RlcyAocGFyZW50cykgcmVtYWluIHNlbGVjdGFibGUgZHVyaW5nIHNlYXJjaCxcbiAgICAgKiBhbmQgc2VsZWN0aW5nIHRoZW0gd2lsbCBzZWxlY3QvZGVzZWxlY3QgQUxMIGNoaWxkcmVuIGZyb20gdGhlIG9yaWdpbmFsXG4gICAgICogZGF0YXNldCwgbm90IGp1c3QgdGhlIHZpc2libGUgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIERlZmF1bHQ6IGZhbHNlIChjdXJyZW50IGJlaGF2aW9yIC0gcGFyZW50cyBhcmUgbm90IHNlbGVjdGFibGUgZHVyaW5nIHNlYXJjaClcbiAgICAgKi9cbiAgICBhbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2g/OiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPE8+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgb3JkZXI6ICd0aXRsZScsXG4gICAgICB9LFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9LFxuICAgICAgc291cmNlT3B0aW9uR3JvdXBzOiBbXSxcbiAgICAgIG9yaWdpbmFsT3B0aW9uR3JvdXBzOiBbXSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3IE9wdGlvblNldCgpLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QnLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgZXhwYW5kZWRPcHRpb25zOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdGVkSW5pdGlhbFN0YXRlOiBDb3JlU3RhdGU8Tz4gPSBkZWZhdWx0c0RlZXAoXG4gICAgICB7fSxcbiAgICAgIG9wdGlvbnM/LmluaXRpYWxTdGF0ZSxcbiAgICAgIGRlZmF1bHRTdGF0ZSxcbiAgICApO1xuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248Tz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBpbnRlcm5hbEFjdGlvbnM6IFN1YmplY3Q8SW50ZXJuYWxBY3Rpb248Tz4+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGNvcmVTdGF0ZVdpdGhTZWxlY3Rpb25TbmFwc2hvdDogT2JzZXJ2YWJsZTxcbiAgICAgIFtDb3JlU3RhdGU8Tz4sIE9wdGlvblNldDxPPl1cbiAgICA+ID0gbWVyZ2UoYWN0aW9ucywgaW50ZXJuYWxBY3Rpb25zKS5waXBlKFxuICAgICAgc2NhbjxBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPiwgW0NvcmVTdGF0ZTxPPiwgT3B0aW9uU2V0PE8+XT4oXG4gICAgICAgIChbc3RhdGUsIHNuYXBzaG90XSwgYWN0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBzaWRlRWZmZWN0cyhcbiAgICAgICAgICAgIHJlZHVjZShzdGF0ZSwgYWN0aW9uLCBvcHRpb25zKSxcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgIGludGVybmFsQWN0aW9ucyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uU25hcHNob3QgPVxuICAgICAgICAgICAgKGFjdGlvbi50eXBlID09PSAnb3BlbkNoYW5nZScgJiYgYWN0aW9uLm9wZW4pIHx8XG4gICAgICAgICAgICAoYWN0aW9uLnR5cGUgPT09ICdsb2FkQ29tcGxldGUnICYmXG4gICAgICAgICAgICAgIChuZXdTdGF0ZS5kaXNwbGF5Lm9wZW4gfHwgb3B0aW9ucz8uaW5saW5lKSlcbiAgICAgICAgICAgICAgPyBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdFdpdGhBbmNlc3RvcnMobmV3U3RhdGUpXG4gICAgICAgICAgICAgIDogc25hcHNob3Q7XG5cbiAgICAgICAgICByZXR1cm4gW25ld1N0YXRlLCBuZXdTZWxlY3Rpb25TbmFwc2hvdF07XG4gICAgICAgIH0sXG4gICAgICAgIFtkZWZhdWx0ZWRJbml0aWFsU3RhdGUsIG5ldyBPcHRpb25TZXQ8Tz4oKV0sXG4gICAgICApLFxuICAgICAgc3RhcnRXaXRoPFtDb3JlU3RhdGU8Tz4sIE9wdGlvblNldDxPPl0+KFtcbiAgICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLFxuICAgICAgICBuZXcgT3B0aW9uU2V0PE8+KCksXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxPPj4gPSBjb25uZWN0YWJsZShcbiAgICAgIGNvcmVTdGF0ZVdpdGhTZWxlY3Rpb25TbmFwc2hvdC5waXBlKFxuICAgICAgICBtYXAoKFtzLCBzZWxlY3Rpb25BdE9wZW5dKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSA9XG4gICAgICAgICAgICBzLnNvdXJjZU9wdGlvbkdyb3Vwcy5tYXAob3B0aW9uR3JvdXAgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbkdyb3VwLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbkdyb3VwLm9wdGlvbnMubWFwKG9wdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzLCBvcHRpb24sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpO1xuXG4gICAgICAgICAgY29uc3Qgc29ydGVkT3B0aW9uR3JvdXBzID0gb3B0aW9ucz8uYWxsb3dNdWx0aVNlbGVjdFxuICAgICAgICAgICAgPyBzb3J0T3B0aW9uc0J5UHJldmlvdXNseVNlbGVjdGVkU3RhdGUoXG4gICAgICAgICAgICAgICAgYWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkF0T3BlbixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBhbGxPcHRpb25Hcm91cHM7XG5cbiAgICAgICAgICBjb25zdCBkaXNwbGF5TGltaXQgPSBvcHRpb25zPy5kaXNwbGF5TGltaXQgPz8gREVGQVVMVF9ESVNQTEFZX0xJTUlUO1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlMaW1pdGVkT3B0aW9uR3JvdXBzID0gYXBwbHlEaXNwbGF5TGltaXQoXG4gICAgICAgICAgICBzb3J0ZWRPcHRpb25Hcm91cHMsXG4gICAgICAgICAgICBkaXNwbGF5TGltaXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBmdWxsT3B0aW9uR3JvdXBzID0gYXBwbHlTZWxlY3RlZE9wdGlvbkxpbWl0KFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIGRpc3BsYXlMaW1pdGVkT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgdG9wTGV2ZWxPcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICBzaG93U2VhcmNoOlxuICAgICAgICAgICAgICAgICEhcy5xdWVyeS5zZWFyY2ggfHxcbiAgICAgICAgICAgICAgICAoISFvcHRpb25zPy5hbGxvd1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICAgY291bnRBbGxPcHRpb25zKGFsbE9wdGlvbkdyb3VwcykgPlxuICAgICAgICAgICAgICAgICAgICBNSU5fT1BUSU9OU19GT1JfQ09OVFJPTFMpIHx8XG4gICAgICAgICAgICAgICAgY291bnRBbGxPcHRpb25zKGFsbE9wdGlvbkdyb3VwcykgPiBkaXNwbGF5TGltaXQsXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiBvcHRpb25zPy5zZWFyY2hQbGFjZWhvbGRlciA/PyAnU2VhcmNoJyxcbiAgICAgICAgICAgICAgc2hvd09yZGVyOlxuICAgICAgICAgICAgICAgICEhb3B0aW9ucz8uYWxsb3dPcmRlciAmJlxuICAgICAgICAgICAgICAgICFzLnF1ZXJ5LnNlYXJjaCAmJlxuICAgICAgICAgICAgICAgIGNvdW50QWxsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpID4gTUlOX09QVElPTlNfRk9SX0NPTlRST0xTLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bGxPcHRpb25Hcm91cHMsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgIGFsbG93TXVsdGlTZWxlY3Q6ICEhb3B0aW9ucz8uYWxsb3dNdWx0aVNlbGVjdCxcbiAgICAgICAgICAgICAgYWxsb3dTZWxlY3RBbGw6XG4gICAgICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd1NlbGVjdEFsbCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnM/LnNlbGVjdGVkT3B0aW9uTGltaXQgPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6XG4gICAgICAgICAgICAgICAgZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZSh0b3BMZXZlbE9wdGlvbnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICBmb3JtYXR0ZWRTZWxlY3RlZE9wdGlvbnM6IGdldEZvcm1hdHRlZE9wdGlvbnNGb3JEaXNwbGF5KFxuICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgdG9wTGV2ZWxPcHRpb25zLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IGdldFplcm9TdGF0ZU1lc3NhZ2UocyksXG4gICAgICAgICAgICAgIGRpdmlkZXJzOiAhIW9wdGlvbnM/LmRpdmlkZXJzLFxuICAgICAgICAgICAgICBpbmxpbmU6ICEhb3B0aW9ucz8uaW5saW5lLFxuICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG9wdGlvbnM/Lm1heEhlaWdodCA/PyBudWxsLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogb3B0aW9ucz8ubWF4V2lkdGggPz8gbnVsbCxcbiAgICAgICAgICAgICAgbWluSGVpZ2h0OiBvcHRpb25zPy5taW5IZWlnaHQgPz8gbnVsbCxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IG9wdGlvbnM/Lm1pbldpZHRoID8/IG51bGwsXG4gICAgICAgICAgICAgIGRpc3BsYXlMaW1pdE1lc3NhZ2U6IGdldERpc3BsYXlMaW1pdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgY291bnRWaXNpYmxlT3B0aW9ucyhmdWxsT3B0aW9uR3JvdXBzLCAhIXMucXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgICBjb3VudFZpc2libGVPcHRpb25zKGFsbE9wdGlvbkdyb3VwcywgISFzLnF1ZXJ5LnNlYXJjaCksXG4gICAgICAgICAgICAgICAgcy5xdWVyeSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiAhIW9wdGlvbnM/LnNob3dTaW5nbGVTZWxlY3RlZCxcbiAgICAgICAgICAgICAgcGlsbENvdW50OiBnZXRQaWxsQ291bnRGb3JEaXNwbGF5KHMsIHRvcExldmVsT3B0aW9ucywgb3B0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHN0YXRlLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgdGhlIG9wdGlvbnMgaW1tZWRpYXRlbHkgZm9yIHNlbGVjdHMgdGhhdCBhcmUgZGlzcGxheWVkIGlubGluZS5cbiAgICBpZiAob3B0aW9ucz8uaW5saW5lKSBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSB9O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIE1hbmFnZXJPcHRpb25zPE8+ICYge1xuICAgICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Tz47XG4gICAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8T3B0aW9uR3JvdXA8Tz5bXT4gfCBPcHRpb25Hcm91cDxPPltdLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBNYW5hZ2VyPE8+IHtcbiAgICBsZXQgZGF0YTogT3B0aW9uR3JvdXA8Tz5bXTtcbiAgICBsZXQgZnVzZTogRnVzZTxPPjtcbiAgICBsZXQgZXhhY3RNYXRjaDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBwYXJlbnRzOiBNYXA8T1snaWQnXSwgT1snaWQnXT47XG4gICAgbGV0IGNoaWxkcmVuOiBNYXA8T1snaWQnXSwgT1snaWQnXVtdPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPE8+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvKlxuICAgICAgICBSZS1mZXRjaCB0aGUgb3B0aW9ucyBvbiB0aGUgbG9hZCBhY3Rpb24sIGFuZCByZWJ1aWxkIHRoZSBzdGF0ZVxuICAgICAgICBkZXJpdmVkIGZyb20gdGhlIG9wdGlvbiBkYXRhLlxuICAgICAgKi9cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnb3BlbkNoYW5nZSdcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhkYXRhKTtcblxuICAgICAgICBmdXNlID0gbmV3IEZ1c2UoZmxhdHRlbk9wdGlvbnModG9wTGV2ZWxPcHRpb25zLCBmYWxzZSksIHtcbiAgICAgICAgICB0aHJlc2hvbGQ6IDAuMixcbiAgICAgICAgICBrZXlzOiBbJ3RpdGxlJ10sXG4gICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVNYXRjaGVzOiB0cnVlLFxuICAgICAgICAgIC4uLm9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBleGFjdE1hdGNoID0gb3B0aW9ucz8uZnVzZU9wdGlvbnM/LnRocmVzaG9sZCA9PSAwO1xuICAgICAgICBbcGFyZW50cywgY2hpbGRyZW5dID0gZ2V0UmVsYXRpb25zaGlwTWFwcyh0b3BMZXZlbE9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICBJZiB0aGUgdXNlciBpcyBub3Qgc2VhcmNoaW5nIG9wdGlvbnMsIHJldHVybiB0aGUgZnVsbCBzZXQgb2Ygb3B0aW9uc1xuICAgICAgICBzb3J0ZWQgYXBwcm9wcmlhdGVseS5cbiAgICAgICovXG4gICAgICBpZiAoIXF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICAvKlxuICAgICAgICAgIFRoZSBgc291cmNlYCBvcmRlciBwcm9wZXJ0eSBhbGxvd3MgZm9yIG9wdGluZyBvdXQgb2YgYXV0b21hdGljXG4gICAgICAgICAgc29ydGluZywgcmV0dXJuaW5nIHRoZSBkYXRhIGluIGl0cyBuYXR1cmFsIGlucHV0IG9yZGVyLlxuICAgICAgICAqL1xuICAgICAgICBpZiAocXVlcnkub3JkZXIgPT09ICdzb3VyY2UnKSByZXR1cm4gZGF0YTtcblxuICAgICAgICAvKlxuICAgICAgICAgIFNvcnQgdGhlIG9wdGlvbnMgYnkgdGl0bGUgYW5kIHN1YnRpdGxlLlxuICAgICAgICAqL1xuICAgICAgICBpZiAocXVlcnkub3JkZXIgPT09ICd0aXRsZScpIHtcbiAgICAgICAgICBmdW5jdGlvbiBzb3J0QnlUaXRsZShvcHRpb25zOiBPcHRpb248Tz5bXSk6IE9wdGlvbjxPPltdIHtcbiAgICAgICAgICAgIHJldHVybiBzb3J0Qnkob3B0aW9ucywgW1xuICAgICAgICAgICAgICAobzogT3B0aW9uPE8+KSA9PiBvLnRpdGxlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIChvOiBPcHRpb248Tz4pID0+IG8uc3VidGl0bGU/LnRvTG93ZXJDYXNlKCkgPz8gJycsXG4gICAgICAgICAgICBdKS5tYXAob3B0aW9uID0+ICh7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBzb3J0QnlUaXRsZShvcHRpb24uY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGdyb3VwID0+ICh7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHNvcnRCeVRpdGxlKGdyb3VwLm9wdGlvbnMpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAgU29ydCB0aGUgb3B0aW9ucyBieSBjb3VudCwgdGhlbiBieSB0aXRsZSwgdGhlbiBieSBzdWJ0aXRsZS5cbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHF1ZXJ5Lm9yZGVyID09PSAnY291bnQnKSB7XG4gICAgICAgICAgZnVuY3Rpb24gc29ydEJ5Q291bnQob3B0aW9uczogT3B0aW9uPE8+W10pOiBPcHRpb248Tz5bXSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydEJ5KG9wdGlvbnMsIFtcbiAgICAgICAgICAgICAgKG86IE9wdGlvbjxPPikgPT4gKGlzTnVtYmVyKG8uY291bnQpID8gLW8uY291bnQgOiBJbmZpbml0eSksXG4gICAgICAgICAgICAgIChvOiBPcHRpb248Tz4pID0+IG8udGl0bGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgKG86IE9wdGlvbjxPPikgPT4gby5zdWJ0aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgICAgIF0pLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHNvcnRCeUNvdW50KG9wdGlvbi5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZ3JvdXAgPT4gKHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogc29ydEJ5Q291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIEV4ZWN1dGUgdGhlIHNlYXJjaCB3aXRoIGZ1c2UuIE9uY2Ugd2UgaGF2ZSB0aGUgc2VhcmNoIG1hdGNoIGRhdGEsXG4gICAgICAgIHJlYnVpbGQganVzdCBhcyBtdWNoIG9mIHRoZSB0cmVlIGFzIGlzIG5lZWRlZCB0byByZW5kZXIgdGhlIHNlYXJjaFxuICAgICAgICByZXN1bHRzLiBTcGVjaWZpY2FsbHksIGFueSBtYXRjaCB3aWxsIG5lZWQgYWxsIG9mIGl0cyBhbmNlc3RvcnMgKHNvXG4gICAgICAgIHRoYXQgbWF0Y2hlZCBsZWFmIG5vZGVzIGFyZSBzaG93biBuZXN0ZWQgdW5kZXIgdGhlaXIgYW5jZXN0b3JzKSBhbmQgYWxsXG4gICAgICAgIG9mIGl0cyBjaGlsZHJlbiAoYmVjYXVzZSBhIG1hdGNoaW5nIHBhcmVudCBtZWFucyB0aGF0IGFsbCBvZiBpdHNcbiAgICAgICAgZGVzY2VuZGFudHMgbWF0Y2ggdG9vLCBwZXIgdGhlIGRlc2lnbiBzcGVjaWZpY2F0aW9uKSwgd2hldGhlciB0aGV5XG4gICAgICAgIHRoZW1zZWx2ZXMgbWF0Y2hlZCBvciBub3QuXG4gICAgICAqL1xuICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbnM6IEZ1c2VSZXN1bHQ8Tz5bXSA9IGZ1c2Uuc2VhcmNoKHF1ZXJ5LnNlYXJjaCk7XG4gICAgICBjb25zdCBtYXRjaGVkSWRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtLmlkKSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG1hdGNoQW5jZXN0b3JzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KCk7XG4gICAgICBmdW5jdGlvbiBjb2xsZWN0QW5jZXN0b3JzKGlkczogT1snaWQnXVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnRzLmdldChpZCk7XG4gICAgICAgICAgaWYgKHBhcmVudElkKSB7XG4gICAgICAgICAgICBtYXRjaEFuY2VzdG9ycy5hZGQocGFyZW50SWQpO1xuICAgICAgICAgICAgY29sbGVjdEFuY2VzdG9ycyhbcGFyZW50SWRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbGxlY3RBbmNlc3RvcnMoWy4uLm1hdGNoZWRJZHNdKTtcblxuICAgICAgY29uc3QgbWF0Y2hEZXNjZW5kYW50czogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldCgpO1xuICAgICAgZnVuY3Rpb24gY29sbGVjdERlc2NlbmRhbnRzKGlkczogT1snaWQnXVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW5JZHMgPSBjaGlsZHJlbi5nZXQoaWQpO1xuICAgICAgICAgIGlmIChjaGlsZHJlbklkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbklkcykge1xuICAgICAgICAgICAgICBtYXRjaERlc2NlbmRhbnRzLmFkZChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xsZWN0RGVzY2VuZGFudHMoY2hpbGRyZW5JZHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sbGVjdERlc2NlbmRhbnRzKFsuLi5tYXRjaGVkSWRzXSk7XG5cbiAgICAgIC8qXG4gICAgICAgIE5leHQsIHdlJ2xsIGNvbWJpbmUgYWxsIHRoZSBtYXRjaGVkIElEcyB3aXRoIHRoZWlyIGRpcmVjdCBhbmNlc3RvcnMgYW5kXG4gICAgICAgIGRlc2NhbmRhbnRzLCBhbmQgZmlsdGVyIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBkb3duIHRvIGp1c3QgdGhlc2VcbiAgICAgICAgb3B0aW9ucy5cbiAgICAgICovXG4gICAgICBjb25zdCBmaWx0ZXJlZElkczogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldChbXG4gICAgICAgIC4uLm1hdGNoZWRJZHMsXG4gICAgICAgIC4uLm1hdGNoQW5jZXN0b3JzLFxuICAgICAgICAuLi5tYXRjaERlc2NlbmRhbnRzLFxuICAgICAgXSk7XG5cbiAgICAgIGZ1bmN0aW9uIGZpbHRlck9wdGlvbnMob3B0aW9uczogT3B0aW9uPE8+W10pOiBPcHRpb248Tz5bXSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uczogT3B0aW9uPE8+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChmaWx0ZXJlZElkcy5oYXMob3B0aW9uLmlkKSkge1xuICAgICAgICAgICAgZmlsdGVyZWRPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gZmlsdGVyT3B0aW9ucyhvcHRpb24uY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlck9wdGlvbnMoZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpKTtcblxuICAgICAgLypcbiAgICAgICAgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhbiBhcnJheSBvZiBkaXN0aW5jdCB0cmVlcyAodG9wLWxldmVsIG9wdGlvbnMpLFxuICAgICAgICBmaWx0ZXJlZCBkb3duIHRvIG9ubHkgdGhlIG9wdGlvbnMgbWF0Y2hpbmcgdGhlIHNlYXJjaCBxdWVyeS4gTm90ZSB0aGF0XG4gICAgICAgIHdlIGRvbid0IGNhcmUgYWJvdXQgc2VjdGlvbiBoZWFkZXJzIHdoZW4gc2VhcmNoaW5nIHNpbmNlIHJlc3VsdHMgc2hvdWxkXG4gICAgICAgIGJlIG9yZGVyZWQgYnkgcmVsZXZhbmNlLiBUbyBjYWxjdWxhdGUgdGhlIG9yZGVyIG9mIHRoZXNlIHRyZWVzLCB3ZSdsbFxuICAgICAgICB0YWtlIHRoZSB0b3RhbCBtYXRjaCBzY29yZXMgZm9yIG9wdGlvbnMgZm91bmQgaW4gdGhlIHRyZWUsIGRpdmlkZWQgYnlcbiAgICAgICAgdGhlIGNvdW50IG9mIG1hdGNoZXMgaW4gdGhlIHRyZWUgKHRoZSBiZXN0IGF2ZXJhZ2UgbWF0Y2ggc2NvcmUpLlxuICAgICAgKi9cblxuICAgICAgY29uc3Qgc2NvcmVNYXA6IE1hcDxPWydpZCddLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiBbcmVzdWx0Lml0ZW0uaWQsIHJlc3VsdC5zY29yZSA/PyAwXSksXG4gICAgICApO1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IHNvcnRCeShmaWx0ZXJlZE9wdGlvbnMsIChvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjb3JlKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNjb3JlTWFwLmdldChvcHRpb24uaWQpID8/IDApICtcbiAgICAgICAgICAgIChvcHRpb24uY2hpbGRyZW4gPz8gW10pLnJlZHVjZShcbiAgICAgICAgICAgICAgKHNjb3JlLCBjaGlsZCkgPT4gc2NvcmUgKyBjYWxjdWxhdGVTY29yZShjaGlsZCksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVDb3VudChvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoY291bnQsIGNoaWxkKSA9PiBjb3VudCArIGNhbGN1bGF0ZUNvdW50KGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBjYWxjdWxhdGVTY29yZShvcHRpb24pO1xuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gY2FsY3VsYXRlQ291bnQob3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsU2NvcmUgLyB0b3RhbENvdW50O1xuICAgICAgfSk7XG5cbiAgICAgIC8qXG4gICAgICAgIEZpbmFsbHksIHdlJ2xsIGFkZCBoaWdobGlnaHQgaW5kaWNlcyB0byB0aGUgbWF0Y2hlcyBzbyB0aGF0IHRoZXkgY2FuIGJlXG4gICAgICAgIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICAgICovXG5cbiAgICAgIHR5cGUgSGlnaGxpZ2h0cyA9IHtcbiAgICAgICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICAgICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWdobGlnaHRNYXA6IE1hcDxPWydpZCddLCBIaWdobGlnaHRzPiA9IG5ldyBNYXAoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodHM6IEhpZ2hsaWdodHMgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHJlc3VsdC5tYXRjaGVzID8/IFtdKSB7XG4gICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGluZXhhY3QgbWF0Y2hlc1xuICAgICAgICAgICAgaWYgKGV4YWN0TWF0Y2ggJiYgbWF0Y2gudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXRjaC5pbmRpY2VzID0gbWF0Y2guaW5kaWNlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgaXNGdXNlTWF0Y2hFeGFjdChtYXRjaCwgcXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaC5rZXkgPT09ICd0aXRsZScpIHtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0cy50aXRsZUhpZ2hsaWdodEluZGljZXMgPSBbLi4ubWF0Y2guaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2gua2V5ID09PSAnc3VidGl0bGUnKSB7XG4gICAgICAgICAgICAgIGhpZ2hsaWdodHMuc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzID0gWy4uLm1hdGNoLmluZGljZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3Jlc3VsdC5pdGVtLmlkLCBoaWdobGlnaHRzXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgZnVuY3Rpb24gYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9wdGlvbnM6IE9wdGlvbjxPPltdKTogU291cmNlT3B0aW9uPE8+W10ge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XG4gICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgIC4uLmhpZ2hsaWdodE1hcC5nZXQob3B0aW9uLmlkKSxcbiAgICAgICAgICAuLi4ob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgICAgID8geyBjaGlsZHJlbjogYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9wdGlvbi5jaGlsZHJlbikgfVxuICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBbeyBvcHRpb25zOiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3JkZXJlZCkgfV0sXG4gICAgICAgIG9yaWdpbmFsRGF0YTogZGF0YSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgb3B0aW9ucyk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNGdXNlTWF0Y2hFeGFjdChcbiAgICBtYXRjaDogRnVzZVJlc3VsdE1hdGNoLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICApOiAoXG4gICAgdmFsdWU6IFJhbmdlVHVwbGUsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhcnJheTogcmVhZG9ubHkgUmFuZ2VUdXBsZVtdLFxuICApID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYXRjaGVkSW5kaWNlcyA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVkVmFsdWUgPSBtYXRjaFxuICAgICAgICAudmFsdWUhLnNsaWNlKG1hdGNoZWRJbmRpY2VzWzBdLCBtYXRjaGVkSW5kaWNlc1sxXSArIDEpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgLy8gZnVzZSBpcyB3ZWlyZCB3aXRoIGl0J3MgbWF0Y2hlcy4gRm9yIGEgdGV4dCBvZiBcInBsYW5uaW5nXCIgYW5kIGEgc2VhcmNoIHN0cmluZyBvZiBcInBsYW5cIlxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcInBsYW5uXCIgd2l0aCB0aGUgZXh0cmEgJ24nIGJlY2F1c2Ugb2YgaXRzIGZ1enp5IG1hdGNoaW5nLlxuICAgICAgLy8gc28ganVzdCBtYWtlIHN1cmUgdGhlIG1hdGNoZWQgdmFsdWUgYXQgbGVhc3Qgc3RhcnRzIHdpdGggdGhlIHNlYXJjaCBzdHJpbmcuXG4gICAgICAvLyBpdCdzIGV4dHJhIHdlaXJkIGJlY2F1c2UgZm9yIGEgdGV4dCBvZiBcImFuYWx5dGljc1wiIGFuZCBhIHNlYXJjaCBzdHJpbmcgb2YgXCJuYWx5dGljc1wiLFxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcImFuYWx5dGljc1wiLiBTbyB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0aGUgbWF0Y2hlZCB2YWx1ZVxuICAgICAgLy8gaW5jbHVkZXMgdGhlIHNlYXJjaCBzdHJpbmcgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBleHRyYSBzdHVmZiBvbiB0aGUgZnJvbnQgb3IgdGhlIGVuZC5cbiAgICAgIHJldHVybiBtYXRjaGVkVmFsdWUuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFN0YXRlIHJlZHVjZXIgKHdpdGggaGVscGVycykgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90V2l0aEFuY2VzdG9yczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogT3B0aW9uU2V0PE8+IHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzKTtcbiAgICBjb25zdCBbcGFyZW50c10gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG5cbiAgICAvLyBTaWJsaW5nIGxlYXZlcyBzaGFyZSBhbmNlc3RvcnMsIHNvIG9uY2Ugd2UndmUgd2Fsa2VkIHVwIHRocm91Z2ggYVxuICAgIC8vIGdpdmVuIHBhcmVudCBpZCB3ZSBjYW4gc3RvcCDigJQgYW55dGhpbmcgYWJvdmUgaXQgaGFzIGFscmVhZHkgYmVlblxuICAgIC8vIGFkZGVkIGJ5IGEgcHJldmlvdXMgaXRlcmF0aW9uLiBXaXRob3V0IHRoaXMgc2hvcnQtY2lyY3VpdCB0aGUgbG9vcFxuICAgIC8vIHJlLXJ1bnMgZmluZE9wdGlvbiAod2hpY2ggaXMgYSBmdWxsIHRyZWUgd2Fsaykgb25jZSBwZXIgc2hhcmVkXG4gICAgLy8gYW5jZXN0b3IgZWRnZSwgd2hpY2ggd2FzIHRoZSAjMiBob3RzcG90IGJlaGluZCBPcHRpb25TZXQuYWRkIGluXG4gICAgLy8gUlZULTI1NDcwJ3MgcHJvZmlsZS5cbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxPWydpZCddPigpO1xuICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRPcHRpb24gb2Ygc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKSB7XG4gICAgICBsZXQgcGFyZW50SWQgPSBwYXJlbnRzLmdldChzZWxlY3RlZE9wdGlvbi5pZCk7XG4gICAgICB3aGlsZSAocGFyZW50SWQgIT09IHVuZGVmaW5lZCAmJiAhdmlzaXRlZC5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgIHZpc2l0ZWQuYWRkKHBhcmVudElkKTtcbiAgICAgICAgY29uc3QgcGFyZW50T3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIHBhcmVudElkKTtcbiAgICAgICAgaWYgKHBhcmVudE9wdGlvbikge1xuICAgICAgICAgIHNuYXBzaG90LmFkZChwYXJlbnRPcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudElkID0gcGFyZW50cy5nZXQocGFyZW50SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlMaW1pdE1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGRpc3BsYXllZE9wdGlvbkNvdW50OiBudW1iZXIsXG4gICAgdG90YWxPcHRpb25Db3VudDogbnVtYmVyLFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChkaXNwbGF5ZWRPcHRpb25Db3VudCA9PT0gdG90YWxPcHRpb25Db3VudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcml2TnVtYmVyID0gbmV3IE51bWJlclBpcGUoKTtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSByaXZOdW1iZXIudHJhbnNmb3JtKGRpc3BsYXllZE9wdGlvbkNvdW50KTtcbiAgICBjb25zdCB0b3RhbCA9IHJpdk51bWJlci50cmFuc2Zvcm0odG90YWxPcHRpb25Db3VudCk7XG4gICAgY29uc3Qgc3RhcnQgPSBgU2hvd2luZyAke2Rpc3BsYXllZH0gb2YgJHt0b3RhbH0gb3B0aW9uc2A7XG4gICAgcmV0dXJuIHF1ZXJ5LnNlYXJjaCA/IGAke3N0YXJ0fSBtYXRjaGluZyBcIiR7cXVlcnkuc2VhcmNofVwiYCA6IHN0YXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gY291bnRWaXNpYmxlT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogbnVtYmVyIHtcbiAgICBmdW5jdGlvbiBjb3VudChvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBudW1iZXIge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmV4cGFuZGVkICYmIG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIChsZWFmT25seSA/IDAgOiAxKSArIGNvdW50KG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgZ3JvdXApID0+IHRvdGFsICsgY291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudEFsbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IG51bWJlciB7XG4gICAgZnVuY3Rpb24gY291bnQob3B0aW9uczogRnVsbE9wdGlvbjxPPltdKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIDEgKyBjb3VudChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIGdyb3VwKSA9PiB0b3RhbCArIGNvdW50KGdyb3VwLm9wdGlvbnMpLFxuICAgICAgMCxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlEaXNwbGF5TGltaXQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICAgZGlzcGxheUxpbWl0OiBudW1iZXIsXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICB0eXBlIERpc3BsYXlMaW1pdE9wdGlvbnMgPSBbRnVsbE9wdGlvbjxPPltdLCBudW1iZXJdO1xuICAgIGZ1bmN0aW9uIGZpbHRlcldpdGhMaW1pdChcbiAgICAgIG9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICAgIHJlbWFpbmluZzogbnVtYmVyLFxuICAgICk6IERpc3BsYXlMaW1pdE9wdGlvbnMge1xuICAgICAgbGV0IGxlZnQgPSByZW1haW5pbmc7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9uczogRnVsbE9wdGlvbjxPPltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsZWZ0IDw9IDApIGJyZWFrO1xuXG4gICAgICAgIGlmIChvcHRpb24uZXhwYW5kZWQgJiYgb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBbY2hpbGRPcHRpb25zLCBjaGlsZFJlbWFpbmluZ10gPSBmaWx0ZXJXaXRoTGltaXQoXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICBsZWZ0IC0gMSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkT3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZWZ0ID0gY2hpbGRSZW1haW5pbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIGxlZnQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt2aXNpYmxlT3B0aW9ucywgbGVmdF07XG4gICAgfVxuXG4gICAgdHlwZSBEaXNwbGF5TGltaXRHcm91cHMgPSBbRnVsbE9wdGlvbkdyb3VwPE8+W10sIG51bWJlcl07XG4gICAgY29uc3Qgc3RhcnRpbmdWYWx1ZTogRGlzcGxheUxpbWl0R3JvdXBzID0gW1tdLCBkaXNwbGF5TGltaXRdO1xuICAgIGNvbnN0IFtyZXNvbHZlZEdyb3Vwc10gPSBvcHRpb25Hcm91cHMucmVkdWNlPERpc3BsYXlMaW1pdEdyb3Vwcz4oXG4gICAgICAoW2dyb3VwcywgcmVtYWluaW5nXSwgZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgW29wdGlvbnMsIGxlZnRBZnRlcl0gPSBmaWx0ZXJXaXRoTGltaXQoZ3JvdXAub3B0aW9ucywgcmVtYWluaW5nKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIFtbLi4uZ3JvdXBzLCB7IC4uLmdyb3VwLCBvcHRpb25zIH1dLCBsZWZ0QWZ0ZXJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbZ3JvdXBzLCByZW1haW5pbmddO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhcnRpbmdWYWx1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkR3JvdXBzO1xuICB9XG5cbiAgLypcbiAgICBTb3J0IG9wdGlvbnMgc28gdGhhdCBwcmV2aW91c2x5IHNlbGVjdGVkIG9wdGlvbnMgKGZyb20gcHJpb3Igc2Vzc2lvbnMpXG4gICAgYXBwZWFyIGF0IHRoZSB0b3Agb2YgdGhlaXIgcGVlci9zaWJsaW5nIGxpc3RzLlxuICAqL1xuICBmdW5jdGlvbiBzb3J0T3B0aW9uc0J5UHJldmlvdXNseVNlbGVjdGVkU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICAgc2VsZWN0aW9uQXRPcGVuOiBPcHRpb25TZXQ8Tz4sXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICBmdW5jdGlvbiBzb3J0T3B0aW9ucyhvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBGdWxsT3B0aW9uPE8+W10ge1xuICAgICAgcmV0dXJuIHNvcnRCeShvcHRpb25zLCBvcHRpb24gPT4gIXNlbGVjdGlvbkF0T3Blbi5oYXMob3B0aW9uKSkubWFwKFxuICAgICAgICBvcHRpb24gPT4ge1xuICAgICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHNvcnRPcHRpb25zKG9wdGlvbi5jaGlsZHJlbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gb3B0aW9uO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLm1hcChncm91cCA9PiAoe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICBvcHRpb25zOiBzb3J0T3B0aW9ucyhncm91cC5vcHRpb25zKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKlxuICAgIElmIHdlIGFyZSByZXN0cmljdGluZyBob3cgbWFueSBvcHRpb25zIGFyZSBzZWxlY3RlZCB0byBhIHNwZWNpZmljIGxpbWl0LFxuICAgICAgd2hlbiB3ZSBhcmUgYXQgdGhhdCBsaW1pdCwgZGlzYWJsZSBhbGwgb3B0aW9ucyBub3QgY3VycmVudGx5IHNlbGVjdGVkLlxuICAqL1xuICBmdW5jdGlvbiBhcHBseVNlbGVjdGVkT3B0aW9uTGltaXQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICB0b3BMZXZlbE9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICBpZiAob3B0aW9ucz8uc2VsZWN0ZWRPcHRpb25MaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9uR3JvdXBzO1xuICAgIH1cblxuICAgIC8vIFdoZW4gdXNlVG9wTGV2ZWxPcHRpb25zRm9yRGlzcGxheSBpcyB0cnVlIGFuZCBzZWFyY2ggaXMgYWN0aXZlLCBjb3VudFxuICAgIC8vIHNlbGVjdGVkIHRvcC1sZXZlbCBvcHRpb25zIGZyb20gdGhlIG9yaWdpbmFsICh1bmZpbHRlcmVkKSBkYXRhIHRvIGVuc3VyZVxuICAgIC8vIGFscmVhZHktc2VsZWN0ZWQgb3B0aW9ucyB0aGF0IGRvbid0IG1hdGNoIHRoZSBzZWFyY2ggYXJlIHN0aWxsIGNvdW50ZWQuXG4gICAgY29uc3QgdXNlT3JpZ2luYWxGb3JDb3VudGluZyA9XG4gICAgICBvcHRpb25zPy51c2VUb3BMZXZlbE9wdGlvbnNGb3JEaXNwbGF5ICYmXG4gICAgICBzdGF0ZS5xdWVyeS5zZWFyY2ggJiZcbiAgICAgIHN0YXRlLm9yaWdpbmFsT3B0aW9uR3JvdXBzLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCB0b3BPcHRpb25zRm9yQ291bnRpbmcgPSB1c2VPcmlnaW5hbEZvckNvdW50aW5nXG4gICAgICA/IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5vcmlnaW5hbE9wdGlvbkdyb3VwcykubWFwKG9wdGlvbiA9PlxuICAgICAgICAgIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb24oc3RhdGUsIG9wdGlvbiwgb3B0aW9ucyksXG4gICAgICAgIClcbiAgICAgIDogdG9wTGV2ZWxPcHRpb25zO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRPckluZGV0ZXJtaW5hdGVUb3BPcHRpb25zID0gdG9wT3B0aW9uc0ZvckNvdW50aW5nLmZpbHRlcihcbiAgICAgIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQgIT0gZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCBudW1TZWxlY3RlZE9wdGlvbnM6IG51bWJlciA9IG9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXlcbiAgICAgID8gc2VsZWN0ZWRPckluZGV0ZXJtaW5hdGVUb3BPcHRpb25zLmxlbmd0aFxuICAgICAgOiBzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTtcblxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uTGltaXQ6IG51bWJlciA9IG9wdGlvbnMuc2VsZWN0ZWRPcHRpb25MaW1pdDtcblxuICAgIC8vIElmIHdlIGhhdmUgbGVzcyBpdGVtcyBzZWxlY3RlZCB0aGFuIHRoZSBsaW1pdCwgYnVzaW5lc3MgYXMgdXN1YWwuXG4gICAgaWYgKG51bVNlbGVjdGVkT3B0aW9ucyA8IHNlbGVjdGVkT3B0aW9uTGltaXQpIHtcbiAgICAgIHJldHVybiBvcHRpb25Hcm91cHM7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBlcXVhbCBpdGVtcyBzZWxlY3RlZCB0byB0aGUgbGltaXQgKG9yIG1vcmUpLCBwcmV2ZW50IHVzZXJzIGZyb20gc2VsZWN0aW5nIG1vcmUgb3B0aW9ucy5cbiAgICBmdW5jdGlvbiBkaXNhYmxlVW5zZWxlY3RlZEl0ZW1zKFxuICAgICAgY3VycmVudE9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICAgIG9wdGlvbnNBcmVDaGlsZHJlbk9mU2VsZWN0ZWRHcm91cDogYm9vbGVhbixcbiAgICApOiBGdWxsT3B0aW9uPE8+W10ge1xuICAgICAgY29uc3QgdXBkYXRlZEl0ZW1zOiBGdWxsT3B0aW9uPE8+W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGN1cnJlbnRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlzRGlzYWJsZWRPclVuc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICEhb3B0aW9uLmRpc2FibGVkIHx8IChvcHRpb24uc2VsZWN0YWJsZSAmJiBvcHRpb24uc2VsZWN0ZWQgPT0gZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IGlzQ3VycmVudE9wdGlvblNlbGVjdGVkOiBib29sZWFuID1cbiAgICAgICAgICBvcHRpb24uc2VsZWN0YWJsZSAmJiBvcHRpb24uc2VsZWN0ZWQgIT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudE9yUGFyZW50T3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgIGlzQ3VycmVudE9wdGlvblNlbGVjdGVkIHx8IG9wdGlvbnNBcmVDaGlsZHJlbk9mU2VsZWN0ZWRHcm91cDtcblxuICAgICAgICBjb25zdCBmb3JjZUVuYWJsZWRCYXNlZE9uUGFyZW50OiBib29sZWFuID1cbiAgICAgICAgICAhIW9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXkgJiZcbiAgICAgICAgICBvcHRpb25zQXJlQ2hpbGRyZW5PZlNlbGVjdGVkR3JvdXA7XG4gICAgICAgIGNvbnN0IG1hcmtEaXNhYmxlZDogYm9vbGVhbiA9XG4gICAgICAgICAgaXNEaXNhYmxlZE9yVW5zZWxlY3RlZCAmJiAhZm9yY2VFbmFibGVkQmFzZWRPblBhcmVudDtcblxuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZE9wdGlvbnMgPSBkaXNhYmxlVW5zZWxlY3RlZEl0ZW1zKFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLFxuICAgICAgICAgICAgaXNDdXJyZW50T3JQYXJlbnRPcHRpb25TZWxlY3RlZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZWRJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGRpc2FibGVkOiAhIW1hcmtEaXNhYmxlZCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZE9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlZEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICEhbWFya0Rpc2FibGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZEl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3Vwc0FmdGVyTGltaXQ6IEZ1bGxPcHRpb25Hcm91cDxPPltdID0gW107XG4gICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2Ygb3B0aW9uR3JvdXBzKSB7XG4gICAgICBncm91cHNBZnRlckxpbWl0LnB1c2goe1xuICAgICAgICAuLi5jdXJyZW50R3JvdXAsXG4gICAgICAgIG9wdGlvbnM6IGRpc2FibGVVbnNlbGVjdGVkSXRlbXMoY3VycmVudEdyb3VwLm9wdGlvbnMsIGZhbHNlKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cHNBZnRlckxpbWl0O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwTWFwczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICk6IFtNYXA8T1snaWQnXSwgT1snaWQnXT4sIE1hcDxPWydpZCddLCBPWydpZCddW10+XSB7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBidWlsZFBhcmVudHNNYXAob3B0aW9uczogT3B0aW9uPE8+W10sIHBhcmVudD86IE9wdGlvbjxPPik6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50cy5zZXQob3B0aW9uLmlkLCBwYXJlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb24uY2hpbGRyZW4sIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zOiBPcHRpb248Tz5bXSk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZHJlbi5zZXQoXG4gICAgICAgICAgICBvcHRpb24uaWQsXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4ubWFwKCh7IGlkIH0pID0+IGlkKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIFtwYXJlbnRzLCBjaGlsZHJlbl07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IEZ1bGxPcHRpb248Tz5bXTtcbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10sXG4gICk6IFNvdXJjZU9wdGlvbjxPPltdO1xuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogT3B0aW9uR3JvdXA8Tz5bXSxcbiAgKTogT3B0aW9uPE8+W107XG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxcbiAgICBPIGV4dGVuZHMgQmFzZU9wdGlvbixcbiAgICBHIGV4dGVuZHMgeyBvcHRpb25zOiByZWFkb25seSBUW10gfSxcbiAgICBUID0gRyBleHRlbmRzIEZ1bGxPcHRpb25Hcm91cDxPPlxuICAgICAgPyBGdWxsT3B0aW9uPE8+XG4gICAgICA6IEcgZXh0ZW5kcyBTb3VyY2VPcHRpb25Hcm91cDxPPlxuICAgICAgPyBTb3VyY2VPcHRpb248Tz5cbiAgICAgIDogT3B0aW9uPE8+LFxuICA+KG9wdGlvbkdyb3VwczogR1tdKTogVFtdIHtcbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZTxUW10+KFxuICAgICAgKG9wdGlvbnMsIGdyb3VwKSA9PiBbLi4ub3B0aW9ucywgLi4uZ3JvdXAub3B0aW9uc10sXG4gICAgICBbXSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgY2hpbGRyZW46IEZ1bGxPcHRpb248Tz5bXSxcbiAgKTogTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSB0cnVlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG5cbiAgZnVuY3Rpb24gYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBvcHRpb246IFNvdXJjZU9wdGlvbjxPPixcbiAgICBtYW5hZ2VyT3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBGdWxsT3B0aW9uPE8+IHtcbiAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGF1Z21lbnRlZENoaWxkcmVuID0gb3B0aW9uLmNoaWxkcmVuLm1hcChjaGlsZCA9PlxuICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHN0YXRlLCBjaGlsZCwgbWFuYWdlck9wdGlvbnMpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNlbGVjdGFibGVXaGVuU2VhcmNoaW5nID1cbiAgICAgICAgbWFuYWdlck9wdGlvbnM/LmFsbG93U2VsZWN0Tm9uTGVhZkR1cmluZ1NlYXJjaCA/PyBmYWxzZTtcblxuICAgICAgLy8gV2hlbiBhbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggaXMgZW5hYmxlZCBhbmQgc2VhcmNoIGlzIGFjdGl2ZSxcbiAgICAgIC8vIGNhbGN1bGF0ZSBzZWxlY3Rpb24gc3RhdGUgZnJvbSBBTEwgb3JpZ2luYWwgY2hpbGRyZW4sIG5vdCBqdXN0IHRoZVxuICAgICAgLy8gZmlsdGVyZWQgb25lcyB2aXNpYmxlIGluIHNlYXJjaCByZXN1bHRzLlxuICAgICAgY29uc3QgdXNlT3JpZ2luYWxGb3JTZWxlY3Rpb25TdGF0ZSA9XG4gICAgICAgIG1hbmFnZXJPcHRpb25zPy5hbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggJiZcbiAgICAgICAgc3RhdGUucXVlcnkuc2VhcmNoICYmXG4gICAgICAgIHN0YXRlLm9yaWdpbmFsT3B0aW9uR3JvdXBzLmxlbmd0aCA+IDA7XG5cbiAgICAgIGxldCBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIGlmICh1c2VPcmlnaW5hbEZvclNlbGVjdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9uID0gZmluZE9wdGlvbihcbiAgICAgICAgICBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUub3JpZ2luYWxPcHRpb25Hcm91cHMpLFxuICAgICAgICAgIG9wdGlvbi5pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9yaWdpbmFsT3B0aW9uKSB7XG4gICAgICAgICAgY29uc3QgYWxsTGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoW29yaWdpbmFsT3B0aW9uXSwgdHJ1ZSk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IGFsbExlYXZlcy5maWx0ZXIobGVhZiA9PlxuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkLmhhcyhsZWFmKSxcbiAgICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ291bnQgPT09IGFsbExlYXZlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdGVkID0gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZShhdWdtZW50ZWRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkID0gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZShhdWdtZW50ZWRDaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgY2hpbGRyZW46IGF1Z21lbnRlZENoaWxkcmVuLFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgZXhwYW5kZWQ6IHN0YXRlLnF1ZXJ5LnNlYXJjaFxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMuaGFzKG9wdGlvbi5pZCksXG4gICAgICAgIHNlbGVjdGFibGU6ICFzdGF0ZS5xdWVyeS5zZWFyY2ggfHwgc2VsZWN0YWJsZVdoZW5TZWFyY2hpbmcsXG4gICAgICAgIGV4cGFuZGFibGU6ICFzdGF0ZS5xdWVyeS5zZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9uLFxuICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkOiBzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQuaGFzKG9wdGlvbiksXG4gICAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZvcm1hdHRlZE9wdGlvbnNGb3JEaXNwbGF5PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIHRvcExldmVsT3B0aW9uczogRnVsbE9wdGlvbjxPPltdLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxPPixcbiAgKTogc3RyaW5nIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgY3VzdG9tIGRpc3BsYXkgZnVuY3Rpb24sIHVzZSBpdFxuICAgIGlmIChvcHRpb25zPy5nZXRDdXN0b21PcHRpb25EaXNwbGF5KSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRDdXN0b21PcHRpb25EaXNwbGF5KFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXkpIHtcbiAgICAgIHJldHVybiBnZXRUb3BMZXZlbEZvcm1hdHRlZE9wdGlvbnNGb3JEaXNwbGF5KHRvcExldmVsT3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IGRpc3BsYXkgZm9yIG9wdGlvbnMgLSB0aXRsZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy5cbiAgICByZXR1cm4gWy4uLnN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZF0ubWFwKCh7IHRpdGxlIH0pID0+IHRpdGxlKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxGb3JtYXR0ZWRPcHRpb25zRm9yRGlzcGxheTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgdG9wTGV2ZWxPcHRpb25zOiBGdWxsT3B0aW9uPE8+W10sXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCF0b3BMZXZlbE9wdGlvbnMgfHwgdG9wTGV2ZWxPcHRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9ucyA9IHRvcExldmVsT3B0aW9ucy5maWx0ZXIoXG4gICAgICBvcHRpb24gPT4gb3B0aW9uLnNlbGVjdGVkICE9IGZhbHNlLFxuICAgICk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9uc1xuICAgICAgLm1hcCgoeyB0aXRsZSB9KSA9PiB0aXRsZSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGlsbENvdW50Rm9yRGlzcGxheTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICB0b3BMZXZlbE9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IG51bWJlciB7XG4gICAgaWYgKG9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9ucyA9IHRvcExldmVsT3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQgIT0gZmFsc2UsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9ucy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMuZXZlcnkoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoKSByZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQuJztcbiAgICAgIHJldHVybiAnTm8gb3B0aW9ucy4nO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IFNvdXJjZU9wdGlvbjxPPltdLFxuICAgIGlkOiBPWydpZCddLFxuICApOiBTb3VyY2VPcHRpb248Tz4gfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9uLmlkID09PSBpZCkgcmV0dXJuIG9wdGlvbjtcbiAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGZpbmRPcHRpb24ob3B0aW9uLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgIGlmIChjaGlsZCkgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogT1tdIHtcbiAgICByZXR1cm4gZmxhdHRlbkRlZXAoXG4gICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IG9wdGlvbi5jaGlsZHJlbi5tYXAoY2hpbGQgPT5cbiAgICAgICAgICAgIGZsYXR0ZW5PcHRpb25zKFtjaGlsZF0sIGxlYWZPbmx5KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBsZWFmT25seSA/IGRlc2NlbmRhbnRzIDogW29wdGlvbiwgLi4uZGVzY2VuZGFudHNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNlbGVjdGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICAgIG1hbmFnZXJPcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3Vwcyk7XG4gICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIGlkKTtcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhKFxuICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzdGF0ZSwgb3B0aW9uLCBtYW5hZ2VyT3B0aW9ucykuc2VsZWN0ZWQgPT09IHRydWVcbiAgICApO1xuXG4gICAgLy8gV2hlbiBhbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggaXMgZW5hYmxlZCBhbmQgc2VhcmNoIGlzIGFjdGl2ZSxcbiAgICAvLyB1c2UgdGhlIG9yaWdpbmFsICh1bmZpbHRlcmVkKSBkYXRhIHRvIGdldCBhbGwgY2hpbGRyZW4sIG5vdCBqdXN0XG4gICAgLy8gdGhvc2UgdmlzaWJsZSBpbiB0aGUgZmlsdGVyZWQgc2VhcmNoIHJlc3VsdHMuXG4gICAgY29uc3QgdXNlT3JpZ2luYWxEYXRhID1cbiAgICAgIG1hbmFnZXJPcHRpb25zPy5hbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggJiZcbiAgICAgIHN0YXRlLnF1ZXJ5LnNlYXJjaCAmJlxuICAgICAgc3RhdGUub3JpZ2luYWxPcHRpb25Hcm91cHMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IG9wdGlvbkZvckxlYXZlcyA9IHVzZU9yaWdpbmFsRGF0YVxuICAgICAgPyBmaW5kT3B0aW9uKGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5vcmlnaW5hbE9wdGlvbkdyb3VwcyksIGlkKSA/PyBvcHRpb25cbiAgICAgIDogb3B0aW9uO1xuXG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoW29wdGlvbkZvckxlYXZlc10sIHRydWUpO1xuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2VsZWN0aW9uLmRlbGV0ZShsZWFmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpO1xuICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24odG9wTGV2ZWxPcHRpb25zLCBpZCk7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybiBzdGF0ZTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQ8Tz4oKTtcbiAgICBuZXdTZWxlY3Rpb24uYWRkKG9wdGlvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhcbiAgICAgIGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSBsZWF2ZXMuZXZlcnkobGVhZiA9PlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkLmhhcyhsZWFmKSxcbiAgICApO1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcblxuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChpc0FsbFNlbGVjdGVkKSBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgZWxzZSBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAuLi5zdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIHNlbGVjdGVkOiBuZXdTZWxlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVPcHRpb25FeHBhbmRlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMoaWQpO1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkT3B0aW9ucyA9IG5ldyBTZXQoc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMpO1xuICAgIGlmIChuZXdWYWx1ZSkgbmV3RXhwYW5kZWRPcHRpb25zLmFkZChpZCk7XG4gICAgZWxzZSBuZXdFeHBhbmRlZE9wdGlvbnMuZGVsZXRlKGlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGV4cGFuZGVkT3B0aW9uczogbmV3RXhwYW5kZWRPcHRpb25zLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2lkZUVmZmVjdHM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBpbnRlcm5hbEFjdGlvbnM6IFN1YmplY3Q8SW50ZXJuYWxBY3Rpb248Tz4+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGlmIChcbiAgICAgIGFjdGlvbi50eXBlID09PSAnbG9hZCcgfHxcbiAgICAgIGFjdGlvbi50eXBlID09PSAnc2VhcmNoQ2hhbmdlJyB8fFxuICAgICAgYWN0aW9uLnR5cGUgPT09ICdvcmRlckNoYW5nZScgfHxcbiAgICAgIChhY3Rpb24udHlwZSA9PT0gJ29wZW5DaGFuZ2UnICYmIGFjdGlvbi5vcGVuKVxuICAgICkge1xuICAgICAgc291cmNlKHN0YXRlLnF1ZXJ5LCBhY3Rpb24pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5kYXRhO1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YSA9IEFycmF5LmlzQXJyYXkocmVzdWx0KVxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogcmVzdWx0Lm9yaWdpbmFsRGF0YTtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkQ29tcGxldGUnLCBkYXRhLCBvcmlnaW5hbERhdGEgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkRXJyb3InLCBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgICBtYW5hZ2VyT3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICBjYXNlICdsb2FkQ29tcGxldGUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIG9yaWdpbmFsT3B0aW9uR3JvdXBzOiBhY3Rpb24ub3JpZ2luYWxEYXRhID8/IFtdLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnbG9hZEVycm9yJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ29wZW5DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICAgICAgb3BlbjogYWN0aW9uLm9wZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnb3JkZXJDaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlU2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5pZCwgbWFuYWdlck9wdGlvbnMpO1xuICAgICAgY2FzZSAnc2V0U2VsZWN0ZWRPcHRpb24nOlxuICAgICAgICByZXR1cm4gc2V0U2VsZWN0ZWRPcHRpb24oc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgICBjYXNlICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlVmlzaWJsZVNlbGVjdGVkKHN0YXRlKTtcbiAgICAgIGNhc2UgJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJzpcbiAgICAgICAgcmV0dXJuIHRvZ2dsZU9wdGlvbkV4cGFuZGVkKHN0YXRlLCBhY3Rpb24uaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
882
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUtOLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUNMLFdBQVcsRUFFWCxHQUFHLEVBQ0gsS0FBSyxFQUVMLGFBQWEsRUFDYixJQUFJLEVBQ0osU0FBUyxFQUNULE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUc1RCxNQUFNLEtBQVcsU0FBUyxDQSs3Q3pCO0FBLzdDRCxXQUFpQixTQUFTO0lBQ3hCLGFBQWE7SUFDYixhQUFhO0lBQ2IsYUFBYTtJQXNHYjs7O09BR0c7SUFDSCxNQUFhLFNBQWdDLFNBQVEsR0FBb0I7UUFPdkUsWUFBWSxNQUF5QztZQUNuRCxLQUFLLEVBQUUsQ0FBQztZQVBWLHVFQUF1RTtZQUN2RSx1RUFBdUU7WUFDdkUsdUVBQXVFO1lBQ3ZFLDhEQUE4RDtZQUM3QyxTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7WUFJMUQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2pCO2FBQ0Y7UUFDSCxDQUFDO1FBRVEsR0FBRyxDQUFDLE1BQXVDO1lBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFUSxHQUFHLENBQUMsTUFBdUI7WUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxD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RSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyx1QkFBdUI7Z0JBQzFCLE9BQU8scUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsS0FBSyxzQkFBc0I7Z0JBQ3pCLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7QUFDSCxDQUFDLEVBLzdDZ0IsU0FBUyxLQUFULFNBQVMsUUErN0N6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGdXNlLCB7XG4gIEZ1c2VSZXN1bHQsXG4gIEZ1c2VSZXN1bHRNYXRjaCxcbiAgSUZ1c2VPcHRpb25zLFxuICBSYW5nZVR1cGxlLFxufSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzRGVlcCwgZmxhdHRlbkRlZXAsIGlzTnVtYmVyLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgY29ubmVjdGFibGUsXG4gIENvbm5lY3RhYmxlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBPcHRpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSALS0tLS0tLS0tLS0tLS0tLS0tLeKUgOKUgOKUgOKUkFxuICAgKiDilIIgQmFzZU9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICog4pSCIFRoZSBjb3JlIGRhdGEgcmVxdWlyZWQgZm9yIGVhY2ggb3B0aW9uICAgIOKUglxuICAgKiDilIIgKHN1Y2ggYXMgaWQgYW5kIHRpdGxlKS4gICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC0tLS0tLS0tLS0tLS0tLS0tLS3ilIDilIDilKRcbiAgICog4pSCIE9wdGlvbiAoQmFzZU9wdGlvbiArIGNoaWxkcmVuKSAgICAgICAgICAgIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBQcm92aWRlcyByZWN1cnNpdmUgdHlwZSBzYWZldHkgdG8gdGhlICAgICDilIJcbiAgICog4pSCIHR5cGUgc2FmZXR5IHRvIHRoZSBCYXNlT3B0aW9uLiAgICAgICAgICAgIOKUglxuICAgKiDilJTilIAtLS0tLS0tLS0tLS0tLS0tLS3ilKwtLS0tLS0t4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCIFNvdXJjZU9wdGlvbiAoT3B0aW9uICsgc2VhcmNoIGhpZ2hsaWdodHMpIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBBZGRzIHNlYXJjaCBoaWdobGlnaHRzIHRvIHRoZSBPcHRpb24gYW5kICDilIJcbiAgICog4pSCIGlzIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIG9wdGlvbiBTb3VyY2UgIOKUglxuICAgKiDilIIgKGRhdGEgZmV0Y2hlcikgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiBGdWxsT3B0aW9uIChTb3VyY2VPcHRpb24gKyBVSSBzdGF0ZSkgICAgICDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgQXVnbWVudHMgdGhlIFNvdXJjZU9wdGlvbiB3aXRoIGFsbCBvZiB0aGUg4pSCXG4gICAqIOKUgiBVSSBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSAgICDilIJcbiAgICog4pSCIHN0YXRlLCBzdWNoIGFzIHNlbGVjdGlvbiBzdGF0dXMsIHdoZXRoZXIgIOKUglxuICAgKiDilIIgb3Igbm90IHRoZSBub2RlIGlzIGV4cGFuZGVkLCBldGMuICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHVzYWdlcyBvZiBPbWl0PC4uLj4gaW4gdGhpcyBzZWN0aW9uIGFyZSBub3QgcmVxdWlyZWQsIGJ1dFxuICAgKiBkbyBoZWxwIGluLWVkaXRvciB0eXBlIGhpbnRzIHRvIGJlIG1vcmUgY2xlYXIgYW5kIGRpcmVjdC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgaGVscD86IHN0cmluZztcbiAgICBjb3VudD86IG51bWJlcjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbiA9IEJhc2VPcHRpb24+ID0gTyAmIHtcbiAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIE9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgIGNoaWxkcmVuPzogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIFNvdXJjZU9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gT3B0aW9uIGdyb3VwcyAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gT3B0aW9uR3JvdXAsIFNvdXJjZU9wdGlvbkdyb3VwLCBhbmRcbiAgICogRnVsbE9wdGlvbkdyb3VwIGlzIGFuYWxvZ291cyB0byB0aGUgb3B0aW9uIHR5cGVzIGFib3ZlLlxuICAgKlxuICAgKiBBcyB3aXRoIGJlZm9yZSwgdGhlIHVzZSBvZiBPbWl0PC4uLj4gaXMgbm90IHJlcXVpcmVkIGJ1dCBoZWxwZnVsLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBPcHRpb25Hcm91cDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaGVhZGVyPzogc3RyaW5nO1xuICAgIC8qKiBJbmZvIGljb24gKyB0b29sdGlwIHNob3duIGJlc2lkZSB0aGUgaGVhZGVyLiBOby1vcCB3aXRob3V0IGEgaGVhZGVyLiAqL1xuICAgIGhlbHA/OiBzdHJpbmc7XG4gICAgb3B0aW9uczogT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU291cmNlT3B0aW9uR3JvdXA8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gT21pdDxcbiAgICBPcHRpb25Hcm91cDxPPixcbiAgICAnb3B0aW9ucydcbiAgPiAmIHtcbiAgICBvcHRpb25zOiBTb3VyY2VPcHRpb248Tz5bXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsT3B0aW9uR3JvdXA8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gT21pdDxcbiAgICBTb3VyY2VPcHRpb25Hcm91cDxPPixcbiAgICAnb3B0aW9ucydcbiAgPiAmIHtcbiAgICBvcHRpb25zOiBGdWxsT3B0aW9uPE8+W107XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBPcHRpb25TZXQgY2xhc3MgcHJvdmlkZXMgU2V0LWxpa2UgZnVuY3Rpb25hbGl0eSwgYnV0IHVuaXF1ZW5lc3MgaXNcbiAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3B0aW9uJ3MgSUQgcmF0aGVyIHRoYW4gdGhlIG9iamVjdCByZWZlcmVuY2UuXG4gICAqL1xuICBleHBvcnQgY2xhc3MgT3B0aW9uU2V0PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiBleHRlbmRzIFNldDxTb3VyY2VPcHRpb248Tz4+IHtcbiAgICAvLyBQYXJhbGxlbCBpZCDihpIgb3B0aW9uIG1hcCBzbyBoYXMoKS9hZGQoKS9kZWxldGUoKSBhcmUgTygxKSBpbnN0ZWFkIG9mXG4gICAgLy8gc3ByZWFkaW5nIHRoZSBTZXQgYW5kIGxpbmVhci1zY2FubmluZyBpdC4gUmVidWlsZGluZyBhbiBPKE7CsikgbG9va3VwXG4gICAgLy8gZm9yIGEgMTZrLW9wdGlvbiBzZWxlY3Rpb24gd2FzIHRoZSBwcmltYXJ5IGNhdXNlIG9mIHRoZSBtdWx0aS1taW51dGVcbiAgICAvLyBmcmVlemUgdGhhdCBzdXJmYWNlZCBSVlQtMjUzODMncyB0cmVlLXNlbGVjdCBzY2FsZSBwcm9ibGVtLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnlJZCA9IG5ldyBNYXA8T1snaWQnXSwgU291cmNlT3B0aW9uPE8+PigpO1xuXG4gICAgY29uc3RydWN0b3IodmFsdWVzPzogSXRlcmFibGU8U291cmNlT3B0aW9uPE8+PiB8IG51bGwpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogU291cmNlT3B0aW9uPE8+IHwgRnVsbE9wdGlvbjxPPikge1xuICAgICAgcmV0dXJuIHRoaXMuYnlJZC5oYXMob3B0aW9uLmlkKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBhZGQob3B0aW9uOiBTb3VyY2VPcHRpb248Tz4pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5ieUlkLmdldChvcHRpb24uaWQpO1xuICAgICAgaWYgKGV4aXN0aW5nID09PSBvcHRpb24pIHtcbiAgICAgICAgLy8gU2FtZSBvYmplY3QgcmVmZXJlbmNlIOKAlCBub3RoaW5nIHRvIHVwZGF0ZS4gQW5jZXN0b3IgcmUtYWRkc1xuICAgICAgICAvLyBkdXJpbmcgYSBzZWxlY3Rpb24gc25hcHNob3QgaGl0IHRoaXMgcGF0aCByZXBlYXRlZGx5LCBzbyBrZWVwaW5nXG4gICAgICAgIC8vIGl0IE8oMSkgaXMgd2hhdCBwcmV2ZW50cyB0aGUgdHJlZS1zZWxlY3QgTsKyIGJsb3ctdXAgc2VlbiBpblxuICAgICAgICAvLyBSVlQtMjU0NzAuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gRGlmZmVyZW50IHJlZmVyZW5jZSwgc2FtZSBpZCDigJQgc3dhcCB0aGUgc3RvcmVkIHJlZiB3aGlsZVxuICAgICAgICAvLyBwcmVzZXJ2aW5nIFNldCBpbnNlcnRpb24gb3JkZXIuIFRoZSByZWJ1aWxkIGlzIE8oTiksIGJ1dCB0aGlzXG4gICAgICAgIC8vIHBhdGggaXMgcmFyZSBpbiBwcmFjdGljZSAodGhlIGhvdCBhbmNlc3Rvci1zbmFwc2hvdCBsb29wIHRha2VzXG4gICAgICAgIC8vIHRoZSBpZGVudGl0eSBmYXN0LXBhdGggYWJvdmUpLlxuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzXS5tYXAobyA9PiAoby5pZCA9PT0gb3B0aW9uLmlkID8gb3B0aW9uIDogbykpO1xuICAgICAgICB0aGlzLmJ5SWQuc2V0KG9wdGlvbi5pZCwgb3B0aW9uKTtcbiAgICAgICAgc3VwZXIuY2xlYXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSBzdXBlci5hZGQoaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ5SWQuc2V0KG9wdGlvbi5pZCwgb3B0aW9uKTtcbiAgICAgICAgc3VwZXIuYWRkKG9wdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZWxldGUob3B0aW9uOiBTb3VyY2VPcHRpb248Tz4pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5ieUlkLmdldChvcHRpb24uaWQpO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHRoaXMuYnlJZC5kZWxldGUob3B0aW9uLmlkKTtcbiAgICAgICAgc3VwZXIuZGVsZXRlKGV4aXN0aW5nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY2xlYXIoKSB7XG4gICAgICB0aGlzLmJ5SWQuY2xlYXIoKTtcbiAgICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gU3RhdGUgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICogVGhlIENvcmVTdGF0ZSBwcm92aWRlcyBhbGwgb2YgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMgb2Ygc3RhdGUgcmVxdWlyZWRcbiAgICogZm9yIGEgd29ya2luZyBjb21wb25lbnQuIEZ1bGxTdGF0ZSBpcyBhIHB1cmUgZGVyaXZhdGlvbiBvZiBDb3JlU3RhdGUgcGx1c1xuICAgKiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgcHJvdmlkZXMgY29udmVuaWVuY2VzIGZvciByZW5kZXJpbmcgdGhlXG4gICAqIGNvbXBvbmVudHMuIEFjdGlvbnMgYW5kIHRoZSBjb3JlIHN0YXRlIGFyZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgdG9cbiAgICogcHJvZHVjZSBuZXcgQ29yZVN0YXRlcyAod2hpY2ggYXJlIHRoZW4gdXNlZCB0byBjYWxjdWxhdGUgbmV3IEZ1bGxTdGF0ZXMpLlxuICAgKlxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCICBVSSAg4peE4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUmCAgICAgICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilIJcbiAgICog4pSCICBBY3Rpb25zICDilIIgICDilIJcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilJBcbiAgICog4pSCICBTdGF0ZSByZWR1Y2VyICDilIJcbiAgICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyQnkgPSAndGl0bGUnIHwgJ2NvdW50JyB8ICdzb3VyY2UnO1xuXG4gIGNvbnN0IE1JTl9PUFRJT05TX0ZPUl9DT05UUk9MUyA9IDU7XG5cbiAgY29uc3QgREVGQVVMVF9ESVNQTEFZX0xJTUlUID0gMTAwO1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHNlYXJjaDogc3RyaW5nO1xuICAgICAgb3JkZXI6IE9yZGVyQnk7XG4gICAgfTtcbiAgICBsb2FkOiB7XG4gICAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICAgIH07XG4gICAgc291cmNlT3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgIC8qKlxuICAgICAqIFN0b3JlcyB0aGUgdW5maWx0ZXJlZCBvcmlnaW5hbCBvcHRpb24gZ3JvdXBzIHdoZW4gc2VhcmNoIGZpbHRlcmluZyBpcyBhY3RpdmUuXG4gICAgICogVXNlZCBieSBgYWxsb3dTZWxlY3ROb25MZWFmRHVyaW5nU2VhcmNoYCB0byBzZWxlY3QgYWxsIGNoaWxkcmVuIG9mIGEgcGFyZW50LFxuICAgICAqIGluY2x1ZGluZyB0aG9zZSBub3QgdmlzaWJsZSBpbiB0aGUgZmlsdGVyZWQgc2VhcmNoIHJlc3VsdHMuXG4gICAgICovXG4gICAgb3JpZ2luYWxPcHRpb25Hcm91cHM6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W107XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBzZWxlY3RlZDogT3B0aW9uU2V0PE8+O1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICAgIG9wZW46IGJvb2xlYW47XG4gICAgICBleHBhbmRlZE9wdGlvbnM6IFNldDxPWydpZCddPjtcbiAgICB9O1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBDb3JlU3RhdGU8Tz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHNob3dTZWFyY2g6IGJvb2xlYW47XG4gICAgICBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgICAgc2hvd09yZGVyOiBib29sZWFuO1xuICAgIH07XG4gICAgZnVsbE9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W107XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd011bHRpU2VsZWN0OiBib29sZWFuO1xuICAgICAgYWxsb3dTZWxlY3RBbGw6IGJvb2xlYW47XG4gICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBmb3JtYXR0ZWRTZWxlY3RlZE9wdGlvbnM6IHN0cmluZztcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXZpZGVyczogYm9vbGVhbjtcbiAgICAgIGlubGluZTogYm9vbGVhbjtcbiAgICAgIG1heEhlaWdodDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1heFdpZHRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgbWluSGVpZ2h0OiBzdHJpbmcgfCBudWxsO1xuICAgICAgbWluV2lkdGg6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXNwbGF5TGltaXRNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiBib29sZWFuO1xuICAgICAgcGlsbENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIEFjdGlvbnMgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwgeyB0eXBlOiAnb3BlbkNoYW5nZSc7IG9wZW46IGJvb2xlYW4gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ2hhbmdlJzsgcGF5bG9hZDogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ29yZGVyQ2hhbmdlJzsgcGF5bG9hZDogT3JkZXJCeSB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBDb3JlU3RhdGU8Tz5bJ3NlbGVjdGlvbiddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnO1xuICAgICAgICBpZDogT1snaWQnXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NldFNlbGVjdGVkT3B0aW9uJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uRXhwYW5kZWQnO1xuICAgICAgICBpZDogT1snaWQnXTtcbiAgICAgIH07XG5cbiAgdHlwZSBJbnRlcm5hbEFjdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnbG9hZENvbXBsZXRlJztcbiAgICAgICAgZGF0YTogU291cmNlT3B0aW9uR3JvdXA8Tz5bXTtcbiAgICAgICAgLyoqIE9yaWdpbmFsIHVuZmlsdGVyZWQgZGF0YSwgcHJvdmlkZWQgd2hlbiBzZWFyY2ggaXMgYWN0aXZlICovXG4gICAgICAgIG9yaWdpbmFsRGF0YT86IFNvdXJjZU9wdGlvbkdyb3VwPE8+W107XG4gICAgICB9XG4gICAgfCB7IHR5cGU6ICdsb2FkRXJyb3InOyBlcnJvcjogdW5rbm93biB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBTb3VyY2UgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSBTb3VyY2UncyBqb2IgaXMgdG8gZmV0Y2ggb3B0aW9ucyAoYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUpIHdoaWNoXG4gICAqIHRoZW4gYmxlbmQgd2l0aCB0aGUgb3RoZXIgcGllY2VzIG9mIHN0YXRlIHRvIHByb2R1Y2UgdGhlIEZ1bGxTdGF0ZS5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgU291cmNlUmVzdWx0PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgfCBTb3VyY2VPcHRpb25Hcm91cDxPPltdXG4gICAgfCB7XG4gICAgICAgIGRhdGE6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcmlnaW5hbCB1bmZpbHRlcmVkIGRhdGEsIHByb3ZpZGVkIHdoZW4gc2VhcmNoIGZpbHRlcmluZyBpcyBhY3RpdmUuXG4gICAgICAgICAqIFVzZWQgYnkgYGFsbG93U2VsZWN0Tm9uTGVhZkR1cmluZ1NlYXJjaGAgdG8gc2VsZWN0IGFsbCBjaGlsZHJlbiBvZlxuICAgICAgICAgKiBhIHBhcmVudCwgaW5jbHVkaW5nIHRob3NlIG5vdCB2aXNpYmxlIGluIHRoZSBmaWx0ZXJlZCBzZWFyY2ggcmVzdWx0cy5cbiAgICAgICAgICovXG4gICAgICAgIG9yaWdpbmFsRGF0YT86IFNvdXJjZU9wdGlvbkdyb3VwPE8+W107XG4gICAgICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSAoXG4gICAgcXVlcnk6IENvcmVTdGF0ZTxPPlsncXVlcnknXSxcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248Tz4sXG4gICkgPT4gUHJvbWlzZTxTb3VyY2VSZXN1bHQ8Tz4+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gTWFuYWdlciAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlcjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgYWN0aW9uczogU3ViamVjdDxBY3Rpb248Tz4+O1xuICAgIHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8Tz4+O1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXJPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBpbml0aWFsU3RhdGU/OiBEZWVwUGFydGlhbDxDb3JlU3RhdGU8Tz4+O1xuICAgIGFsbG93TXVsdGlTZWxlY3Q/OiBib29sZWFuO1xuICAgIGFsbG93U2VhcmNoPzogYm9vbGVhbjtcbiAgICBhbGxvd1NlbGVjdEFsbD86IGJvb2xlYW47XG4gICAgYWxsb3dPcmRlcj86IGJvb2xlYW47XG4gICAgc2VhcmNoUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgZGl2aWRlcnM/OiBib29sZWFuO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgbWF4SGVpZ2h0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBtYXhXaWR0aD86IHN0cmluZyB8IG51bGw7XG4gICAgbWluSGVpZ2h0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBtaW5XaWR0aD86IHN0cmluZyB8IG51bGw7XG4gICAgZGlzcGxheUxpbWl0PzogbnVtYmVyO1xuICAgIHNlbGVjdGVkT3B0aW9uTGltaXQ/OiBudW1iZXI7XG4gICAgc2hvd1NpbmdsZVNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICB1c2VUb3BMZXZlbE9wdGlvbnNGb3JEaXNwbGF5PzogYm9vbGVhbjtcbiAgICBnZXRDdXN0b21PcHRpb25EaXNwbGF5PzogKHNlbGVjdGVkT3B0aW9uczogU291cmNlT3B0aW9uPE8+W10pID0+IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIG5vbi1sZWFmIG5vZGVzIChwYXJlbnRzKSByZW1haW4gc2VsZWN0YWJsZSBkdXJpbmcgc2VhcmNoLFxuICAgICAqIGFuZCBzZWxlY3RpbmcgdGhlbSB3aWxsIHNlbGVjdC9kZXNlbGVjdCBBTEwgY2hpbGRyZW4gZnJvbSB0aGUgb3JpZ2luYWxcbiAgICAgKiBkYXRhc2V0LCBub3QganVzdCB0aGUgdmlzaWJsZSBmaWx0ZXJlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogRGVmYXVsdDogZmFsc2UgKGN1cnJlbnQgYmVoYXZpb3IgLSBwYXJlbnRzIGFyZSBub3Qgc2VsZWN0YWJsZSBkdXJpbmcgc2VhcmNoKVxuICAgICAqL1xuICAgIGFsbG93U2VsZWN0Tm9uTGVhZkR1cmluZ1NlYXJjaD86IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHNvdXJjZTogU291cmNlPE8+LFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxPPixcbiAgKTogTWFuYWdlcjxPPiB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXRlOiBDb3JlU3RhdGU8Tz4gPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICBvcmRlcjogJ3RpdGxlJyxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IFtdLFxuICAgICAgb3JpZ2luYWxPcHRpb25Hcm91cHM6IFtdLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIHNlbGVjdGVkOiBuZXcgT3B0aW9uU2V0KCksXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBleHBhbmRlZE9wdGlvbnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxPPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGludGVybmFsQWN0aW9uczogU3ViamVjdDxJbnRlcm5hbEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgY29yZVN0YXRlV2l0aFNlbGVjdGlvblNuYXBzaG90OiBPYnNlcnZhYmxlPFxuICAgICAgW0NvcmVTdGF0ZTxPPiwgT3B0aW9uU2V0PE8+XVxuICAgID4gPSBtZXJnZShhY3Rpb25zLCBpbnRlcm5hbEFjdGlvbnMpLnBpcGUoXG4gICAgICBzY2FuPEFjdGlvbjxPPiB8IEludGVybmFsQWN0aW9uPE8+LCBbQ29yZVN0YXRlPE8+LCBPcHRpb25TZXQ8Tz5dPihcbiAgICAgICAgKFtzdGF0ZSwgc25hcHNob3RdLCBhY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHNpZGVFZmZlY3RzKFxuICAgICAgICAgICAgcmVkdWNlKHN0YXRlLCBhY3Rpb24sIG9wdGlvbnMpLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgaW50ZXJuYWxBY3Rpb25zLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25TbmFwc2hvdCA9XG4gICAgICAgICAgICAoYWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJyAmJiBhY3Rpb24ub3BlbikgfHxcbiAgICAgICAgICAgIChhY3Rpb24udHlwZSA9PT0gJ2xvYWRDb21wbGV0ZScgJiZcbiAgICAgICAgICAgICAgKG5ld1N0YXRlLmRpc3BsYXkub3BlbiB8fCBvcHRpb25zPy5pbmxpbmUpKVxuICAgICAgICAgICAgICA/IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90V2l0aEFuY2VzdG9ycyhuZXdTdGF0ZSlcbiAgICAgICAgICAgICAgOiBzbmFwc2hvdDtcblxuICAgICAgICAgIHJldHVybiBbbmV3U3RhdGUsIG5ld1NlbGVjdGlvblNuYXBzaG90XTtcbiAgICAgICAgfSxcbiAgICAgICAgW2RlZmF1bHRlZEluaXRpYWxTdGF0ZSwgbmV3IE9wdGlvblNldDxPPigpXSxcbiAgICAgICksXG4gICAgICBzdGFydFdpdGg8W0NvcmVTdGF0ZTxPPiwgT3B0aW9uU2V0PE8+XT4oW1xuICAgICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsXG4gICAgICAgIG5ldyBPcHRpb25TZXQ8Tz4oKSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlV2l0aFNlbGVjdGlvblNuYXBzaG90LnBpcGUoXG4gICAgICAgIG1hcCgoW3MsIHNlbGVjdGlvbkF0T3Blbl0pID0+IHtcbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdID1cbiAgICAgICAgICAgIHMuc291cmNlT3B0aW9uR3JvdXBzLm1hcChvcHRpb25Hcm91cCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uR3JvdXAub3B0aW9ucy5tYXAob3B0aW9uID0+XG4gICAgICAgICAgICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHMsIG9wdGlvbiwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGFsbE9wdGlvbkdyb3Vwcyk7XG5cbiAgICAgICAgICBjb25zdCBzb3J0ZWRPcHRpb25Hcm91cHMgPSBvcHRpb25zPy5hbGxvd011bHRpU2VsZWN0XG4gICAgICAgICAgICA/IHNvcnRPcHRpb25zQnlQcmV2aW91c2x5U2VsZWN0ZWRTdGF0ZShcbiAgICAgICAgICAgICAgICBhbGxPcHRpb25Hcm91cHMsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQXRPcGVuLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGFsbE9wdGlvbkdyb3VwcztcblxuICAgICAgICAgIGNvbnN0IGRpc3BsYXlMaW1pdCA9IG9wdGlvbnM/LmRpc3BsYXlMaW1pdCA/PyBERUZBVUxUX0RJU1BMQVlfTElNSVQ7XG4gICAgICAgICAgY29uc3QgZGlzcGxheUxpbWl0ZWRPcHRpb25Hcm91cHMgPSBhcHBseURpc3BsYXlMaW1pdChcbiAgICAgICAgICAgIHNvcnRlZE9wdGlvbkdyb3VwcyxcbiAgICAgICAgICAgIGRpc3BsYXlMaW1pdCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGZ1bGxPcHRpb25Hcm91cHMgPSBhcHBseVNlbGVjdGVkT3B0aW9uTGltaXQoXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgZGlzcGxheUxpbWl0ZWRPcHRpb25Hcm91cHMsXG4gICAgICAgICAgICB0b3BMZXZlbE9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgIHNob3dTZWFyY2g6XG4gICAgICAgICAgICAgICAgISFzLnF1ZXJ5LnNlYXJjaCB8fFxuICAgICAgICAgICAgICAgICghIW9wdGlvbnM/LmFsbG93U2VhcmNoICYmXG4gICAgICAgICAgICAgICAgICBjb3VudEFsbE9wdGlvbnMoYWxsT3B0aW9uR3JvdXBzKSA+XG4gICAgICAgICAgICAgICAgICAgIE1JTl9PUFRJT05TX0ZPUl9DT05UUk9MUykgfHxcbiAgICAgICAgICAgICAgICBjb3VudEFsbE9wdGlvbnMoYWxsT3B0aW9uR3JvdXBzKSA+IGRpc3BsYXlMaW1pdCxcbiAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IG9wdGlvbnM/LnNlYXJjaFBsYWNlaG9sZGVyID8/ICdTZWFyY2gnLFxuICAgICAgICAgICAgICBzaG93T3JkZXI6XG4gICAgICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd09yZGVyICYmXG4gICAgICAgICAgICAgICAgIXMucXVlcnkuc2VhcmNoICYmXG4gICAgICAgICAgICAgICAgY291bnRBbGxPcHRpb25zKGFsbE9wdGlvbkdyb3VwcykgPiBNSU5fT1BUSU9OU19GT1JfQ09OVFJPTFMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVsbE9wdGlvbkdyb3VwcyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgYWxsb3dNdWx0aVNlbGVjdDogISFvcHRpb25zPy5hbGxvd011bHRpU2VsZWN0LFxuICAgICAgICAgICAgICBhbGxvd1NlbGVjdEFsbDpcbiAgICAgICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VsZWN0QWxsICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucz8uc2VsZWN0ZWRPcHRpb25MaW1pdCA9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHZpc2libGVTZWxlY3Rpb25TdGF0ZTpcbiAgICAgICAgICAgICAgICBnZXRQYXJlbnRNdWx0aVNlbGVjdGlvblN0YXRlKHRvcExldmVsT3B0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgICAuLi5zLmRpc3BsYXksXG4gICAgICAgICAgICAgIGZvcm1hdHRlZFNlbGVjdGVkT3B0aW9uczogZ2V0Rm9ybWF0dGVkT3B0aW9uc0ZvckRpc3BsYXkoXG4gICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICB0b3BMZXZlbE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgemVyb1N0YXRlTWVzc2FnZTogZ2V0WmVyb1N0YXRlTWVzc2FnZShzKSxcbiAgICAgICAgICAgICAgZGl2aWRlcnM6ICEhb3B0aW9ucz8uZGl2aWRlcnMsXG4gICAgICAgICAgICAgIGlubGluZTogISFvcHRpb25zPy5pbmxpbmUsXG4gICAgICAgICAgICAgIG1heEhlaWdodDogb3B0aW9ucz8ubWF4SGVpZ2h0ID8/IG51bGwsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBvcHRpb25zPy5tYXhXaWR0aCA/PyBudWxsLFxuICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG9wdGlvbnM/Lm1pbkhlaWdodCA/PyBudWxsLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogb3B0aW9ucz8ubWluV2lkdGggPz8gbnVsbCxcbiAgICAgICAgICAgICAgZGlzcGxheUxpbWl0TWVzc2FnZTogZ2V0RGlzcGxheUxpbWl0TWVzc2FnZShcbiAgICAgICAgICAgICAgICBjb3VudFZpc2libGVPcHRpb25zKGZ1bGxPcHRpb25Hcm91cHMsICEhcy5xdWVyeS5zZWFyY2gpLFxuICAgICAgICAgICAgICAgIGNvdW50VmlzaWJsZU9wdGlvbnMoYWxsT3B0aW9uR3JvdXBzLCAhIXMucXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgICBzLnF1ZXJ5LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzaG93U2luZ2xlU2VsZWN0ZWQ6ICEhb3B0aW9ucz8uc2hvd1NpbmdsZVNlbGVjdGVkLFxuICAgICAgICAgICAgICBwaWxsQ291bnQ6IGdldFBpbGxDb3VudEZvckRpc3BsYXkocywgdG9wTGV2ZWxPcHRpb25zLCBvcHRpb25zKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCB0aGUgb3B0aW9ucyBpbW1lZGlhdGVseSBmb3Igc2VsZWN0cyB0aGF0IGFyZSBkaXNwbGF5ZWQgaW5saW5lLlxuICAgIGlmIChvcHRpb25zPy5pbmxpbmUpIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlIH07XG4gIH1cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgTWFuYWdlck9wdGlvbnM8Tz4gJiB7XG4gICAgICBmdXNlT3B0aW9ucz86IElGdXNlT3B0aW9uczxPPjtcbiAgICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxPcHRpb25Hcm91cDxPPltdPiB8IE9wdGlvbkdyb3VwPE8+W10sXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGxldCBkYXRhOiBPcHRpb25Hcm91cDxPPltdO1xuICAgIGxldCBmdXNlOiBGdXNlPE8+O1xuICAgIGxldCBleGFjdE1hdGNoOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHBhcmVudHM6IE1hcDxPWydpZCddLCBPWydpZCddPjtcbiAgICBsZXQgY2hpbGRyZW46IE1hcDxPWydpZCddLCBPWydpZCddW10+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8Tz4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8qXG4gICAgICAgIFJlLWZldGNoIHRoZSBvcHRpb25zIG9uIHRoZSBsb2FkIGFjdGlvbiwgYW5kIHJlYnVpbGQgdGhlIHN0YXRlXG4gICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgb3B0aW9uIGRhdGEuXG4gICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpO1xuXG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShmbGF0dGVuT3B0aW9ucyh0b3BMZXZlbE9wdGlvbnMsIGZhbHNlKSwge1xuICAgICAgICAgIHRocmVzaG9sZDogMC4yLFxuICAgICAgICAgIGtleXM6IFsndGl0bGUnXSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4YWN0TWF0Y2ggPSBvcHRpb25zPy5mdXNlT3B0aW9ucz8udGhyZXNob2xkID09IDA7XG4gICAgICAgIFtwYXJlbnRzLCBjaGlsZHJlbl0gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIExlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBzaG91bGRuJ3QgYWZmZWN0IGZ1enp5IG1hdGNoaW5nIChGdXNlXG4gICAgICAvLyBzY29yZXMgdGhlIHBhdHRlcm4ncyBsZW5ndGggYWdhaW5zdCB0aGUgdGV4dCdzLCBzbyBhIHN0cmF5IHNwYWNlXG4gICAgICAvLyBjaGFuZ2VzIHJlc3VsdHMgaW4gc3VycHJpc2luZyB3YXlzKTsgYSBzZWFyY2ggc3RyaW5nIG9mIG9ubHlcbiAgICAgIC8vIHdoaXRlc3BhY2UgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBubyBzZWFyY2guXG4gICAgICBjb25zdCBzZWFyY2ggPSBxdWVyeS5zZWFyY2gudHJpbSgpO1xuXG4gICAgICAvKlxuICAgICAgICBJZiB0aGUgdXNlciBpcyBub3Qgc2VhcmNoaW5nIG9wdGlvbnMsIHJldHVybiB0aGUgZnVsbCBzZXQgb2Ygb3B0aW9uc1xuICAgICAgICBzb3J0ZWQgYXBwcm9wcmlhdGVseS5cbiAgICAgICovXG4gICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICAvKlxuICAgICAgICAgIFRoZSBgc291cmNlYCBvcmRlciBwcm9wZXJ0eSBhbGxvd3MgZm9yIG9wdGluZyBvdXQgb2YgYXV0b21hdGljXG4gICAgICAgICAgc29ydGluZywgcmV0dXJuaW5nIHRoZSBkYXRhIGluIGl0cyBuYXR1cmFsIGlucHV0IG9yZGVyLlxuICAgICAgICAqL1xuICAgICAgICBpZiAocXVlcnkub3JkZXIgPT09ICdzb3VyY2UnKSByZXR1cm4gZGF0YTtcblxuICAgICAgICAvKlxuICAgICAgICAgIFNvcnQgdGhlIG9wdGlvbnMgYnkgdGl0bGUgYW5kIHN1YnRpdGxlLlxuICAgICAgICAqL1xuICAgICAgICBpZiAocXVlcnkub3JkZXIgPT09ICd0aXRsZScpIHtcbiAgICAgICAgICBmdW5jdGlvbiBzb3J0QnlUaXRsZShvcHRpb25zOiBPcHRpb248Tz5bXSk6IE9wdGlvbjxPPltdIHtcbiAgICAgICAgICAgIHJldHVybiBzb3J0Qnkob3B0aW9ucywgW1xuICAgICAgICAgICAgICAobzogT3B0aW9uPE8+KSA9PiBvLnRpdGxlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIChvOiBPcHRpb248Tz4pID0+IG8uc3VidGl0bGU/LnRvTG93ZXJDYXNlKCkgPz8gJycsXG4gICAgICAgICAgICBdKS5tYXAob3B0aW9uID0+ICh7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBzb3J0QnlUaXRsZShvcHRpb24uY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRhdGEubWFwKGdyb3VwID0+ICh7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHNvcnRCeVRpdGxlKGdyb3VwLm9wdGlvbnMpLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAgU29ydCB0aGUgb3B0aW9ucyBieSBjb3VudCwgdGhlbiBieSB0aXRsZSwgdGhlbiBieSBzdWJ0aXRsZS5cbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHF1ZXJ5Lm9yZGVyID09PSAnY291bnQnKSB7XG4gICAgICAgICAgZnVuY3Rpb24gc29ydEJ5Q291bnQob3B0aW9uczogT3B0aW9uPE8+W10pOiBPcHRpb248Tz5bXSB7XG4gICAgICAgICAgICByZXR1cm4gc29ydEJ5KG9wdGlvbnMsIFtcbiAgICAgICAgICAgICAgKG86IE9wdGlvbjxPPikgPT4gKGlzTnVtYmVyKG8uY291bnQpID8gLW8uY291bnQgOiBJbmZpbml0eSksXG4gICAgICAgICAgICAgIChvOiBPcHRpb248Tz4pID0+IG8udGl0bGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgKG86IE9wdGlvbjxPPikgPT4gby5zdWJ0aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgICAgIF0pLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHNvcnRCeUNvdW50KG9wdGlvbi5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGF0YS5tYXAoZ3JvdXAgPT4gKHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogc29ydEJ5Q291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIEV4ZWN1dGUgdGhlIHNlYXJjaCB3aXRoIGZ1c2UuIE9uY2Ugd2UgaGF2ZSB0aGUgc2VhcmNoIG1hdGNoIGRhdGEsXG4gICAgICAgIHJlYnVpbGQganVzdCBhcyBtdWNoIG9mIHRoZSB0cmVlIGFzIGlzIG5lZWRlZCB0byByZW5kZXIgdGhlIHNlYXJjaFxuICAgICAgICByZXN1bHRzLiBTcGVjaWZpY2FsbHksIGFueSBtYXRjaCB3aWxsIG5lZWQgYWxsIG9mIGl0cyBhbmNlc3RvcnMgKHNvXG4gICAgICAgIHRoYXQgbWF0Y2hlZCBsZWFmIG5vZGVzIGFyZSBzaG93biBuZXN0ZWQgdW5kZXIgdGhlaXIgYW5jZXN0b3JzKSBhbmQgYWxsXG4gICAgICAgIG9mIGl0cyBjaGlsZHJlbiAoYmVjYXVzZSBhIG1hdGNoaW5nIHBhcmVudCBtZWFucyB0aGF0IGFsbCBvZiBpdHNcbiAgICAgICAgZGVzY2VuZGFudHMgbWF0Y2ggdG9vLCBwZXIgdGhlIGRlc2lnbiBzcGVjaWZpY2F0aW9uKSwgd2hldGhlciB0aGV5XG4gICAgICAgIHRoZW1zZWx2ZXMgbWF0Y2hlZCBvciBub3QuXG4gICAgICAqL1xuICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbnM6IEZ1c2VSZXN1bHQ8Tz5bXSA9IGZ1c2Uuc2VhcmNoKHNlYXJjaCk7XG4gICAgICBjb25zdCBtYXRjaGVkSWRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtLmlkKSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG1hdGNoQW5jZXN0b3JzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KCk7XG4gICAgICBmdW5jdGlvbiBjb2xsZWN0QW5jZXN0b3JzKGlkczogT1snaWQnXVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnRzLmdldChpZCk7XG4gICAgICAgICAgaWYgKHBhcmVudElkKSB7XG4gICAgICAgICAgICBtYXRjaEFuY2VzdG9ycy5hZGQocGFyZW50SWQpO1xuICAgICAgICAgICAgY29sbGVjdEFuY2VzdG9ycyhbcGFyZW50SWRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbGxlY3RBbmNlc3RvcnMoWy4uLm1hdGNoZWRJZHNdKTtcblxuICAgICAgY29uc3QgbWF0Y2hEZXNjZW5kYW50czogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldCgpO1xuICAgICAgZnVuY3Rpb24gY29sbGVjdERlc2NlbmRhbnRzKGlkczogT1snaWQnXVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW5JZHMgPSBjaGlsZHJlbi5nZXQoaWQpO1xuICAgICAgICAgIGlmIChjaGlsZHJlbklkcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbklkcykge1xuICAgICAgICAgICAgICBtYXRjaERlc2NlbmRhbnRzLmFkZChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xsZWN0RGVzY2VuZGFudHMoY2hpbGRyZW5JZHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sbGVjdERlc2NlbmRhbnRzKFsuLi5tYXRjaGVkSWRzXSk7XG5cbiAgICAgIC8qXG4gICAgICAgIE5leHQsIHdlJ2xsIGNvbWJpbmUgYWxsIHRoZSBtYXRjaGVkIElEcyB3aXRoIHRoZWlyIGRpcmVjdCBhbmNlc3RvcnMgYW5kXG4gICAgICAgIGRlc2NhbmRhbnRzLCBhbmQgZmlsdGVyIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBkb3duIHRvIGp1c3QgdGhlc2VcbiAgICAgICAgb3B0aW9ucy5cbiAgICAgICovXG4gICAgICBjb25zdCBmaWx0ZXJlZElkczogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldChbXG4gICAgICAgIC4uLm1hdGNoZWRJZHMsXG4gICAgICAgIC4uLm1hdGNoQW5jZXN0b3JzLFxuICAgICAgICAuLi5tYXRjaERlc2NlbmRhbnRzLFxuICAgICAgXSk7XG5cbiAgICAgIGZ1bmN0aW9uIGZpbHRlck9wdGlvbnMob3B0aW9uczogT3B0aW9uPE8+W10pOiBPcHRpb248Tz5bXSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uczogT3B0aW9uPE8+W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChmaWx0ZXJlZElkcy5oYXMob3B0aW9uLmlkKSkge1xuICAgICAgICAgICAgZmlsdGVyZWRPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gZmlsdGVyT3B0aW9ucyhvcHRpb24uY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlck9wdGlvbnMoZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpKTtcblxuICAgICAgLypcbiAgICAgICAgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhbiBhcnJheSBvZiBkaXN0aW5jdCB0cmVlcyAodG9wLWxldmVsIG9wdGlvbnMpLFxuICAgICAgICBmaWx0ZXJlZCBkb3duIHRvIG9ubHkgdGhlIG9wdGlvbnMgbWF0Y2hpbmcgdGhlIHNlYXJjaCBxdWVyeS4gTm90ZSB0aGF0XG4gICAgICAgIHdlIGRvbid0IGNhcmUgYWJvdXQgc2VjdGlvbiBoZWFkZXJzIHdoZW4gc2VhcmNoaW5nIHNpbmNlIHJlc3VsdHMgc2hvdWxkXG4gICAgICAgIGJlIG9yZGVyZWQgYnkgcmVsZXZhbmNlLiBUbyBjYWxjdWxhdGUgdGhlIG9yZGVyIG9mIHRoZXNlIHRyZWVzLCB3ZSdsbFxuICAgICAgICB0YWtlIHRoZSB0b3RhbCBtYXRjaCBzY29yZXMgZm9yIG9wdGlvbnMgZm91bmQgaW4gdGhlIHRyZWUsIGRpdmlkZWQgYnlcbiAgICAgICAgdGhlIGNvdW50IG9mIG1hdGNoZXMgaW4gdGhlIHRyZWUgKHRoZSBiZXN0IGF2ZXJhZ2UgbWF0Y2ggc2NvcmUpLlxuICAgICAgKi9cblxuICAgICAgY29uc3Qgc2NvcmVNYXA6IE1hcDxPWydpZCddLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiBbcmVzdWx0Lml0ZW0uaWQsIHJlc3VsdC5zY29yZSA/PyAwXSksXG4gICAgICApO1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IHNvcnRCeShmaWx0ZXJlZE9wdGlvbnMsIChvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjb3JlKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNjb3JlTWFwLmdldChvcHRpb24uaWQpID8/IDApICtcbiAgICAgICAgICAgIChvcHRpb24uY2hpbGRyZW4gPz8gW10pLnJlZHVjZShcbiAgICAgICAgICAgICAgKHNjb3JlLCBjaGlsZCkgPT4gc2NvcmUgKyBjYWxjdWxhdGVTY29yZShjaGlsZCksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVDb3VudChvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoY291bnQsIGNoaWxkKSA9PiBjb3VudCArIGNhbGN1bGF0ZUNvdW50KGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBjYWxjdWxhdGVTY29yZShvcHRpb24pO1xuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gY2FsY3VsYXRlQ291bnQob3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsU2NvcmUgLyB0b3RhbENvdW50O1xuICAgICAgfSk7XG5cbiAgICAgIC8qXG4gICAgICAgIEZpbmFsbHksIHdlJ2xsIGFkZCBoaWdobGlnaHQgaW5kaWNlcyB0byB0aGUgbWF0Y2hlcyBzbyB0aGF0IHRoZXkgY2FuIGJlXG4gICAgICAgIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICAgICovXG5cbiAgICAgIHR5cGUgSGlnaGxpZ2h0cyA9IHtcbiAgICAgICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICAgICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICAgIH07XG4gICAgICBjb25zdCBoaWdobGlnaHRNYXA6IE1hcDxPWydpZCddLCBIaWdobGlnaHRzPiA9IG5ldyBNYXAoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodHM6IEhpZ2hsaWdodHMgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHJlc3VsdC5tYXRjaGVzID8/IFtdKSB7XG4gICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGluZXhhY3QgbWF0Y2hlc1xuICAgICAgICAgICAgaWYgKGV4YWN0TWF0Y2ggJiYgbWF0Y2gudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXRjaC5pbmRpY2VzID0gbWF0Y2guaW5kaWNlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgaXNGdXNlTWF0Y2hFeGFjdChtYXRjaCwgc2VhcmNoKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaC5rZXkgPT09ICd0aXRsZScpIHtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0cy50aXRsZUhpZ2hsaWdodEluZGljZXMgPSBbLi4ubWF0Y2guaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2gua2V5ID09PSAnc3VidGl0bGUnKSB7XG4gICAgICAgICAgICAgIGhpZ2hsaWdodHMuc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzID0gWy4uLm1hdGNoLmluZGljZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3Jlc3VsdC5pdGVtLmlkLCBoaWdobGlnaHRzXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgZnVuY3Rpb24gYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9wdGlvbnM6IE9wdGlvbjxPPltdKTogU291cmNlT3B0aW9uPE8+W10ge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XG4gICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgIC4uLmhpZ2hsaWdodE1hcC5nZXQob3B0aW9uLmlkKSxcbiAgICAgICAgICAuLi4ob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgICAgID8geyBjaGlsZHJlbjogYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9wdGlvbi5jaGlsZHJlbikgfVxuICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBbeyBvcHRpb25zOiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3JkZXJlZCkgfV0sXG4gICAgICAgIG9yaWdpbmFsRGF0YTogZGF0YSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgb3B0aW9ucyk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNGdXNlTWF0Y2hFeGFjdChcbiAgICBtYXRjaDogRnVzZVJlc3VsdE1hdGNoLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICApOiAoXG4gICAgdmFsdWU6IFJhbmdlVHVwbGUsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhcnJheTogcmVhZG9ubHkgUmFuZ2VUdXBsZVtdLFxuICApID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYXRjaGVkSW5kaWNlcyA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVkVmFsdWUgPSBtYXRjaFxuICAgICAgICAudmFsdWUhLnNsaWNlKG1hdGNoZWRJbmRpY2VzWzBdLCBtYXRjaGVkSW5kaWNlc1sxXSArIDEpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgLy8gZnVzZSBpcyB3ZWlyZCB3aXRoIGl0J3MgbWF0Y2hlcy4gRm9yIGEgdGV4dCBvZiBcInBsYW5uaW5nXCIgYW5kIGEgc2VhcmNoIHN0cmluZyBvZiBcInBsYW5cIlxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcInBsYW5uXCIgd2l0aCB0aGUgZXh0cmEgJ24nIGJlY2F1c2Ugb2YgaXRzIGZ1enp5IG1hdGNoaW5nLlxuICAgICAgLy8gc28ganVzdCBtYWtlIHN1cmUgdGhlIG1hdGNoZWQgdmFsdWUgYXQgbGVhc3Qgc3RhcnRzIHdpdGggdGhlIHNlYXJjaCBzdHJpbmcuXG4gICAgICAvLyBpdCdzIGV4dHJhIHdlaXJkIGJlY2F1c2UgZm9yIGEgdGV4dCBvZiBcImFuYWx5dGljc1wiIGFuZCBhIHNlYXJjaCBzdHJpbmcgb2YgXCJuYWx5dGljc1wiLFxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcImFuYWx5dGljc1wiLiBTbyB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0aGUgbWF0Y2hlZCB2YWx1ZVxuICAgICAgLy8gaW5jbHVkZXMgdGhlIHNlYXJjaCBzdHJpbmcgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBleHRyYSBzdHVmZiBvbiB0aGUgZnJvbnQgb3IgdGhlIGVuZC5cbiAgICAgIHJldHVybiBtYXRjaGVkVmFsdWUuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFN0YXRlIHJlZHVjZXIgKHdpdGggaGVscGVycykgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90V2l0aEFuY2VzdG9yczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogT3B0aW9uU2V0PE8+IHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzKTtcbiAgICBjb25zdCBbcGFyZW50c10gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG5cbiAgICAvLyBTaWJsaW5nIGxlYXZlcyBzaGFyZSBhbmNlc3RvcnMsIHNvIG9uY2Ugd2UndmUgd2Fsa2VkIHVwIHRocm91Z2ggYVxuICAgIC8vIGdpdmVuIHBhcmVudCBpZCB3ZSBjYW4gc3RvcCDigJQgYW55dGhpbmcgYWJvdmUgaXQgaGFzIGFscmVhZHkgYmVlblxuICAgIC8vIGFkZGVkIGJ5IGEgcHJldmlvdXMgaXRlcmF0aW9uLiBXaXRob3V0IHRoaXMgc2hvcnQtY2lyY3VpdCB0aGUgbG9vcFxuICAgIC8vIHJlLXJ1bnMgZmluZE9wdGlvbiAod2hpY2ggaXMgYSBmdWxsIHRyZWUgd2Fsaykgb25jZSBwZXIgc2hhcmVkXG4gICAgLy8gYW5jZXN0b3IgZWRnZSwgd2hpY2ggd2FzIHRoZSAjMiBob3RzcG90IGJlaGluZCBPcHRpb25TZXQuYWRkIGluXG4gICAgLy8gUlZULTI1NDcwJ3MgcHJvZmlsZS5cbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxPWydpZCddPigpO1xuICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRPcHRpb24gb2Ygc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKSB7XG4gICAgICBsZXQgcGFyZW50SWQgPSBwYXJlbnRzLmdldChzZWxlY3RlZE9wdGlvbi5pZCk7XG4gICAgICB3aGlsZSAocGFyZW50SWQgIT09IHVuZGVmaW5lZCAmJiAhdmlzaXRlZC5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgIHZpc2l0ZWQuYWRkKHBhcmVudElkKTtcbiAgICAgICAgY29uc3QgcGFyZW50T3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIHBhcmVudElkKTtcbiAgICAgICAgaWYgKHBhcmVudE9wdGlvbikge1xuICAgICAgICAgIHNuYXBzaG90LmFkZChwYXJlbnRPcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudElkID0gcGFyZW50cy5nZXQocGFyZW50SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlMaW1pdE1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGRpc3BsYXllZE9wdGlvbkNvdW50OiBudW1iZXIsXG4gICAgdG90YWxPcHRpb25Db3VudDogbnVtYmVyLFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChkaXNwbGF5ZWRPcHRpb25Db3VudCA9PT0gdG90YWxPcHRpb25Db3VudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcml2TnVtYmVyID0gbmV3IE51bWJlclBpcGUoKTtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSByaXZOdW1iZXIudHJhbnNmb3JtKGRpc3BsYXllZE9wdGlvbkNvdW50KTtcbiAgICBjb25zdCB0b3RhbCA9IHJpdk51bWJlci50cmFuc2Zvcm0odG90YWxPcHRpb25Db3VudCk7XG4gICAgY29uc3Qgc3RhcnQgPSBgU2hvd2luZyAke2Rpc3BsYXllZH0gb2YgJHt0b3RhbH0gb3B0aW9uc2A7XG4gICAgcmV0dXJuIHF1ZXJ5LnNlYXJjaCA/IGAke3N0YXJ0fSBtYXRjaGluZyBcIiR7cXVlcnkuc2VhcmNofVwiYCA6IHN0YXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gY291bnRWaXNpYmxlT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogbnVtYmVyIHtcbiAgICBmdW5jdGlvbiBjb3VudChvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBudW1iZXIge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmV4cGFuZGVkICYmIG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIChsZWFmT25seSA/IDAgOiAxKSArIGNvdW50KG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgZ3JvdXApID0+IHRvdGFsICsgY291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudEFsbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IG51bWJlciB7XG4gICAgZnVuY3Rpb24gY291bnQob3B0aW9uczogRnVsbE9wdGlvbjxPPltdKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIDEgKyBjb3VudChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIGdyb3VwKSA9PiB0b3RhbCArIGNvdW50KGdyb3VwLm9wdGlvbnMpLFxuICAgICAgMCxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlEaXNwbGF5TGltaXQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICAgZGlzcGxheUxpbWl0OiBudW1iZXIsXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICB0eXBlIERpc3BsYXlMaW1pdE9wdGlvbnMgPSBbRnVsbE9wdGlvbjxPPltdLCBudW1iZXJdO1xuICAgIGZ1bmN0aW9uIGZpbHRlcldpdGhMaW1pdChcbiAgICAgIG9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICAgIHJlbWFpbmluZzogbnVtYmVyLFxuICAgICk6IERpc3BsYXlMaW1pdE9wdGlvbnMge1xuICAgICAgbGV0IGxlZnQgPSByZW1haW5pbmc7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9uczogRnVsbE9wdGlvbjxPPltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsZWZ0IDw9IDApIGJyZWFrO1xuXG4gICAgICAgIGlmIChvcHRpb24uZXhwYW5kZWQgJiYgb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBbY2hpbGRPcHRpb25zLCBjaGlsZFJlbWFpbmluZ10gPSBmaWx0ZXJXaXRoTGltaXQoXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICBsZWZ0IC0gMSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkT3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZWZ0ID0gY2hpbGRSZW1haW5pbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIGxlZnQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt2aXNpYmxlT3B0aW9ucywgbGVmdF07XG4gICAgfVxuXG4gICAgdHlwZSBEaXNwbGF5TGltaXRHcm91cHMgPSBbRnVsbE9wdGlvbkdyb3VwPE8+W10sIG51bWJlcl07XG4gICAgY29uc3Qgc3RhcnRpbmdWYWx1ZTogRGlzcGxheUxpbWl0R3JvdXBzID0gW1tdLCBkaXNwbGF5TGltaXRdO1xuICAgIGNvbnN0IFtyZXNvbHZlZEdyb3Vwc10gPSBvcHRpb25Hcm91cHMucmVkdWNlPERpc3BsYXlMaW1pdEdyb3Vwcz4oXG4gICAgICAoW2dyb3VwcywgcmVtYWluaW5nXSwgZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgW29wdGlvbnMsIGxlZnRBZnRlcl0gPSBmaWx0ZXJXaXRoTGltaXQoZ3JvdXAub3B0aW9ucywgcmVtYWluaW5nKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIFtbLi4uZ3JvdXBzLCB7IC4uLmdyb3VwLCBvcHRpb25zIH1dLCBsZWZ0QWZ0ZXJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbZ3JvdXBzLCByZW1haW5pbmddO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhcnRpbmdWYWx1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkR3JvdXBzO1xuICB9XG5cbiAgLypcbiAgICBTb3J0IG9wdGlvbnMgc28gdGhhdCBwcmV2aW91c2x5IHNlbGVjdGVkIG9wdGlvbnMgKGZyb20gcHJpb3Igc2Vzc2lvbnMpXG4gICAgYXBwZWFyIGF0IHRoZSB0b3Agb2YgdGhlaXIgcGVlci9zaWJsaW5nIGxpc3RzLlxuICAqL1xuICBmdW5jdGlvbiBzb3J0T3B0aW9uc0J5UHJldmlvdXNseVNlbGVjdGVkU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICAgc2VsZWN0aW9uQXRPcGVuOiBPcHRpb25TZXQ8Tz4sXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICBmdW5jdGlvbiBzb3J0T3B0aW9ucyhvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBGdWxsT3B0aW9uPE8+W10ge1xuICAgICAgcmV0dXJuIHNvcnRCeShvcHRpb25zLCBvcHRpb24gPT4gIXNlbGVjdGlvbkF0T3Blbi5oYXMob3B0aW9uKSkubWFwKFxuICAgICAgICBvcHRpb24gPT4ge1xuICAgICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHNvcnRPcHRpb25zKG9wdGlvbi5jaGlsZHJlbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gb3B0aW9uO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLm1hcChncm91cCA9PiAoe1xuICAgICAgLi4uZ3JvdXAsXG4gICAgICBvcHRpb25zOiBzb3J0T3B0aW9ucyhncm91cC5vcHRpb25zKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKlxuICAgIElmIHdlIGFyZSByZXN0cmljdGluZyBob3cgbWFueSBvcHRpb25zIGFyZSBzZWxlY3RlZCB0byBhIHNwZWNpZmljIGxpbWl0LFxuICAgICAgd2hlbiB3ZSBhcmUgYXQgdGhhdCBsaW1pdCwgZGlzYWJsZSBhbGwgb3B0aW9ucyBub3QgY3VycmVudGx5IHNlbGVjdGVkLlxuICAqL1xuICBmdW5jdGlvbiBhcHBseVNlbGVjdGVkT3B0aW9uTGltaXQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICB0b3BMZXZlbE9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICBpZiAob3B0aW9ucz8uc2VsZWN0ZWRPcHRpb25MaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9uR3JvdXBzO1xuICAgIH1cblxuICAgIC8vIFdoZW4gdXNlVG9wTGV2ZWxPcHRpb25zRm9yRGlzcGxheSBpcyB0cnVlIGFuZCBzZWFyY2ggaXMgYWN0aXZlLCBjb3VudFxuICAgIC8vIHNlbGVjdGVkIHRvcC1sZXZlbCBvcHRpb25zIGZyb20gdGhlIG9yaWdpbmFsICh1bmZpbHRlcmVkKSBkYXRhIHRvIGVuc3VyZVxuICAgIC8vIGFscmVhZHktc2VsZWN0ZWQgb3B0aW9ucyB0aGF0IGRvbid0IG1hdGNoIHRoZSBzZWFyY2ggYXJlIHN0aWxsIGNvdW50ZWQuXG4gICAgY29uc3QgdXNlT3JpZ2luYWxGb3JDb3VudGluZyA9XG4gICAgICBvcHRpb25zPy51c2VUb3BMZXZlbE9wdGlvbnNGb3JEaXNwbGF5ICYmXG4gICAgICBzdGF0ZS5xdWVyeS5zZWFyY2ggJiZcbiAgICAgIHN0YXRlLm9yaWdpbmFsT3B0aW9uR3JvdXBzLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCB0b3BPcHRpb25zRm9yQ291bnRpbmcgPSB1c2VPcmlnaW5hbEZvckNvdW50aW5nXG4gICAgICA/IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5vcmlnaW5hbE9wdGlvbkdyb3VwcykubWFwKG9wdGlvbiA9PlxuICAgICAgICAgIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb24oc3RhdGUsIG9wdGlvbiwgb3B0aW9ucyksXG4gICAgICAgIClcbiAgICAgIDogdG9wTGV2ZWxPcHRpb25zO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRPckluZGV0ZXJtaW5hdGVUb3BPcHRpb25zID0gdG9wT3B0aW9uc0ZvckNvdW50aW5nLmZpbHRlcihcbiAgICAgIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQgIT0gZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCBudW1TZWxlY3RlZE9wdGlvbnM6IG51bWJlciA9IG9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXlcbiAgICAgID8gc2VsZWN0ZWRPckluZGV0ZXJtaW5hdGVUb3BPcHRpb25zLmxlbmd0aFxuICAgICAgOiBzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTtcblxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uTGltaXQ6IG51bWJlciA9IG9wdGlvbnMuc2VsZWN0ZWRPcHRpb25MaW1pdDtcblxuICAgIC8vIElmIHdlIGhhdmUgbGVzcyBpdGVtcyBzZWxlY3RlZCB0aGFuIHRoZSBsaW1pdCwgYnVzaW5lc3MgYXMgdXN1YWwuXG4gICAgaWYgKG51bVNlbGVjdGVkT3B0aW9ucyA8IHNlbGVjdGVkT3B0aW9uTGltaXQpIHtcbiAgICAgIHJldHVybiBvcHRpb25Hcm91cHM7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBlcXVhbCBpdGVtcyBzZWxlY3RlZCB0byB0aGUgbGltaXQgKG9yIG1vcmUpLCBwcmV2ZW50IHVzZXJzIGZyb20gc2VsZWN0aW5nIG1vcmUgb3B0aW9ucy5cbiAgICBmdW5jdGlvbiBkaXNhYmxlVW5zZWxlY3RlZEl0ZW1zKFxuICAgICAgY3VycmVudE9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICAgIG9wdGlvbnNBcmVDaGlsZHJlbk9mU2VsZWN0ZWRHcm91cDogYm9vbGVhbixcbiAgICApOiBGdWxsT3B0aW9uPE8+W10ge1xuICAgICAgY29uc3QgdXBkYXRlZEl0ZW1zOiBGdWxsT3B0aW9uPE8+W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGN1cnJlbnRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGlzRGlzYWJsZWRPclVuc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICEhb3B0aW9uLmRpc2FibGVkIHx8IChvcHRpb24uc2VsZWN0YWJsZSAmJiBvcHRpb24uc2VsZWN0ZWQgPT0gZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IGlzQ3VycmVudE9wdGlvblNlbGVjdGVkOiBib29sZWFuID1cbiAgICAgICAgICBvcHRpb24uc2VsZWN0YWJsZSAmJiBvcHRpb24uc2VsZWN0ZWQgIT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudE9yUGFyZW50T3B0aW9uU2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgIGlzQ3VycmVudE9wdGlvblNlbGVjdGVkIHx8IG9wdGlvbnNBcmVDaGlsZHJlbk9mU2VsZWN0ZWRHcm91cDtcblxuICAgICAgICBjb25zdCBmb3JjZUVuYWJsZWRCYXNlZE9uUGFyZW50OiBib29sZWFuID1cbiAgICAgICAgICAhIW9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXkgJiZcbiAgICAgICAgICBvcHRpb25zQXJlQ2hpbGRyZW5PZlNlbGVjdGVkR3JvdXA7XG4gICAgICAgIGNvbnN0IG1hcmtEaXNhYmxlZDogYm9vbGVhbiA9XG4gICAgICAgICAgaXNEaXNhYmxlZE9yVW5zZWxlY3RlZCAmJiAhZm9yY2VFbmFibGVkQmFzZWRPblBhcmVudDtcblxuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZE9wdGlvbnMgPSBkaXNhYmxlVW5zZWxlY3RlZEl0ZW1zKFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLFxuICAgICAgICAgICAgaXNDdXJyZW50T3JQYXJlbnRPcHRpb25TZWxlY3RlZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZWRJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGRpc2FibGVkOiAhIW1hcmtEaXNhYmxlZCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZE9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlZEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICEhbWFya0Rpc2FibGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZEl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3Vwc0FmdGVyTGltaXQ6IEZ1bGxPcHRpb25Hcm91cDxPPltdID0gW107XG4gICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2Ygb3B0aW9uR3JvdXBzKSB7XG4gICAgICBncm91cHNBZnRlckxpbWl0LnB1c2goe1xuICAgICAgICAuLi5jdXJyZW50R3JvdXAsXG4gICAgICAgIG9wdGlvbnM6IGRpc2FibGVVbnNlbGVjdGVkSXRlbXMoY3VycmVudEdyb3VwLm9wdGlvbnMsIGZhbHNlKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cHNBZnRlckxpbWl0O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwTWFwczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICk6IFtNYXA8T1snaWQnXSwgT1snaWQnXT4sIE1hcDxPWydpZCddLCBPWydpZCddW10+XSB7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBidWlsZFBhcmVudHNNYXAob3B0aW9uczogT3B0aW9uPE8+W10sIHBhcmVudD86IE9wdGlvbjxPPik6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50cy5zZXQob3B0aW9uLmlkLCBwYXJlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb24uY2hpbGRyZW4sIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zOiBPcHRpb248Tz5bXSk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZHJlbi5zZXQoXG4gICAgICAgICAgICBvcHRpb24uaWQsXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4ubWFwKCh7IGlkIH0pID0+IGlkKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIFtwYXJlbnRzLCBjaGlsZHJlbl07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IEZ1bGxPcHRpb248Tz5bXTtcbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10sXG4gICk6IFNvdXJjZU9wdGlvbjxPPltdO1xuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogT3B0aW9uR3JvdXA8Tz5bXSxcbiAgKTogT3B0aW9uPE8+W107XG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxcbiAgICBPIGV4dGVuZHMgQmFzZU9wdGlvbixcbiAgICBHIGV4dGVuZHMgeyBvcHRpb25zOiByZWFkb25seSBUW10gfSxcbiAgICBUID0gRyBleHRlbmRzIEZ1bGxPcHRpb25Hcm91cDxPPlxuICAgICAgPyBGdWxsT3B0aW9uPE8+XG4gICAgICA6IEcgZXh0ZW5kcyBTb3VyY2VPcHRpb25Hcm91cDxPPlxuICAgICAgPyBTb3VyY2VPcHRpb248Tz5cbiAgICAgIDogT3B0aW9uPE8+LFxuICA+KG9wdGlvbkdyb3VwczogR1tdKTogVFtdIHtcbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZTxUW10+KFxuICAgICAgKG9wdGlvbnMsIGdyb3VwKSA9PiBbLi4ub3B0aW9ucywgLi4uZ3JvdXAub3B0aW9uc10sXG4gICAgICBbXSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgY2hpbGRyZW46IEZ1bGxPcHRpb248Tz5bXSxcbiAgKTogTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSB0cnVlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG5cbiAgZnVuY3Rpb24gYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBvcHRpb246IFNvdXJjZU9wdGlvbjxPPixcbiAgICBtYW5hZ2VyT3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBGdWxsT3B0aW9uPE8+IHtcbiAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGF1Z21lbnRlZENoaWxkcmVuID0gb3B0aW9uLmNoaWxkcmVuLm1hcChjaGlsZCA9PlxuICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHN0YXRlLCBjaGlsZCwgbWFuYWdlck9wdGlvbnMpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNlbGVjdGFibGVXaGVuU2VhcmNoaW5nID1cbiAgICAgICAgbWFuYWdlck9wdGlvbnM/LmFsbG93U2VsZWN0Tm9uTGVhZkR1cmluZ1NlYXJjaCA/PyBmYWxzZTtcblxuICAgICAgLy8gV2hlbiBhbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggaXMgZW5hYmxlZCBhbmQgc2VhcmNoIGlzIGFjdGl2ZSxcbiAgICAgIC8vIGNhbGN1bGF0ZSBzZWxlY3Rpb24gc3RhdGUgZnJvbSBBTEwgb3JpZ2luYWwgY2hpbGRyZW4sIG5vdCBqdXN0IHRoZVxuICAgICAgLy8gZmlsdGVyZWQgb25lcyB2aXNpYmxlIGluIHNlYXJjaCByZXN1bHRzLlxuICAgICAgY29uc3QgdXNlT3JpZ2luYWxGb3JTZWxlY3Rpb25TdGF0ZSA9XG4gICAgICAgIG1hbmFnZXJPcHRpb25zPy5hbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggJiZcbiAgICAgICAgc3RhdGUucXVlcnkuc2VhcmNoICYmXG4gICAgICAgIHN0YXRlLm9yaWdpbmFsT3B0aW9uR3JvdXBzLmxlbmd0aCA+IDA7XG5cbiAgICAgIGxldCBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIGlmICh1c2VPcmlnaW5hbEZvclNlbGVjdGlvblN0YXRlKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9uID0gZmluZE9wdGlvbihcbiAgICAgICAgICBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUub3JpZ2luYWxPcHRpb25Hcm91cHMpLFxuICAgICAgICAgIG9wdGlvbi5pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9yaWdpbmFsT3B0aW9uKSB7XG4gICAgICAgICAgY29uc3QgYWxsTGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoW29yaWdpbmFsT3B0aW9uXSwgdHJ1ZSk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IGFsbExlYXZlcy5maWx0ZXIobGVhZiA9PlxuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkLmhhcyhsZWFmKSxcbiAgICAgICAgICApLmxlbmd0aDtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ291bnQgPT09IGFsbExlYXZlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSAnaW5kZXRlcm1pbmF0ZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdGVkID0gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZShhdWdtZW50ZWRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkID0gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZShhdWdtZW50ZWRDaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgY2hpbGRyZW46IGF1Z21lbnRlZENoaWxkcmVuLFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgZXhwYW5kZWQ6IHN0YXRlLnF1ZXJ5LnNlYXJjaFxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMuaGFzKG9wdGlvbi5pZCksXG4gICAgICAgIHNlbGVjdGFibGU6ICFzdGF0ZS5xdWVyeS5zZWFyY2ggfHwgc2VsZWN0YWJsZVdoZW5TZWFyY2hpbmcsXG4gICAgICAgIGV4cGFuZGFibGU6ICFzdGF0ZS5xdWVyeS5zZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9uLFxuICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkOiBzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQuaGFzKG9wdGlvbiksXG4gICAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEZvcm1hdHRlZE9wdGlvbnNGb3JEaXNwbGF5PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIHRvcExldmVsT3B0aW9uczogRnVsbE9wdGlvbjxPPltdLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxPPixcbiAgKTogc3RyaW5nIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgY3VzdG9tIGRpc3BsYXkgZnVuY3Rpb24sIHVzZSBpdFxuICAgIGlmIChvcHRpb25zPy5nZXRDdXN0b21PcHRpb25EaXNwbGF5KSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5nZXRDdXN0b21PcHRpb25EaXNwbGF5KFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXkpIHtcbiAgICAgIHJldHVybiBnZXRUb3BMZXZlbEZvcm1hdHRlZE9wdGlvbnNGb3JEaXNwbGF5KHRvcExldmVsT3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IGRpc3BsYXkgZm9yIG9wdGlvbnMgLSB0aXRsZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy5cbiAgICByZXR1cm4gWy4uLnN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZF0ubWFwKCh7IHRpdGxlIH0pID0+IHRpdGxlKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxGb3JtYXR0ZWRPcHRpb25zRm9yRGlzcGxheTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgdG9wTGV2ZWxPcHRpb25zOiBGdWxsT3B0aW9uPE8+W10sXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCF0b3BMZXZlbE9wdGlvbnMgfHwgdG9wTGV2ZWxPcHRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9ucyA9IHRvcExldmVsT3B0aW9ucy5maWx0ZXIoXG4gICAgICBvcHRpb24gPT4gb3B0aW9uLnNlbGVjdGVkICE9IGZhbHNlLFxuICAgICk7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9uc1xuICAgICAgLm1hcCgoeyB0aXRsZSB9KSA9PiB0aXRsZSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGlsbENvdW50Rm9yRGlzcGxheTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICB0b3BMZXZlbE9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IG51bWJlciB7XG4gICAgaWYgKG9wdGlvbnM/LnVzZVRvcExldmVsT3B0aW9uc0ZvckRpc3BsYXkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9ucyA9IHRvcExldmVsT3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQgIT0gZmFsc2UsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JJbmRldGVybWluYXRlVG9wT3B0aW9ucy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMuZXZlcnkoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoKSByZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQuJztcbiAgICAgIHJldHVybiAnTm8gb3B0aW9ucy4nO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IFNvdXJjZU9wdGlvbjxPPltdLFxuICAgIGlkOiBPWydpZCddLFxuICApOiBTb3VyY2VPcHRpb248Tz4gfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9uLmlkID09PSBpZCkgcmV0dXJuIG9wdGlvbjtcbiAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGZpbmRPcHRpb24ob3B0aW9uLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgIGlmIChjaGlsZCkgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogT1tdIHtcbiAgICByZXR1cm4gZmxhdHRlbkRlZXAoXG4gICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IG9wdGlvbi5jaGlsZHJlbi5tYXAoY2hpbGQgPT5cbiAgICAgICAgICAgIGZsYXR0ZW5PcHRpb25zKFtjaGlsZF0sIGxlYWZPbmx5KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBsZWFmT25seSA/IGRlc2NlbmRhbnRzIDogW29wdGlvbiwgLi4uZGVzY2VuZGFudHNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNlbGVjdGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICAgIG1hbmFnZXJPcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3Vwcyk7XG4gICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIGlkKTtcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhKFxuICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzdGF0ZSwgb3B0aW9uLCBtYW5hZ2VyT3B0aW9ucykuc2VsZWN0ZWQgPT09IHRydWVcbiAgICApO1xuXG4gICAgLy8gV2hlbiBhbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggaXMgZW5hYmxlZCBhbmQgc2VhcmNoIGlzIGFjdGl2ZSxcbiAgICAvLyB1c2UgdGhlIG9yaWdpbmFsICh1bmZpbHRlcmVkKSBkYXRhIHRvIGdldCBhbGwgY2hpbGRyZW4sIG5vdCBqdXN0XG4gICAgLy8gdGhvc2UgdmlzaWJsZSBpbiB0aGUgZmlsdGVyZWQgc2VhcmNoIHJlc3VsdHMuXG4gICAgY29uc3QgdXNlT3JpZ2luYWxEYXRhID1cbiAgICAgIG1hbmFnZXJPcHRpb25zPy5hbGxvd1NlbGVjdE5vbkxlYWZEdXJpbmdTZWFyY2ggJiZcbiAgICAgIHN0YXRlLnF1ZXJ5LnNlYXJjaCAmJlxuICAgICAgc3RhdGUub3JpZ2luYWxPcHRpb25Hcm91cHMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IG9wdGlvbkZvckxlYXZlcyA9IHVzZU9yaWdpbmFsRGF0YVxuICAgICAgPyBmaW5kT3B0aW9uKGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5vcmlnaW5hbE9wdGlvbkdyb3VwcyksIGlkKSA/PyBvcHRpb25cbiAgICAgIDogb3B0aW9uO1xuXG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoW29wdGlvbkZvckxlYXZlc10sIHRydWUpO1xuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2VsZWN0aW9uLmRlbGV0ZShsZWFmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpO1xuICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24odG9wTGV2ZWxPcHRpb25zLCBpZCk7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybiBzdGF0ZTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQ8Tz4oKTtcbiAgICBuZXdTZWxlY3Rpb24uYWRkKG9wdGlvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhcbiAgICAgIGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSBsZWF2ZXMuZXZlcnkobGVhZiA9PlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkLmhhcyhsZWFmKSxcbiAgICApO1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcblxuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChpc0FsbFNlbGVjdGVkKSBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgZWxzZSBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAuLi5zdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIHNlbGVjdGVkOiBuZXdTZWxlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVPcHRpb25FeHBhbmRlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMoaWQpO1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkT3B0aW9ucyA9IG5ldyBTZXQoc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMpO1xuICAgIGlmIChuZXdWYWx1ZSkgbmV3RXhwYW5kZWRPcHRpb25zLmFkZChpZCk7XG4gICAgZWxzZSBuZXdFeHBhbmRlZE9wdGlvbnMuZGVsZXRlKGlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGV4cGFuZGVkT3B0aW9uczogbmV3RXhwYW5kZWRPcHRpb25zLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2lkZUVmZmVjdHM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBpbnRlcm5hbEFjdGlvbnM6IFN1YmplY3Q8SW50ZXJuYWxBY3Rpb248Tz4+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGlmIChcbiAgICAgIGFjdGlvbi50eXBlID09PSAnbG9hZCcgfHxcbiAgICAgIGFjdGlvbi50eXBlID09PSAnc2VhcmNoQ2hhbmdlJyB8fFxuICAgICAgYWN0aW9uLnR5cGUgPT09ICdvcmRlckNoYW5nZScgfHxcbiAgICAgIChhY3Rpb24udHlwZSA9PT0gJ29wZW5DaGFuZ2UnICYmIGFjdGlvbi5vcGVuKVxuICAgICkge1xuICAgICAgc291cmNlKHN0YXRlLnF1ZXJ5LCBhY3Rpb24pXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5kYXRhO1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YSA9IEFycmF5LmlzQXJyYXkocmVzdWx0KVxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogcmVzdWx0Lm9yaWdpbmFsRGF0YTtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkQ29tcGxldGUnLCBkYXRhLCBvcmlnaW5hbERhdGEgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkRXJyb3InLCBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgICBtYW5hZ2VyT3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICBjYXNlICdsb2FkQ29tcGxldGUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIG9yaWdpbmFsT3B0aW9uR3JvdXBzOiBhY3Rpb24ub3JpZ2luYWxEYXRhID8/IFtdLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnbG9hZEVycm9yJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ29wZW5DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICAgICAgb3BlbjogYWN0aW9uLm9wZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnb3JkZXJDaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlU2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5pZCwgbWFuYWdlck9wdGlvbnMpO1xuICAgICAgY2FzZSAnc2V0U2VsZWN0ZWRPcHRpb24nOlxuICAgICAgICByZXR1cm4gc2V0U2VsZWN0ZWRPcHRpb24oc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgICBjYXNlICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlVmlzaWJsZVNlbGVjdGVkKHN0YXRlKTtcbiAgICAgIGNhc2UgJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJzpcbiAgICAgICAgcmV0dXJuIHRvZ2dsZU9wdGlvbkV4cGFuZGVkKHN0YXRlLCBhY3Rpb24uaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -2254,11 +2254,16 @@ var RivSelect;
|
|
|
2254
2254
|
exactMatch = ((_a = options === null || options === void 0 ? void 0 : options.fuseOptions) === null || _a === void 0 ? void 0 : _a.threshold) == 0;
|
|
2255
2255
|
[parents, children] = getRelationshipMaps(topLevelOptions);
|
|
2256
2256
|
}
|
|
2257
|
+
// Leading/trailing whitespace shouldn't affect fuzzy matching (Fuse
|
|
2258
|
+
// scores the pattern's length against the text's, so a stray space
|
|
2259
|
+
// changes results in surprising ways); a search string of only
|
|
2260
|
+
// whitespace is treated the same as no search.
|
|
2261
|
+
const search = query.search.trim();
|
|
2257
2262
|
/*
|
|
2258
2263
|
If the user is not searching options, return the full set of options
|
|
2259
2264
|
sorted appropriately.
|
|
2260
2265
|
*/
|
|
2261
|
-
if (!
|
|
2266
|
+
if (!search) {
|
|
2262
2267
|
/*
|
|
2263
2268
|
The `source` order property allows for opting out of automatic
|
|
2264
2269
|
sorting, returning the data in its natural input order.
|
|
@@ -2310,7 +2315,7 @@ var RivSelect;
|
|
|
2310
2315
|
descendants match too, per the design specification), whether they
|
|
2311
2316
|
themselves matched or not.
|
|
2312
2317
|
*/
|
|
2313
|
-
const matchedOptions = fuse.search(
|
|
2318
|
+
const matchedOptions = fuse.search(search);
|
|
2314
2319
|
const matchedIds = new Set(matchedOptions.map(result => result.item.id));
|
|
2315
2320
|
const matchAncestors = new Set();
|
|
2316
2321
|
function collectAncestors(ids) {
|
|
@@ -2389,7 +2394,7 @@ var RivSelect;
|
|
|
2389
2394
|
for (const match of (_a = result.matches) !== null && _a !== void 0 ? _a : []) {
|
|
2390
2395
|
// filter out inexact matches
|
|
2391
2396
|
if (exactMatch && match.value != null) {
|
|
2392
|
-
match.indices = match.indices.filter(isFuseMatchExact(match,
|
|
2397
|
+
match.indices = match.indices.filter(isFuseMatchExact(match, search));
|
|
2393
2398
|
}
|
|
2394
2399
|
if (match.key === 'title') {
|
|
2395
2400
|
highlights.titleHighlightIndices = [...match.indices];
|