@churchillliving/se-ui-toolkit 6.54.752 → 6.54.753
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.
|
@@ -534,9 +534,19 @@ function setEditFormFieldsValue(data, formFields, keys, record, allData) {
|
|
|
534
534
|
formField.label.labelControl.hyperlink.link = setHyperlink(keys, record, formField.label?.labelControl?.hyperlink?.link, paramKeys, params, allData);
|
|
535
535
|
}
|
|
536
536
|
if (formField.control === EFormControl.CALENDAR && matchedKey) {
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
537
|
+
const dateTimeRegex = /^\d{4}-\d{2}-\d{2}[ T](\d{2}):(\d{2}):(\d{2})(\.\d{3})?$/;
|
|
538
|
+
const fieldValue = record[matchedKey];
|
|
539
|
+
if (formField.timeOnly && typeof fieldValue === 'string') {
|
|
540
|
+
if (dateTimeRegex.test(fieldValue)) {
|
|
541
|
+
formField.value = formatDate(fieldValue, 'hh:mm a', 'en-US');
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
formField.value = fieldValue;
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
formField.value = fieldValue ? new Date(fieldValue) : '';
|
|
549
|
+
}
|
|
540
550
|
}
|
|
541
551
|
else if (formField.control === EFormControl.CARD) {
|
|
542
552
|
if (formField.card && formField.card.formSections) {
|
|
@@ -1224,4 +1234,4 @@ export function setDisplayTextFieldParams(dynamicForm, field, data) {
|
|
|
1224
1234
|
});
|
|
1225
1235
|
}
|
|
1226
1236
|
/* #endregion */
|
|
1227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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QUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxJQUFJLEdBQUcsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDeEYsSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FDdkIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUN6SixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNySCxDQUFDO2lCQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsR0FB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QyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dDQUN0RSxRQUFRLEdBQUcsSUFBSSxDQUFDO3dDQUNoQixNQUFNLENBQUMsc0JBQXNCO29DQUMvQixDQUFDO2dDQUNILENBQUM7Z0NBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29DQUNkLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQ0FDekQsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7b0JBQzlCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDO29CQUM5QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFSCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnksIElGaWx0ZXJEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbi5tb2RlbCc7XG5pbXBvcnQge1xuICBFRm9ybWF0VHlwZSxcbiAgRUZvcm1Db250cm9sLFxuICBFSHlwZXJsaW5rLFxuICBFTWF0Y2hNb2RlLFxuICBFT3BlcmF0b3IsXG4gIElEeW5hbWljQ2FyZCxcbiAgSUR5bmFtaWNGb3JtLFxuICBJRm9ybWF0LFxuICBJRm9ybUZpZWxkLFxuICBJRm9ybVNlY3Rpb24sXG59IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IGFkZEdsb2JhbEZpbHRlciwgRUdyaWRDb2x1bW5UeXBlLCBJR2xvYmFsRmlsdGVyLCBJR3JpZENvbHVtbiwgSUdyaWRGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qICNyZWdpb24gcHVibGljIG1ldGhvZHMgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHZhbHVlIDogYW55XG4gKiBGdW5jdGlvbiByZWNlaXZlcyB0aGUgdmFsdWUgYW5kIGV4cGVjdHMgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdGVkLlxuICogRG8gbm90IHVzZSBmYXQgYXJyb3cgZnVuY3Rpb24gYXMgdGhleSBkbyBub3QgcHJlc2VydmUgdGhlIGNvbnRleHQuXG4gKiB0aGlzLnZhbHVlIHJlZmVycyB0byB0aGUgdmFsdWUgb2YgSUZvcm1GaWVsZCBPYmplY3RcbiAqIE1vZGlmeSB0aGlzLnZhbHVlIGRpcmVjdGx5IHRvIHJlY2VpdmUgZWZmZWN0XG4gKi9cbiB2YXIgc3BsaXRTY3JlZW4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGZvcm1zdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgY29sdW1uc1N0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjYXJkU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIHJvdXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBmaWx0ZXJCdG5DaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VDb2x1bW5zU3RhdGUocGFnZVNldHRpbmc6IGFueSkge1xuICBjb2x1bW5zU3RhdGUubmV4dChwYWdlU2V0dGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNvbHVtbnNTdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGNvbHVtbnNTdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvblNjcmVlblNwbGl0Q2hhbmdlICgpe1xuICByZXR1cm4gc3BsaXRTY3JlZW4uYXNPYnNlcnZhYmxlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU3BsaXRTY3JlZW4obWVudUl0ZW0pe1xuICBzcGxpdFNjcmVlbi5uZXh0KHtvcmlnQ29tcG9uZW50OiBtZW51SXRlbS5vcmlnQ29tcG9uZW50LCBwYW5lbENvbXBvbmVudDogbWVudUl0ZW0/LmNvbXBvbmVudCwgY29uZmlnRGF0YTptZW51SXRlbT8uZGF0YT8uZGF0YX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShpZDogYW55LCBkYXRhOiBhbnksIGxvYWRDb21wb25lbnQ/OiBhbnkpIHtcbiAgZm9ybXN0YXRlLm5leHQoeyBpZCwgZGF0YSwgbG9hZENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZvcm1zdGF0ZS5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0bihzdGF0ZVZhbHVlKSB7XG4gIGZpbHRlckJ0bkNoYW5nZS5uZXh0KHN0YXRlVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpIHtcbiAgcmV0dXJuIGZpbHRlckJ0bkNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uUm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcmV0dXJuIHJvdXRlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91dGVDaGFuZ2VFdmVudCgpIHtcbiAgcm91dGVDaGFuZ2UubmV4dCgnJyk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gb25EeW5hbWljQ2FyZFN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY2FyZFN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xuIH1cblxuIGV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljQ2FyZFN0YXRlKGRhdGE6IGFueSkge1xuICBjb25zb2xlLmxvZygnZGF0YTogenp6eicsIGRhdGEpO1xuICBjYXJkU3RhdGUubmV4dCh7IGRhdGEgfSk7XG59XG5cbiBleHBvcnQgZnVuY3Rpb24gY2xvc2VJRnJhbWUoKXtcbiAgbGV0IGNsb3NlID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucC1kaWFsb2ctY2xvc2UtYnV0dG9uJylhcyBIVE1MRWxlbWVudFxuICAgIGlmKGNsb3NlKSB7XG4gICAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzZWN0aW9uLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQubGFiZWwgJiYgKHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgPyBmaWVsZC5sYWJlbD8ubmFtZSA9PSBsYWJlbCA6IGZpZWxkLmxhYmVsID09PSBsYWJlbCkpXG4gICAgaWYgKGZpZWxkICYmIHR5cGVvZiAoZmllbGQubGFiZWwpID09IFwib2JqZWN0XCIgJiYgZmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbmspIHtcbiAgICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkICYmIGZpZWxkLmh5cGVybGluaykge1xuICAgICAgZmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGRhdGE7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF1dG9Db21wbGV0ZURhdGEoXG4gIHZhbHVlczogYW55W10sXG4gIHVuaXF1ZUlkOiBhbnksXG4gIGxhYmVsS2V5OiBzdHJpbmcsXG4gIFZhbHVlS2V5OiBzdHJpbmcsXG4pe1xuICBpZih2YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgIHZhbHVlcyA9IHZhbHVlcz8ubWFwKChyb3dWYWx1ZSkgPT4gKHtbbGFiZWxLZXldOiByb3dWYWx1ZSwgW1ZhbHVlS2V5XTogdW5pcXVlSWR9KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvb2t1cERhdGEoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEgJiZcbiAgICAgICAgICBkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCAmJiBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybVNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2lkZWJhckxpbmtQYXJhbVZhbHVlcyhsaW5rOiBzdHJpbmcsIHBhcmFtczogYW55W10pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoID4gMCkge1xuICAgIHBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBwYXJhbS5uYW1lID8gJ3t7JyArIHBhcmFtLm5hbWUgKyAnfX0nIDogJyc7XG4gICAgICBpZiAobmV3TGluay5sb2NhbGVDb21wYXJlKHVybCkpIHtcbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHVybCwgJ2lnJyksIHRvVHJpbShwYXJhbS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdMaW5rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTmV3RmllbGRJbkZvcm0oZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSwgc2VjdGlvbk5hbWU6c3RyaW5nLCBmb3JtRmllbGQ6SUZvcm1GaWVsZCl7XG4gIGNvbnN0IHNlY3Rpb24gPSBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5maW5kKChzZWN0aW9uKT0+IHNlY3Rpb24ubmFtZSA9PT0gc2VjdGlvbk5hbWUpO1xuICBpZihzZWN0aW9uKXtcbiAgICBzZWN0aW9uLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGR5bmFtaWNGb3JtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW11cbikge1xuICByZXR1cm4gZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKHNlY3Rpb24uZmllbGRzID0gc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGxldCBtYXRjaGVkRmllbGQgPSBmb3JtRmllbGRzLmZpbmQoXG4gICAgICAgICh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVkRmllbGQpIHtcbiAgICAgICAgZm9ybUZpZWxkID0gbWF0Y2hlZEZpZWxkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsRmlsdGVycyhcbiAgZ2xvYmFsRmlsdGVyczogYWRkR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4pIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBnbG9iYWxGaWx0ZXJzLm1hcCgoZmlsdGVyKT0+e1xuICAgIGlmIChmaWx0ZXIuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBmb3JtRmllbGRPYmogPSBmaWx0ZXI7XG4gICAgICB9XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmb3JtQ29udHJvbDogRUZvcm1Db250cm9sXG4pOiBJRm9ybUZpZWxkW10ge1xuICBsZXQgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBmb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAodHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC52YWx1ZT8udGV4dCAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlLnRleHQpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudGV4dC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnc3RyaW5nJylcbiAgICAgICAge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZChcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nXG4pOiBJRm9ybUZpZWxkIHtcbiAgbGV0IGZvcm1GaWVsZE9iajogYW55O1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGZvcm1GaWVsZE9iaiA9IGZvcm1GaWVsZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbi8vIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIG9mIHRoZSBmaWVsZC4gSWYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUgaXMgdHJ1ZSBhbmQgZGlzcGxheUZpZWxkXG4vLyBleGlzdCBpbiB0aGUgZmllbGQgdGhlbiBhbHdheXMgcmV0dXJuIGEgZGlzcGxheUZpZWxkIHZhbHVlLlxuXG4vLyBleHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWUoXG4vLyAgIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbi8vICAgZmllbGQ6IHN0cmluZyxcbi8vICAgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU6Ym9vbGVhbiA9IGZhbHNlXG4vLyApIHtcbi8vICAgbGV0IHZhbHVlO1xuLy8gICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zIGFzIGFueSkge1xuLy8gICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4vLyAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuLy8gICAgICAgICBsZXQgaXNWYWxpZCA9IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU7XG4vLyAgICAgICAgIGlmIChcbi8vICAgICAgICAgICAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbi8vICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4vLyAgICAgICAgICkge1xuLy8gICAgICAgICAgIHZhbHVlID0gaXNWYWxpZCA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dCA6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkXG4vLyAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dFxuLy8gICAgICAgICAgICAgOiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1Rcbi8vICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZVxuLy8gICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWU7XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICB9KTtcbi8vICAgfVxuLy8gICByZXR1cm4gdmFsdWU7XG4vLyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBhbnkge1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zIGFzIGFueSkge1xuICAgIGlmIChzZWN0aW9uPy5maWVsZHMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0Rm9ybUZpZWxkc0luZm8oc2VjdGlvbj8uZmllbGRzLCBmaWVsZCwgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHNlY3Rpb24/LmhlYWRlckZpZWxkcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXRGb3JtRmllbGRzSW5mbyhzZWN0aW9uPy5oZWFkZXJGaWVsZHMsIGZpZWxkLCByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZSk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkc0luZm8oXG4gIHNlY3Rpb25GaWVsZHM6IGFueVtdLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBhbnkge1xuICBmb3IgKGNvbnN0IGZvcm1GaWVsZCBvZiBzZWN0aW9uRmllbGRzKSB7XG4gICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fFxuICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpICYmXG4gICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCA/IGZvcm1GaWVsZC52YWx1ZT8udGV4dCA6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNWYWxpZFxuICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0XG4gICAgICAgICAgOiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnZhbHVlXG4gICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlQXNTdHJpbmcoZHluYW1pY0Zvcm06SUR5bmFtaWNGb3JtLGZpZWxkOnN0cmluZyk6c3RyaW5ne1xuICBsZXQgdmFsdWU6YW55ID0gZ2V0Rm9ybUZpZWxkVmFsdWUoZHluYW1pY0Zvcm0sZmllbGQsIHRydWUpO1xuICBpZiAodmFsdWUpe1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgIH1cbiAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25GaWVsZFZhbHVlKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICBmaWVsZDogc3RyaW5nXG4pIHtcbiAgbGV0IGZvcm06IElEeW5hbWljRm9ybSA9IHsgZm9ybVNlY3Rpb25zIH07XG4gIHJldHVybiBnZXRGb3JtRmllbGRWYWx1ZShmb3JtLCBmaWVsZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlRm9ybVZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW10sXG4pIHtcbiAgbGV0IHNlY3Rpb25GaWVsZHM6IGFueTtcbiAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcbiAgaWYgKHRhYmxlcyAmJiB0YWJsZXMubGVuZ3RoID4gMCkge1xuICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZU5hbWUpID0+IHtcbiAgICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgICB9XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcz8uZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IGZpZWxkLnRhYmxlcz8ubWFwKCh0YWJsZSkgPT4gdGFibGUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICBpZiAodGFibGUgJiYgdGFibGUuaW5jbHVkZXModGFibGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlW3RhYmxlTmFtZV0pIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICB9XG4gICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuZmllbGQgJiYgZmllbGQuZmllbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3BvbnNlW2ZpZWxkLmZpZWxkXSA9IGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2F2ZUNhcmRWYWx1ZXMoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIHRhYmxlcz86IHN0cmluZ1tdXG4pIHtcbiAgbGV0IHZhbHVlczogSUZvcm1GaWVsZFtdID0gW107XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkQgJiYgZmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgIGZpZWxkLmNhcmQuZGF0YS5mb3JFYWNoKChjYXJkRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goXG4gICAgICAgICAgICAgIHNldFNhdmVGb3JtVmFsdWVzKGNhcmREYXRhLmR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucywgdGFibGVzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSkge1xuICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGRhdGEuZm9yRWFjaCgoZGF0YVJvdykgPT4ge1xuICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGFSb3csIGR5bmFtaWNGb3JtLCBkYXRhKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZHluYW1pY0Zvcm0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXIoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBhbnksXG4gIG1hdGNoTW9kZTogRU1hdGNoTW9kZSA9IEVNYXRjaE1vZGUuRVFVQUxTLFxuICBvcGVyYXRvcjogRU9wZXJhdG9yID0gRU9wZXJhdG9yLkFORCxcbikge1xuICBjb25zdCBmaWx0ZXI6IGFueSA9IHtcbiAgICBmaWVsZDogZmllbGQsXG4gICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHZhbHVlOiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZT8udmFsdWUgfHwgdmFsdWU/LnRleHQpID8gdmFsdWU/LnZhbHVlIDogKHZhbHVlIHx8IHZhbHVlID09ICcnKSA/IHZhbHVlIDogbnVsbCxcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuZEZpbHRlcihmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIHJldHVybiBzZXRGaWx0ZXIoZmllbGQsIHZhbHVlLCBFTWF0Y2hNb2RlLkVRVUFMUywgRU9wZXJhdG9yLkFORClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBhbnkge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhW2ldLCBwcm9wTmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWVBc1N0cmluZyhcbiAgZGF0YTogYW55LFxuICBwcm9wTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBsZXQgdmFsdWUgPSBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3Rpb25Qcm9wVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBJRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbi5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHNldFByb3BWYWx1ZShzZWN0aW9uLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHMgKi9cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSB8IElEeW5hbWljQ2FyZCwgYWxsRGF0YTogYW55W10gPSBbXSkge1xuICBpZiAoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhLCBmb3JtU2VjdGlvbj8uZmllbGRzLCBrZXlzLCByZWNvcmQsIGFsbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5oZWFkZXJGaWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5oZWFkZXJGaWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YTogYW55LCBmb3JtRmllbGRzOiBhbnksIGtleXM6IGFueSwgcmVjb3JkOiBhbnksIGFsbERhdGE6IGFueSl7XG4gIGZvcm1GaWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAvLyBzZXQgbGFiZWwgaHlwZXJsaW5rXG4gICAgICBzZXRMYWJlbEh5cGVybGluayhmb3JtRmllbGQsIHJlY29yZCwga2V5cywgYWxsRGF0YSwgbWF0Y2hlZEtleSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgJiZcbiAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsgJiZcbiAgICAgICgoZm9ybUZpZWxkLmh5cGVybGluay5saW5rSWQgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMpIHx8XG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluaylcbiAgICApIHtcbiAgICAgIGxldCBwYXJhbXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXBhcmFtcyAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rLmluY2x1ZGVzKCd9fScpXG4gICAgICApIHtcbiAgICAgICAgcGFyYW1LZXlzID0gZm9ybUZpZWxkLmh5cGVybGluay5saW5rLnNwbGl0KCd9fScpO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMubWFwKChwYXJhbUtleSkgPT4ge1xuICAgICAgICAgIHBhcmFtS2V5ID0gcGFyYW1LZXkucmVwbGFjZSgne3snLCAnJykudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBwYXJhbUtleTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5maWx0ZXIoKHgpID0+IHgubGVuZ3RoID4gMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZihwYXJhbXMpe1xuICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGZvcm1GaWVsZC5vcmlnbmFsTGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rSWQgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKSB8fFxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnBhcmFtcztcbiAgICAgIGxldCBwYXJhbUtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAoIXBhcmFtcyAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rLmxpbmsgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluay5pbmNsdWRlcygnfX0nKVxuICAgICAgKSB7XG4gICAgICAgIHBhcmFtS2V5cyA9IGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/Lmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgfSBcbiAgICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmIG1hdGNoZWRLZXkpIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnRpbWVPbmx5ID8gcmVjb3JkW21hdGNoZWRLZXldIDogcmVjb3JkW21hdGNoZWRLZXldXG4gICAgICAgICAgPyBuZXcgRGF0ZShyZWNvcmRbbWF0Y2hlZEtleV0gYXMgc3RyaW5nKVxuICAgICAgICAgIDogJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5jYXJkICYmIGZvcm1GaWVsZC5jYXJkLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFmb3JtRmllbGQuY2FyZC5kYXRhKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5jYXJkLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YSwgZm9ybUZpZWxkLmNhcmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgbWF0Y2hlZEtleVxuICAgICAgKSB7XG4gICAgICAgIGxldCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGlmIChyZWNvcmRbbWF0Y2hlZEtleV0gJiYgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGFycmF5VmFsdWUucHVzaCh7W2Zvcm1GaWVsZC5kaXNwbGF5RmllbGRdIDogcmVjb3JkW21hdGNoZWRLZXldfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gYXJyYXlWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhLFxuICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKHJlY29yZFttYXRjaGVkS2V5XSl7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hEaXNwbGF5RmllbGQgPSBnZXRNYXRjaEtleShcbiAgICAgICAgICAgIHJlY29yZCxcbiAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaERpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0ZXh0OiB0b1RyaW0ocmVjb3JkW21hdGNoRGlzcGxheUZpZWxkXSksXG4gICAgICAgICAgICAgIHZhbHVlOiBmb3JtRmllbGQudmFsdWU/LnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtYXRjaFZhbHVlRmllbGQgPSBnZXRNYXRjaEtleShyZWNvcmQsIGZvcm1GaWVsZC5maWVsZCk7XG4gICAgICAgICAgaWYgKG1hdGNoVmFsdWVGaWVsZCkge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0ZXh0OiBmb3JtRmllbGQudmFsdWU/LnRleHQsXG4gICAgICAgICAgICAgIHZhbHVlOiB0b1RyaW0ocmVjb3JkW21hdGNoVmFsdWVGaWVsZF0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ09NUE9ORU5UICYmXG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc2V0RGF0YUZyb21SZWNvcmQgPSBmaW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmRhdGEsXG4gICAgICAgICAgcmVjb3JkXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmRhdGEgPSBzZXREYXRhRnJvbVJlY29yZD8uZGF0YTtcbiAgICAgICAgaWYoc2V0RGF0YUZyb21SZWNvcmQ/Lm1hdGNoRGF0YSl7XG4gICAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sLmlkLFxuICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGEsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQyAmJlxuICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgKSB7XG4gICAgICAgIGxldCBzZXREYXRhID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sO1xuICAgICAgICBzZXREYXRhLmRhdGEuZGF0YSA9IGZpbmRLZXlzQW5kVmFsdWUoc2V0RGF0YS5kYXRhLmRhdGEsIHJlY29yZCk/LmRhdGE7XG4gICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoc2V0RGF0YS5pZCwgc2V0RGF0YS5kYXRhLmRhdGEsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5IWVBFUkxJTksgXG4gICAgICAgICYmICBmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HIFxuICAgICAgICAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtc1xuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZmluZEtleXNBbmRWYWx1ZShmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcywgcmVjb3JkKT8uZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdCkge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1hdEZvcm1GaWVsZFZhbHVlKFxuICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XSAmJlxuICAgICAgICAgICAgKHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAnMScgfHxcbiAgICAgICAgICAgICAgcmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICd0cnVlJylcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIH1lbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IGRyb3BWYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAoZHJvcFZhbHVlICYmIGRyb3BWYWx1ZT8udG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBkcm9wVmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZihmb3JtRmllbGQuY29udHJvbD09PUVGb3JtQ29udHJvbC5TRUxFQ1RCVVRUT04pe1xuICAgICAgICAgICBmb3JtRmllbGQudmFsdWU9dG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSkgfHwgZm9ybUZpZWxkLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfSk7XG59XG4vL3NldCBoeXBlcmxpbmsgcGFyYW0gdmFsdWUgYXMgZmllbGQgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZDphbnksIGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0pIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5rOiBzdHJpbmcgPScnO1xuICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGFyYW06IGFueTtcbiAgbGV0IGZpZWxkSW5mbzogYW55O1xuICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbj8uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8ubGluayl7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgICAgaWYoZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5vcmlnbmFsTGluayl7XG4gICAgICAgICAgIGxpbmsgPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLm9yaWduYWxMaW5rO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXMpe1xuICAgICAgICAgICBwYXJhbSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZEluZm8gPSBmb3JtRmllbGQ7XG4gICAgICAgICAgaWYocmVjb3JkICYmIGtleXMgJiYgbGluayAmJiBwYXJhbUtleXMgJiYgcGFyYW0gJiYgZmllbGRJbmZvKXtcbiAgICAgICAgICAgIGZpZWxkSW5mby5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoa2V5cywgcmVjb3JkLCBsaW5rLCBwYXJhbUtleXMsIHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqQ29udmVydFRvTG93ZXIob2JqOiBhbnksIGlnbm9yZUNhc2luZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3JbaWdub3JlQ2FzaW5nID8ga2V5IDoga2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBtYXRjaGVkS2V5OiBhbnkgPSAnJykge1xuICBpZiAoaXRlbS5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQgJiYgaXRlbT8ubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rICYmIG1hdGNoZWRLZXkpIHtcbiAgICBpdGVtLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gIH1cbiAgaWYgKFxuICAgIGl0ZW0ubGFiZWwgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluayAmJlxuICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXNcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyk7XG4gICAgY29uc3QgbGluayA9IGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rO1xuICAgIGlmIChpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaykge1xuICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmsgPSBzZXRIeXBlcmxpbmsoXG4gICAgICAgIGtleXMsXG4gICAgICAgIHJlY29yZCxcbiAgICAgICAgbGluayxcbiAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rKFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgcmVjb3JkOiBhbnksXG4gIGxpbms6IHN0cmluZyxcbiAgcGFyYW1LZXlzOiBzdHJpbmdbXSxcbiAgcGFyYW1zOiBhbnksXG4gIGFsbERhdGE6IGFueVtdID0gW11cbik6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5rOiBzdHJpbmcgPSBsaW5rO1xuICByZWNvcmQgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZWNvcmQpO1xuICBwYXJhbUtleXMuZm9yRWFjaCgocGFyYW1rZXkpID0+IHtcbiAgICBsZXQgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyAgJiYgcHJvcFZhbHVlICE9IG51bGwgJiYgcHJvcFZhbHVlLmluY2x1ZGVzKFwiJlwiKSkge1xuICAgICAgICAgIHByb3BWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wVmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBwcm9wIG5vdCBmb3VuZCBpbiByZWNvcmQgdGhlbiB0cnkgdG8gZmluZCBwcm9wIGluIGFsbCBkYXRhIGFycmF5LCB0byBnZXQgaXRzIHZhbHVlIFxuICAgICAgICBpZiAoIXByb3BWYWx1ZSAmJiBhbGxEYXRhICYmIGFsbERhdGEubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCk7XG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KSB7XG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJhbUluUmVjb3JkICYmIHBhcmFtICE9IHBhcmFtVmFsdWUgJiYgcHJvcFZhbHVlKSB7XG4gICAgICAgICAgaWYgKG5ld0xpbmsuaW5jbHVkZXMocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHBhcmFtID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSAhPSBwYXJhbVZhbHVlID8gcGFyYW1WYWx1ZSA6IHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0gIT0gcGFyYW1WYWx1ZSA/IHBhcmFtIDogcGFyYW1WYWx1ZSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0ocGFyYW1WYWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgPyBwcm9wVmFsdWUgOiBwYXJhbVZhbHVlKSk7XG4gICAgICAgIFxuICAgICAgICBpZiAobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKG51bGwpKSB7XG4gICAgICAgICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UobnVsbCwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGdldCBwYXJhbSB2YWx1ZSBmcm9tIGFwaSByZXNwb25zZSwgaWYgcGFyYW0ga2V5IGV4aXN0cyBpbiBpdFxuICAgICAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgcGFyYW1WYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShcbiAgICAgICAgICAgICAgbmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksXG4gICAgICAgICAgICAgIHRvVHJpbShwYXJhbVZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKCcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmVwbGFjZSB0aGUge3twYXJhbX19IHdpdGggZW1wdHlcbiAgaWYobmV3TGluayAmJiBuZXdMaW5rLmluY2x1ZGVzKFwie3tcIikgJiYgbmV3TGluay5pbmNsdWRlcyhcIn19XCIpKXtcbiAgICBuZXdMaW5rID0gbmV3TGluaz8ucmVwbGFjZSgveysuKj99Ky9nLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuLy8gaXRzIGNoZWNraW5nIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGluIGh5cGVybGluayBwYXJhbSB0aGVuIGl0IHNldCBrZXkgYXMgYSBwYXJhbVZhbHVlXG5mdW5jdGlvbiBzZXRQYXJhbUtleVZhbHVlKHJlY29yZDogYW55LCBhbGxEYXRhOiBhbnlbXSA9IFtdLCBwYXJhbWtleTogYW55KXtcbiAgbGV0IHBhcmFtVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWYoYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApe1xuICAgIGFsbERhdGEuZm9yRWFjaCgoZGF0YTogYW55KT0+e1xuICAgICAgaWYoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKGFsbFJlY29yZDogYW55KSA9PntcbiAgICAgICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gZmFsc2Upe1xuICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKGFsbFJlY29yZCkuc29tZSgocmVjb3JkKT0+IHJlY29yZC50b0xvd2VyQ2FzZSgpID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9ZWxzZXtcbiAgICAgICBwYXJhbVZhbHVlID0gT2JqZWN0LmtleXMocmVjb3JkKS5zb21lKCh4KT0+IHggPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIHJldHVybiBwYXJhbVZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZykge1xuICBsZXQgcHJvcFZhbHVlOiBhbnk7XG4gIGRhdGEucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoa2V5ICYmIHByb3BOYW1lICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHByb3BWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwcm9wVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZvcm1GaWVsZENWYWx1ZShmaWVsZDogYW55KSB7XG4gIGxldCBtdWxpU2VsZWN0VmFsdWUgPSB7fTtcbiAgaWYgKFxuICAgIGZpZWxkLmZvcm1hdD8udHlwZSA9PT0gRUZvcm1hdFR5cGUuQk9PTEVBTl9ZTiB8fFxuICAgIGZpZWxkLmZvcm1hdD8uZm9ybWF0dGVyPy5uYW1lID09PSAndG9Cb29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gKGZpZWxkLnZhbHVlID09PSAxIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAndHJ1ZScgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJykgPyAnWScgOiAnTic7XG4gIH0gZWxzZSBpZiAoXG4gICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgKGZpZWxkLnZhbHVlIHx8IGZpZWxkLnZhbHVlID09PSAnJylcbiAgKSB7XG4gICAgaWYgKGZpZWxkLnRpbWVPbmx5IHx8IGZpZWxkLnNob3dUaW1lKSB7XG4gICAgICBpZiAoZmllbGQudGltZU9ubHkgJiYgZmllbGQuc2hvd1RpbWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0gKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSkkLzsgLy8gUmVnZXggZm9yIGRhdGV0aW1lIGZvcm1hdFxuICAgICAgICBjb25zdCBtYXRjaCA9IGZpZWxkLnZhbHVlLm1hdGNoKGRhdGVUaW1lUmVnZXgpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZvcm1hdERhdGUoZmllbGQudmFsdWUsICdoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgICBmaWVsZC5zaG93VGltZSA9PT0gdHJ1ZVxuICAgICAgICAgID8gdG9TaG9ydERhdGVUaW1lKGZpZWxkLnZhbHVlLCBmaWVsZC5mb3JtYXQpXG4gICAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9XG4gIGVsc2UgaWYgKFxuICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSkgJiZcbiAgICBmaWVsZC5zYXZlQXNTdHJpbmcgIT09IGZhbHNlXG4gICkge1xuICAgIG11bGlTZWxlY3RWYWx1ZVtmaWVsZC5maWVsZF0gPSBmaWVsZC52YWx1ZTtcbiAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxuICBlbHNlIHtcbiAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID09IHVuZGVmaW5lZCA/IG51bGwgOiBmaWVsZC52YWx1ZTtcbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG9TZXRMb29rdXBEYXRhKFxuICBmaWVsZERhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuICApIHtcbiAgbGV0IG9iaiA9IHt9O1xuICBsZXQgcmVjb3JkID0gc2V0RGF0YUZpZWxkcyhbcmVzcG9uc2VdKTtcbiAgaWYgKHJlY29yZCAmJiByZWNvcmQubGVuZ3RoID4gMCkge1xuICAgIHJlY29yZC5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgIHJlY29yZCA9IHg7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGZpZWxkRGF0YSAmJiByZWNvcmQpIHtcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZERhdGEpLmZvckVhY2goKFtkYXRhS2V5LCBkYXRhVmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhS2V5Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJvd0tleXM/LmZpbmQoXG4gICAgICAgICh4KSA9PiBkYXRhVmFsdWUgJiYgZGF0YVZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgeD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YVZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICAgICk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiByZWNvcmRbdmFsdWUrJ19vYmonXT8ub3B0aW9uVmFsdWUgPyByZWNvcmRbdmFsdWUrJ19vYmonXT8ub3B0aW9uVmFsdWUgOiByZWNvcmRbdmFsdWVdIH07XG4gICAgICB9IGVsc2UgaWYgKGtleSAmJiBrZXkubGVuZ3RoID4gMCkge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiByZWNvcmRba2V5LnRvTG93ZXJDYXNlKCldIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiBkYXRhVmFsdWUgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHcmlkTG9va3VwRGF0YShjb2x1bW46IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcsIGRhdGE6IGFueSl7XG4gIGxldCBvYmogPSBjb2x1bW4uZmluZCgoeCk9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgaWYob2JqICYmIG9iai5sb29rdXBDb250cm9sPy5kYXRhKXtcbiAgICBvYmoubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnlbXSkge1xuICBsZXQgZGF0YTogYW55ID0gW107XG4gIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgcmVzcG9uc2UubWFwKCh4OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5rZXlzKHgpLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+ICh7IC4uLnByZXYsIFtjdXJyZW50LnRvTG93ZXJDYXNlKCldOiB4W2N1cnJlbnRdIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcblxuICAgICAgZGF0YS5wdXNoKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWFsb2dSZXNwb25zZShcbiAgZm9ybUZpZWxkOiBhbnksXG4gIGZvcm1EYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbikge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gaWYgc2VsZWN0ZWRWYWx1ZSBkb2VzIG5vdCBleGlzdCB0aGVuIGNvbnNpZGVyIHZhbHVlRmllbGQgYXMgc2VsZWN0ZWRWYWx1ZVxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcCAmJlxuICAgICAgIWZvcm1EYXRhLmRhdGEudmFsdWVQcm9wXG4gICAgKSB7XG4gICAgICBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcCA9IGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wO1xuICAgIH1cbiAgICBlbHNlIGlmIChcbiAgICAgIGZvcm1EYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcCAmJlxuICAgICAgIWZvcm1EYXRhLmRhdGEubGFiZWxQcm9wXG4gICAgKSB7XG4gICAgICBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcCA9IGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoVmFsdWVLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8udmFsdWVQcm9wXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZm9ybURhdGE/LmRhdGE/LmxhYmVsUHJvcFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRGF0YT8uZGF0YSAmJlxuICAgICAgZm9ybURhdGE/LmRhdGEudmFsdWVQcm9wICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSByZXNwb25zZVttYXRjaFZhbHVlS2V5XTtcbiAgICAgIGxldCBtYXRjaFRleHQgPSByZXNwb25zZVttYXRjaEZpZWxkS2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVQcm9wID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgbWF0Y2hUZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZVByb3AgPSB2YWx1ZVByb3AudHJpbSgpO1xuICAgICAgICBtYXRjaFRleHQgPSBtYXRjaFRleHQudHJpbSgpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB7IHRleHQ6IG1hdGNoVGV4dCwgdmFsdWU6IHZhbHVlUHJvcCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGaWVsZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkocmVzcG9uc2UsIGZvcm1GaWVsZC5maWVsZCk7XG4gICAgICBsZXQgdmFsdWUgPSByZXNwb25zZVtGaWVsZEtleV07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50VXJsKCk6c3RyaW5ne1xuICBsZXQgY3VycmVudFJvdXRlOiBzdHJpbmcgPSAnJztcbiAgbGV0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICBpZih1cmwpe1xuICAgIGxldCBhcnIgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICBjdXJyZW50Um91dGUgPSBhcnJbYXJyLmxlbmd0aC0xXVxuICB9ICAgIFxuICByZXR1cm4gY3VycmVudFJvdXRlO1xufVxuXG5leHBvcnQgIGZ1bmN0aW9uIGdldEdyaWRGaWx0ZXJzKCl7XG4gIGxldCBmaWx0ZXJzOiBhbnkgPSBbXTtcbiAgbGV0IGdyaWRGaWx0ZXJzID0gY3VycmVudFVybCgpO1xuICAgIGlmKGdyaWRGaWx0ZXJzICYmIGdyaWRGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgY29uc3QgbG9jYWxGaWx0ZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScrZ3JpZEZpbHRlcnMpIGFzIGFueSk7XG4gICAgICBmaWx0ZXJzID0gbG9jYWxGaWx0ZXI/LmZpbHRlcnM7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzO1xufVxuXG4vL3VwZGF0ZSB0aGUgaGlkZGVuIG9yIGRpc2FibGVkIGFuZCB2YWx1ZSBiYXNlZCBvZmYgb3RoZXIgZ2xvYmFsIGZpbHRlcnMuXG5leHBvcnQgZnVuY3Rpb24gc2V0R2xvYmFsRmlsdGVyUHJvcFZhbHVlcyhcbiAgZ2xvYmFsRmlsdGVyOiBJR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdLFxuKSB7XG4gIHJldHVybiBnbG9iYWxGaWx0ZXIubWFwKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgIGlmIChcbiAgICAgIChmaWx0ZXIuZmllbGQgJiYgZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgKGZpbHRlci5kaXNwbGF5VGV4dCAmJlxuICAgICAgICBmaWx0ZXIuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBwcm9wcz8ubWFwKChwcm9wOiBJRmlsdGVyRGljdGlvbmFyeSkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyLmhhc093blByb3BlcnR5KHByb3AucHJvcE5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXJbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcC5wcm9wVmFsdWUgJiYgcHJvcC5wcm9wVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiAoZmlsdGVyLnZhbHVlID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FyZEZpZWxkc0RhdGEoZm9ybTogYW55KSB7XG4gIGlmIChmb3JtICYmIGZvcm0uZHluYW1pY2Zvcm0pIHtcbiAgICBjb25zdCB7IGR5bmFtaWNmb3JtLCAuLi5uZXdEYXRhIH0gPSBmb3JtO1xuICAgIGR5bmFtaWNmb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKG5ld0RhdGEpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkcyh7IHJlY29yZHM6IFtuZXdEYXRhXSB9LCBkeW5hbWljZm9ybSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8vIGRpc2FibGUgR3JpZCBFZGl0YWJsZVJvdyBDb2x1bW5cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlRWRpdFJvd0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nKTogSUdyaWRDb2x1bW5bXSB7XG4gIGlmIChmaWVsZCAmJiBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICAgIGxldCBkaXNhYmxlT2JqID0geyAuLi5vYmosIGRpc2FibGVkOiB0cnVlIH07XG4gICAgY29uc3QgaW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoaTogYW55KSA9PiBpLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGNvbHVtbnNbaW5kZXhdID0gZGlzYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuLy8gZW5hYmxlZCBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZWRFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGxldCBlbmFibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IGZhbHNlIH07XG4gICAgY29uc3QgaW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoaTogYW55KSA9PiBpLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBlbmFibGVPYmo7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnM7XG59XG5cbiAvLyBjaGVjayB0aGUgTWludXRlcyBJbnRlcnZhbFxuIGV4cG9ydCBmdW5jdGlvbiBzZXRNaW51dGVzSW50ZXJ2YWwodmFsdWU6IGFueSl7XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG1pbiA9IHZhbHVlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpO1xuICAgIGlmIChtaW4pIHtcbiAgICAgdmFsdWUgPSB2YWx1ZS5zZXRNaW51dGVzKDApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbiAvLyB1cGRhdGUgdGhlIHJlc3BvbnNlIHJlY29yZHNcbiBleHBvcnQgZnVuY3Rpb24gc2V0VXBkYXRlZFJlY29yZChyZWNvcmRzOiBhbnlbXSwgcm93RGF0YTogYW55LCBkYXRhS2V5OiBzdHJpbmcpOiBhbnlbXXtcbiAgY29uc3QgaW5kZXggPSByZWNvcmRzPy5maW5kSW5kZXgoKHJlY29yZCk9PiByZWNvcmRbZGF0YUtleT8udG9Mb3dlckNhc2UoKV0gPT0gcm93RGF0YVtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSk7XG4gIGlmKGluZGV4ID4gLTEpe1xuICAgIHJlY29yZHNbaW5kZXhdID0gcm93RGF0YTtcbiAgfWVsc2V7XG4gICAgcmVjb3Jkcy5wdXNoKHJvd0RhdGEpO1xuICB9XG4gIHJldHVybiByZWNvcmRzO1xufVxuXG4vL2NvbnZlcnQgdGhlIHRpbWUgaW50byBkYXRlXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUluRGF0ZSh0aW1lOiBhbnkpIHtcbiAgY29uc3QgY29udmVydFRpbWUxMnRvMjQgPSAodGltZTEyaDogYW55KSA9PiB7XG4gICAgY29uc3QgW3RpbWUsIG1vZGlmaWVyXSA9IHRpbWUxMmg/LnRvU3RyaW5nKCk/LnNwbGl0KCcgJyk7XG4gICAgbGV0IFtob3VycywgbWludXRlc10gPSB0aW1lPy5zcGxpdCgnOicpO1xuICAgIGlmIChob3VycyA9PT0gJzEyJykge1xuICAgICAgaG91cnMgPSAnMDAnO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZXIgPT09ICdQTScpIHtcbiAgICAgIGhvdXJzID0gcGFyc2VJbnQoaG91cnMsIDEwKSArIDEyO1xuICAgIH1cbiAgICByZXR1cm4gYCR7aG91cnN9OiR7bWludXRlc31gO1xuICB9O1xuICBjb25zdCBkYXRlID0gY29udmVydFRpbWUxMnRvMjQodGltZSk7XG4gIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUoJ0p1bHkgMSwgMTk5OSwgJyArIGRhdGUgKyAnOjAwJyk7XG4gIGNvbnN0IGZ1dHVyZURhdGUgPSBuZXcgRGF0ZSgpO1xuICBmdXR1cmVEYXRlLnNldFRpbWUodGVtcERhdGUuZ2V0VGltZSgpKTtcbiAgcmV0dXJuIGZ1dHVyZURhdGU7XG59XG5cbi8vIHJldHVybiB0aGUgZGF0YSBvZiB0aGUgZmllbGQgXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGREYXRhKHsgZm9ybVNlY3Rpb25zIH06IGFueSwgZmllbGQ6IHN0cmluZyl7XG4gIGxldCBkYXRhOiBhbnkgPSBbXVxuICBpZihmb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDAgJiYgZmllbGQpe1xuICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpPT57XG4gICAgICBpZihzZWN0aW9uLmZpZWxkcy5zb21lKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKSl7XG4gICAgICAgIGRhdGE9c2VjdGlvbi5maWVsZHMuZmluZCgoZm9ybUZpZWxkOmFueSk9PiBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKSk/LmRhdGFcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWxsRm9ybUZpZWxkc1ZhbHVlcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBwcm9wczogSUZpbHRlckRpY3Rpb25hcnlbXVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uOiBJRm9ybVNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbikge1xuICAgICAgc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvcHMubWFwKChwcm9wOiBJRmlsdGVyRGljdGlvbmFyeSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm9ybUZpZWxkW3Byb3AucHJvcE5hbWVdID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyByZXR1cm5zIHRoZSByZXNwb25zZSBoZWFkZXIgZmlsZU5hbWVcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlckZpbGVOYW1lKHJlc3BvbnNlKXtcbiAgY29uc3QgaGVhZGVyID0gcmVzcG9uc2U/LmhlYWRlcnM/LmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpO1xuICByZXR1cm4gaGVhZGVyPy5zcGxpdCgnZmlsZW5hbWU9Jyk/LlsxXT8uc3BsaXQoXCI7XCIpWzBdPy5yZXBsYWNlQWxsKC9cXFwiL2csICcnKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVEaWFsb2coaWQ6YW55KXtcbiAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpXG4gICAgZGlhbG9nWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXYnICsgaWQpXG4gICAgY29uc3QgZGlhbG9naGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2ctaGVhZGVyJylcbiAgICBkaWFsb2doZWFkZXJbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdmhlYWRlcicgKyBpZClcbiAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdicgKyBpZCk7XG5cbiAgICAgIGxldCBwb3MxID0gMCxcbiAgICAgICAgcG9zMiA9IDAsXG4gICAgICAgIHBvczMgPSAwLFxuICAgICAgICBwb3M0ID0gMDtcbiAgXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBjbG9zZURyYWdFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGVsZW1lbnREcmFnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBlbG1udC5zdHlsZS50b3AgPSBlbG1udD8ub2Zmc2V0VG9wIC0gcG9zMiArICdweCc7XG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSBlbG1udD8ub2Zmc2V0TGVmdCAtIHBvczEgKyAncHgnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBjbG9zZURyYWdFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgICB9O1xuICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfSBlbHNlIGlmKGVsbW50KSB7XG4gICAgICAgIGVsbW50Lm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH1cbiAgICB9ICBcbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhck1pbk1heFZhbHVlKGl0ZW06IGFueSx2YWx1ZTogYW55LCBpbmRleCl7XG4gIGxldCB2YWxpZGF0aW9uOiBzdHJpbmcgPSAnZXF1YWwnO1xuICB2YXIgdmFsaWREYXRlID0gbmV3IERhdGUoaXRlbS52YWxpZGF0aW9uc1tpbmRleF0uZXhwcmVzc2lvbik7XG4gIHZhciBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPCBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnZ3JlYXRlcic7XG4gIH1cbiAgZWxzZSBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA+IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdtaW5pbXVtJztcbiAgfVxuICByZXR1cm4gdmFsaWRhdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXREaXNwbGF5VGV4dEZpZWxkUGFyYW1zKGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0sIGZpZWxkOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgIGlmICghZHluYW1pY0Zvcm0gfHwgIWRhdGE/LnJlY29yZHM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goZm9ybUZpZWxkID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuRElTUExBWV9URVhUICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlUZXh0UGFyYW1zXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGZvcm1GaWVsZC5kaXNwbGF5VGV4dFBhcmFtcztcblxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1LZXlWYWx1ZSA9IHBhcmFtc1trZXldO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtS2V5VmFsdWUgPT09ICdzdHJpbmcnICYmIHBhcmFtS2V5VmFsdWUuaW5jbHVkZXMoJ3snKSAmJiBwYXJhbUtleVZhbHVlLmluY2x1ZGVzKCd9JykpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFBhcmFtID0gcGFyYW1LZXlWYWx1ZS5tYXRjaCgvXFx7KC4qPylcXH0vZyk7IC8vIEZpbmQgYWxsIHBsYWNlaG9sZGVyc1xuICAgICAgICAgICAgICBsZXQgbmV3UGFyYW1WYWx1ZSA9IHBhcmFtS2V5VmFsdWU7XG5cbiAgICAgICAgICAgICAgaWYgKG1hdGNoZWRQYXJhbSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRQYXJhbS5mb3JFYWNoKChwbGFjZWhvbGRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGxhY2Vob2xkZXIuc2xpY2UoMSwgLTEpOyAvLyBSZW1vdmUgeyBhbmQgfVxuICAgICAgICAgICAgICAgICAgbGV0IHJlcGxhY2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBkYXRhLnJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZFtmaWVsZE5hbWVdICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkW2ZpZWxkTmFtZV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdQYXJhbVZhbHVlID0gbmV3UGFyYW1WYWx1ZS5yZXBsYWNlKHBsYWNlaG9sZGVyLCByZWNvcmRbZmllbGROYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBTdG9wIGF0IGZpcnN0IG1hdGNoXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICghcmVwbGFjZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW1WYWx1ZSA9IG5ld1BhcmFtVmFsdWUucmVwbGFjZShwbGFjZWhvbGRlciwgJycpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXdQYXJhbVZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBwYXJhbUtleVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuLyogI2VuZHJlZ2lvbiAqL1xuIl19
|
|
1237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUNGLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNuQyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUNyQyxJQUFJLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE9BQU8sWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUTtJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMs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LFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCO2dDQUM3RCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0NBQ3JCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29DQUNsQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO3dDQUNsRSxhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0NBQ3RFLFFBQVEsR0FBRyxJQUFJLENBQUM7d0NBQ2hCLE1BQU0sQ0FBQyxzQkFBc0I7b0NBQy9CLENBQUM7Z0NBQ0gsQ0FBQztnQ0FDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0NBQ2QsYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dDQUN6RCxDQUFDOzRCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNMLENBQUM7d0JBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztvQkFDOUIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7b0JBQzlCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVILGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSwgSUZpbHRlckRpY3Rpb25hcnkgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEVGb3JtYXRUeXBlLFxuICBFRm9ybUNvbnRyb2wsXG4gIEVIeXBlcmxpbmssXG4gIEVNYXRjaE1vZGUsXG4gIEVPcGVyYXRvcixcbiAgSUR5bmFtaWNDYXJkLFxuICBJRHluYW1pY0Zvcm0sXG4gIElGb3JtYXQsXG4gIElGb3JtRmllbGQsXG4gIElGb3JtU2VjdGlvbixcbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgYWRkR2xvYmFsRmlsdGVyLCBFR3JpZENvbHVtblR5cGUsIElHbG9iYWxGaWx0ZXIsIElHcmlkQ29sdW1uLCBJR3JpZEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyogI3JlZ2lvbiBwdWJsaWMgbWV0aG9kcyAqL1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmFsdWUgOiBhbnlcbiAqIEZ1bmN0aW9uIHJlY2VpdmVzIHRoZSB2YWx1ZSBhbmQgZXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0ZWQuXG4gKiBEbyBub3QgdXNlIGZhdCBhcnJvdyBmdW5jdGlvbiBhcyB0aGV5IGRvIG5vdCBwcmVzZXJ2ZSB0aGUgY29udGV4dC5cbiAqIHRoaXMudmFsdWUgcmVmZXJzIHRvIHRoZSB2YWx1ZSBvZiBJRm9ybUZpZWxkIE9iamVjdFxuICogTW9kaWZ5IHRoaXMudmFsdWUgZGlyZWN0bHkgdG8gcmVjZWl2ZSBlZmZlY3RcbiAqL1xuIHZhciBzcGxpdFNjcmVlbiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgZm9ybXN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjb2x1bW5zU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNhcmRTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgcm91dGVDaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGZpbHRlckJ0bkNoYW5nZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUNvbHVtbnNTdGF0ZShwYWdlU2V0dGluZzogYW55KSB7XG4gIGNvbHVtbnNTdGF0ZS5uZXh0KHBhZ2VTZXR0aW5nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uQ29sdW1uc1N0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gY29sdW1uc1N0YXRlLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uU2NyZWVuU3BsaXRDaGFuZ2UgKCl7XG4gIHJldHVybiBzcGxpdFNjcmVlbi5hc09ic2VydmFibGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VTcGxpdFNjcmVlbihtZW51SXRlbSl7XG4gIHNwbGl0U2NyZWVuLm5leHQoe29yaWdDb21wb25lbnQ6IG1lbnVJdGVtLm9yaWdDb21wb25lbnQsIHBhbmVsQ29tcG9uZW50OiBtZW51SXRlbT8uY29tcG9uZW50LCBjb25maWdEYXRhOm1lbnVJdGVtPy5kYXRhPy5kYXRhfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKGlkOiBhbnksIGRhdGE6IGFueSwgbG9hZENvbXBvbmVudD86IGFueSkge1xuICBmb3Jtc3RhdGUubmV4dCh7IGlkLCBkYXRhLCBsb2FkQ29tcG9uZW50IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gZm9ybXN0YXRlLmFzT2JzZXJ2YWJsZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuKHN0YXRlVmFsdWUpIHtcbiAgZmlsdGVyQnRuQ2hhbmdlLm5leHQoc3RhdGVWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkdsb2JhbEZpbHRlckNvbnRyb2xSaWdodEJ0blN0YXRlQ2hhbmdlKCkge1xuICByZXR1cm4gZmlsdGVyQnRuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Sb3V0ZUNoYW5nZUV2ZW50KCkge1xuICByZXR1cm4gcm91dGVDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZUNoYW5nZUV2ZW50KCkge1xuICByb3V0ZUNoYW5nZS5uZXh0KCcnKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNvbnNvbGUubG9nKCdkYXRhOiB6enp6JywgZGF0YSk7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1jbG9zZS1idXR0b24nKWFzIEhUTUxFbGVtZW50XG4gICAgaWYoY2xvc2UpIHtcbiAgICAgIGNsb3NlLmNsaWNrKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVjaW1hbCh2YWx1ZTogYW55KTogYW55IHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUudG9TdHJpbmcoKSkudG9GaXhlZCgyKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAneScgPyB0cnVlIDogZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1Nob3J0RGF0ZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtYXQgJiZcbiAgICAgIChmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTE9OR0RBVEUgfHxcbiAgICAgICAgZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLk1FRElVTURBVEUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlLCAnTU0vZGQveXl5eScsICdlbi1VUycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGVUaW1lKHZhbHVlOiBhbnksIGZvcm1hdD86IElGb3JtYXQpIHtcbiAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnJyAmJiB2YWx1ZT8udG9TdHJpbmcoKSAhPSBcIkludmFsaWQgRGF0ZVwiKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXkgaGg6bW0gYScsICdlbi1VUycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlhbG9nRGF0YShjb2x1bW5zOklHcmlkQ29sdW1uW10sIGZpZWxkTmFtZTpzdHJpbmcsIHZhbHVlOmFueSl7XG4gIGNvbHVtbnM/LmZvckVhY2goKGNvbHVtbik9PntcbiAgICAgIGlmKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpICYmIGNvbHVtbi5jb21wb25lbnQpe1xuICAgICAgICBsZXQga2V5cz1PYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICAgIGNvbHVtbi5kYXRhLmRhdGE9ey4uLmNvbHVtbi5kYXRhPy5kYXRhLCBba2V5XTp2YWx1ZVtrZXldfTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVHJpbSh0ZXh0OiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0ZXh0LnRyaW0oKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hLZXkob2JqOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIW9iaiB8fCAhcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBsZXQgbWF0Y2hlZEtleSA9ICcnO1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgb2JqLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3Qga2V5czogYW55W10gPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKCFtYXRjaGVkS2V5IHx8IG1hdGNoZWRLZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG1hdGNoZWRLZXkgPSBrZXlzLmZpbmQoXG4gICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKCh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRLZXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRWYWx1ZShmb3JtRmllbGQ6IElGb3JtRmllbGQsIHZhbHVlOiBhbnkpOiBhbnkge1xuICBsZXQgZm9ybWF0dGVkVmFsdWU6IGFueSA9IHZhbHVlO1xuICBpZiAoZm9ybUZpZWxkLmZvcm1hdCkge1xuICAgIHN3aXRjaCAoZm9ybUZpZWxkLmZvcm1hdC50eXBlKSB7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkRFQ0lNQUw6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9EZWNpbWFsKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLkJPT0xFQU5fWU46XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtYXRUeXBlLlNIT1JUREFURTpcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0b1Nob3J0RGF0ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5DVVNUT006XG4gICAgICAgIGlmIChmb3JtRmllbGQuZm9ybWF0LmZvcm1hdHRlcikge1xuICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZvcm1GaWVsZCAoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUZpZWxkT2JqOiBJRm9ybUZpZWxkXG4pIHtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChzZWN0aW9uLmZpZWxkcyA9IHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkT2JqLmZpZWxkPy50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgIChmb3JtRmllbGQubGFiZWwgJiYgZm9ybUZpZWxkLmxhYmVsID09PSBmb3JtRmllbGRPYmoubGFiZWwpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkID0gZm9ybUZpZWxkT2JqO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1GaWVsZDtcbiAgICB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rQ29tcG9uZW50RGF0YSAoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgbGFiZWw6IHN0cmluZyxcbiAgZGF0YTogYW55XG4pe1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5sYWJlbCAmJiAodHlwZW9mIChmaWVsZC5sYWJlbCkgPT0gXCJvYmplY3RcIiA/IGZpZWxkLmxhYmVsPy5uYW1lID09IGxhYmVsIDogZmllbGQubGFiZWwgPT09IGxhYmVsKSlcbiAgICBpZiAoZmllbGQgJiYgdHlwZW9mIChmaWVsZC5sYWJlbCkgPT0gXCJvYmplY3RcIiAmJiBmaWVsZC5sYWJlbC5sYWJlbENvbnRyb2w/Lmh5cGVybGluaykge1xuICAgICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMgPSBkYXRhO1xuICAgIH0gZWxzZSBpZiAoZmllbGQgJiYgZmllbGQuaHlwZXJsaW5rKSB7XG4gICAgICBmaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZGF0YTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgdmFsdWVzOiBhbnlbXSxcbiAgdW5pcXVlSWQ6IGFueSxcbiAgbGFiZWxLZXk6IHN0cmluZyxcbiAgVmFsdWVLZXk6IHN0cmluZyxcbil7XG4gIGlmKHZhbHVlcz8ubGVuZ3RoID4gMCl7XG4gICAgdmFsdWVzID0gdmFsdWVzPy5tYXAoKHJvd1ZhbHVlKSA9PiAoe1tsYWJlbEtleV06IHJvd1ZhbHVlLCBbVmFsdWVLZXldOiB1bmlxdWVJZH0pKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9va3VwRGF0YShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICBkYXRhOiBhbnlcbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbjogSUZvcm1TZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgIGRhdGFcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEgJiYgZGF0YSkge1xuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTaWRlYmFyTGlua1BhcmFtVmFsdWVzKGxpbms6IHN0cmluZywgcGFyYW1zOiBhbnlbXSk6IHN0cmluZyB7XG4gIGxldCBuZXdMaW5rOiBzdHJpbmcgPSBsaW5rO1xuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgcGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHBhcmFtLm5hbWUgPyAne3snICsgcGFyYW0ubmFtZSArICd9fScgOiAnJztcbiAgICAgIGlmIChuZXdMaW5rLmxvY2FsZUNvbXBhcmUodXJsKSkge1xuICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAodXJsLCAnaWcnKSwgdG9UcmltKHBhcmFtLnZhbHVlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGROZXdGaWVsZEluRm9ybShkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtLCBzZWN0aW9uTmFtZTpzdHJpbmcsIGZvcm1GaWVsZDpJRm9ybUZpZWxkKXtcbiAgY29uc3Qgc2VjdGlvbiA9IGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZpbmQoKHNlY3Rpb24pPT4gc2VjdGlvbi5uYW1lID09PSBzZWN0aW9uTmFtZSk7XG4gIGlmKHNlY3Rpb24pe1xuICAgIHNlY3Rpb24uZmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgfVxuICByZXR1cm4gZHluYW1pY0Zvcm07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGRzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZHM6IElGb3JtRmllbGRbXVxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgbGV0IG1hdGNoZWRGaWVsZCA9IGZvcm1GaWVsZHMuZmluZChcbiAgICAgICAgKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoZWRGaWVsZCkge1xuICAgICAgICBmb3JtRmllbGQgPSBtYXRjaGVkRmllbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybUZpZWxkO1xuICAgIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxGaWx0ZXJzKFxuICBnbG9iYWxGaWx0ZXJzOiBhZGRHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbikge1xuICBsZXQgZm9ybUZpZWxkT2JqOiBhbnk7XG4gIGdsb2JhbEZpbHRlcnMubWFwKChmaWx0ZXIpPT57XG4gICAgaWYgKGZpbHRlci5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGZvcm1GaWVsZE9iaiA9IGZpbHRlcjtcbiAgICAgIH1cbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRPYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1Db250cm9sOiBFRm9ybUNvbnRyb2xcbik6IElGb3JtRmllbGRbXSB7XG4gIGxldCBmb3JtRmllbGRzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IGZvcm1Db250cm9sKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLnZhbHVlPy50ZXh0ICYmIHR5cGVvZihmb3JtRmllbGQudmFsdWUudGV4dCkgPT09ICdzdHJpbmcnKVxuICAgICAgICB7XG4gICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgdHlwZW9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdzdHJpbmcnKVxuICAgICAgICB7XG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtRmllbGRzLnB1c2goZm9ybUZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBmb3JtRmllbGRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmdcbik6IElGb3JtRmllbGQge1xuICBsZXQgZm9ybUZpZWxkT2JqOiBhbnk7XG4gIGZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZm9ybUZpZWxkT2JqID0gZm9ybUZpZWxkO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZE9iajtcbn1cblxuLy8gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGZpZWxkLiBJZiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZSBpcyB0cnVlIGFuZCBkaXNwbGF5RmllbGRcbi8vIGV4aXN0IGluIHRoZSBmaWVsZCB0aGVuIGFsd2F5cyByZXR1cm4gYSBkaXNwbGF5RmllbGQgdmFsdWUuXG5cbi8vIGV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZShcbi8vICAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuLy8gICBmaWVsZDogc3RyaW5nLFxuLy8gICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTpib29sZWFuID0gZmFsc2Vcbi8vICkge1xuLy8gICBsZXQgdmFsdWU7XG4vLyAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtU2VjdGlvbnMgYXMgYW55KSB7XG4vLyAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbi8vICAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4vLyAgICAgICAgIGxldCBpc1ZhbGlkID0gdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTtcbi8vICAgICAgICAgaWYgKFxuLy8gICAgICAgICAgIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuLy8gICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbi8vICAgICAgICAgKSB7XG4vLyAgICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0IDogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZTtcbi8vICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWRcbi8vICAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0XG4vLyAgICAgICAgICAgICA6IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVFxuLy8gICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnZhbHVlXG4vLyAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgIH0pO1xuLy8gICB9XG4vLyAgIHJldHVybiB2YWx1ZTtcbi8vIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOiBib29sZWFuID0gZmFsc2Vcbik6IGFueSB7XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtU2VjdGlvbnMgYXMgYW55KSB7XG4gICAgaWYgKHNlY3Rpb24/LmZpZWxkcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXRGb3JtRmllbGRzSW5mbyhzZWN0aW9uPy5maWVsZHMsIGZpZWxkLCByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZSk7XG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoc2VjdGlvbj8uaGVhZGVyRmllbGRzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGdldEZvcm1GaWVsZHNJbmZvKHNlY3Rpb24/LmhlYWRlckZpZWxkcywgZmllbGQsIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRzSW5mbyhcbiAgc2VjdGlvbkZpZWxkczogYW55W10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlOiBib29sZWFuID0gZmFsc2Vcbik6IGFueSB7XG4gIGZvciAoY29uc3QgZm9ybUZpZWxkIG9mIHNlY3Rpb25GaWVsZHMpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgcmV0dXJuRGlzcGxheUZpZWxkVmFsdWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8XG4gICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbiAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0IDogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnRleHRcbiAgICAgICAgICA6IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCAhPT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZT8udmFsdWVcbiAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUZpZWxkVmFsdWVBc1N0cmluZyhkeW5hbWljRm9ybTpJRHluYW1pY0Zvcm0sZmllbGQ6c3RyaW5nKTpzdHJpbmd7XG4gIGxldCB2YWx1ZTphbnkgPSBnZXRGb3JtRmllbGRWYWx1ZShkeW5hbWljRm9ybSxmaWVsZCwgdHJ1ZSk7XG4gIGlmICh2YWx1ZSl7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgfVxuICAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkZpZWxkVmFsdWUoXG4gIGZvcm1TZWN0aW9uczogSUZvcm1TZWN0aW9uW10sXG4gIGZpZWxkOiBzdHJpbmdcbikge1xuICBsZXQgZm9ybTogSUR5bmFtaWNGb3JtID0geyBmb3JtU2VjdGlvbnMgfTtcbiAgcmV0dXJuIGdldEZvcm1GaWVsZFZhbHVlKGZvcm0sIGZpZWxkLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVGb3JtVmFsdWVzKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICB0YWJsZXM/OiBzdHJpbmdbXSxcbikge1xuICBsZXQgc2VjdGlvbkZpZWxkczogYW55O1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VjdGlvbkZpZWxkcyA9IGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8uZmlsdGVyKHggPT4geC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICAgIH1cbiAgICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlID0gZmllbGQudGFibGVzPy5tYXAoKHRhYmxlKSA9PiB0YWJsZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgIGlmICh0YWJsZSAmJiB0YWJsZS5pbmNsdWRlcyh0YWJsZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VbdGFibGVOYW1lXSkge1xuICAgICAgICAgICAgICByZXNwb25zZVt0YWJsZU5hbWVdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV1bZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWN0aW9uRmllbGRzID0gZm9ybVNlY3Rpb24uaGVhZGVyRmllbGRzPy5maWx0ZXIoeCA9PiB4LmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQVJEKTtcbiAgICAgIH1cbiAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzcG9uc2VbZmllbGQuZmllbGRdID0gZm9ybWF0Rm9ybUZpZWxkQ1ZhbHVlKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiAodmFsdWUgfHwgdmFsdWUgPT0gJycpID8gdmFsdWUgOiBudWxsLFxuICB9O1xuICByZXR1cm4gZmlsdGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5kRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHNldEZpbHRlcihmaWVsZCwgdmFsdWUsIEVNYXRjaE1vZGUuRVFVQUxTLCBFT3BlcmF0b3IuQU5EKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JpZ0RhdGFGaWVsZFZhbHVlKGRhdGE6IGFueSwgcHJvcE5hbWU6IHN0cmluZyk6IGFueSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAoZGF0YSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBnZXRQcm9wZXJ0eVZhbHVlKGRhdGFbaV0sIHByb3BOYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZUFzU3RyaW5nKFxuICBkYXRhOiBhbnksXG4gIHByb3BOYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGxldCB2YWx1ZSA9IGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhLCBwcm9wTmFtZSk7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2VjdGlvblByb3BWYWx1ZXMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgc2VjdGlvbk5hbWU6IHN0cmluZyxcbiAgcHJvcHM6IElEaWN0aW9uYXJ5W11cbikge1xuICBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0UHJvcFZhbHVlKHNlY3Rpb24sIHByb3ApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIHByaXZhdGUgbWV0aG9kcyAqL1xuXG5mdW5jdGlvbiBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtIHwgSUR5bmFtaWNDYXJkLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChkYXRhLnJlY29yZHMgJiYgZGF0YS5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGR5bmFtaWNGb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkc1ZhbHVlKGRhdGEsIGZvcm1TZWN0aW9uPy5maWVsZHMsIGtleXMsIHJlY29yZCwgYWxsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmhlYWRlckZpZWxkcykge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzVmFsdWUoZGF0YSwgZm9ybVNlY3Rpb24/LmhlYWRlckZpZWxkcywga2V5cywgcmVjb3JkLCBhbGxEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNWYWx1ZShkYXRhOiBhbnksIGZvcm1GaWVsZHM6IGFueSwga2V5czogYW55LCByZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55KXtcbiAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVkS2V5OiBhbnkgPSBrZXlzLmZpbmQoXG4gICAgICAoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgIC8vIHNldCBsYWJlbCBoeXBlcmxpbmtcbiAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhLCBtYXRjaGVkS2V5KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgKChmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmtJZCAmJiBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICkge1xuICAgICAgbGV0IHBhcmFtcyA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcGFyYW1zICYmXG4gICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5tYXAoKHBhcmFtS2V5KSA9PiB7XG4gICAgICAgICAgcGFyYW1LZXkgPSBwYXJhbUtleS5yZXBsYWNlKCd7eycsICcnKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLmZpbHRlcigoeCkgPT4geC5sZW5ndGggPiAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayA9IHNldEh5cGVybGluayhcbiAgICAgICAga2V5cyxcbiAgICAgICAgcmVjb3JkLFxuICAgICAgICBmb3JtRmllbGQub3JpZ25hbExpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsXG4gICAgICAgIGFsbERhdGFcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbmsgJiZcbiAgICAgICgoZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGlua0lkICYmIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnBhcmFtcykgfHxcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ubGluaylcbiAgICApIHtcbiAgICAgIGxldCBwYXJhbXMgPSBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5wYXJhbXM7XG4gICAgICBsZXQgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKCFwYXJhbXMgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluay5saW5rICYmXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmsuaW5jbHVkZXMoJ319JylcbiAgICAgICkge1xuICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rLnNwbGl0KCd9fScpO1xuICAgICAgICBwYXJhbUtleXMgPSBwYXJhbUtleXMubWFwKChwYXJhbUtleSkgPT4ge1xuICAgICAgICAgIHBhcmFtS2V5ID0gcGFyYW1LZXkucmVwbGFjZSgne3snLCAnJykudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBwYXJhbUtleTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5maWx0ZXIoKHgpID0+IHgubGVuZ3RoID4gMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LmxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBhbGxEYXRhXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBtYXRjaGVkS2V5KSB7XG4gICAgICBjb25zdCBkYXRlVGltZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfVsgVF0oXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KShcXC5cXGR7M30pPyQvO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcblxuICAgICAgaWYgKGZvcm1GaWVsZC50aW1lT25seSAmJiB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGVUaW1lUmVnZXgudGVzdChmaWVsZFZhbHVlKSkge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1hdERhdGUoZmllbGRWYWx1ZSwgJ2hoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmaWVsZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZpZWxkVmFsdWUgPyBuZXcgRGF0ZShmaWVsZFZhbHVlIGFzIHN0cmluZykgOiAnJztcbiAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuY2FyZCAmJiBmb3JtRmllbGQuY2FyZC5mb3JtU2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghZm9ybUZpZWxkLmNhcmQuZGF0YSkge1xuICAgICAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGZvcm1GaWVsZC5jYXJkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIG1hdGNoZWRLZXlcbiAgICAgICkge1xuICAgICAgICBsZXQgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICBpZiAocmVjb3JkW21hdGNoZWRLZXldICYmIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBhcnJheVZhbHVlLnB1c2goe1tmb3JtRmllbGQuZGlzcGxheUZpZWxkXSA6IHJlY29yZFttYXRjaGVkS2V5XX0pO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGFycmF5VmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSU5QVVQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICByZWNvcmRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihyZWNvcmRbbWF0Y2hlZEtleV0pe1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZC5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoRGlzcGxheUZpZWxkID0gZ2V0TWF0Y2hLZXkoXG4gICAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hEaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogdG9UcmltKHJlY29yZFttYXRjaERpc3BsYXlGaWVsZF0pLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWF0Y2hWYWx1ZUZpZWxkID0gZ2V0TWF0Y2hLZXkocmVjb3JkLCBmb3JtRmllbGQuZmllbGQpO1xuICAgICAgICAgIGlmIChtYXRjaFZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgdGV4dDogZm9ybUZpZWxkLnZhbHVlPy50ZXh0LFxuICAgICAgICAgICAgICB2YWx1ZTogdG9UcmltKHJlY29yZFttYXRjaFZhbHVlRmllbGRdKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJlxuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNldERhdGFGcm9tUmVjb3JkID0gZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhLFxuICAgICAgICAgIHJlY29yZFxuICAgICAgICApO1xuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhID0gc2V0RGF0YUZyb21SZWNvcmQ/LmRhdGE7XG4gICAgICAgIGlmKHNldERhdGFGcm9tUmVjb3JkPy5tYXRjaERhdGEpe1xuICAgICAgICAgIGNoYW5nZUR5bmFtaWNGb3JtU3RhdGUoXG4gICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5pZCxcbiAgICAgICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnRDb250cm9sPy5kYXRhLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMgJiZcbiAgICAgICAgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICkge1xuICAgICAgICBsZXQgc2V0RGF0YSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbDtcbiAgICAgICAgc2V0RGF0YS5kYXRhLmRhdGEgPSBmaW5kS2V5c0FuZFZhbHVlKHNldERhdGEuZGF0YS5kYXRhLCByZWNvcmQpPy5kYXRhO1xuICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKHNldERhdGEuaWQsIHNldERhdGEuZGF0YS5kYXRhLCBmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LIFxuICAgICAgICAmJiAgZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLkRJQUxPRyBcbiAgICAgICAgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXNcbiAgICAgICkge1xuICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcyA9IGZpbmRLZXlzQW5kVmFsdWUoZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsIHJlY29yZCk/LmRhdGE7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoZWRLZXkpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtYXRGb3JtRmllbGRWYWx1ZShcbiAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICByZWNvcmRbbWF0Y2hlZEtleV0gJiZcbiAgICAgICAgICAgIChyZWNvcmRbbWF0Y2hlZEtleV0udG9TdHJpbmcoKSA9PT0gJzEnIHx8XG4gICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICB9ZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5EUk9QRE9XTikge1xuICAgICAgICAgIGxldCBkcm9wVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKGRyb3BWYWx1ZSAmJiBkcm9wVmFsdWU/LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZHJvcFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoZm9ybUZpZWxkLmNvbnRyb2w9PT1FRm9ybUNvbnRyb2wuU0VMRUNUQlVUVE9OKXtcbiAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPXRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pIHx8IGZvcm1GaWVsZC52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH0pO1xufVxuLy9zZXQgaHlwZXJsaW5rIHBhcmFtIHZhbHVlIGFzIGZpZWxkIHZhbHVlXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQ6YW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGxldCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGluazogc3RyaW5nID0nJztcbiAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IHBhcmFtOiBhbnk7XG4gIGxldCBmaWVsZEluZm86IGFueTtcbiAgICBkeW5hbWljRm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIHNlY3Rpb24/LmZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/Lmxpbmspe1xuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ub3JpZ25hbExpbmspe1xuICAgICAgICAgICBsaW5rID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5vcmlnbmFsTGluaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKXtcbiAgICAgICAgICAgcGFyYW0gPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXM7XG4gICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRJbmZvID0gZm9ybUZpZWxkO1xuICAgICAgICAgIGlmKHJlY29yZCAmJiBrZXlzICYmIGxpbmsgJiYgcGFyYW1LZXlzICYmIHBhcmFtICYmIGZpZWxkSW5mbyl7XG4gICAgICAgICAgICBmaWVsZEluZm8ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKGtleXMsIHJlY29yZCwgbGluaywgcGFyYW1LZXlzLCBwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iakNvbnZlcnRUb0xvd2VyKG9iajogYW55LCBpZ25vcmVDYXNpbmc6IGJvb2xlYW4gPSBmYWxzZSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBhbnksIGtleSkgPT4ge1xuICAgIGFjY3VtdWxhdG9yW2lnbm9yZUNhc2luZyA/IGtleSA6IGtleS50b0xvd2VyQ2FzZSgpXSA9IG9ialtrZXldO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfSwge30pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpY2tTZWN0aW9uSGlnaGxpZ2h0KHZhbHVlOiBhbnkpIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxlZnQtc2lkZUJhciAucC1wYW5lbG1lbnUgLnAtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGl0bGUgPSBcIicrIHZhbHVlPy5uYW1lICsnXCJdJyk7XG4gICAgICAgY29uc3QgYWxsTWVudUl0ZW1zID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmxlZnQtc2lkZUJhciAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBhbGxNZW51SXRlbXM/LmZvckVhY2goKG1lbmF1SXRlbTogYW55KSA9PiB7XG4gICAgICAgIG1lbmF1SXRlbT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIH0pXG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB0aXRsZT8ucGFyZW50RWxlbWVudD8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlSWNvbiA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUtaWNvbicpO1xuICBhY3RpdmVJY29uPy5mb3JFYWNoKChpY29uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgIGljb24/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1lbGVtZW50IHAtY29tcG9uZW50IHAtcGFuZWxtZW51LWhlYWRlciBwLWhpZ2hsaWdodCcpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFjdGl2ZUljb25DbGFzcygpIHtcbiAgY29uc3QgYWN0aXZlSWNvbiA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY3RpdmUtaWNvbicpO1xuICBpZiAoYWN0aXZlSWNvbiAmJiBhY3RpdmVJY29uLmxlbmd0aCA+IDApIHtcbiAgICBhY3RpdmVJY29uPy5mb3JFYWNoKChpY29uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgIGljb24/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodExlZnRTaWRlYmFyKCl7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZm9ybS1jb250YWluZXJcIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCAoKSA9PntcbiAgY29uc3Qgc2Nyb2xsVG9wUG9zaXRpb246IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZm9ybS1jb250YWluZXJcIik/LnNjcm9sbFRvcDtcbiAgY29uc3QgYWxsSWNvbkVsZW1lbnRzOiBhbnkgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWxcIik7XG5cbiAgYWxsSWNvbkVsZW1lbnRzPy5mb3JFYWNoKChpY29uOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICBpY29uPy5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJ3NlY3Rpb24nICsgaW5kZXgpO1xuICB9KTtcbiAgICAgcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCk7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZvcm0tY29udGFpbmVyIC5jYXJkJyk/LmZvckVhY2goKGNhcmQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50SWQgPSBcInNlY3Rpb25cIiArIGluZGV4O1xuICAgICAgICBpZiAoc2Nyb2xsVG9wUG9zaXRpb24gPj0gY2FyZC5vZmZzZXRUb3AgJiYgc2Nyb2xsVG9wUG9zaXRpb24gPD0gY2FyZC5vZmZzZXRUb3AgKyBjYXJkLm9mZnNldEhlaWdodCl7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCBhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNle1xuICAgICAgICAgIHJldHVybiAgZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvcignW3RhYkluZGV4PScrIGN1cnJlbnRJZCArICddJyk/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwnKTsgICAgXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9KTtcbiAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kS2V5c0FuZFZhbHVlKGRhdGE6IGFueSwgcmVjb3JkOiBhbnkpIHtcbiAgbGV0IHZhbHVlS2V5OiBzdHJpbmcgPSAnJztcbiAgbGV0IHNldERhdGFGcm9tUmVjb3JkID0gZmFsc2U7XG4gIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGRhdGFLZXkpID0+IHtcbiAgICBsZXQgdmFsdWVDb250YWluc0tleTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmKGRhdGFbZGF0YUtleV0gJiYgZGF0YVtkYXRhS2V5XT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ3snKSl7XG4gICAgICB2YWx1ZUNvbnRhaW5zS2V5ID0gdHJ1ZTtcbiAgICAgIHZhbHVlS2V5ID0gZGF0YVtkYXRhS2V5XT8udG9TdHJpbmcoKT8ucmVwbGFjZShcIntcIiwgXCJcIik/LnJlcGxhY2UoXCJ9XCIsIFwiXCIpXG4gICAgfVxuICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhyZWNvcmQpLmZpbmQoKGtleSkgPT4gdmFsdWVDb250YWluc0tleSA/ICh2YWx1ZUtleS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSkgOiAoZGF0YUtleS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSkpO1xuICAgIGlmICgoa2V5ICYmIGtleS5sZW5ndGggPiAwICYmIHJlY29yZFtrZXldKXx8IHJlY29yZFtrZXldID09PSBmYWxzZSkge1xuICAgICAgc2V0RGF0YUZyb21SZWNvcmQgPSB0cnVlXG4gICAgICBkYXRhID0geyAuLi5kYXRhLCBbZGF0YUtleV06IHJlY29yZFtrZXldIH07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHttYXRjaERhdGE6IHNldERhdGFGcm9tUmVjb3JkLCBkYXRhOiBkYXRhfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BWYWx1ZShvYmo6IGFueSwgcHJvcDogSURpY3Rpb25hcnkpIHtcbiAgY29uc3QgbWF0Y2hlZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkob2JqLCBwcm9wLm5hbWUpO1xuICBpZiAobWF0Y2hlZEtleSkge1xuICAgIHJldHVybiAob2JqW21hdGNoZWRLZXldID0gcHJvcC52YWx1ZSk7XG4gIH1cbiAgZWxzZXtcbiAgIHJldHVybiggb2JqW3Byb3AubmFtZV09cHJvcC52YWx1ZSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IHN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJyk7XG4gIGlmIChzdG9yYWdlKSB7XG4gICAgbGV0IGN1cnJlbnRVc2VyID0gSlNPTi5wYXJzZShzdG9yYWdlKTtcbiAgICBpZiAoY3VycmVudFVzZXIgJiYgY3VycmVudFVzZXIucm9sZXMgJiYgY3VycmVudFVzZXIucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyLnJvbGVzLnNvbWUoKGl0ZW06IGFueSkgPT4gaXRlbS5jb2RlLnRvU3RyaW5nKCk/LnRyaW0oKT8udG9Mb3dlckNhc2UoKSA9PT0gcm9sZT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZXRMYWJlbEh5cGVybGluayhpdGVtOiBhbnksIHJlY29yZDogYW55LCBrZXlzOiBzdHJpbmdbXSwgYWxsRGF0YTogYW55W10gPSBbXSwgbWF0Y2hlZEtleTogYW55ID0gJycpIHtcbiAgaWYgKGl0ZW0uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUICYmIGl0ZW0/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluayAmJiBtYXRjaGVkS2V5KSB7XG4gICAgaXRlbS52YWx1ZSA9IHRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pO1xuICB9XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgbGV0IHBhcmFtOiBzdHJpbmcgPSAne3snICsgcGFyYW1rZXkudG9Mb3dlckNhc2UoKSArICd9fSc7XG4gICAgY29uc3QgaXNQYXJhbU1hdGNoZWQgPSBuZXdMaW5rLmxvY2FsZUNvbXBhcmUocGFyYW0pO1xuICAgIGNvbnN0IHBhcmFtSW5SZWNvcmQgPSBzZXRQYXJhbUtleVZhbHVlKHJlY29yZCwgYWxsRGF0YSwgcGFyYW1rZXkpO1xuXG4gICAgaWYgKGlzUGFyYW1NYXRjaGVkKSB7XG4gICAgICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtcyA/IHBhcmFtc1twYXJhbWtleV0gOiBudWxsO1xuICAgICAgaWYocGFyYW1WYWx1ZSA9PT0gJycgJiYgcGFyYW1JblJlY29yZCl7XG4gICAgICAgIHBhcmFtVmFsdWUgPSAneycrcGFyYW1rZXkrJ30nO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwYXJhbVZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xuICAgICAgICBsZXQgcHJvcFZhbHVlID0gcmVjb3JkW3Byb3BOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgICYmIHByb3BWYWx1ZSAhPSBudWxsICYmIHByb3BWYWx1ZS5pbmNsdWRlcyhcIiZcIikpIHtcbiAgICAgICAgICBwcm9wVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQocHJvcFZhbHVlKTtcbiAgICAgICAgfSBcbiAgICAgICAgXG4gICAgICAgIC8vIGluIGNhc2Ugb2YgcHJvcCBub3QgZm91bmQgaW4gcmVjb3JkIHRoZW4gdHJ5IHRvIGZpbmQgcHJvcCBpbiBhbGwgZGF0YSBhcnJheSwgdG8gZ2V0IGl0cyB2YWx1ZSBcbiAgICAgICAgaWYgKCFwcm9wVmFsdWUgJiYgYWxsRGF0YSAmJiBhbGxEYXRhLmxlbmd0aCA+IDApXG4gICAgICAgIHtcbiAgICAgICAgICBhbGxEYXRhLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBkYXRhLnJlY29yZHMuZmluZCgoeCk9PiB4W3Byb3BOYW1lXSk7XG4gICAgICAgICAgICBkYXRhLnJlY29yZHMuZm9yRWFjaCgoYWxsUmVjb3JkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpO1xuICAgICAgICAgICAgICBsZXQgbWF0Y2hLZXkgPSBrZXlzLmZpbmQoKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaEtleSkge1xuICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGFsbFJlY29yZFttYXRjaEtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcGFyYW1JblJlY29yZCAmJiBwYXJhbSAhPSBwYXJhbVZhbHVlICYmIHByb3BWYWx1ZSkge1xuICAgICAgICAgIGlmIChuZXdMaW5rLmluY2x1ZGVzKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcmFtVmFsdWU7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0gIT0gcGFyYW1WYWx1ZSA/IHBhcmFtVmFsdWUgOiBwYXJhbSwgJ2lnJyksIHRvVHJpbShwYXJhbVZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSA/IHByb3BWYWx1ZSA6IHBhcmFtVmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdMaW5rID0gbmV3TGluay5yZXBsYWNlKG5ldyBSZWdFeHAocGFyYW0sICdpZycpLCB0b1RyaW0ocGFyYW1WYWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgPyBwcm9wVmFsdWUgOiBwYXJhbVZhbHVlKSk7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtICE9IHBhcmFtVmFsdWUgPyBwYXJhbSA6IHBhcmFtVmFsdWUsICdpZycpLCB0b1RyaW0ocGFyYW1WYWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgPyBwcm9wVmFsdWUgOiBwYXJhbVZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgICBcbiAgICAgICAgaWYgKG5ld0xpbmsgJiYgbmV3TGluay5pbmNsdWRlcyhudWxsKSkge1xuICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rPy5yZXBsYWNlKG51bGwsIFwiXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXQgcGFyYW0gdmFsdWUgZnJvbSBhcGkgcmVzcG9uc2UsIGlmIHBhcmFtIGtleSBleGlzdHMgaW4gaXRcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgIHBhcmFtVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UoXG4gICAgICAgICAgICAgIG5ldyBSZWdFeHAocGFyYW0sICdpZycpLFxuICAgICAgICAgICAgICB0b1RyaW0ocGFyYW1WYWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbSgnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJlcGxhY2UgdGhlIHt7cGFyYW19fSB3aXRoIGVtcHR5XG4gIGlmKG5ld0xpbmsgJiYgbmV3TGluay5pbmNsdWRlcyhcInt7XCIpICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ9fVwiKSl7XG4gICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UoL3srLio/fSsvZywgXCJcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbi8vIGl0cyBjaGVja2luZyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBpbiBoeXBlcmxpbmsgcGFyYW0gdGhlbiBpdCBzZXQga2V5IGFzIGEgcGFyYW1WYWx1ZVxuZnVuY3Rpb24gc2V0UGFyYW1LZXlWYWx1ZShyZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55W10gPSBbXSwgcGFyYW1rZXk6IGFueSl7XG4gIGxldCBwYXJhbVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlmKGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKXtcbiAgICBhbGxEYXRhLmZvckVhY2goKGRhdGE6IGFueSk9PntcbiAgICAgIGlmKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT57XG4gICAgICAgICAgIGlmKHBhcmFtVmFsdWUgPT09IGZhbHNlKXtcbiAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpLnNvbWUoKHJlY29yZCk9PiByZWNvcmQudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfWVsc2V7XG4gICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKHJlY29yZCkuc29tZSgoeCk9PiB4ID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICByZXR1cm4gcGFyYW1WYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHByb3BWYWx1ZTogYW55O1xuICBkYXRhLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgaWYgKGtleSAmJiBwcm9wTmFtZSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBwcm9wVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHJvcFZhbHVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQ6IGFueSkge1xuICBsZXQgbXVsaVNlbGVjdFZhbHVlID0ge307XG4gIGlmIChcbiAgICBmaWVsZC5mb3JtYXQ/LnR5cGUgPT09IEVGb3JtYXRUeXBlLkJPT0xFQU5fWU4gfHxcbiAgICBmaWVsZC5mb3JtYXQ/LmZvcm1hdHRlcj8ubmFtZSA9PT0gJ3RvQm9vbGVhbidcbiAgKSB7XG4gICAgcmV0dXJuIChmaWVsZC52YWx1ZSA9PT0gMSB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ3RydWUnIHx8IGZpZWxkLnZhbHVlPy50b1N0cmluZygpID09PSAnWScpID8gJ1knIDogJ04nO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgIChmaWVsZC52YWx1ZSB8fCBmaWVsZC52YWx1ZSA9PT0gJycpXG4gICkge1xuICAgIGlmIChmaWVsZC50aW1lT25seSB8fCBmaWVsZC5zaG93VGltZSkge1xuICAgICAgaWYgKGZpZWxkLnRpbWVPbmx5ICYmIGZpZWxkLnNob3dUaW1lKSB7XG4gICAgICAgIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9IChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pJC87IC8vIFJlZ2V4IGZvciBkYXRldGltZSBmb3JtYXRcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBmaWVsZC52YWx1ZS5tYXRjaChkYXRlVGltZVJlZ2V4KTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgZmllbGQudmFsdWUgPSBmb3JtYXREYXRlKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScsICdlbi1VUycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgICA/IHRvU2hvcnREYXRlVGltZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgICAgICAgIDogdG9TaG9ydERhdGUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlID09IHVuZGVmaW5lZCA/IG51bGwgOiBmaWVsZC52YWx1ZS52YWx1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICBmaWVsZC5sYWJlbCAmJlxuICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUICYmXG4gICAgZmllbGQudmFsdWUgJiZcbiAgICB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICkge1xuICAgIHJldHVybiBmaWVsZC52YWx1ZS52YWx1ZTtcbiAgfVxuICBlbHNlIGlmIChcbiAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTVVMVElTRUxFQ1QgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmXG4gICAgZmllbGQuc2F2ZUFzU3RyaW5nICE9PSBmYWxzZVxuICApIHtcbiAgICBtdWxpU2VsZWN0VmFsdWVbZmllbGQuZmllbGRdID0gZmllbGQudmFsdWU7XG4gICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA9PSB1bmRlZmluZWQgPyBudWxsIDogZmllbGQudmFsdWU7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRvU2V0TG9va3VwRGF0YShcbiAgZmllbGREYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbiAgKSB7XG4gIGxldCBvYmogPSB7fTtcbiAgbGV0IHJlY29yZCA9IHNldERhdGFGaWVsZHMoW3Jlc3BvbnNlXSk7XG4gIGlmIChyZWNvcmQgJiYgcmVjb3JkLmxlbmd0aCA+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+IHtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcbiAgICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgfTtcbiAgXG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKSkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSBpZihlbG1udCkge1xuICAgICAgICBlbG1udC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9XG4gICAgfSAgXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJNaW5NYXhWYWx1ZShpdGVtOiBhbnksdmFsdWU6IGFueSwgaW5kZXgpe1xuICBsZXQgdmFsaWRhdGlvbjogc3RyaW5nID0gJ2VxdWFsJztcbiAgdmFyIHZhbGlkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0udmFsaWRhdGlvbnNbaW5kZXhdLmV4cHJlc3Npb24pO1xuICB2YXIgY3VycmVudERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpIDwgY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ2dyZWF0ZXInO1xuICB9XG4gIGVsc2UgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPiBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnbWluaW11bSc7XG4gIH1cbiAgcmV0dXJuIHZhbGlkYXRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0RGlzcGxheVRleHRGaWVsZFBhcmFtcyhkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtLCBmaWVsZDogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICBpZiAoIWR5bmFtaWNGb3JtIHx8ICFkYXRhPy5yZWNvcmRzPy5sZW5ndGgpIHJldHVybjtcblxuICAgIGR5bmFtaWNGb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKGZvcm1GaWVsZCA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkRJU1BMQVlfVEVYVCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5VGV4dFBhcmFtc1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBmb3JtRmllbGQuZGlzcGxheVRleHRQYXJhbXM7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtS2V5VmFsdWUgPSBwYXJhbXNba2V5XTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbUtleVZhbHVlID09PSAnc3RyaW5nJyAmJiBwYXJhbUtleVZhbHVlLmluY2x1ZGVzKCd7JykgJiYgcGFyYW1LZXlWYWx1ZS5pbmNsdWRlcygnfScpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRQYXJhbSA9IHBhcmFtS2V5VmFsdWUubWF0Y2goL1xceyguKj8pXFx9L2cpOyAvLyBGaW5kIGFsbCBwbGFjZWhvbGRlcnNcbiAgICAgICAgICAgICAgbGV0IG5ld1BhcmFtVmFsdWUgPSBwYXJhbUtleVZhbHVlO1xuXG4gICAgICAgICAgICAgIGlmIChtYXRjaGVkUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkUGFyYW0uZm9yRWFjaCgocGxhY2Vob2xkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBsYWNlaG9sZGVyLnNsaWNlKDEsIC0xKTsgLy8gUmVtb3ZlIHsgYW5kIH1cbiAgICAgICAgICAgICAgICAgIGxldCByZXBsYWNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgZGF0YS5yZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbZmllbGROYW1lXSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZFtmaWVsZE5hbWVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3UGFyYW1WYWx1ZSA9IG5ld1BhcmFtVmFsdWUucmVwbGFjZShwbGFjZWhvbGRlciwgcmVjb3JkW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gU3RvcCBhdCBmaXJzdCBtYXRjaFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhcmFtVmFsdWUgPSBuZXdQYXJhbVZhbHVlLnJlcGxhY2UocGxhY2Vob2xkZXIsICcnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBhcmFtc1trZXldID0gbmV3UGFyYW1WYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcmFtc1trZXldID0gcGFyYW1LZXlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbi8qICNlbmRyZWdpb24gKi9cbiJdfQ==
|