@churchillliving/se-ui-toolkit 6.54.614 → 6.54.615
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.
|
@@ -467,9 +467,6 @@ function setEditFormFieldsValue(data, formFields, keys, record, allData) {
|
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
469
|
formField.hyperlink.link = setHyperlink(keys, record, formField.orignalLink, paramKeys, formField.hyperlink.params, allData);
|
|
470
|
-
if (formField.control === EFormControl.INPUT && formField?.label?.labelControl?.hyperlink && matchedKey) {
|
|
471
|
-
formField.value = toTrim(record[matchedKey]);
|
|
472
|
-
}
|
|
473
470
|
}
|
|
474
471
|
else if (formField.label?.labelControl?.hyperlink &&
|
|
475
472
|
((formField.label?.labelControl?.hyperlink?.linkId && formField.label?.labelControl?.hyperlink?.params) ||
|
|
@@ -493,6 +490,9 @@ function setEditFormFieldsValue(data, formFields, keys, record, allData) {
|
|
|
493
490
|
}
|
|
494
491
|
formField.label.labelControl.hyperlink.link = setHyperlink(keys, record, formField.label?.labelControl?.hyperlink?.link, paramKeys, params, allData);
|
|
495
492
|
}
|
|
493
|
+
else if (formField.control === EFormControl.INPUT && formField?.label?.labelControl?.hyperlink && matchedKey) {
|
|
494
|
+
formField.value = toTrim(record[matchedKey]);
|
|
495
|
+
}
|
|
496
496
|
else {
|
|
497
497
|
if (formField.control === EFormControl.CALENDAR && matchedKey) {
|
|
498
498
|
formField.value = formField.timeOnly ? record[matchedKey] : record[matchedKey]
|
|
@@ -1119,4 +1119,4 @@ export function calendarMinMaxValue(item, value, index) {
|
|
|
1119
1119
|
return validation;
|
|
1120
1120
|
}
|
|
1121
1121
|
/* #endregion */
|
|
1122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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QztBQUNMLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFTLEVBQUMsS0FBVSxFQUFFLEtBQUs7SUFDN0QsSUFBSSxVQUFVLEdBQVcsT0FBTyxDQUFDO0lBQ2pDLElBQUksU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFDO1FBQzlDLFVBQVUsR0FBRyxTQUFTLENBQUM7S0FDeEI7U0FDSSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUM7UUFDbkQsVUFBVSxHQUFHLFNBQVMsQ0FBQztLQUN4QjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFDRCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnksIElGaWx0ZXJEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQge1xuICBFRm9ybWF0VHlwZSxcbiAgRUZvcm1Db250cm9sLFxuICBFSHlwZXJsaW5rLFxuICBFTWF0Y2hNb2RlLFxuICBFT3BlcmF0b3IsXG4gIElEeW5hbWljQ2FyZCxcbiAgSUR5bmFtaWNGb3JtLFxuICBJRm9ybWF0LFxuICBJRm9ybUZpZWxkLFxuICBJRm9ybVNlY3Rpb24sXG59IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IGFkZEdsb2JhbEZpbHRlciwgRUdyaWRDb2x1bW5UeXBlLCBJR2xvYmFsRmlsdGVyLCBJR3JpZENvbHVtbiwgSUdyaWRGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qICNyZWdpb24gcHVibGljIG1ldGhvZHMgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHZhbHVlIDogYW55XG4gKiBGdW5jdGlvbiByZWNlaXZlcyB0aGUgdmFsdWUgYW5kIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdGVkLlxuICogRG8gbm90IHVzZSBmYXQgYXJyb3cgZnVuY3Rpb24gYXMgdGhleSBkbyBub3QgcHJlc2VydmUgdGhlIGNvbnRleHQuXG4gKiB0aGlzLnZhbHVlIHJlZmVycyB0byB0aGUgdmFsdWUgb2YgSUZvcm1GaWVsZCBPYmplY3RcbiAqIE1vZGlmeSB0aGlzLnZhbHVlIGRpcmVjdGx5IHRvIHJlY2VpdmUgZWZmZWN0XG4gKi9cbiB2YXIgc3BsaXRTY3JlZW4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGZvcm1zdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY29sdW1uc1N0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjYXJkU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIHJvdXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmaWx0ZXJCdG5DaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5zU3RhdGUocGFnZVNldHRpbmc6IGFueSkge1xuICBjb2x1bW5zU3RhdGUubmV4dChwYWdlU2V0dGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNvbHVtbnNTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNvbHVtbnNTdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvblNjcmVlblNwbGl0Q2hhbmdlICgpe1xuICByZXR1cm4gc3BsaXRTY3JlZW4uYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU3BsaXRTY3JlZW4obWVudUl0ZW0pe1xuICBzcGxpdFNjcmVlbi5uZXh0KHtvcmlnQ29tcG9uZW50OiBtZW51SXRlbS5vcmlnQ29tcG9uZW50LCBwYW5lbENvbXBvbmVudDogbWVudUl0ZW0/LmNvbXBvbmVudCwgY29uZmlnRGF0YTptZW51SXRlbT8uZGF0YT8uZGF0YX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShpZDogYW55LCBkYXRhOiBhbnksIGxvYWRDb21wb25lbnQ/OiBhbnkpIHtcbiAgZm9ybXN0YXRlLm5leHQoeyBpZCwgZGF0YSwgbG9hZENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZvcm1zdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0bihzdGF0ZVZhbHVlKSB7XG4gIGZpbHRlckJ0bkNoYW5nZS5uZXh0KHN0YXRlVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZpbHRlckJ0bkNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uUm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcmV0dXJuIHJvdXRlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcm91dGVDaGFuZ2UubmV4dCgpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0NhcmRTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNhcmRTdGF0ZS5hc09ic2VydmFibGUoKTtcbiB9XG5cbiBleHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0NhcmRTdGF0ZShkYXRhOiBhbnkpIHtcbiAgY2FyZFN0YXRlLm5leHQoeyBkYXRhIH0pO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNsb3NlSUZyYW1lKCl7XG4gIGxldCBjbG9zZSA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnAtZGlhbG9nLWhlYWRlci1pY29uJylhcyBIVE1MRWxlbWVudFxuICBpZihjbG9zZSkge1xuICAgIGNsb3NlLmNsaWNrKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVjaW1hbCh2YWx1ZTogYW55KTogYW55IHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUudG9TdHJpbmcoKSkudG9GaXhlZCgyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAneScgPyB0cnVlIDogZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Nob3J0RGF0ZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtYXQgJiZcbiAgICAgIChmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTE9OR0RBVEUgfHxcbiAgICAgICAgZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLk1FRElVTURBVEUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlLCAnTU0vZGQveXl5eScsICdlbi1VUycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGVUaW1lKHZhbHVlOiBhbnksIGZvcm1hdD86IElGb3JtYXQpIHtcbiAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJyAmJiB2YWx1ZT8udG9TdHJpbmcoKSAhPSBcIkludmFsaWQgRGF0ZVwiKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXkgaGg6bW0gYScsICdlbi1VUycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nRGF0YShjb2x1bW5zOklHcmlkQ29sdW1uW10sIGZpZWxkTmFtZTpzdHJpbmcsIHZhbHVlOmFueSl7XG4gIGNvbHVtbnM/LmZvckVhY2goKGNvbHVtbik9PntcbiAgICAgIGlmKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpICYmIGNvbHVtbi5jb21wb25lbnQpe1xuICAgICAgICBsZXQga2V5cz1PYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICAgIGNvbHVtbi5kYXRhLmRhdGE9ey4uLmNvbHVtbi5kYXRhPy5kYXRhLCBba2V5XTp2YWx1ZVtrZXldfTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVHJpbSh0ZXh0OiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0ZXh0LnRyaW0oKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hLZXkob2JqOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIW9iaiB8fCAhcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgbWF0Y2hlZEtleSA9ICcnO1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgb2JqLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3Qga2V5czogYW55W10gPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKCFtYXRjaGVkS2V5IHx8IG1hdGNoZWRLZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG1hdGNoZWRLZXkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKCh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRLZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQsIHZhbHVlOiBhbnkpOiBhbnkge1xuICBsZXQgZm9ybWF0dGVkVmFsdWU6IGFueSA9IHZhbHVlO1xuICBpZiAoZm9ybUZpZWxkLmZvcm1hdCkge1xuICAgIHN3aXRjaCAoZm9ybUZpZWxkLmZvcm1hdC50eXBlKSB7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9EZWNpbWFsKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkJPT0xFQU5fWU46XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLlNIT1JUREFURTpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b1Nob3J0RGF0ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5DVVNUT006XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0LmZvcm1hdHRlcikge1xuICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZvcm1GaWVsZCAoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUZpZWxkT2JqOiBJRm9ybUZpZWxkXG4pIHtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChzZWN0aW9uLmZpZWxkcyA9IHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkT2JqLmZpZWxkPy50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgIChmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsID09PSBmb3JtRmllbGRPYmoubGFiZWwpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkID0gZm9ybUZpZWxkT2JqO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rQ29tcG9uZW50RGF0YSAoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgbGFiZWw6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pe1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5sYWJlbCAmJiAodHlwZW9mIChmaWVsZC5sYWJlbCkgPT0gXCJvYmplY3RcIiA/IGZpZWxkLmxhYmVsPy5uYW1lID09IGxhYmVsIDogZmllbGQubGFiZWwgPT09IGxhYmVsKSlcbiAgICBpZiAoZmllbGQgJiYgdHlwZW9mIChmaWVsZC5sYWJlbCkgPT0gXCJvYmplY3RcIiAmJiBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2w/Lmh5cGVybGluaykge1xuICAgICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMgPSBkYXRhO1xuICAgIH0gZWxzZSBpZiAoZmllbGQgJiYgZmllbGQuaHlwZXJsaW5rKSB7XG4gICAgICBmaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgdmFsdWVzOiBhbnlbXSxcbiAgdW5pcXVlSWQ6IGFueSxcbiAgbGFiZWxLZXk6IHN0cmluZyxcbiAgVmFsdWVLZXk6IHN0cmluZyxcbil7XG4gIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCl7XG4gICAgdmFsdWVzID0gdmFsdWVzPy5tYXAoKHJvd1ZhbHVlKSA9PiAoe1tsYWJlbEtleV06IHJvd1ZhbHVlLCBbVmFsdWVLZXldOiB1bmlxdWVJZH0pKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9va3VwRGF0YShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICBkYXRhOiBhbnlcbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgIGRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiYgZGF0YSkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTaWRlYmFyTGlua1BhcmFtVmFsdWVzKGxpbms6IHN0cmluZywgcGFyYW1zOiBhbnlbXSk6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5rOiBzdHJpbmcgPSBsaW5rO1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgcGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHBhcmFtLm5hbWUgPyAne3snICsgcGFyYW0ubmFtZSArICd9fScgOiAnJztcbiAgICAgIGlmIChuZXdMaW5rLmxvY2FsZUNvbXBhcmUodXJsKSkge1xuICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAodXJsLCAnaWcnKSwgdG9UcmltKHBhcmFtLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGROZXdGaWVsZEluRm9ybShkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtLCBzZWN0aW9uTmFtZTpzdHJpbmcsIGZvcm1GaWVsZDpJRm9ybUZpZWxkKXtcbiAgY29uc3Qgc2VjdGlvbiA9IGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZpbmQoKHNlY3Rpb24pPT4gc2VjdGlvbi5uYW1lID09PSBzZWN0aW9uTmFtZSk7XG4gIGlmKHNlY3Rpb24pe1xuICAgIHNlY3Rpb24uZmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgfVxuICByZXR1cm4gZHluYW1pY0Zvcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGRzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZHM6IElGb3JtRmllbGRbXVxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgbGV0IG1hdGNoZWRGaWVsZCA9IGZvcm1GaWVsZHMuZmluZChcbiAgICAgICAgKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoZWRGaWVsZCkge1xuICAgICAgICBmb3JtRmllbGQgPSBtYXRjaGVkRmllbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybUZpZWxkO1xuICAgIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxGaWx0ZXJzKFxuICBnbG9iYWxGaWx0ZXJzOiBhZGRHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbikge1xuICBsZXQgZm9ybUZpZWxkT2JqOiBhbnk7XG4gIGdsb2JhbEZpbHRlcnMubWFwKChmaWx0ZXIpPT57XG4gICAgaWYgKGZpbHRlci5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGZvcm1GaWVsZE9iaiA9IGZpbHRlcjtcbiAgICAgIH1cbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1Db250cm9sOiBFRm9ybUNvbnRyb2xcbik6IElGb3JtRmllbGRbXSB7XG4gIGxldCBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IGZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLnZhbHVlPy50ZXh0ICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUudGV4dCkgPT09ICdzdHJpbmcnKVxuICAgICAgICB7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgdHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdzdHJpbmcnKVxuICAgICAgICB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmdcbik6IElGb3JtRmllbGQge1xuICBsZXQgZm9ybUZpZWxkT2JqOiBhbnk7XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZm9ybUZpZWxkT2JqID0gZm9ybUZpZWxkO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZE9iajtcbn1cblxuLy8gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGZpZWxkLiBJZiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZSBpcyB0cnVlIGFuZCBkaXNwbGF5RmllbGRcbi8vIGV4aXN0IGluIHRoZSBmaWVsZCB0aGVuIGFsd2F5cyByZXR1cm4gYSBkaXNwbGF5RmllbGQgdmFsdWUuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWUoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU6Ym9vbGVhbiA9IGZhbHNlXG4pIHtcbiAgbGV0IHZhbHVlO1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zIGFzIGFueSkge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlID0gaXNWYWxpZCA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dCA6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dFxuICAgICAgICAgICAgOiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1RcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZUFzU3RyaW5nKGR5bmFtaWNGb3JtOklEeW5hbWljRm9ybSxmaWVsZDpzdHJpbmcpOnN0cmluZ3tcbiAgbGV0IHZhbHVlOmFueSA9IGdldEZvcm1GaWVsZFZhbHVlKGR5bmFtaWNGb3JtLGZpZWxkLCB0cnVlKTtcbiAgaWYgKHZhbHVlKXtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICB9XG4gICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uRmllbGRWYWx1ZShcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgZmllbGQ6IHN0cmluZ1xuKSB7XG4gIGxldCBmb3JtOiBJRHluYW1pY0Zvcm0gPSB7IGZvcm1TZWN0aW9ucyB9O1xuICByZXR1cm4gZ2V0Rm9ybUZpZWxkVmFsdWUoZm9ybSwgZmllbGQsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2F2ZUZvcm1WYWx1ZXMoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIHRhYmxlcz86IHN0cmluZ1tdLFxuKSB7XG4gIGxldCBzZWN0aW9uRmllbGRzOiBhbnk7XG4gIGxldCByZXNwb25zZTogYW55ID0ge307XG4gIGlmICh0YWJsZXMgJiYgdGFibGVzLmxlbmd0aCA+IDApIHtcbiAgICB0YWJsZXMuZm9yRWFjaCgodGFibGVOYW1lKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSBmaWVsZC50YWJsZXM/Lm1hcCgodGFibGUpID0+IHRhYmxlLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgaWYgKHRhYmxlICYmIHRhYmxlLmluY2x1ZGVzKHRhYmxlTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVt0YWJsZU5hbWVdKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkICYmIGZpZWxkLmZpZWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXVtmaWVsZC5maWVsZF0gPSBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgc2VjdGlvbkZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkICYmIGZpZWxkLmZpZWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXNwb25zZVtmaWVsZC5maWVsZF0gPSBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVDYXJkVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXVxuKSB7XG4gIGxldCB2YWx1ZXM6IElGb3JtRmllbGRbXSA9IFtdO1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEICYmIGZpZWxkLmNhcmQuZGF0YSkge1xuICAgICAgICBmaWVsZC5jYXJkLmRhdGEuZm9yRWFjaCgoY2FyZERhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjYXJkRGF0YS5keW5hbWljRm9ybS5mb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKFxuICAgICAgICAgICAgICBzZXRTYXZlRm9ybVZhbHVlcyhjYXJkRGF0YS5keW5hbWljRm9ybS5mb3JtU2VjdGlvbnMsIHRhYmxlcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkcyhkYXRhOiBhbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBkYXRhLmZvckVhY2goKGRhdGFSb3cpID0+IHtcbiAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhUm93LCBkeW5hbWljRm9ybSwgZGF0YSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGR5bmFtaWNGb3JtKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyKFxuICBmaWVsZDogc3RyaW5nLFxuICB2YWx1ZTogYW55LFxuICBtYXRjaE1vZGU6IEVNYXRjaE1vZGUgPSBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgb3BlcmF0b3I6IEVPcGVyYXRvciA9IEVPcGVyYXRvci5BTkQsXG4pIHtcbiAgY29uc3QgZmlsdGVyOiBhbnkgPSB7XG4gICAgZmllbGQ6IGZpZWxkLFxuICAgIG1hdGNoTW9kZTogbWF0Y2hNb2RlLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICB2YWx1ZTogdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWU/LnZhbHVlIHx8IHZhbHVlPy50ZXh0KSA/IHZhbHVlPy52YWx1ZSA6ICh2YWx1ZSB8fCB2YWx1ZSA9PSAnJykgPyB2YWx1ZSA6IG51bGwsXG4gIH07XG4gIHJldHVybiBmaWx0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmRGaWx0ZXIoZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICByZXR1cm4gc2V0RmlsdGVyKGZpZWxkLCB2YWx1ZSwgRU1hdGNoTW9kZS5FUVVBTFMsIEVPcGVyYXRvci5BTkQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogYW55IHtcbiAgbGV0IHZhbHVlOiBhbnk7XG4gIGlmIChkYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YVtpXSwgcHJvcE5hbWUpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGEsIHByb3BOYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlQXNTdHJpbmcoXG4gIGRhdGE6IGFueSxcbiAgcHJvcE5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgbGV0IHZhbHVlID0gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGEsIHByb3BOYW1lKTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZWN0aW9uUHJvcFZhbHVlcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBzZWN0aW9uTmFtZTogc3RyaW5nLFxuICBwcm9wczogSURpY3Rpb25hcnlbXVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VjdGlvbk5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiBzZXRQcm9wVmFsdWUoc2VjdGlvbiwgcHJvcCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gcHJpdmF0ZSBtZXRob2RzICovXG5cbmZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhOiBhbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0gfCBJRHluYW1pY0NhcmQsIGFsbERhdGE6IGFueVtdID0gW10pIHtcbiAgaWYgKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgZHluYW1pY0Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhLCBmb3JtU2VjdGlvbj8uaGVhZGVyRmllbGRzLCBrZXlzLCByZWNvcmQsIGFsbERhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGE6IGFueSwgZm9ybUZpZWxkczogYW55LCBrZXlzOiBhbnksIHJlY29yZDogYW55LCBhbGxEYXRhOiBhbnkpe1xuICBmb3JtRmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgLy8gc2V0IGxhYmVsIGh5cGVybGlua1xuICAgICAgc2V0TGFiZWxIeXBlcmxpbmsoZm9ybUZpZWxkLCByZWNvcmQsIGtleXMsIGFsbERhdGEpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5oeXBlcmxpbmsubGlua0lkICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zKSB8fFxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXM7XG4gICAgICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFwYXJhbXMgJiZcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluay5pbmNsdWRlcygnfX0nKVxuICAgICAgKSB7XG4gICAgICAgIHBhcmFtS2V5cyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYocGFyYW1zKXtcbiAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQub3JpZ25hbExpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCAmJiBmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluayAmJiBtYXRjaGVkS2V5KSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmXG4gICAgICAoKGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmtJZCAmJiBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmspXG4gICAgKSB7XG4gICAgICBsZXQgcGFyYW1zID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5zcGxpdCgnfX0nKTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICBwYXJhbUtleSA9IHBhcmFtS2V5LnJlcGxhY2UoJ3t7JywgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gcGFyYW1LZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMuZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLFxuICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudGltZU9ubHkgPyByZWNvcmRbbWF0Y2hlZEtleV0gOiByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICA/IG5ldyBEYXRlKHJlY29yZFttYXRjaGVkS2V5XSBhcyBzdHJpbmcpXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNhcmQgJiYgZm9ybUZpZWxkLmNhcmQuZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBmb3JtRmllbGQuY2FyZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBtYXRjaGVkS2V5XG4gICAgICApIHtcbiAgICAgICAgbGV0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZFttYXRjaGVkS2V5XSAmJiBmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBhcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYocmVjb3JkW21hdGNoZWRLZXldKXtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXRjaERpc3BsYXlGaWVsZCA9IGdldE1hdGNoS2V5KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHRvVHJpbShyZWNvcmRbbWF0Y2hEaXNwbGF5RmllbGRdKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICBpZiAobWF0Y2hWYWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgdmFsdWU6IHRvVHJpbShyZWNvcmRbbWF0Y2hWYWx1ZUZpZWxkXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSxcbiAgICAgICAgICByZWNvcmRcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSA9IHNldERhdGFGcm9tUmVjb3JkPy5kYXRhO1xuICAgICAgICBpZihzZXREYXRhRnJvbVJlY29yZD8ubWF0Y2hEYXRhKXtcbiAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQsXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgbGV0IHNldERhdGEgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2w7XG4gICAgICAgIHNldERhdGEuZGF0YS5kYXRhID0gZmluZEtleXNBbmRWYWx1ZShzZXREYXRhLmRhdGEuZGF0YSwgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyBcbiAgICAgICAgJiYgIGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cgXG4gICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBmaW5kS2V5c0FuZFZhbHVlKGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLCByZWNvcmQpPy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPVxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldICYmXG4gICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfWVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgZHJvcFZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGRyb3BWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT10b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKSB8fCBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSk9PntcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBkYXRhLnJlY29yZHMuZmluZCgoeCk9PiB4W3Byb3BOYW1lXSk7XG4gICAgICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpPT57XG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKTtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5ID0ga2V5cy5maW5kKCh4KT0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaEtleSl7XG4gICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGFsbFJlY29yZFttYXRjaEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ2V0IHBhcmFtIHZhbHVlIGZyb20gYXBpIHJlc3BvbnNlLCBpZiBwYXJhbSBrZXkgZXhpc3RzIGluIGl0XG4gICAgICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICBwYXJhbVZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChwYXJhbVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKFxuICAgICAgICAgICAgICBuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSxcbiAgICAgICAgICAgICAgdG9UcmltKHBhcmFtVmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0oJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXBsYWNlIHRoZSB7e3BhcmFtfX0gd2l0aCBlbXB0eVxuICBpZihuZXdMaW5rICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ7e1wiKSAmJiBuZXdMaW5rLmluY2x1ZGVzKFwifX1cIikpe1xuICAgIG5ld0xpbmsgPSBuZXdMaW5rPy5yZXBsYWNlKC97Ky4qP30rL2csIFwiXCIpO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG4vLyBpdHMgY2hlY2tpbmcgaWYgdGhlcmUgaXMgbm8gdmFsdWUgaW4gaHlwZXJsaW5rIHBhcmFtIHRoZW4gaXQgc2V0IGtleSBhcyBhIHBhcmFtVmFsdWVcbmZ1bmN0aW9uIHNldFBhcmFtS2V5VmFsdWUocmVjb3JkOiBhbnksIGFsbERhdGE6IGFueVtdID0gW10sIHBhcmFta2V5OiBhbnkpe1xuICBsZXQgcGFyYW1WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpZihhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMCl7XG4gICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpPT57XG4gICAgICBpZihkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApe1xuICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpID0+e1xuICAgICAgICAgICBpZihwYXJhbVZhbHVlID09PSBmYWxzZSl7XG4gICAgICAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKS5zb21lKChyZWNvcmQpPT4gcmVjb3JkLnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1lbHNle1xuICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhyZWNvcmQpLnNvbWUoKHgpPT4geCA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nKSB7XG4gIGxldCBwcm9wVmFsdWU6IGFueTtcbiAgZGF0YS5yZWNvcmRzPy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgIGlmIChrZXkgJiYgcHJvcE5hbWUgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcHJvcFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHByb3BWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkOiBhbnkpIHtcbiAgaWYgKFxuICAgIGZpZWxkLmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTiB8fFxuICAgIGZpZWxkLmZvcm1hdD8uZm9ybWF0dGVyPy5uYW1lID09PSAndG9Cb29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKGZpZWxkLnZhbHVlID09PSAxIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAndHJ1ZScgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJykgPyAnWScgOiAnTic7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgKGZpZWxkLnZhbHVlIHx8IGZpZWxkLnZhbHVlID09PSAnJylcbiAgKSB7XG4gICAgaWYoZmllbGQudGltZU9ubHkgfHwgZmllbGQuc2hvd3RpbWUpe1xuICAgICAgLy8gY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0gKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkkLzsgLy8gUmVnZXggZm9yIGRhdGV0aW1lIGZvcm1hdFxuICAgICAgLy8gY29uc3QgbWF0Y2ggPSBmaWVsZC52YWx1ZS5tYXRjaChkYXRlVGltZVJlZ2V4KTtcbiAgICAgIC8vIGlmIChtYXRjaCkge1xuICAgICAgLy8gICBmaWVsZC52YWx1ZSA9IGZvcm1hdERhdGUoZmllbGQudmFsdWUsICdoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgICAvLyB9ZWxzZSB7XG4gICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU7XG4gICAgICAvLyB9XG4gICAgfWVsc2V7XG4gICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICBmaWVsZC5zaG93VGltZSA9PT0gdHJ1ZVxuICAgICAgICA/IHRvU2hvcnREYXRlVGltZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgICAgICA6IHRvU2hvcnREYXRlKGZpZWxkLnZhbHVlLCBmaWVsZC5mb3JtYXQpXG4gICAgfVxuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgZmllbGQudmFsdWUgJiZcbiAgICB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICkge1xuICAgIHJldHVybiBmaWVsZC52YWx1ZS52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQubGFiZWwgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWU7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2V0TG9va3VwRGF0YShcbiAgZmllbGREYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbiAgKSB7XG4gIGxldCBvYmogPSB7fTtcbiAgbGV0IHJlY29yZCA9IHNldERhdGFGaWVsZHMoW3Jlc3BvbnNlXSk7XG4gIGlmIChyZWNvcmQgJiYgcmVjb3JkLmxlbmd0aCA+IDApIHtcbiAgICByZWNvcmQuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICByZWNvcmQgPSB4O1xuICAgIH0pO1xuICB9XG4gIGlmIChmaWVsZERhdGEgJiYgcmVjb3JkKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGREYXRhKS5mb3JFYWNoKChbZGF0YUtleSwgZGF0YVZhbHVlXTogYW55KSA9PiB7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YUtleT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBsZXQgdmFsdWUgPSByb3dLZXlzPy5maW5kKFxuICAgICAgICAoeCkgPT4gZGF0YVZhbHVlICYmIGRhdGFWYWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygneycpICYmIHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFWYWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8ucmVwbGFjZShcIntcIiwgXCJcIik/LnJlcGxhY2UoXCJ9XCIsIFwiXCIpXG4gICAgICApPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlID8gcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlIDogcmVjb3JkW3ZhbHVlXSB9O1xuICAgICAgfSBlbHNlIGlmIChrZXkgJiYga2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW2tleS50b0xvd2VyQ2FzZSgpXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogZGF0YVZhbHVlIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0R3JpZExvb2t1cERhdGEoY29sdW1uOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nLCBkYXRhOiBhbnkpe1xuICBsZXQgb2JqID0gY29sdW1uLmZpbmQoKHgpPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gIGlmKG9iaiAmJiBvYmoubG9va3VwQ29udHJvbD8uZGF0YSl7XG4gICAgb2JqLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55W10pIHtcbiAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyh4KS5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoeyAuLi5wcmV2LCBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG5cbiAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nUmVzcG9uc2UoXG4gIGZvcm1GaWVsZDogYW55LFxuICBmb3JtRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4pIHtcbiAgbGV0IHZhbHVlOiBhbnk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIC8vIGlmIHNlbGVjdGVkVmFsdWUgZG9lcyBub3QgZXhpc3QgdGhlbiBjb25zaWRlciB2YWx1ZUZpZWxkIGFzIHNlbGVjdGVkVmFsdWVcbiAgICBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgPSBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgPSBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaFZhbHVlS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZm9ybURhdGE/LmRhdGE/LnZhbHVlUHJvcFxuICAgICk7XG4gICAgY29uc3QgbWF0Y2hGaWVsZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy5sYWJlbFByb3BcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGE/LmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLnZhbHVlUHJvcCAmJlxuICAgICAgZm9ybURhdGE/LmRhdGEubGFiZWxQcm9wXG4gICAgKSB7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gcmVzcG9uc2VbbWF0Y2hWYWx1ZUtleV07XG4gICAgICBsZXQgbWF0Y2hUZXh0ID0gcmVzcG9uc2VbbWF0Y2hGaWVsZEtleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlUHJvcCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG1hdGNoVGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWVQcm9wID0gdmFsdWVQcm9wLnRyaW0oKTtcbiAgICAgICAgbWF0Y2hUZXh0ID0gbWF0Y2hUZXh0LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0geyB0ZXh0OiBtYXRjaFRleHQsIHZhbHVlOiB2YWx1ZVByb3AgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KHJlc3BvbnNlLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgbGV0IHZhbHVlID0gcmVzcG9uc2VbRmllbGRLZXldO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudFVybCgpOnN0cmluZ3tcbiAgbGV0IGN1cnJlbnRSb3V0ZTogc3RyaW5nID0gJyc7XG4gIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgaWYodXJsKXtcbiAgICBsZXQgYXJyID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgY3VycmVudFJvdXRlID0gYXJyW2Fyci5sZW5ndGgtMV1cbiAgfSAgICBcbiAgcmV0dXJuIGN1cnJlbnRSb3V0ZTtcbn1cblxuZXhwb3J0ICBmdW5jdGlvbiBnZXRHcmlkRmlsdGVycygpe1xuICBsZXQgZmlsdGVyczogYW55ID0gW107XG4gIGxldCBncmlkRmlsdGVycyA9IGN1cnJlbnRVcmwoKTtcbiAgICBpZihncmlkRmlsdGVycyAmJiBncmlkRmlsdGVycy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IGxvY2FsRmlsdGVyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nK2dyaWRGaWx0ZXJzKSBhcyBhbnkpO1xuICAgICAgZmlsdGVycyA9IGxvY2FsRmlsdGVyPy5maWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbn1cblxuLy91cGRhdGUgdGhlIGhpZGRlbiBvciBkaXNhYmxlZCBhbmQgdmFsdWUgYmFzZWQgb2ZmIG90aGVyIGdsb2JhbCBmaWx0ZXJzLlxuZXhwb3J0IGZ1bmN0aW9uIHNldEdsb2JhbEZpbHRlclByb3BWYWx1ZXMoXG4gIGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuICBwcm9wczogSUZpbHRlckRpY3Rpb25hcnlbXSxcbikge1xuICByZXR1cm4gZ2xvYmFsRmlsdGVyLm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAoZmlsdGVyLmZpZWxkICYmIGZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIChmaWx0ZXIuZGlzcGxheVRleHQgJiZcbiAgICAgICAgZmlsdGVyLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcHJvcHM/Lm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShwcm9wLnByb3BOYW1lKSkge1xuICAgICAgICAgIHJldHVybiAoZmlsdGVyW3Byb3AucHJvcE5hbWVdID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3AucHJvcFZhbHVlICYmIHByb3AucHJvcFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhcmRGaWVsZHNEYXRhKGZvcm06IGFueSkge1xuICBpZiAoZm9ybSAmJiBmb3JtLmR5bmFtaWNmb3JtKSB7XG4gICAgY29uc3QgeyBkeW5hbWljZm9ybSwgLi4ubmV3RGF0YSB9ID0gZm9ybTtcbiAgICBkeW5hbWljZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHMoeyByZWNvcmRzOiBbbmV3RGF0YV0gfSwgZHluYW1pY2Zvcm0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBkaXNhYmxlIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZGlzYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGRpc2FibGVPYmo7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnM7XG59XG5cbi8vIGVuYWJsZWQgR3JpZCBFZGl0YWJsZVJvdyBDb2x1bW5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVkRWRpdFJvd0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nKTogSUdyaWRDb2x1bW5bXSB7XG4gIGlmIChmaWVsZCAmJiBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZW5hYmxlT2JqID0geyAuLi5vYmosIGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGNvbHVtbnNbaW5kZXhdID0gZW5hYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4gLy8gY2hlY2sgdGhlIE1pbnV0ZXMgSW50ZXJ2YWxcbiBleHBvcnQgZnVuY3Rpb24gc2V0TWludXRlc0ludGVydmFsKHZhbHVlOiBhbnkpe1xuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBtaW4gPSB2YWx1ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKTtcbiAgICBpZiAobWluKSB7XG4gICAgIHZhbHVlID0gdmFsdWUuc2V0TWludXRlcygwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4gLy8gdXBkYXRlIHRoZSByZXNwb25zZSByZWNvcmRzXG4gZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZWRSZWNvcmQocmVjb3JkczogYW55W10sIHJvd0RhdGE6IGFueSwgZGF0YUtleTogc3RyaW5nKTogYW55W117XG4gIGNvbnN0IGluZGV4ID0gcmVjb3Jkcz8uZmluZEluZGV4KChyZWNvcmQpPT4gcmVjb3JkW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldID09IHJvd0RhdGFbZGF0YUtleT8udG9Mb3dlckNhc2UoKV0pO1xuICBpZihpbmRleCA+IC0xKXtcbiAgICByZWNvcmRzW2luZGV4XSA9IHJvd0RhdGE7XG4gIH1lbHNle1xuICAgIHJlY29yZHMucHVzaChyb3dEYXRhKTtcbiAgfVxuICByZXR1cm4gcmVjb3Jkcztcbn1cblxuLy9jb252ZXJ0IHRoZSB0aW1lIGludG8gZGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVJbkRhdGUodGltZTogYW55KSB7XG4gIGNvbnN0IGNvbnZlcnRUaW1lMTJ0bzI0ID0gKHRpbWUxMmg6IGFueSkgPT4ge1xuICAgIGNvbnN0IFt0aW1lLCBtb2RpZmllcl0gPSB0aW1lMTJoPy50b1N0cmluZygpPy5zcGxpdCgnICcpO1xuICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZT8uc3BsaXQoJzonKTtcbiAgICBpZiAoaG91cnMgPT09ICcxMicpIHtcbiAgICAgIGhvdXJzID0gJzAwJztcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVyID09PSAnUE0nKSB7XG4gICAgICBob3VycyA9IHBhcnNlSW50KGhvdXJzLCAxMCkgKyAxMjtcbiAgICB9XG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcbiAgfTtcbiAgY29uc3QgZGF0ZSA9IGNvbnZlcnRUaW1lMTJ0bzI0KHRpbWUpO1xuICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKCdKdWx5IDEsIDE5OTksICcgKyBkYXRlICsgJzowMCcpO1xuICBjb25zdCBmdXR1cmVEYXRlID0gbmV3IERhdGUoKTtcbiAgZnV0dXJlRGF0ZS5zZXRUaW1lKHRlbXBEYXRlLmdldFRpbWUoKSk7XG4gIHJldHVybiBmdXR1cmVEYXRlO1xufVxuXG4vLyByZXR1cm4gdGhlIGRhdGEgb2YgdGhlIGZpZWxkIFxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkRGF0YSh7IGZvcm1TZWN0aW9ucyB9OiBhbnksIGZpZWxkOiBzdHJpbmcpe1xuICBsZXQgZGF0YTogYW55ID0gW11cbiAgaWYoZm9ybVNlY3Rpb25zPy5sZW5ndGggPiAwICYmIGZpZWxkKXtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbjogYW55KT0+e1xuICAgICAgaWYoc2VjdGlvbi5maWVsZHMuc29tZSgoZm9ybUZpZWxkOmFueSk9PiBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKSkpe1xuICAgICAgICBkYXRhPXNlY3Rpb24uZmllbGRzLmZpbmQoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpPy5kYXRhXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFsbEZvcm1GaWVsZHNWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24pIHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb3BzLm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZvcm1GaWVsZFtwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVyIGZpbGVOYW1lXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJGaWxlTmFtZShyZXNwb25zZSl7XG4gIGNvbnN0IGhlYWRlciA9IHJlc3BvbnNlPy5oZWFkZXJzPy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcbiAgcmV0dXJuIGhlYWRlcj8uc3BsaXQoJ2ZpbGVuYW1lPScpPy5bMV0/LnNwbGl0KFwiO1wiKVswXT8ucmVwbGFjZUFsbCgvXFxcIi9nLCAnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gZHJhZ2dhYmxlRGlhbG9nKGlkOmFueSl7XG4gICAgY29uc3QgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKVxuICAgIGRpYWxvZ1swXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2JyArIGlkKVxuICAgIGNvbnN0IGRpYWxvZ2hlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nLWhlYWRlcicpXG4gICAgZGlhbG9naGVhZGVyWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXZoZWFkZXInICsgaWQpXG4gICAgY29uc3QgZWxtbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXYnICsgaWQpO1xuXG4gICAgICBsZXQgcG9zMSA9IDAsXG4gICAgICAgIHBvczIgPSAwLFxuICAgICAgICBwb3MzID0gMCxcbiAgICAgICAgcG9zNCA9IDA7XG4gIFxuICAgICAgY29uc3QgZHJhZ01vdXNlRG93biA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBlbGVtZW50RHJhZztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgZWxlbWVudERyYWcgPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczEgPSBwb3MzIC0gZS5jbGllbnRYO1xuICAgICAgICBwb3MyID0gcG9zNCAtIGUuY2xpZW50WTtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gZWxtbnQ/Lm9mZnNldFRvcCAtIHBvczIgKyAncHgnO1xuICAgICAgICBlbG1udC5zdHlsZS5sZWZ0ID0gZWxtbnQ/Lm9mZnNldExlZnQgLSBwb3MxICsgJ3B4JztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgY2xvc2VEcmFnRWxlbWVudCA9ICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgfTtcbiAgXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKSkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSBpZihlbG1udCkge1xuICAgICAgICBlbG1udC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG4vKiAjZW5kcmVnaW9uICovXG4iXX0=
|
|
1122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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O0FBQ0wsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVMsRUFBQyxLQUFVLEVBQUUsS0FBSztJQUM3RCxJQUFJLFVBQVUsR0FBVyxPQUFPLENBQUM7SUFDakMsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxJQUFJLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUM7UUFDOUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztLQUN4QjtTQUNJLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQztRQUNuRCxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUNELGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSwgSUZpbHRlckRpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEVGb3JtYXRUeXBlLFxuICBFRm9ybUNvbnRyb2wsXG4gIEVIeXBlcmxpbmssXG4gIEVNYXRjaE1vZGUsXG4gIEVPcGVyYXRvcixcbiAgSUR5bmFtaWNDYXJkLFxuICBJRHluYW1pY0Zvcm0sXG4gIElGb3JtYXQsXG4gIElGb3JtRmllbGQsXG4gIElGb3JtU2VjdGlvbixcbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgYWRkR2xvYmFsRmlsdGVyLCBFR3JpZENvbHVtblR5cGUsIElHbG9iYWxGaWx0ZXIsIElHcmlkQ29sdW1uLCBJR3JpZEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyogI3JlZ2lvbiBwdWJsaWMgbWV0aG9kcyAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmFsdWUgOiBhbnlcbiAqIEZ1bmN0aW9uIHJlY2VpdmVzIHRoZSB2YWx1ZSBhbmQgZXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0ZWQuXG4gKiBEbyBub3QgdXNlIGZhdCBhcnJvdyBmdW5jdGlvbiBhcyB0aGV5IGRvIG5vdCBwcmVzZXJ2ZSB0aGUgY29udGV4dC5cbiAqIHRoaXMudmFsdWUgcmVmZXJzIHRvIHRoZSB2YWx1ZSBvZiBJRm9ybUZpZWxkIE9iamVjdFxuICogTW9kaWZ5IHRoaXMudmFsdWUgZGlyZWN0bHkgdG8gcmVjZWl2ZSBlZmZlY3RcbiAqL1xuIHZhciBzcGxpdFNjcmVlbiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgZm9ybXN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjb2x1bW5zU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNhcmRTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgcm91dGVDaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGZpbHRlckJ0bkNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbnNTdGF0ZShwYWdlU2V0dGluZzogYW55KSB7XG4gIGNvbHVtbnNTdGF0ZS5uZXh0KHBhZ2VTZXR0aW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uQ29sdW1uc1N0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY29sdW1uc1N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uU2NyZWVuU3BsaXRDaGFuZ2UgKCl7XG4gIHJldHVybiBzcGxpdFNjcmVlbi5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VTcGxpdFNjcmVlbihtZW51SXRlbSl7XG4gIHNwbGl0U2NyZWVuLm5leHQoe29yaWdDb21wb25lbnQ6IG1lbnVJdGVtLm9yaWdDb21wb25lbnQsIHBhbmVsQ29tcG9uZW50OiBtZW51SXRlbT8uY29tcG9uZW50LCBjb25maWdEYXRhOm1lbnVJdGVtPy5kYXRhPy5kYXRhfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKGlkOiBhbnksIGRhdGE6IGFueSwgbG9hZENvbXBvbmVudD86IGFueSkge1xuICBmb3Jtc3RhdGUubmV4dCh7IGlkLCBkYXRhLCBsb2FkQ29tcG9uZW50IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gZm9ybXN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuKHN0YXRlVmFsdWUpIHtcbiAgZmlsdGVyQnRuQ2hhbmdlLm5leHQoc3RhdGVWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gZmlsdGVyQnRuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Sb3V0ZUNoYW5nZUV2ZW50KCkge1xuICByZXR1cm4gcm91dGVDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUNoYW5nZUV2ZW50KCkge1xuICByb3V0ZUNoYW5nZS5uZXh0KCk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gb25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY2FyZFN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuIH1cblxuIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljQ2FyZFN0YXRlKGRhdGE6IGFueSkge1xuICBjYXJkU3RhdGUubmV4dCh7IGRhdGEgfSk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gY2xvc2VJRnJhbWUoKXtcbiAgbGV0IGNsb3NlID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucC1kaWFsb2ctaGVhZGVyLWljb24nKWFzIEhUTUxFbGVtZW50XG4gIGlmKGNsb3NlKSB7XG4gICAgY2xvc2UuY2xpY2soKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EZWNpbWFsKHZhbHVlOiBhbnkpOiBhbnkge1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b1N0cmluZygpKS50b0ZpeGVkKDIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Jvb2xlYW4odmFsdWU6IGFueSkge1xuICByZXR1cm4gdmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd5JyA/IHRydWUgOiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlKHZhbHVlOiBhbnksIGZvcm1hdD86IElGb3JtYXQpIHtcbiAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJykge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5JywgJ2VuLVVTJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Nob3J0RGF0ZVRpbWUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlPy50b1N0cmluZygpICE9IFwiSW52YWxpZCBEYXRlXCIpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtYXQgJiZcbiAgICAgIChmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTE9OR0RBVEUgfHxcbiAgICAgICAgZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLk1FRElVTURBVEUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlLCAnTU0vZGQveXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWFsb2dEYXRhKGNvbHVtbnM6SUdyaWRDb2x1bW5bXSwgZmllbGROYW1lOnN0cmluZywgdmFsdWU6YW55KXtcbiAgY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKT0+e1xuICAgICAgaWYoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgJiYgY29sdW1uLmNvbXBvbmVudCl7XG4gICAgICAgIGxldCBrZXlzPU9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgY29sdW1uLmRhdGEuZGF0YT17Li4uY29sdW1uLmRhdGE/LmRhdGEsIFtrZXldOnZhbHVlW2tleV19O1xuICAgICAgICB9KVxuICAgICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9UcmltKHRleHQ6IGFueSkge1xuICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRleHQudHJpbSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXRjaEtleShvYmo6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghb2JqIHx8ICFwcm9wTmFtZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCBtYXRjaGVkS2V5ID0gJyc7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBvYmouZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBpZiAoIW1hdGNoZWRLZXkgfHwgbWF0Y2hlZEtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qga2V5czogYW55W10gPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIG1hdGNoZWRLZXkgPSBrZXlzLmZpbmQoKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZEtleTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgdmFsdWU6IGFueSk6IGFueSB7XG4gIGxldCBmb3JtYXR0ZWRWYWx1ZTogYW55ID0gdmFsdWU7XG4gIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgc3dpdGNoIChmb3JtRmllbGQuZm9ybWF0LnR5cGUpIHtcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b0RlY2ltYWwodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTjpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuU0hPUlREQVRFOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvU2hvcnREYXRlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkNVU1RPTTpcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdHRlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkIChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRPYmo6IElGb3JtRmllbGRcbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IElGb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGRPYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgKGZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwgPT09IGZvcm1GaWVsZE9iai5sYWJlbClcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQgPSBmb3JtRmllbGRPYmo7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybUZpZWxkO1xuICAgIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtDb21wb25lbnREYXRhIChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBsYWJlbDogc3RyaW5nLFxuICBkYXRhOiBhbnlcbil7XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmxhYmVsICYmICh0eXBlb2YgKGZpZWxkLmxhYmVsKSA9PSBcIm9iamVjdFwiID8gZmllbGQubGFiZWw/Lm5hbWUgPT0gbGFiZWwgOiBmaWVsZC5sYWJlbCA9PT0gbGFiZWwpKVxuICAgIGlmIChmaWVsZCAmJiB0eXBlb2YgKGZpZWxkLmxhYmVsKSA9PSBcIm9iamVjdFwiICYmIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rKSB7XG4gICAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfSBlbHNlIGlmIChmaWVsZCAmJiBmaWVsZC5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBkYXRhO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdXRvQ29tcGxldGVEYXRhKFxuICB2YWx1ZXM6IGFueVtdLFxuICB1bmlxdWVJZDogYW55LFxuICBsYWJlbEtleTogc3RyaW5nLFxuICBWYWx1ZUtleTogc3RyaW5nLFxuKXtcbiAgaWYodmFsdWVzPy5sZW5ndGggPiAwKXtcbiAgICB2YWx1ZXMgPSB2YWx1ZXM/Lm1hcCgocm93VmFsdWUpID0+ICh7W2xhYmVsS2V5XTogcm93VmFsdWUsIFtWYWx1ZUtleV06IHVuaXF1ZUlkfSkpO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb29rdXBEYXRhKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uOiBJRm9ybVNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wgJiYgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNpZGViYXJMaW5rUGFyYW1WYWx1ZXMobGluazogc3RyaW5nLCBwYXJhbXM6IGFueVtdKTogc3RyaW5nIHtcbiAgbGV0IG5ld0xpbms6IHN0cmluZyA9IGxpbms7XG4gIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICBwYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gcGFyYW0ubmFtZSA/ICd7eycgKyBwYXJhbS5uYW1lICsgJ319JyA6ICcnO1xuICAgICAgaWYgKG5ld0xpbmsubG9jYWxlQ29tcGFyZSh1cmwpKSB7XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cCh1cmwsICdpZycpLCB0b1RyaW0ocGFyYW0udmFsdWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE5ld0ZpZWxkSW5Gb3JtKGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0sIHNlY3Rpb25OYW1lOnN0cmluZywgZm9ybUZpZWxkOklGb3JtRmllbGQpe1xuICBjb25zdCBzZWN0aW9uID0gZHluYW1pY0Zvcm0/LmZvcm1TZWN0aW9ucz8uZmluZCgoc2VjdGlvbik9PiBzZWN0aW9uLm5hbWUgPT09IHNlY3Rpb25OYW1lKTtcbiAgaWYoc2VjdGlvbil7XG4gICAgc2VjdGlvbi5maWVsZHMucHVzaChmb3JtRmllbGQpO1xuICB9XG4gIHJldHVybiBkeW5hbWljRm9ybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZvcm1GaWVsZHMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdXG4pIHtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChzZWN0aW9uLmZpZWxkcyA9IHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBsZXQgbWF0Y2hlZEZpZWxkID0gZm9ybUZpZWxkcy5maW5kKFxuICAgICAgICAoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hlZEZpZWxkKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IG1hdGNoZWRGaWVsZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbEZpbHRlcnMoXG4gIGdsb2JhbEZpbHRlcnM6IGFkZEdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuKSB7XG4gIGxldCBmb3JtRmllbGRPYmo6IGFueTtcbiAgZ2xvYmFsRmlsdGVycy5tYXAoKGZpbHRlcik9PntcbiAgICBpZiAoZmlsdGVyLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgZm9ybUZpZWxkT2JqID0gZmlsdGVyO1xuICAgICAgfVxuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZE9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZHMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUNvbnRyb2w6IEVGb3JtQ29udHJvbFxuKTogSUZvcm1GaWVsZFtdIHtcbiAgbGV0IGZvcm1GaWVsZHM6IElGb3JtRmllbGRbXSA9IFtdO1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQudmFsdWU/LnRleHQgJiYgdHlwZW9mKGZvcm1GaWVsZC52YWx1ZS50ZXh0KSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHtcbiAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnZhbHVlLnRleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGQoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZ1xuKTogSUZvcm1GaWVsZCB7XG4gIGxldCBmb3JtRmllbGRPYmo6IGFueTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBmb3JtRmllbGRPYmogPSBmb3JtRmllbGQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG4vLyB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgZmllbGQuIElmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlIGlzIHRydWUgYW5kIGRpc3BsYXlGaWVsZFxuLy8gZXhpc3QgaW4gdGhlIGZpZWxkIHRoZW4gYWx3YXlzIHJldHVybiBhIGRpc3BsYXlGaWVsZCB2YWx1ZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTpib29sZWFuID0gZmFsc2Vcbikge1xuICBsZXQgdmFsdWU7XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtU2VjdGlvbnMgYXMgYW55KSB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0IDogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWRcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0XG4gICAgICAgICAgICA6IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnZhbHVlXG4gICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlQXNTdHJpbmcoZHluYW1pY0Zvcm06SUR5bmFtaWNGb3JtLGZpZWxkOnN0cmluZyk6c3RyaW5ne1xuICBsZXQgdmFsdWU6YW55ID0gZ2V0Rm9ybUZpZWxkVmFsdWUoZHluYW1pY0Zvcm0sZmllbGQsIHRydWUpO1xuICBpZiAodmFsdWUpe1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgIH1cbiAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25GaWVsZFZhbHVlKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICBmaWVsZDogc3RyaW5nXG4pIHtcbiAgbGV0IGZvcm06IElEeW5hbWljRm9ybSA9IHsgZm9ybVNlY3Rpb25zIH07XG4gIHJldHVybiBnZXRGb3JtRmllbGRWYWx1ZShmb3JtLCBmaWVsZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlRm9ybVZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW10sXG4pIHtcbiAgbGV0IHNlY3Rpb25GaWVsZHM6IGFueTtcbiAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcbiAgaWYgKHRhYmxlcyAmJiB0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcbiAgICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgICB9XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IGZpZWxkLnRhYmxlcz8ubWFwKCh0YWJsZSkgPT4gdGFibGUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICBpZiAodGFibGUgJiYgdGFibGUuaW5jbHVkZXModGFibGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlW3RhYmxlTmFtZV0pIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICB9XG4gICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3BvbnNlW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2F2ZUNhcmRWYWx1ZXMoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIHRhYmxlcz86IHN0cmluZ1tdXG4pIHtcbiAgbGV0IHZhbHVlczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQgJiYgZmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgIGZpZWxkLmNhcmQuZGF0YS5mb3JFYWNoKChjYXJkRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgIHNldFNhdmVGb3JtVmFsdWVzKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucywgdGFibGVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSkge1xuICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGRhdGEuZm9yRWFjaCgoZGF0YVJvdykgPT4ge1xuICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGFSb3csIGR5bmFtaWNGb3JtLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZHluYW1pY0Zvcm0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXIoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIG1hdGNoTW9kZTogRU1hdGNoTW9kZSA9IEVNYXRjaE1vZGUuRVFVQUxTLFxuICBvcGVyYXRvcjogRU9wZXJhdG9yID0gRU9wZXJhdG9yLkFORCxcbikge1xuICBjb25zdCBmaWx0ZXI6IGFueSA9IHtcbiAgICBmaWVsZDogZmllbGQsXG4gICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZT8udmFsdWUgfHwgdmFsdWU/LnRleHQpID8gdmFsdWU/LnZhbHVlIDogKHZhbHVlIHx8IHZhbHVlID09ICcnKSA/IHZhbHVlIDogbnVsbCxcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuZEZpbHRlcihmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIHJldHVybiBzZXRGaWx0ZXIoZmllbGQsIHZhbHVlLCBFTWF0Y2hNb2RlLkVRVUFMUywgRU9wZXJhdG9yLkFORClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBhbnkge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhW2ldLCBwcm9wTmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWVBc1N0cmluZyhcbiAgZGF0YTogYW55LFxuICBwcm9wTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBsZXQgdmFsdWUgPSBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3Rpb25Qcm9wVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBJRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbi5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHNldFByb3BWYWx1ZShzZWN0aW9uLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHMgKi9cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSB8IElEeW5hbWljQ2FyZCwgYWxsRGF0YTogYW55W10gPSBbXSkge1xuICBpZiAoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhLCBmb3JtU2VjdGlvbj8uZmllbGRzLCBrZXlzLCByZWNvcmQsIGFsbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5oZWFkZXJGaWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YTogYW55LCBmb3JtRmllbGRzOiBhbnksIGtleXM6IGFueSwgcmVjb3JkOiBhbnksIGFsbERhdGE6IGFueSl7XG4gIGZvcm1GaWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAvLyBzZXQgbGFiZWwgaHlwZXJsaW5rXG4gICAgICBzZXRMYWJlbEh5cGVybGluayhmb3JtRmllbGQsIHJlY29yZCwga2V5cywgYWxsRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgJiZcbiAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsgJiZcbiAgICAgICgoZm9ybUZpZWxkLmh5cGVybGluay5saW5rSWQgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluaylcbiAgICApIHtcbiAgICAgIGxldCBwYXJhbXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXBhcmFtcyAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmh5cGVybGluay5saW5rLnNwbGl0KCd9fScpO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMubWFwKChwYXJhbUtleSkgPT4ge1xuICAgICAgICAgIHBhcmFtS2V5ID0gcGFyYW1LZXkucmVwbGFjZSgne3snLCAnJykudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBwYXJhbUtleTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5maWx0ZXIoKHgpID0+IHgubGVuZ3RoID4gMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihwYXJhbXMpe1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGZvcm1GaWVsZC5vcmlnbmFsTGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rSWQgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKSB8fFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnBhcmFtcztcbiAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAoIXBhcmFtcyAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5pbmNsdWRlcygnfX0nKVxuICAgICAgKSB7XG4gICAgICAgIHBhcmFtS2V5cyA9IGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/Lmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQgJiYgZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudGltZU9ubHkgPyByZWNvcmRbbWF0Y2hlZEtleV0gOiByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICA/IG5ldyBEYXRlKHJlY29yZFttYXRjaGVkS2V5XSBhcyBzdHJpbmcpXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQpIHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkLmNhcmQgJiYgZm9ybUZpZWxkLmNhcmQuZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmNhcmQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBmb3JtRmllbGQuY2FyZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICBtYXRjaGVkS2V5XG4gICAgICApIHtcbiAgICAgICAgbGV0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHJlY29yZFttYXRjaGVkS2V5XSAmJiBmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBhcnJheVZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb2JqID0gYXV0b1NldExvb2t1cERhdGEoXG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYocmVjb3JkW21hdGNoZWRLZXldKXtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYXRjaERpc3BsYXlGaWVsZCA9IGdldE1hdGNoS2V5KFxuICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IHRvVHJpbShyZWNvcmRbbWF0Y2hEaXNwbGF5RmllbGRdKSxcbiAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICBpZiAobWF0Y2hWYWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgdmFsdWU6IHRvVHJpbShyZWNvcmRbbWF0Y2hWYWx1ZUZpZWxkXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSxcbiAgICAgICAgICByZWNvcmRcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuZGF0YSA9IHNldERhdGFGcm9tUmVjb3JkPy5kYXRhO1xuICAgICAgICBpZihzZXREYXRhRnJvbVJlY29yZD8ubWF0Y2hEYXRhKXtcbiAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2wuaWQsXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgbGV0IHNldERhdGEgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2w7XG4gICAgICAgIHNldERhdGEuZGF0YS5kYXRhID0gZmluZEtleXNBbmRWYWx1ZShzZXREYXRhLmRhdGEuZGF0YSwgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyBcbiAgICAgICAgJiYgIGZvcm1GaWVsZC5oeXBlcmxpbms/LnRhcmdldCA9PT0gRUh5cGVybGluay5ESUFMT0cgXG4gICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBmaW5kS2V5c0FuZFZhbHVlKGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLCByZWNvcmQpPy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0KSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoXG4gICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPVxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldICYmXG4gICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJ3RydWUnKVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgfWVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRFJPUERPV04pIHtcbiAgICAgICAgICBsZXQgZHJvcFZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGRyb3BWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZT10b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKSB8fCBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSk9PntcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBkYXRhLnJlY29yZHMuZmluZCgoeCk9PiB4W3Byb3BOYW1lXSk7XG4gICAgICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpPT57XG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKTtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5ID0ga2V5cy5maW5kKCh4KT0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaEtleSl7XG4gICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGFsbFJlY29yZFttYXRjaEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ2V0IHBhcmFtIHZhbHVlIGZyb20gYXBpIHJlc3BvbnNlLCBpZiBwYXJhbSBrZXkgZXhpc3RzIGluIGl0XG4gICAgICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgICBwYXJhbVZhbHVlID0gcmVjb3JkW21hdGNoZWRLZXldO1xuICAgICAgICAgIGlmIChwYXJhbVZhbHVlKSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKFxuICAgICAgICAgICAgICBuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSxcbiAgICAgICAgICAgICAgdG9UcmltKHBhcmFtVmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0oJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXBsYWNlIHRoZSB7e3BhcmFtfX0gd2l0aCBlbXB0eVxuICBpZihuZXdMaW5rICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ7e1wiKSAmJiBuZXdMaW5rLmluY2x1ZGVzKFwifX1cIikpe1xuICAgIG5ld0xpbmsgPSBuZXdMaW5rPy5yZXBsYWNlKC97Ky4qP30rL2csIFwiXCIpO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG4vLyBpdHMgY2hlY2tpbmcgaWYgdGhlcmUgaXMgbm8gdmFsdWUgaW4gaHlwZXJsaW5rIHBhcmFtIHRoZW4gaXQgc2V0IGtleSBhcyBhIHBhcmFtVmFsdWVcbmZ1bmN0aW9uIHNldFBhcmFtS2V5VmFsdWUocmVjb3JkOiBhbnksIGFsbERhdGE6IGFueVtdID0gW10sIHBhcmFta2V5OiBhbnkpe1xuICBsZXQgcGFyYW1WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpZihhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMCl7XG4gICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpPT57XG4gICAgICBpZihkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApe1xuICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpID0+e1xuICAgICAgICAgICBpZihwYXJhbVZhbHVlID09PSBmYWxzZSl7XG4gICAgICAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMoYWxsUmVjb3JkKS5zb21lKChyZWNvcmQpPT4gcmVjb3JkLnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1lbHNle1xuICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhyZWNvcmQpLnNvbWUoKHgpPT4geCA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nKSB7XG4gIGxldCBwcm9wVmFsdWU6IGFueTtcbiAgZGF0YS5yZWNvcmRzPy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgIGlmIChrZXkgJiYgcHJvcE5hbWUgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcHJvcFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHByb3BWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkOiBhbnkpIHtcbiAgaWYgKFxuICAgIGZpZWxkLmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTiB8fFxuICAgIGZpZWxkLmZvcm1hdD8uZm9ybWF0dGVyPy5uYW1lID09PSAndG9Cb29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKGZpZWxkLnZhbHVlID09PSAxIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAndHJ1ZScgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJykgPyAnWScgOiAnTic7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgKGZpZWxkLnZhbHVlIHx8IGZpZWxkLnZhbHVlID09PSAnJylcbiAgKSB7XG4gICAgaWYoZmllbGQudGltZU9ubHkgfHwgZmllbGQuc2hvd3RpbWUpe1xuICAgICAgLy8gY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0gKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkkLzsgLy8gUmVnZXggZm9yIGRhdGV0aW1lIGZvcm1hdFxuICAgICAgLy8gY29uc3QgbWF0Y2ggPSBmaWVsZC52YWx1ZS5tYXRjaChkYXRlVGltZVJlZ2V4KTtcbiAgICAgIC8vIGlmIChtYXRjaCkge1xuICAgICAgLy8gICBmaWVsZC52YWx1ZSA9IGZvcm1hdERhdGUoZmllbGQudmFsdWUsICdoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgICAvLyB9ZWxzZSB7XG4gICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU7XG4gICAgICAvLyB9XG4gICAgfWVsc2V7XG4gICAgICBmaWVsZC52YWx1ZSA9XG4gICAgICBmaWVsZC5zaG93VGltZSA9PT0gdHJ1ZVxuICAgICAgICA/IHRvU2hvcnREYXRlVGltZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgICAgICA6IHRvU2hvcnREYXRlKGZpZWxkLnZhbHVlLCBmaWVsZC5mb3JtYXQpXG4gICAgfVxuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgZmllbGQudmFsdWUgJiZcbiAgICB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICkge1xuICAgIHJldHVybiBmaWVsZC52YWx1ZS52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQubGFiZWwgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWU7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2V0TG9va3VwRGF0YShcbiAgZmllbGREYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbiAgKSB7XG4gIGxldCBvYmogPSB7fTtcbiAgbGV0IHJlY29yZCA9IHNldERhdGFGaWVsZHMoW3Jlc3BvbnNlXSk7XG4gIGlmIChyZWNvcmQgJiYgcmVjb3JkLmxlbmd0aCA+IDApIHtcbiAgICByZWNvcmQuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICByZWNvcmQgPSB4O1xuICAgIH0pO1xuICB9XG4gIGlmIChmaWVsZERhdGEgJiYgcmVjb3JkKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGREYXRhKS5mb3JFYWNoKChbZGF0YUtleSwgZGF0YVZhbHVlXTogYW55KSA9PiB7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YUtleT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICBsZXQgdmFsdWUgPSByb3dLZXlzPy5maW5kKFxuICAgICAgICAoeCkgPT4gZGF0YVZhbHVlICYmIGRhdGFWYWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygneycpICYmIHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFWYWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8ucmVwbGFjZShcIntcIiwgXCJcIik/LnJlcGxhY2UoXCJ9XCIsIFwiXCIpXG4gICAgICApPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlID8gcmVjb3JkW3ZhbHVlKydfb2JqJ10/Lm9wdGlvblZhbHVlIDogcmVjb3JkW3ZhbHVlXSB9O1xuICAgICAgfSBlbHNlIGlmIChrZXkgJiYga2V5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogcmVjb3JkW2tleS50b0xvd2VyQ2FzZSgpXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0geyAuLi5vYmosIFtkYXRhS2V5XTogZGF0YVZhbHVlIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0R3JpZExvb2t1cERhdGEoY29sdW1uOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nLCBkYXRhOiBhbnkpe1xuICBsZXQgb2JqID0gY29sdW1uLmZpbmQoKHgpPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gIGlmKG9iaiAmJiBvYmoubG9va3VwQ29udHJvbD8uZGF0YSl7XG4gICAgb2JqLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55W10pIHtcbiAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBPYmplY3Qua2V5cyh4KS5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoeyAuLi5wcmV2LCBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG5cbiAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nUmVzcG9uc2UoXG4gIGZvcm1GaWVsZDogYW55LFxuICBmb3JtRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4pIHtcbiAgbGV0IHZhbHVlOiBhbnk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIC8vIGlmIHNlbGVjdGVkVmFsdWUgZG9lcyBub3QgZXhpc3QgdGhlbiBjb25zaWRlciB2YWx1ZUZpZWxkIGFzIHNlbGVjdGVkVmFsdWVcbiAgICBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgPSBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgICBmb3JtRGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YSAmJlxuICAgICAgZm9ybURhdGEuZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgICFmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgZm9ybURhdGEuZGF0YS5sYWJlbFByb3AgPSBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcDtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaFZhbHVlS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZm9ybURhdGE/LmRhdGE/LnZhbHVlUHJvcFxuICAgICk7XG4gICAgY29uc3QgbWF0Y2hGaWVsZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy5sYWJlbFByb3BcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGE/LmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLnZhbHVlUHJvcCAmJlxuICAgICAgZm9ybURhdGE/LmRhdGEubGFiZWxQcm9wXG4gICAgKSB7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gcmVzcG9uc2VbbWF0Y2hWYWx1ZUtleV07XG4gICAgICBsZXQgbWF0Y2hUZXh0ID0gcmVzcG9uc2VbbWF0Y2hGaWVsZEtleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlUHJvcCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG1hdGNoVGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWVQcm9wID0gdmFsdWVQcm9wLnRyaW0oKTtcbiAgICAgICAgbWF0Y2hUZXh0ID0gbWF0Y2hUZXh0LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0geyB0ZXh0OiBtYXRjaFRleHQsIHZhbHVlOiB2YWx1ZVByb3AgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KHJlc3BvbnNlLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgbGV0IHZhbHVlID0gcmVzcG9uc2VbRmllbGRLZXldO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudFVybCgpOnN0cmluZ3tcbiAgbGV0IGN1cnJlbnRSb3V0ZTogc3RyaW5nID0gJyc7XG4gIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgaWYodXJsKXtcbiAgICBsZXQgYXJyID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgY3VycmVudFJvdXRlID0gYXJyW2Fyci5sZW5ndGgtMV1cbiAgfSAgICBcbiAgcmV0dXJuIGN1cnJlbnRSb3V0ZTtcbn1cblxuZXhwb3J0ICBmdW5jdGlvbiBnZXRHcmlkRmlsdGVycygpe1xuICBsZXQgZmlsdGVyczogYW55ID0gW107XG4gIGxldCBncmlkRmlsdGVycyA9IGN1cnJlbnRVcmwoKTtcbiAgICBpZihncmlkRmlsdGVycyAmJiBncmlkRmlsdGVycy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IGxvY2FsRmlsdGVyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nK2dyaWRGaWx0ZXJzKSBhcyBhbnkpO1xuICAgICAgZmlsdGVycyA9IGxvY2FsRmlsdGVyPy5maWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbn1cblxuLy91cGRhdGUgdGhlIGhpZGRlbiBvciBkaXNhYmxlZCBhbmQgdmFsdWUgYmFzZWQgb2ZmIG90aGVyIGdsb2JhbCBmaWx0ZXJzLlxuZXhwb3J0IGZ1bmN0aW9uIHNldEdsb2JhbEZpbHRlclByb3BWYWx1ZXMoXG4gIGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuICBwcm9wczogSUZpbHRlckRpY3Rpb25hcnlbXSxcbikge1xuICByZXR1cm4gZ2xvYmFsRmlsdGVyLm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAoZmlsdGVyLmZpZWxkICYmIGZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIChmaWx0ZXIuZGlzcGxheVRleHQgJiZcbiAgICAgICAgZmlsdGVyLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgcHJvcHM/Lm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShwcm9wLnByb3BOYW1lKSkge1xuICAgICAgICAgIHJldHVybiAoZmlsdGVyW3Byb3AucHJvcE5hbWVdID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3AucHJvcFZhbHVlICYmIHByb3AucHJvcFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhcmRGaWVsZHNEYXRhKGZvcm06IGFueSkge1xuICBpZiAoZm9ybSAmJiBmb3JtLmR5bmFtaWNmb3JtKSB7XG4gICAgY29uc3QgeyBkeW5hbWljZm9ybSwgLi4ubmV3RGF0YSB9ID0gZm9ybTtcbiAgICBkeW5hbWljZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHMoeyByZWNvcmRzOiBbbmV3RGF0YV0gfSwgZHluYW1pY2Zvcm0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBkaXNhYmxlIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZGlzYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGRpc2FibGVPYmo7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnM7XG59XG5cbi8vIGVuYWJsZWQgR3JpZCBFZGl0YWJsZVJvdyBDb2x1bW5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVkRWRpdFJvd0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nKTogSUdyaWRDb2x1bW5bXSB7XG4gIGlmIChmaWVsZCAmJiBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBsZXQgZW5hYmxlT2JqID0geyAuLi5vYmosIGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5maW5kSW5kZXgoKGk6IGFueSkgPT4gaS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGNvbHVtbnNbaW5kZXhdID0gZW5hYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4gLy8gY2hlY2sgdGhlIE1pbnV0ZXMgSW50ZXJ2YWxcbiBleHBvcnQgZnVuY3Rpb24gc2V0TWludXRlc0ludGVydmFsKHZhbHVlOiBhbnkpe1xuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBtaW4gPSB2YWx1ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKTtcbiAgICBpZiAobWluKSB7XG4gICAgIHZhbHVlID0gdmFsdWUuc2V0TWludXRlcygwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4gLy8gdXBkYXRlIHRoZSByZXNwb25zZSByZWNvcmRzXG4gZXhwb3J0IGZ1bmN0aW9uIHNldFVwZGF0ZWRSZWNvcmQocmVjb3JkczogYW55W10sIHJvd0RhdGE6IGFueSwgZGF0YUtleTogc3RyaW5nKTogYW55W117XG4gIGNvbnN0IGluZGV4ID0gcmVjb3Jkcz8uZmluZEluZGV4KChyZWNvcmQpPT4gcmVjb3JkW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldID09IHJvd0RhdGFbZGF0YUtleT8udG9Mb3dlckNhc2UoKV0pO1xuICBpZihpbmRleCA+IC0xKXtcbiAgICByZWNvcmRzW2luZGV4XSA9IHJvd0RhdGE7XG4gIH1lbHNle1xuICAgIHJlY29yZHMucHVzaChyb3dEYXRhKTtcbiAgfVxuICByZXR1cm4gcmVjb3Jkcztcbn1cblxuLy9jb252ZXJ0IHRoZSB0aW1lIGludG8gZGF0ZVxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVJbkRhdGUodGltZTogYW55KSB7XG4gIGNvbnN0IGNvbnZlcnRUaW1lMTJ0bzI0ID0gKHRpbWUxMmg6IGFueSkgPT4ge1xuICAgIGNvbnN0IFt0aW1lLCBtb2RpZmllcl0gPSB0aW1lMTJoPy50b1N0cmluZygpPy5zcGxpdCgnICcpO1xuICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZT8uc3BsaXQoJzonKTtcbiAgICBpZiAoaG91cnMgPT09ICcxMicpIHtcbiAgICAgIGhvdXJzID0gJzAwJztcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVyID09PSAnUE0nKSB7XG4gICAgICBob3VycyA9IHBhcnNlSW50KGhvdXJzLCAxMCkgKyAxMjtcbiAgICB9XG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcbiAgfTtcbiAgY29uc3QgZGF0ZSA9IGNvbnZlcnRUaW1lMTJ0bzI0KHRpbWUpO1xuICBjb25zdCB0ZW1wRGF0ZSA9IG5ldyBEYXRlKCdKdWx5IDEsIDE5OTksICcgKyBkYXRlICsgJzowMCcpO1xuICBjb25zdCBmdXR1cmVEYXRlID0gbmV3IERhdGUoKTtcbiAgZnV0dXJlRGF0ZS5zZXRUaW1lKHRlbXBEYXRlLmdldFRpbWUoKSk7XG4gIHJldHVybiBmdXR1cmVEYXRlO1xufVxuXG4vLyByZXR1cm4gdGhlIGRhdGEgb2YgdGhlIGZpZWxkIFxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkRGF0YSh7IGZvcm1TZWN0aW9ucyB9OiBhbnksIGZpZWxkOiBzdHJpbmcpe1xuICBsZXQgZGF0YTogYW55ID0gW11cbiAgaWYoZm9ybVNlY3Rpb25zPy5sZW5ndGggPiAwICYmIGZpZWxkKXtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbjogYW55KT0+e1xuICAgICAgaWYoc2VjdGlvbi5maWVsZHMuc29tZSgoZm9ybUZpZWxkOmFueSk9PiBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKSkpe1xuICAgICAgICBkYXRhPXNlY3Rpb24uZmllbGRzLmZpbmQoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpPy5kYXRhXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFsbEZvcm1GaWVsZHNWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24pIHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb3BzLm1hcCgocHJvcDogSUZpbHRlckRpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gKGZvcm1GaWVsZFtwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVyIGZpbGVOYW1lXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJGaWxlTmFtZShyZXNwb25zZSl7XG4gIGNvbnN0IGhlYWRlciA9IHJlc3BvbnNlPy5oZWFkZXJzPy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcbiAgcmV0dXJuIGhlYWRlcj8uc3BsaXQoJ2ZpbGVuYW1lPScpPy5bMV0/LnNwbGl0KFwiO1wiKVswXT8ucmVwbGFjZUFsbCgvXFxcIi9nLCAnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gZHJhZ2dhYmxlRGlhbG9nKGlkOmFueSl7XG4gICAgY29uc3QgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKVxuICAgIGRpYWxvZ1swXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2JyArIGlkKVxuICAgIGNvbnN0IGRpYWxvZ2hlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nLWhlYWRlcicpXG4gICAgZGlhbG9naGVhZGVyWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXZoZWFkZXInICsgaWQpXG4gICAgY29uc3QgZWxtbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXYnICsgaWQpO1xuXG4gICAgICBsZXQgcG9zMSA9IDAsXG4gICAgICAgIHBvczIgPSAwLFxuICAgICAgICBwb3MzID0gMCxcbiAgICAgICAgcG9zNCA9IDA7XG4gIFxuICAgICAgY29uc3QgZHJhZ01vdXNlRG93biA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBlbGVtZW50RHJhZztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgZWxlbWVudERyYWcgPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczEgPSBwb3MzIC0gZS5jbGllbnRYO1xuICAgICAgICBwb3MyID0gcG9zNCAtIGUuY2xpZW50WTtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gZWxtbnQ/Lm9mZnNldFRvcCAtIHBvczIgKyAncHgnO1xuICAgICAgICBlbG1udC5zdHlsZS5sZWZ0ID0gZWxtbnQ/Lm9mZnNldExlZnQgLSBwb3MxICsgJ3B4JztcbiAgICAgIH07XG4gIFxuICAgICAgY29uc3QgY2xvc2VEcmFnRWxlbWVudCA9ICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgfTtcbiAgXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKSkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSBpZihlbG1udCkge1xuICAgICAgICBlbG1udC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG4vKiAjZW5kcmVnaW9uICovXG4iXX0=
|
|
@@ -841,9 +841,6 @@ function setEditFormFieldsValue(data, formFields, keys, record, allData) {
|
|
|
841
841
|
}
|
|
842
842
|
}
|
|
843
843
|
formField.hyperlink.link = setHyperlink(keys, record, formField.orignalLink, paramKeys, formField.hyperlink.params, allData);
|
|
844
|
-
if (formField.control === EFormControl.INPUT && formField?.label?.labelControl?.hyperlink && matchedKey) {
|
|
845
|
-
formField.value = toTrim(record[matchedKey]);
|
|
846
|
-
}
|
|
847
844
|
}
|
|
848
845
|
else if (formField.label?.labelControl?.hyperlink &&
|
|
849
846
|
((formField.label?.labelControl?.hyperlink?.linkId && formField.label?.labelControl?.hyperlink?.params) ||
|
|
@@ -867,6 +864,9 @@ function setEditFormFieldsValue(data, formFields, keys, record, allData) {
|
|
|
867
864
|
}
|
|
868
865
|
formField.label.labelControl.hyperlink.link = setHyperlink(keys, record, formField.label?.labelControl?.hyperlink?.link, paramKeys, params, allData);
|
|
869
866
|
}
|
|
867
|
+
else if (formField.control === EFormControl.INPUT && formField?.label?.labelControl?.hyperlink && matchedKey) {
|
|
868
|
+
formField.value = toTrim(record[matchedKey]);
|
|
869
|
+
}
|
|
870
870
|
else {
|
|
871
871
|
if (formField.control === EFormControl.CALENDAR && matchedKey) {
|
|
872
872
|
formField.value = formField.timeOnly ? record[matchedKey] : record[matchedKey]
|