@sapui5/sap.fe.core 1.120.31 → 1.120.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Share.js +2 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1 -0
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +6 -6
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_es.properties +1 -1
- package/src/sap/fe/core/messagebundle_fr.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +1 -1
- package/src/sap/fe/core/messagebundle_no.properties +2 -2
- package/src/sap/fe/core/messagebundle_vi.properties +4 -4
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -415,9 +415,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/uid", "
|
|
|
415
415
|
const oNewChild = document.createElementNS(oNode.namespaceURI, sAggregationName);
|
|
416
416
|
oAggregations[sAggregationName] = oNewChild;
|
|
417
417
|
}
|
|
418
|
-
oAggregations[sAggregationName].appendChild(oFirstElementChild);
|
|
418
|
+
oAggregations[sAggregationName].appendChild(oFirstElementChild.cloneNode(true));
|
|
419
419
|
} else {
|
|
420
|
-
oAggregations[sAggregationName] = oFirstElementChild;
|
|
420
|
+
oAggregations[sAggregationName] = oFirstElementChild.cloneNode(true);
|
|
421
421
|
}
|
|
422
422
|
}
|
|
423
423
|
} else if (Object.keys(oMetadata.properties).includes(sAggregationName)) {
|
|
@@ -929,4 +929,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/uid", "
|
|
|
929
929
|
_exports.xml = xml;
|
|
930
930
|
return _exports;
|
|
931
931
|
}, false);
|
|
932
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dHRVJfU0NPUEUiLCJYTUxURU1QTEFUSU5HX05TIiwiRE9NUGFyc2VySW5zdGFuY2UiLCJET01QYXJzZXIiLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwic05hbWUiLCJtQ29udGV4dHMiLCJvQ29udGV4dFNldHRpbmdzIiwic0tleSIsIm9Db250ZXh0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRPYmplY3QiLCJyZXF1aXJlZCIsIkVycm9yIiwiaGFzT3duUHJvcGVydHkiLCIka2luZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkVHlwZXMiLCJpbmNsdWRlcyIsImdldFBhdGgiLCIkVHlwZSIsImV4cGVjdGVkQW5ub3RhdGlvblR5cGVzIiwidmFsaWRhdGVNYWNyb1NpZ25hdHVyZSIsIm9NZXRhZGF0YSIsIm9Ob2RlIiwiYU1ldGFkYXRhQ29udGV4dEtleXMiLCJtZXRhZGF0YUNvbnRleHRzIiwiT2JqZWN0Iiwia2V5cyIsImFQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIm9BdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwiZm9yRWFjaCIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwiaGFzQXR0cmlidXRlIiwic3RhcnRzV2l0aCIsIkxvZyIsIndhcm5pbmciLCJTQVBfVUlfQ09SRV9FTEVNRU5UIiwiU0FQX1VJX01PREVMX0NPTlRFWFQiLCJ0cmFuc2Zvcm1NZXRhZGF0YSIsImJ1aWxkaW5nQmxvY2tNZXRhZGF0YSIsImFnZ3JlZ2F0aW9ucyIsImRlcGVuZGVudHMiLCJ0eXBlIiwic2xvdCIsImlzUHVibGljIiwiY3VzdG9tRGF0YSIsImxheW91dERhdGEiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyIsIm9TZXR0aW5ncyIsInNBdHRyaWJ1dGVWYWx1ZSIsInNNZXRhUGF0aCIsInNDb250ZXh0UGF0aCIsImN1cnJlbnRDb250ZXh0UGF0aCIsImVuZHNXaXRoIiwibW9kZWwiLCJwYXRoIiwiX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQiLCJzQXR0cmlidXRlTmFtZSIsInJldHVybkNvbnRleHQiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJkYXRhIiwidW5zdG9yZU9iamVjdFZhbHVlIiwic2V0UHJvcGVydHkiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJfZ2V0TWV0YWRhdGFDb250ZXh0Iiwib1Zpc2l0b3IiLCJiRG9Ob3RSZXNvbHZlIiwiaXNPcGVuIiwib01ldGFkYXRhQ29udGV4dCIsImdldEF0dHJpYnV0ZSIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiZ2V0Q29udGV4dCIsImUiLCJwcm9jZXNzUHJvcGVydGllcyIsImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwiYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyIsInByb3BlcnR5VmFsdWVzIiwic0tleVZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVlcENsb25lIiwiZXJyb3IiLCJ2aXNpdEF0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJnZXROYW1lZEl0ZW0iLCJ2YWx1ZSIsIk51bWJlciIsInByb2Nlc3NDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibU1pc3NpbmdDb250ZXh0Iiwib0RlZmluaXRpb25Db250ZXh0cyIsImFEZWZpbml0aW9uQ29udGV4dHNLZXlzIiwiY29udGV4dFBhdGhJbmRleCIsImluZGV4T2YiLCJjb250ZXh0UGF0aERlZmluaXRpb24iLCJzcGxpY2UiLCJwcm9wZXJ0eVZhbHVlIiwibGVuZ3RoIiwibmFtZSIsImFkZFNpbmdsZUNvbnRleHQiLCJwYXJzZUFnZ3JlZ2F0aW9uIiwib0FnZ3JlZ2F0aW9uIiwicHJvY2Vzc0FnZ3JlZ2F0aW9ucyIsIm9PdXRPYmplY3RzIiwiY2hpbGRyZW4iLCJjaGlsZElkeCIsImNoaWxkRGVmaW5pdGlvbiIsImNoaWxkS2V5Iiwic2V0QXR0cmlidXRlIiwiYWdncmVnYXRpb25PYmplY3QiLCJrZXkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiYW5jaG9yIiwidGFnTmFtZSIsIm5vZGVOYW1lIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsImZpcnN0RWxlbWVudENoaWxkIiwib0ZpcnN0RWxlbWVudENoaWxkIiwibmFtZXNwYWNlVVJJIiwib1BhcmVudCIsInBhcmVudE5vZGUiLCJpQ2hpbGRJbmRleCIsIkFycmF5IiwiZnJvbSIsInZpc2l0Tm9kZSIsIm5leHRFbGVtZW50U2libGluZyIsInNDaGlsZE5hbWUiLCJsb2NhbE5hbWUiLCJzQWdncmVnYXRpb25OYW1lIiwidG9VcHBlckNhc2UiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJwYXJzZWRBZ2dyZWdhdGlvbiIsInBhcnNlZEFnZ3JlZ2F0aW9uS2V5Iiwib05leHRDaGlsZCIsIm5leHRDaGlsZCIsImhhc1ZpcnR1YWxOb2RlIiwiY2hpbGRXcmFwcGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsIm9OZXdDaGlsZCIsImFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXMiLCJjaGlsZEluZGV4Iiwic3ViQ2hpbGQiLCJzdWJPYmplY3RLZXkiLCJzdWJPYmplY3QiLCJzdWJDaGlsZEF0dHJpYnV0ZU5hbWVzIiwic3ViQ2hpbGRBdHRyaWJ1dGVOYW1lIiwibXlDaGlsZCIsInB1c2giLCJwcm9jZXNzU2xvdHMiLCJvTWV0YWRhdGFBZ2dyZWdhdGlvbnMiLCJwcm9jZXNzQ3VzdG9tRGF0YSIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvRWxlbWVudENoaWxkIiwic1Nsb3ROYW1lIiwib1RhcmdldEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZSIsInByb2Nlc3NCdWlsZGluZ0Jsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJzRnJhZ21lbnROYW1lIiwiZnJhZ21lbnQiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJ4bWxUYWciLCJnZXRTZXR0aW5ncyIsIkpTT05Nb2RlbCIsImluaXRpYWxLZXlzIiwib0NvbnRyb2xDb25maWciLCJ2aWV3RGF0YSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwicHJvcE5hbWUiLCJvRGF0YSIsIm9yaWdpbmFsRGVmaW5pdGlvbiIsInZhbGlkYXRlIiwiaXNBIiwiZ2V0TW9kZWwiLCJvSW5zdGFuY2UiLCJnZXRQcm9wZXJ0aWVzIiwic0NvbnRleHROYW1lIiwidGFyZ2V0T2JqZWN0IiwiaXNDb250ZXh0IiwiYXR0cmlidXRlVmFsdWUiLCJzdG9yZU9iamVjdFZhbHVlIiwibmV3Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwib1ByZXZpb3VzTWFjcm9JbmZvIiwiY29yZVJlcXVpcmUiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJvQ29udGV4dFZpc2l0b3IiLCJ3aXRoIiwib1Byb21pc2UiLCJpbnNlcnRGcmFnbWVudCIsIm9sZEtleXMiLCJ0ZW1wb3JhcnlPYmplY3RTdG9yZSIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0VGVtcGxhdGUiLCJpc1J1bnRpbWUiLCJzdG9yZUtleSIsImhhc0Vycm9yIiwiaGFzUGFyc2VFcnJvciIsInBhcnNlZFRlbXBsYXRlIiwicGFyc2VYTUxTdHJpbmciLCJlbGVtZW50IiwiaXRlciIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0bm9kZSIsIm5leHROb2RlIiwidGV4dENvbnRlbnQiLCJ0cmltIiwicHJvY2Vzc1htbEluVHJhY2UiLCJpbml0aWFsVGVtcGxhdGUiLCJvRXJyb3JUZXh0IiwiY3JlYXRlRXJyb3JYTUwiLCJtYXAiLCJ0ZW1wbGF0ZSIsIm91dGVySFRNTCIsImpvaW4iLCJ2aXNpdGVkTm9kZXMiLCJpbnRlcm5hbE5vZGUiLCJQcm9taXNlIiwiYWxsIiwicmVtb3ZlIiwicmVzb2x2ZSIsIm9NYWNyb0VsZW1lbnQiLCJvUmVtYWluaW5nU2xvdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwib1Nsb3RFbGVtZW50IiwicmVxdWlyZU9uTWFjcm8iLCJnZXRBdHRyaWJ1dGVOUyIsInN1YnN0cmluZyIsInNldEF0dHJpYnV0ZU5TIiwidHJhY2VEZXRhaWxzIiwiaW5pdGlhbFByb3BlcnRpZXMiLCJyZXNvbHZlZFByb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJvRXJyb3IiLCJzdGFjayIsIm9UZW1wbGF0ZSIsIm9DdHgiLCJtU2V0dGluZyIsImV4IiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIiwidW5yZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJlcnJvck1lc3NhZ2VzIiwieG1sRnJhZ21lbnQiLCJhZGRpdGlvbmFsRGF0YSIsImVycm9yTGFiZWxzIiwiZXJyb3JNZXNzYWdlIiwieG1sIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJlcnJvclN0YWNrIiwic3RhY2tGb3JtYXR0ZWQiLCJidG9hIiwiYWRkaXRpb25hbFRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZUFsbCIsInByb3BlcnR5VUlEIiwidWlkIiwicHJvY2Vzc05leHRYbWxJblRyYWNlIiwibWV0aG9kIiwicmV0dXJuVmFsdWUiLCJ4bWxTdHJpbmciLCJhZGREZWZhdWx0TmFtZXNwYWNlcyIsInhtbERvY3VtZW50IiwicGFyc2VGcm9tU3RyaW5nIiwib3V0cHV0IiwicGFyZW50RWxlbWVudCIsInJlbmRlckluVHJhY2VNb2RlIiwib3V0U3RyIiwieG1sUmVzdWx0IiwiaW5uZXJUZXh0IiwiaW5uZXJIVE1MIiwic3BsaXQiLCJzdHJpbmdzIiwiaSIsInZhbHVlcyIsImlzQXJyYXkiLCJmbGF0IiwiaXNGdW5jdGlvbkFycmF5IiwidmFsdWVmbiIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9wZXJ0eVVJZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9BdHRyaWJ1dGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tCYXNlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0QnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24sXG5cdE9iamVjdFZhbHVlLFxuXHRPYmplY3RWYWx1ZTJcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNDb250ZXh0LCBpc0Z1bmN0aW9uQXJyYXkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWFjcm9JbmZvIH0gZnJvbSBcIi4vVHJhY2VJbmZvXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuL1RyYWNlSW5mb1wiO1xuXG5jb25zdCBMT0dHRVJfU0NPUEUgPSBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuY29uc3QgWE1MVEVNUExBVElOR19OUyA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIjtcbmNvbnN0IERPTVBhcnNlckluc3RhbmNlID0gbmV3IERPTVBhcnNlcigpO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSAmIHtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgbWV0YSBkYXRhIGNvbnRleHRcbiAqL1xudHlwZSBNZXRhRGF0YUNvbnRleHQgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG1vZGVsOiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGN1cnJlbnRDb250ZXh0UGF0aDogQ29udGV4dDtcblx0aXNQdWJsaWM6IGJvb2xlYW47XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRtb2RlbHM6IFJlY29yZDxzdHJpbmcsIE1vZGVsPiAmIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0OiBKU09OTW9kZWw7XG5cdFx0dmlld0RhdGE6IEpTT05Nb2RlbDtcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFwic2FwLmZlLmkxOG5cIj86IFJlc291cmNlTW9kZWw7XG5cdH07XG5cdGJpbmRpbmdDb250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD47XG5cdF9tYWNyb0luZm8/OiBNYWNyb0luZm87XG5cdFtrOiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgSVZpc2l0b3JDYWxsYmFjayA9IHtcblx0Z2V0U2V0dGluZ3MoKTogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0LyoqXG5cdCAqIFZpc2l0cyB0aGUgZ2l2ZW4gbm9kZSBhbmQgZWl0aGVyIHByb2Nlc3NlcyBhIHRlbXBsYXRlIGluc3RydWN0aW9uLCBjYWxsc1xuXHQgKiBhIHZpc2l0b3IsIG9yIHNpbXBseSBjYWxscyBib3RoIHtAbGlua1xuXHQgKiBzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3Nvci5JQ2FsbGJhY2sudmlzaXRBdHRyaWJ1dGVzIHZpc2l0QXR0cmlidXRlc31cblx0ICogYW5kIHtAbGluayBzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3Nvci5JQ2FsbGJhY2sudmlzaXRDaGlsZE5vZGVzXG5cdCAqIHZpc2l0Q2hpbGROb2Rlc30uXG5cdCAqXG5cdCAqIEBwYXJhbSBvTm9kZVxuXHQgKiAgIFRoZSBYTUwgRE9NIG5vZGVcblx0ICogQHJldHVybnNcblx0ICogICBBIHRoZW5hYmxlIHdoaWNoIHJlc29sdmVzIHdpdGggPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhcyBzb29uIGFzIHZpc2l0aW5nXG5cdCAqICAgaXMgZG9uZSwgb3IgaXMgcmVqZWN0ZWQgd2l0aCBhIGNvcnJlc3BvbmRpbmcgZXJyb3IgaWYgdmlzaXRpbmcgZmFpbHNcblx0ICovXG5cdHZpc2l0Tm9kZShvTm9kZTogTm9kZSk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIEluc2VydHMgdGhlIGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gcGxhY2Ugb2YgdGhlIGdpdmVuIGVsZW1lbnQuIExvYWRzIHRoZVxuXHQgKiBmcmFnbWVudCwgdGFrZXMgY2FyZSBvZiBjYWNoaW5nIChmb3IgdGhlIGN1cnJlbnQgcHJlLXByb2Nlc3NvciBydW4pIGFuZCB2aXNpdHMgdGhlXG5cdCAqIGZyYWdtZW50J3MgY29udGVudCBvbmNlIGl0IGhhcyBiZWVuIGltcG9ydGVkIGludG8gdGhlIGVsZW1lbnQncyBvd25lciBkb2N1bWVudCBhbmRcblx0ICogcHV0IGludG8gcGxhY2UuIExvYWRpbmcgb2YgZnJhZ21lbnRzIGlzIGFzeW5jaHJvbm91cyBpZiB0aGUgdGVtcGxhdGUgdmlldyBpc1xuXHQgKiBhc3luY2hyb25vdXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRnJhZ21lbnRcblx0ICogICB0aGUgZnJhZ21lbnQncyByZXNvbHZlZCBuYW1lXG5cdCAqIEBwYXJhbSBvRWxlbWVudFxuXHQgKiAgIHRoZSBYTUwgRE9NIGVsZW1lbnQsIGUuZy4gPHNhcC51aS5jb3JlOkZyYWdtZW50PiBvciA8Y29yZTpFeHRlbnNpb25Qb2ludD5cblx0ICogQHBhcmFtIG9XaXRoXG5cdCAqICAgdGhlIHBhcmVudCdzIFwid2l0aFwiIGNvbnRyb2xcblx0ICogQHJldHVybnNcblx0ICogQSBzeW5jIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGFzIHNvb24gYXMgdGhlIGZyYWdtZW50XG5cdCAqICAgaGFzIGJlZW4gaW5zZXJ0ZWQsIG9yIGlzIHJlamVjdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nIGVycm9yIGlmIGxvYWRpbmcgb3IgdmlzaXRpbmdcblx0ICogICBmYWlscy5cblx0ICovXG5cdGluc2VydEZyYWdtZW50KHNGcmFnbWVudDogc3RyaW5nLCBvRWxlbWVudDogRWxlbWVudCwgb1dpdGg/OiBDb250cm9sKTogUHJvbWlzZTx2b2lkPjtcblx0dmlzaXRBdHRyaWJ1dGUob05vZGU6IEVsZW1lbnQsIG9BdHRyaWJ1dGU6IEF0dHIpOiBQcm9taXNlPHZvaWQ+O1xuXHR2aXNpdEF0dHJpYnV0ZXMob05vZGU6IEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRWaWV3SW5mbygpOiBQcm9taXNlPHVua25vd24+O1xuXHR2aXNpdENoaWxkTm9kZXMob05vZGU6IE5vZGUpOiBQcm9taXNlPHZvaWQ+O1xuXHQvKipcblx0ICogSW50ZXJwcmV0cyB0aGUgZ2l2ZW4gWE1MIERPTSBhdHRyaWJ1dGUgdmFsdWUgYXMgYSBiaW5kaW5nIGFuZCByZXR1cm5zIHRoZVxuXHQgKiByZXN1bHRpbmcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVmFsdWVcblx0ICogICBBbiBYTUwgRE9NIGF0dHJpYnV0ZSB2YWx1ZVxuXHQgKiBAcGFyYW0gW2VsZW1lbnRdXG5cdCAqICAgVGhlIFhNTCBET00gZWxlbWVudCB0aGUgYXR0cmlidXRlIHZhbHVlIGJlbG9uZ3MgdG8gKG5lZWRlZCBvbmx5IGZvclxuXHQgKiAgIHdhcm5pbmdzIHdoaWNoIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUpXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSB0aGVuYWJsZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSByZXN1bHRpbmcgdmFsdWUsIG9yIGlzIHJlamVjdGVkIHdpdGggYVxuXHQgKiAgIGNvcnJlc3BvbmRpbmcgZXJyb3IgKGZvciBleGFtcGxlLCBhbiBlcnJvciB0aHJvd24gYnkgYSBmb3JtYXR0ZXIpIG9yXG5cdCAqICAgPGNvZGU+bnVsbDwvY29kZT4gaW4gY2FzZSB0aGUgYmluZGluZyBpcyBub3QgcmVhZHkgKGJlY2F1c2UgaXQgcmVmZXJzIHRvIGFcblx0ICogICBtb2RlbCB3aGljaCBpcyBub3QgYXZhaWxhYmxlKSAoc2luY2UgMS41Ny4wKVxuXHQgKi9cblx0Z2V0UmVzdWx0KHNWYWx1ZTogc3RyaW5nLCBlbGVtZW50PzogRWxlbWVudCk6IFByb21pc2U8Q29udGV4dD4gfCBudWxsO1xuXHRnZXRDb250ZXh0KHNQYXRoPzogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0LyoqXG5cdCAqIFJldHVybnMgYSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBtYXAgb2YgdmFyaWFibGVzIHdoaWNoXG5cdCAqIG92ZXJyaWRlIGN1cnJlbnRseSBrbm93biB2YXJpYWJsZXMgb2YgdGhlIHNhbWUgbmFtZSBpbiA8Y29kZT50aGlzPC9jb2RlPlxuXHQgKiBwYXJlbnQgaW50ZXJmYWNlIG9yIHJlcGxhY2UgdGhlbSBhbHRvZ2V0aGVyLiBFYWNoIHZhcmlhYmxlIG5hbWUgYmVjb21lcyBhXG5cdCAqIG5hbWVkIG1vZGVsIHdpdGggYSBjb3JyZXNwb25kaW5nIG9iamVjdCBiaW5kaW5nIGFuZCBjYW4gYmUgdXNlZCBpbnNpZGUgdGhlXG5cdCAqIFhNTCB0ZW1wbGF0ZSBpbiB0aGUgdXN1YWwgd2F5LCB0aGF0IGlzLCB3aXRoIGEgYmluZGluZyBleHByZXNzaW9uIGxpa2Vcblx0ICogPGNvZGU+XCJ7dmFyPnNvbWUvcmVsYXRpdmUvcGF0aH1cIjwvY29kZT4gKHNlZSBleGFtcGxlKS5cblx0ICpcblx0ICogQHBhcmFtIFttVmFyaWFibGVzPXt9XVxuXHQgKiAgIE1hcCBmcm9tIHZhcmlhYmxlIG5hbWUgKHN0cmluZykgdG8gdmFsdWVcblx0ICogQHBhcmFtIFtiUmVwbGFjZV1cblx0ICogICBXaGV0aGVyIG9ubHkgdGhlIGdpdmVuIHZhcmlhYmxlcyBhcmUga25vd24gaW4gdGhlIG5ldyBjYWxsYmFjayBpbnRlcmZhY2Vcblx0ICogICBpbnN0YW5jZSwgbm8gaW5oZXJpdGVkIG9uZXNcblx0ICogQHJldHVybnNcblx0ICogICBBIGNhbGxiYWNrIGludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gbVZhcmlhYmxlc1xuXHQgKiBAcGFyYW0gYlJlcGxhY2Vcblx0ICovXG5cdFwid2l0aFwiKG1WYXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0PiwgYlJlcGxhY2U/OiBib29sZWFuKTogSVZpc2l0b3JDYWxsYmFjaztcbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTWFjcm9NZXRhZGF0YUNvbnRleHQoXG5cdHNOYW1lOiBzdHJpbmcsXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sXG5cdG9Db250ZXh0U2V0dGluZ3M6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uLFxuXHRzS2V5OiBzdHJpbmdcbik6IHZvaWQge1xuXHRjb25zdCBvQ29udGV4dCA9IG1Db250ZXh0c1tzS2V5XTtcblx0Y29uc3Qgb0NvbnRleHRPYmplY3QgPSBvQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMge1xuXHRcdCRUeXBlPzogc3RyaW5nO1xuXHRcdCRraW5kPzogc3RyaW5nO1xuXHR9O1xuXG5cdGlmIChvQ29udGV4dFNldHRpbmdzLnJlcXVpcmVkID09PSB0cnVlICYmICghb0NvbnRleHQgfHwgb0NvbnRleHRPYmplY3QgPT09IG51bGwpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGAke3NOYW1lfTogUmVxdWlyZWQgbWV0YWRhdGFDb250ZXh0ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdH0gZWxzZSBpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHQvLyBJZiBjb250ZXh0IG9iamVjdCBoYXMgJGtpbmQgcHJvcGVydHksICRUeXBlIHNob3VsZCBub3QgYmUgY2hlY2tlZFxuXHRcdC8vIFRoZXJlZm9yZSByZW1vdmUgZnJvbSBjb250ZXh0IHNldHRpbmdzXG5cdFx0aWYgKG9Db250ZXh0T2JqZWN0Lmhhc093blByb3BlcnR5KFwiJGtpbmRcIikgJiYgb0NvbnRleHRPYmplY3QuJGtpbmQgIT09IHVuZGVmaW5lZCAmJiBvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkVHlwZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlICRraW5kIGlzIHBhcnQgb2YgdGhlIGFsbG93ZWQgb25lc1xuXHRcdFx0aWYgKCFvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkVHlwZXMuaW5jbHVkZXMob0NvbnRleHRPYmplY3QuJGtpbmQpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgJHtzTmFtZX06ICcke3NLZXl9JyBtdXN0IGJlICcka2luZCcgJyR7b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzfScgYnV0IGlzICcke1xuXHRcdFx0XHRcdFx0b0NvbnRleHRPYmplY3QuJGtpbmRcblx0XHRcdFx0XHR9JzogJHtvQ29udGV4dC5nZXRQYXRoKCl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpICYmXG5cdFx0XHRvQ29udGV4dE9iamVjdC4kVHlwZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkQW5ub3RhdGlvblR5cGVzXG5cdFx0KSB7XG5cdFx0XHQvLyBDaGVjayBvbmx5ICRUeXBlXG5cdFx0XHRpZiAoIW9Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXMuaW5jbHVkZXMob0NvbnRleHRPYmplY3QuJFR5cGUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgJHtzTmFtZX06ICcke3NLZXl9JyBtdXN0IGJlICckVHlwZScgJyR7b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZEFubm90YXRpb25UeXBlc30nIGJ1dCBpcyAnJHtcblx0XHRcdFx0XHRcdG9Db250ZXh0T2JqZWN0LiRUeXBlXG5cdFx0XHRcdFx0fSc6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlKFxuXHRzTmFtZTogc3RyaW5nLFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LFxuXHRvTm9kZTogRWxlbWVudFxuKTogdm9pZCB7XG5cdGNvbnN0IGFNZXRhZGF0YUNvbnRleHRLZXlzID0gKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKSkgfHwgW10sXG5cdFx0YVByb3BlcnRpZXMgPSAob01ldGFkYXRhLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMob01ldGFkYXRhLnByb3BlcnRpZXMpKSB8fCBbXSxcblx0XHRvQXR0cmlidXRlTmFtZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cblx0Ly8gY29sbGVjdCBhbGwgYXR0cmlidXRlcyB0byBmaW5kIHVuY2hlY2tlZCBwcm9wZXJ0aWVzXG5cdGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gb05vZGUuZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0Zm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG5cdFx0b0F0dHJpYnV0ZU5hbWVzW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblx0fVxuXG5cdC8vQ2hlY2sgbWV0YWRhdGFDb250ZXh0c1xuXHRhTWV0YWRhdGFDb250ZXh0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0Y29uc3Qgb0NvbnRleHRTZXR0aW5ncyA9IG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NLZXldO1xuXG5cdFx0dmFsaWRhdGVNYWNyb01ldGFkYXRhQ29udGV4dChzTmFtZSwgbUNvbnRleHRzLCBvQ29udGV4dFNldHRpbmdzLCBzS2V5KTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZU5hbWVzW3NLZXldO1xuXHR9KTtcblx0Ly9DaGVjayBwcm9wZXJ0aWVzXG5cdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRjb25zdCBvUHJvcGVydHlTZXR0aW5ncyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzW3NLZXldO1xuXHRcdGlmICghb05vZGUuaGFzQXR0cmlidXRlKHNLZXkpKSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5U2V0dGluZ3MucmVxdWlyZWQgJiYgIW9Qcm9wZXJ0eVNldHRpbmdzLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgJHtzTmFtZX06IGAgKyBgUmVxdWlyZWQgcHJvcGVydHkgJyR7c0tleX0nIGlzIG1pc3NpbmdgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVOYW1lc1tzS2V5XTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIFVuY2hlY2tlZCBwcm9wZXJ0aWVzXG5cdE9iamVjdC5rZXlzKG9BdHRyaWJ1dGVOYW1lcykuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0Ly8gbm8gY2hlY2sgZm9yIHByb3BlcnRpZXMgd2hpY2ggY29udGFpbiBhIGNvbG9uIFwiOlwiIChkaWZmZXJlbnQgbmFtZXNwYWNlKSwgZS5nLiB4bWxuczp0cmFjZSwgdHJhY2U6bWFjcm9JRCwgdW5pdHRlc3Q6aWRcblx0XHRpZiAoIXNLZXkuaW5jbHVkZXMoXCI6XCIpICYmICFzS2V5LnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0TG9nLndhcm5pbmcoYFVuY2hlY2tlZCBwYXJhbWV0ZXI6ICR7c05hbWV9OiAke3NLZXl9YCwgdW5kZWZpbmVkLCBMT0dHRVJfU0NPUEUpO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IFNBUF9VSV9DT1JFX0VMRU1FTlQgPSBcInNhcC51aS5jb3JlLkVsZW1lbnRcIjtcblxuZXhwb3J0IGNvbnN0IFNBUF9VSV9NT0RFTF9DT05URVhUID0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIG1ldGFkYXRhIG9mIGEgYnVpbGRpbmcgYmxvY2sgYnkgYWRkaW5nIGFkZGl0aW9uYWwgYWdncmVnYXRpb25zLFxuICogYW5kIHNwbGl0dGluZyBwcm9wZXJ0aWVzIGludG8gYWN0dWFsIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIGNvbnRleHRzLlxuICpcbiAqIEBwYXJhbSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEgVGhlIG1ldGFkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGlucHV0XG4gKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtTWV0YWRhdGEoYnVpbGRpbmdCbG9ja01ldGFkYXRhOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEpOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGNvbnN0IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4gPSB7XG5cdFx0ZGVwZW5kZW50czoge1xuXHRcdFx0dHlwZTogU0FQX1VJX0NPUkVfRUxFTUVOVCxcblx0XHRcdHNsb3Q6IFwiZGVwZW5kZW50c1wiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9LFxuXHRcdGN1c3RvbURhdGE6IHtcblx0XHRcdHR5cGU6IFNBUF9VSV9DT1JFX0VMRU1FTlQsXG5cdFx0XHRzbG90OiBcImN1c3RvbURhdGFcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fSxcblx0XHRsYXlvdXREYXRhOiB7XG5cdFx0XHR0eXBlOiBTQVBfVUlfQ09SRV9FTEVNRU5ULFxuXHRcdFx0c2xvdDogXCJsYXlvdXREYXRhXCIsXG5cdFx0XHRpc1B1YmxpYzogdHJ1ZVxuXHRcdH0sXG5cdFx0Li4uYnVpbGRpbmdCbG9ja01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1xuXHR9O1xuXHRjb25zdCBtZXRhZGF0YUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllcykpIHtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGU7XG5cblx0XHRpZiAocHJvcGVydHlUeXBlICE9PSBTQVBfVUlfTU9ERUxfQ09OVEVYVCkge1xuXHRcdFx0cHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cblx0XHRpZiAoW1NBUF9VSV9NT0RFTF9DT05URVhULCBcIm9iamVjdFwiLCBcImFycmF5XCJdLmluY2x1ZGVzKHByb3BlcnR5VHlwZSkpIHtcblx0XHRcdC8vIEV4cGxpY2l0bHkgZGVmaW5lZCBjb250ZXh0cywgb2JqZWN0cywgYW5kIGFycmF5cyBtYXkgY29tZSBmcm9tIHRoZSBtZXRhZGF0YUNvbnRleHRcblx0XHRcdG1ldGFkYXRhQ29udGV4dHNbcHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gYXMgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb247XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5idWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdFx0cHJvcGVydGllcyxcblx0XHRtZXRhZGF0YUNvbnRleHRzLFxuXHRcdGFnZ3JlZ2F0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgYWJzb2x1dGUgb3IgY29udGV4dCBwYXRocyBhbmQgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSBNZXRhQ29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb1NldHRpbmdzIEFkZGl0aW9uYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSBzQXR0cmlidXRlVmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMgVGhlIG1ldGEgZGF0YSBjb250ZXh0IG9iamVjdFxuICovXG5mdW5jdGlvbiBfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyhvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsIHNBdHRyaWJ1dGVWYWx1ZTogc3RyaW5nKTogTWV0YURhdGFDb250ZXh0IHtcblx0bGV0IHNNZXRhUGF0aDogc3RyaW5nO1xuXHRpZiAoc0F0dHJpYnV0ZVZhbHVlICYmIHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIGFic29sdXRlIHBhdGggLSB3ZSBqdXN0IHVzZSB0aGlzIG9uZVxuXHRcdHNNZXRhUGF0aCA9IHNBdHRyaWJ1dGVWYWx1ZTtcblx0fSBlbHNlIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aC5nZXRQYXRoKCk7XG5cdFx0aWYgKCFzQ29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggKz0gXCIvXCI7XG5cdFx0fVxuXHRcdHNNZXRhUGF0aCA9IHNDb250ZXh0UGF0aCArIHNBdHRyaWJ1dGVWYWx1ZTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdHBhdGg6IHNNZXRhUGF0aFxuXHR9O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGhlbHBzIHRvIGNyZWF0ZSB0aGUgbWV0YWRhdGEgY29udGV4dCBpbiBjYXNlIGl0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gb1NldHRpbmdzIEFkZGl0aW9uYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSBzQXR0cmlidXRlTmFtZSBUaGUgYXR0cmlidXRlIG5hbWVcbiAqIEBwYXJhbSBzQXR0cmlidXRlVmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMgVGhlIG1ldGEgZGF0YSBjb250ZXh0IG9iamVjdFxuICovXG5mdW5jdGlvbiBfY3JlYXRlSW5pdGlhbE1ldGFkYXRhQ29udGV4dChcblx0b1NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRzQXR0cmlidXRlVmFsdWU6IHN0cmluZ1xuKTogTWV0YURhdGFDb250ZXh0IHtcblx0bGV0IHJldHVybkNvbnRleHQ6IE1ldGFEYXRhQ29udGV4dDtcblx0aWYgKHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL3VpZC0tXCIpICYmICFvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuZ2V0UHJvcGVydHkoc0F0dHJpYnV0ZVZhbHVlKSkge1xuXHRcdGNvbnN0IGRhdGEgPSB1bnN0b3JlT2JqZWN0VmFsdWUoc0F0dHJpYnV0ZVZhbHVlKTtcblx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc0F0dHJpYnV0ZVZhbHVlLCBkYXRhKTtcblx0XHRyZXR1cm5Db250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IFwiY29udmVydGVyQ29udGV4dFwiLFxuXHRcdFx0cGF0aDogc0F0dHJpYnV0ZVZhbHVlXG5cdFx0fTtcblx0fSBlbHNlIGlmICgoc0F0dHJpYnV0ZU5hbWUgPT09IFwibWV0YVBhdGhcIiAmJiBvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoKSB8fCBzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSB7XG5cdFx0cmV0dXJuQ29udGV4dCA9IF9jaGVja0Fic29sdXRlQW5kQ29udGV4dFBhdGhzKG9TZXR0aW5ncywgc0F0dHJpYnV0ZVZhbHVlKTtcblx0fSBlbHNlIGlmIChzQXR0cmlidXRlVmFsdWUgJiYgc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0Ly8gYWJzb2x1dGUgcGF0aCAtIHdlIGp1c3QgdXNlIHRoaXMgb25lXG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdFx0cGF0aDogc0F0dHJpYnV0ZVZhbHVlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm5Db250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IFwibWV0YU1vZGVsXCIsXG5cdFx0XHRwYXRoOiBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmVudGl0eVNldCA/IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuZW50aXR5U2V0LmdldFBhdGgoc0F0dHJpYnV0ZVZhbHVlKSA6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHJldHVybkNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRNZXRhZGF0YUNvbnRleHQoXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0b05vZGU6IEVsZW1lbnQsXG5cdHNBdHRyaWJ1dGVOYW1lOiBzdHJpbmcsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRiRG9Ob3RSZXNvbHZlOiBib29sZWFuLFxuXHRpc09wZW46IGJvb2xlYW5cbik6IE1ldGFEYXRhQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvTWV0YWRhdGFDb250ZXh0OiBNZXRhRGF0YUNvbnRleHQgfCB1bmRlZmluZWQ7XG5cdGlmICghYkRvTm90UmVzb2x2ZSAmJiBvTm9kZS5oYXNBdHRyaWJ1dGUoc0F0dHJpYnV0ZU5hbWUpKSB7XG5cdFx0Y29uc3Qgc0F0dHJpYnV0ZVZhbHVlID0gb05vZGUuZ2V0QXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKSBhcyBzdHJpbmc7XG5cdFx0b01ldGFkYXRhQ29udGV4dCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzQXR0cmlidXRlVmFsdWUpO1xuXHRcdGlmICghb01ldGFkYXRhQ29udGV4dCkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IF9jcmVhdGVJbml0aWFsTWV0YWRhdGFDb250ZXh0KG9TZXR0aW5ncywgc0F0dHJpYnV0ZU5hbWUsIHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpKSB7XG5cdFx0b01ldGFkYXRhQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBzQXR0cmlidXRlTmFtZSxcblx0XHRcdHBhdGg6IFwiXCJcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGlzT3Blbikge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAob1Zpc2l0b3IuZ2V0Q29udGV4dChgJHtzQXR0cmlidXRlTmFtZX0+YCkpIHtcblx0XHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IHtcblx0XHRcdFx0XHRtb2RlbDogc0F0dHJpYnV0ZU5hbWUsXG5cdFx0XHRcdFx0cGF0aDogXCJcIlxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvTWV0YWRhdGFDb250ZXh0O1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBpbmNvbWluZyBYTUwgbm9kZSBhbmQgdHJ5IHRvIHJlc29sdmUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb01ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gb05vZGUgVGhlIFhNTCBub2RlIHRvIHBhcnNlXG4gKiBAcGFyYW0gaXNQdWJsaWMgV2hldGhlciB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpbiBhIHB1YmxpYyBjb250ZXh0IG9yIG5vdFxuICogQHBhcmFtIG9WaXNpdG9yIFRoZSB2aXNpdG9yIGluc3RhbmNlXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHByb3BlcnRpZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMoXG5cdG9NZXRhZGF0YTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2tcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+PiB7XG5cdGNvbnN0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gb01ldGFkYXRhLnByb3BlcnRpZXM7XG5cblx0Ly8gUmV0cmlldmUgcHJvcGVydGllcyB2YWx1ZXNcblx0Y29uc3QgYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluaXRpb25Qcm9wZXJ0aWVzKTtcblxuXHRjb25zdCBwcm9wZXJ0eVZhbHVlczogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+ID0ge307XG5cdGZvciAoY29uc3Qgc0tleVZhbHVlIG9mIGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMpIHtcblx0XHRpZiAoZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID1cblx0XHRcdFx0ZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5kZWZhdWx0VmFsdWUgJiYgZGVlcENsb25lKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlKTsgLy8gVG8gYXZvaWQgdmFsdWVzIGJlaW5nIHJldXNlZCBhY3Jvc3MgbWFjcm9zXG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BlcnR5VmFsdWVzW3NLZXlWYWx1ZV0gPSBkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleVZhbHVlKSAmJiBpc1B1YmxpYyAmJiBkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmlzUHVibGljID09PSBmYWxzZSkge1xuXHRcdFx0TG9nLmVycm9yKGBQcm9wZXJ0eSAke3NLZXlWYWx1ZX0gd2FzIGlnbm9yZWQgYXMgaXQgaXMgbm90IGludGVuZGVkIGZvciBwdWJsaWMgdXNhZ2VgKTtcblx0XHR9IGVsc2UgaWYgKG9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5VmFsdWUpKSB7XG5cdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdEF0dHJpYnV0ZShvTm9kZSwgb05vZGUuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oc0tleVZhbHVlKSBhcyBBdHRyKTtcblx0XHRcdGxldCB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBvTm9kZS5nZXRBdHRyaWJ1dGUoc0tleVZhbHVlKTtcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVZhbHVlcztcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgaW5jb21pbmcgWE1MIG5vZGUgYW5kIHRyeSB0byByZXNvbHZlIHRoZSBiaW5kaW5nIGNvbnRleHRzIGRlZmluZWQgaW5zaWRlLlxuICpcbiAqIEBwYXJhbSBvTWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBvU2V0dGluZ3MgVGhlIHNldHRpbmdzIG9iamVjdFxuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSB0byBwYXJzZVxuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHBhcmFtIG1Db250ZXh0cyBUaGUgY29udGV4dHMgdG8gYmUgdXNlZFxuICogQHBhcmFtIHByb3BlcnR5VmFsdWVzIFRoZSBjdXJyZW50IHByb3BlcnR5IHZhbHVlc1xuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBhbmQgbWlzc2luZyBjb250ZXh0c1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29udGV4dHMoXG5cdG9NZXRhZGF0YTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0b05vZGU6IEVsZW1lbnQsXG5cdGlzUHVibGljOiBib29sZWFuLFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0bUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pixcblx0cHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPlxuKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuXHRvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoID0gb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5jb250ZXh0UGF0aDtcblx0Y29uc3QgbU1pc3NpbmdDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBvRGVmaW5pdGlvbkNvbnRleHRzID0gb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHM7XG5cdGNvbnN0IGFEZWZpbml0aW9uQ29udGV4dHNLZXlzID0gT2JqZWN0LmtleXMob0RlZmluaXRpb25Db250ZXh0cyk7XG5cdC8vIFNpbmNlIHRoZSBtZXRhUGF0aCBhbmQgb3RoZXIgcHJvcGVydHkgY2FuIGJlIHJlbGF0aXZlIHRvIHRoZSBjb250ZXh0UGF0aCB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoIGZpcnN0XG5cdGNvbnN0IGNvbnRleHRQYXRoSW5kZXggPSBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5pbmRleE9mKFwiY29udGV4dFBhdGhcIik7XG5cdGlmIChjb250ZXh0UGF0aEluZGV4ICE9PSAtMSkge1xuXHRcdC8vIElmIGl0IGlzIGRlZmluZWQgd2UgZXh0cmFjdCBpdCBhbmQgcmVpbnNlcnQgaXQgaW4gdGhlIGZpcnN0IHBvc2l0aW9uIG9mIHRoZSBhcnJheVxuXHRcdGNvbnN0IGNvbnRleHRQYXRoRGVmaW5pdGlvbiA9IGFEZWZpbml0aW9uQ29udGV4dHNLZXlzLnNwbGljZShjb250ZXh0UGF0aEluZGV4LCAxKTtcblx0XHRhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5zcGxpY2UoMCwgMCwgY29udGV4dFBhdGhEZWZpbml0aW9uWzBdKTtcblx0fVxuXHRmb3IgKGNvbnN0IHNBdHRyaWJ1dGVOYW1lIG9mIGFEZWZpbml0aW9uQ29udGV4dHNLZXlzKSB7XG5cdFx0Ly8gSWYgdGhlIGNvbnRleHQgd2FzIHJlc29sdmVkIGFzIGEgcHJvcGVydHkgKGJpbmRpbmcgLyB4bWwgYWdncmVnYXRpb24pIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byByZXNvbHZlIGl0IGhlcmUuXG5cdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWUgYXMgb2JqZWN0KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRkZWxldGUgb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGJEb05vdFJlc29sdmUgPSBpc1B1YmxpYyAmJiBvRGVmaW5pdGlvbkNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXS5pc1B1YmxpYyA9PT0gZmFsc2UgJiYgb05vZGUuaGFzQXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKTtcblx0XHRjb25zdCBvTWV0YWRhdGFDb250ZXh0ID0gX2dldE1ldGFkYXRhQ29udGV4dChvU2V0dGluZ3MsIG9Ob2RlLCBzQXR0cmlidXRlTmFtZSwgb1Zpc2l0b3IsIGJEb05vdFJlc29sdmUsIG9NZXRhZGF0YS5pc09wZW4gPz8gZmFsc2UpO1xuXHRcdGlmIChvTWV0YWRhdGFDb250ZXh0KSB7XG5cdFx0XHRvTWV0YWRhdGFDb250ZXh0Lm5hbWUgPSBzQXR0cmlidXRlTmFtZTtcblx0XHRcdGFkZFNpbmdsZUNvbnRleHQobUNvbnRleHRzLCBvVmlzaXRvciwgb01ldGFkYXRhQ29udGV4dCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChzQXR0cmlidXRlTmFtZSA9PT0gXCJlbnRpdHlTZXRcIiB8fCBzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSAmJlxuXHRcdFx0XHQhb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5oYXNPd25Qcm9wZXJ0eShzQXR0cmlidXRlTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHRvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXSA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdFx0XHRvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmIChtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0F0dHJpYnV0ZU5hbWVdID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHQvLyBJZiB0aGUgYmluZGluZyBjb3VsZG4ndCBiZSByZXNvbHZlZCBjb25zaWRlciB0aGF0IHRoZXJlIHdhcyBubyB2YWx1ZSBoZXJlXG5cdFx0XHRcdGRlbGV0ZSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1NaXNzaW5nQ29udGV4dFtzQXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbU1pc3NpbmdDb250ZXh0O1xufVxuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRwb3NpdGlvbjogUG9zaXRpb247XG5cdHR5cGU6IFwiU2xvdFwiO1xufTtcbmZ1bmN0aW9uIHBhcnNlQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uPzogRWxlbWVudCwgcHJvY2Vzc0FnZ3JlZ2F0aW9ucz86IEZ1bmN0aW9uKTogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uPiB7XG5cdGNvbnN0IG9PdXRPYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24+ID0ge307XG5cdGlmIChvQWdncmVnYXRpb24gJiYgb0FnZ3JlZ2F0aW9uLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjaGlsZHJlbiA9IG9BZ2dyZWdhdGlvbi5jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZERlZmluaXRpb24gPSBjaGlsZHJlbltjaGlsZElkeF07XG5cdFx0XHRsZXQgY2hpbGRLZXkgPSBjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIHx8IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRcdGlmIChjaGlsZEtleSkge1xuXHRcdFx0XHRjaGlsZEtleSA9IGBJbmxpbmVYTUxfJHtjaGlsZEtleX1gO1xuXHRcdFx0XHRjaGlsZERlZmluaXRpb24uc2V0QXR0cmlidXRlKFwia2V5XCIsIGNoaWxkS2V5KTtcblx0XHRcdFx0bGV0IGFnZ3JlZ2F0aW9uT2JqZWN0OiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24gPSB7XG5cdFx0XHRcdFx0a2V5OiBjaGlsZEtleSxcblx0XHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiAoY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcInBsYWNlbWVudFwiKSBhcyBQbGFjZW1lbnQpIHx8IFBsYWNlbWVudC5BZnRlcixcblx0XHRcdFx0XHRcdGFuY2hvcjogY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImFuY2hvclwiKSB8fCB1bmRlZmluZWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwcm9jZXNzQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25PYmplY3QgPSBwcm9jZXNzQWdncmVnYXRpb25zKGNoaWxkRGVmaW5pdGlvbiwgYWdncmVnYXRpb25PYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9PdXRPYmplY3RzW2FnZ3JlZ2F0aW9uT2JqZWN0LmtleV0gPSBhZ2dyZWdhdGlvbk9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoY2hpbGREZWZpbml0aW9uLnRhZ05hbWUgIT09IFwic2xvdFwiKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgVGhlIGFnZ3JlZ2F0aW9uICR7Y2hpbGREZWZpbml0aW9uLm5vZGVOYW1lfSBpcyBtaXNzaW5nIGEgS2V5IGF0dHJpYnV0ZS4gSXQgaXMgbm90IGRpc3BsYXllZGApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb091dE9iamVjdHM7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgYW5kIHBhcnNlcyB0aGVtIGFzIGVpdGhlciBhZ2dyZWdhdGlvbnMgb3Igb2JqZWN0LS9hcnJheS1iYXNlZCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSBmb3Igd2hpY2ggdG8gcHJvY2VzcyB0aGUgY2hpbGRyZW5cbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHBhcmFtIG9NZXRhZGF0YSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlcyBUaGUgdmFsdWVzIG9mIGFscmVhZHkgcGFyc2VkIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIGNoaWxkcmVuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbihcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0cHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPlxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBFbGVtZW50Pj4ge1xuXHRjb25zdCBvQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50PiA9IHt9O1xuXHRpZiAob05vZGUuZmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRsZXQgb0ZpcnN0RWxlbWVudENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG9Ob2RlLmZpcnN0RWxlbWVudENoaWxkIGFzIEVsZW1lbnQgfCBudWxsO1xuXG5cdFx0d2hpbGUgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZC5uYW1lc3BhY2VVUkkgPT09IFhNTFRFTVBMQVRJTkdfTlMpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB3ZSBlbmNvdW50ZXIgYSB0ZW1wbGF0aW5nIHRhZywgcnVuIHRoZSB2aXNpdG9yIG9uIGl0IGFuZCBjb250aW51ZSB3aXRoIHRoZSByZXN1bHRpbmcgY2hpbGRcblx0XHRcdFx0Y29uc3Qgb1BhcmVudCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5wYXJlbnROb2RlO1xuXHRcdFx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGlDaGlsZEluZGV4ID0gQXJyYXkuZnJvbShvUGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF0gPyBvUGFyZW50LmNoaWxkcmVuW2lDaGlsZEluZGV4XSA6IG51bGw7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gTm90IHN1cmUgaG93IHRoaXMgY291bGQgaGFwcGVuIGJ1dCBJIGFsc28gZG9uJ3Qgd2FudCB0byBjcmVhdGUgaW5maW5pdGUgbG9vcHNcblx0XHRcdFx0XHRvRmlyc3RFbGVtZW50Q2hpbGQgPSBvRmlyc3RFbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdFx0bGV0IHNBZ2dyZWdhdGlvbk5hbWUgPSBzQ2hpbGROYW1lO1xuXHRcdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZVswXS50b1VwcGVyQ2FzZSgpID09PSBzQWdncmVnYXRpb25OYW1lWzBdKSB7XG5cdFx0XHRcdFx0Ly8gbm90IGEgc3ViIGFnZ3JlZ2F0aW9uLCBnbyBiYWNrIHRvIGRlZmF1bHQgQWdncmVnYXRpb25cblx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lID0gb01ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiB8fCBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24gIT09IHVuZGVmaW5lZCAmJiAhYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QpIHtcblx0XHRcdFx0XHRjb25zdCBwYXJzZWRBZ2dyZWdhdGlvbiA9IHBhcnNlQWdncmVnYXRpb24ob0ZpcnN0RWxlbWVudENoaWxkLCBhZ2dyZWdhdGlvbkRlZmluaXRpb24ucHJvY2Vzc0FnZ3JlZ2F0aW9ucyk7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBwYXJzZWRBZ2dyZWdhdGlvbjtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcnNlZEFnZ3JlZ2F0aW9uS2V5IGluIHBhcnNlZEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRvTWV0YWRhdGEuYWdncmVnYXRpb25zW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XSA9IHBhcnNlZEFnZ3JlZ2F0aW9uW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvRmlyc3RFbGVtZW50Q2hpbGQgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR3aGlsZSAob0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBvTmV4dENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lWzBdLnRvVXBwZXJDYXNlKCkgPT09IHNBZ2dyZWdhdGlvbk5hbWVbMF0pIHtcblx0XHRcdFx0Ly8gbm90IGEgc3ViIGFnZ3JlZ2F0aW9uLCBnbyBiYWNrIHRvIGRlZmF1bHQgQWdncmVnYXRpb25cblx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0T2JqZWN0LmtleXMob01ldGFkYXRhLmFnZ3JlZ2F0aW9ucykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkgJiZcblx0XHRcdFx0KCFpc1B1YmxpYyB8fCBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLmlzUHVibGljID09PSB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdGlmICghYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QgJiYgb0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsICYmIG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0bGV0IGNoaWxkRGVmaW5pdGlvbiA9IG9GaXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0XHR3aGlsZSAoY2hpbGREZWZpbml0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0Q2hpbGQgPSBjaGlsZERlZmluaXRpb24ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkRlZmluaXRpb24uaGFzVmlydHVhbE5vZGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9Ob2RlLm5hbWVzcGFjZVVSSSwgY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSEpO1xuXHRcdFx0XHRcdFx0XHRjaGlsZFdyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGREZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIV0gPSBjaGlsZFdyYXBwZXI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW2NoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikhXSA9IGNoaWxkRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLnJlbW92ZUF0dHJpYnV0ZShcImtleVwiKTtcblx0XHRcdFx0XHRcdGNoaWxkRGVmaW5pdGlvbiA9IG5leHRDaGlsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QpIHtcblx0XHRcdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdE5vZGUob0ZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSAhPT0gc0NoaWxkTmFtZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb05ld0NoaWxkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5hcHBlbmRDaGlsZChvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdGlmIChvTWV0YWRhdGEucHJvcGVydGllc1tzQWdncmVnYXRpb25OYW1lXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0Ly8gT2JqZWN0IFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMiB8IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj4+ID0ge307XG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlTmFtZXMgPSBvRmlyc3RFbGVtZW50Q2hpbGQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXNbYXR0cmlidXRlTmFtZV0gPSBvRmlyc3RFbGVtZW50Q2hpbGQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly9yZXRyaWV2ZSBvbmUgbGV2ZWwgc3ViT2JqZWN0IHByb3BlcnRpZXNcblx0XHRcdFx0XHRcdGZvciAobGV0IGNoaWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwgb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuLmxlbmd0aDsgY2hpbGRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN1YkNoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuW2NoaWxkSW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJPYmplY3RLZXkgPSBzdWJDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN1Yk9iamVjdDogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJDaGlsZEF0dHJpYnV0ZU5hbWVzID0gc3ViQ2hpbGQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBzdWJDaGlsZEF0dHJpYnV0ZU5hbWUgb2Ygc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lcykge1xuXHRcdFx0XHRcdFx0XHRcdHN1Yk9iamVjdFtzdWJDaGlsZEF0dHJpYnV0ZU5hbWVdID0gc3ViQ2hpbGQuZ2V0QXR0cmlidXRlKHN1YkNoaWxkQXR0cmlidXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YWdncmVnYXRpb25Qcm9wZXJ0eVZhbHVlc1tzdWJPYmplY3RLZXldID0gc3ViT2JqZWN0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQWdncmVnYXRpb25OYW1lXSA9IGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXM7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01ldGFkYXRhLnByb3BlcnRpZXNbc0FnZ3JlZ2F0aW9uTmFtZV0udHlwZSA9PT0gXCJhcnJheVwiKSB7XG5cdFx0XHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCAmJiBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW47XG5cdFx0XHRcdFx0XHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPltdID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkRGVmaW5pdGlvbiA9IGNoaWxkcmVuW2NoaWxkSWR4XTtcblx0XHRcdFx0XHRcdFx0Ly8gbm9uIGtleWVkIGNoaWxkLCBqdXN0IGFkZCBpdCB0byB0aGUgYWdncmVnYXRpb25cblx0XHRcdFx0XHRcdFx0Y29uc3QgbXlDaGlsZDogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRteUNoaWxkW2F0dHJpYnV0ZU5hbWVdID0gY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvT3V0T2JqZWN0cy5wdXNoKG15Q2hpbGQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBvT3V0T2JqZWN0cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9BZ2dyZWdhdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90cyhcblx0b0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4sXG5cdG9NZXRhZGF0YUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4sXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRwcm9jZXNzQ3VzdG9tRGF0YSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0aWYgKE9iamVjdC5rZXlzKG9BZ2dyZWdhdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG9BZ2dyZWdhdGlvbkVsZW1lbnQgPSBvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0aWYgKG9Ob2RlICE9PSBudWxsICYmIG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgb0FnZ3JlZ2F0aW9uRWxlbWVudCkge1xuXHRcdFx0XHQvLyBzbG90cyBjYW4gaGF2ZSA6OiBhcyBrZXlzIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGFnZ3JlZ2F0aW9uIG5hbWUgdGhlcmVmb3JlIHJlcGxhY2luZyB0aGVtXG5cdFx0XHRcdGNvbnN0IG9FbGVtZW50Q2hpbGQgPSBvQWdncmVnYXRpb25FbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRpZiAoIVtcImRlcGVuZGVudHNcIiwgXCJjdXN0b21EYXRhXCIsIFwibGF5b3V0RGF0YVwiXS5pbmNsdWRlcyhzQWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHQob01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQgJiYgb01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLnNsb3QpIHx8XG5cdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb05vZGUucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld0NoaWxkID0gcHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudChvTm9kZSwgc0FnZ3JlZ2F0aW9uTmFtZSwgb0VsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0XHRvVGFyZ2V0RWxlbWVudC5yZXBsYWNlV2l0aCguLi4ob05ld0NoaWxkLmNoaWxkcmVuIGFzIHVua25vd24gYXMgTm9kZVtdKSk7IC8vIFNvbWVob3cgVFMgZG9lc24ndCBsaWtlIHRoaXMgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXMgc2hvdWxkIHdvcmtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvY2Vzc0N1c3RvbURhdGEgJiYgb0VsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGUsIHNBZ2dyZWdhdGlvbk5hbWUsIG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdG9Ob2RlLmFwcGVuZENoaWxkKG9OZXdDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlQWdncmVnYXRpb25FbGVtZW50KG9Ob2RlOiBFbGVtZW50LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcsIG9FbGVtZW50Q2hpbGQ6IEVsZW1lbnQgfCBudWxsKTogRWxlbWVudCB7XG5cdGNvbnN0IG9OZXdDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUucmVwbGFjZSgvOi9naSwgXCJfXCIpKTtcblx0d2hpbGUgKG9FbGVtZW50Q2hpbGQpIHtcblx0XHRjb25zdCBvTmV4dENoaWxkID0gb0VsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0b05ld0NoaWxkLmFwcGVuZENoaWxkKG9FbGVtZW50Q2hpbGQpO1xuXHRcdG9FbGVtZW50Q2hpbGQgPSBvTmV4dENoaWxkO1xuXHR9XG5cdHJldHVybiBvTmV3Q2hpbGQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NCdWlsZGluZ0Jsb2NrKFxuXHRCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrQmFzZSxcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRpc1B1YmxpYyA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb01ldGFkYXRhID0gdHJhbnNmb3JtTWV0YWRhdGEoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhKTtcblxuXHRjb25zdCBzRnJhZ21lbnROYW1lID0gb01ldGFkYXRhLmZyYWdtZW50ID8/IGAke29NZXRhZGF0YS5uYW1lc3BhY2UgPz8gb01ldGFkYXRhLnB1YmxpY05hbWVzcGFjZX0uJHtvTWV0YWRhdGEueG1sVGFnID8/IG9NZXRhZGF0YS5uYW1lfWA7XG5cblx0Y29uc3QgbUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0PiA9IHt9O1xuXHRjb25zdCBvU2V0dGluZ3MgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXG5cdC8vIEFkZCBhbiBlbXB0eSBjb252ZXJ0ZXIgY29udGV4dCBpZiB0aGVyZSBpcyBub25lIGluIG9yZGVyIHRvIGhhdmUgYSBwbGFjZSB0byBzdG9yZSBvYmplY3QgdmFsdWVzXG5cdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dCA/Pz0gbmV3IEpTT05Nb2RlbCgpO1xuXG5cdC8vSW5qZWN0IHN0b3JhZ2UgZm9yIG1hY3Jvc1xuXHRpZiAoIW9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSkge1xuXHRcdG9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSA9IHt9O1xuXHR9XG5cblx0Ly8gRmlyc3Qgb2YgYWxsIHdlIG5lZWQgdG8gdmlzaXQgdGhlIGF0dHJpYnV0ZXMgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydGllcyBhbmQgdGhlIG1ldGFkYXRhIGNvbnRleHRzXG5cdGNvbnN0IHByb3BlcnR5VmFsdWVzID0gYXdhaXQgcHJvY2Vzc1Byb3BlcnRpZXMob01ldGFkYXRhLCBvTm9kZSwgaXNQdWJsaWMsIG9WaXNpdG9yKTtcblx0Y29uc3QgaW5pdGlhbEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlcyk7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dCA9IHByb2Nlc3NDb250ZXh0cyhvTWV0YWRhdGEsIG9TZXR0aW5ncywgb05vZGUsIGlzUHVibGljLCBvVmlzaXRvciwgbUNvbnRleHRzLCBwcm9wZXJ0eVZhbHVlcyk7XG5cblx0dHJ5IHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBhbmQgY29tcGxleCB0eXBlIHN1cHBvcnRcblx0XHRjb25zdCBvQWdncmVnYXRpb25zID0gYXdhaXQgcHJvY2Vzc0NoaWxkcmVuKG9Ob2RlLCBvVmlzaXRvciwgb01ldGFkYXRhLCBpc1B1YmxpYywgcHJvcGVydHlWYWx1ZXMpO1xuXHRcdGxldCBvQ29udHJvbENvbmZpZyA9IHt9O1xuXG5cdFx0aWYgKG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEpIHtcblx0XHRcdC8vIE9ubHkgdXNlZCBpbiB0aGUgRmllbGQgbWFjcm8gYW5kIGV2ZW4gdGhlbiBtYXliZSBub3QgcmVhbGx5IHVzZWZ1bFxuXHRcdFx0b0NvbnRyb2xDb25maWcgPSBvU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldFByb3BlcnR5KFwiL2NvbnRyb2xDb25maWd1cmF0aW9uXCIpO1xuXHRcdH1cblx0XHRsZXQgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblxuXHRcdE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0bGV0IG9EYXRhID0gcHJvcGVydHlWYWx1ZXNbcHJvcE5hbWVdIGFzIHVua25vd24gYXMgQ29udGV4dDtcblx0XHRcdC8vY2hlY2sgZm9yIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBmdW5jdGlvbiB0byB2YWxpZGF0ZSAvIG92ZXJ3cml0ZSBwYXJhbWV0ZXJzXG5cdFx0XHRjb25zdCBvcmlnaW5hbERlZmluaXRpb24gPSBCdWlsZGluZ0Jsb2NrQ2xhc3M/Lm1ldGFkYXRhPy5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcblx0XHRcdGlmIChvcmlnaW5hbERlZmluaXRpb24/LnZhbGlkYXRlKSB7XG5cdFx0XHRcdG9EYXRhID0gb3JpZ2luYWxEZWZpbml0aW9uLnZhbGlkYXRlKG9EYXRhKSB8fCBvRGF0YTtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YT8uaXNBPy4oU0FQX1VJX01PREVMX0NPTlRFWFQpICYmICFvRGF0YS5nZXRNb2RlbCgpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV0gPSBvRGF0YS5nZXRPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0eVZhbHVlcy5pc1B1YmxpYyA9IGlzUHVibGljO1xuXG5cdFx0Y29uc3Qgb0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyh7IC4uLnByb3BlcnR5VmFsdWVzLCAuLi5vQWdncmVnYXRpb25zIH0sIG9Db250cm9sQ29uZmlnLCBvU2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzID0gb0luc3RhbmNlLmdldFByb3BlcnRpZXMoKTtcblx0XHRPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0NvbnRleHROYW1lOiBzdHJpbmcpIHtcblx0XHRcdGlmIChwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShzQ29udGV4dE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzW3NDb250ZXh0TmFtZV07XG5cdFx0XHRcdGlmIChpc0NvbnRleHQodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gdGFyZ2V0T2JqZWN0IGFzIENvbnRleHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gc3RvcmVPYmplY3RWYWx1ZSh0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVWYWx1ZSwgdGFyZ2V0T2JqZWN0KTtcblx0XHRcdFx0XHRjb25zdCBuZXdDb250ZXh0ID0gb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGF0dHJpYnV0ZVZhbHVlKSE7XG5cdFx0XHRcdFx0dW5zdG9yZU9iamVjdFZhbHVlKGF0dHJpYnV0ZVZhbHVlKTtcblx0XHRcdFx0XHRtQ29udGV4dHNbc0NvbnRleHROYW1lXSA9IG5ld0NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG9BdHRyaWJ1dGVzTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBBdHRyaWJ1dGVNb2RlbChvTm9kZSwgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMsIEJ1aWxkaW5nQmxvY2tDbGFzcyk7XG5cdFx0bUNvbnRleHRzW1widGhpc1wiXSA9IG9BdHRyaWJ1dGVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHRcdGxldCBvUHJldmlvdXNNYWNyb0luZm86IE1hY3JvSW5mbyB8IHVuZGVmaW5lZDtcblx0XHQvLyBjb3JlOnJlcXVpcmUgbmVlZCB0byBiZSBkZWZpbmVkIG9uIHRoZSBub2RlIGl0c2VsZiB0byBiZSBwaWNrZWQgdXAgZHVlIHRvIHRoZSB0ZW1wbGF0aW5nIHN0ZXBcblx0XHRjb25zdCBjb3JlUmVxdWlyZSA9IG9Ob2RlPy5nZXRBdHRyaWJ1dGUoXCJjb3JlOnJlcXVpcmVcIikgfHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gS2VlcCB0cmFja1xuXHRcdGlmIChUcmFjZUluZm8uaXNUcmFjZUluZm9BY3RpdmUoKSkge1xuXHRcdFx0Y29uc3Qgb1RyYWNlSW5mbyA9IFRyYWNlSW5mby50cmFjZU1hY3JvQ2FsbHMoc0ZyYWdtZW50TmFtZSwgb01ldGFkYXRhLCBtQ29udGV4dHMsIG9Ob2RlLCBvVmlzaXRvcik7XG5cdFx0XHRpZiAob1RyYWNlSW5mbz8ubWFjcm9JbmZvKSB7XG5cdFx0XHRcdG9QcmV2aW91c01hY3JvSW5mbyA9IG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvVHJhY2VJbmZvLm1hY3JvSW5mbztcblx0XHRcdH1cblx0XHR9XG5cdFx0dmFsaWRhdGVNYWNyb1NpZ25hdHVyZShzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUpO1xuXG5cdFx0Y29uc3Qgb0NvbnRleHRWaXNpdG9yID0gb1Zpc2l0b3Iud2l0aChtQ29udGV4dHMsIG9NZXRhZGF0YS5pc09wZW4gIT09IHVuZGVmaW5lZCA/ICFvTWV0YWRhdGEuaXNPcGVuIDogdHJ1ZSk7XG5cdFx0Y29uc3Qgb1BhcmVudCA9IG9Ob2RlLnBhcmVudE5vZGU7XG5cblx0XHRsZXQgaUNoaWxkSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgb1Byb21pc2U7XG5cdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdGlDaGlsZEluZGV4ID0gQXJyYXkuZnJvbShvUGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKG9Ob2RlKTtcblxuXHRcdFx0aWYgKG9NZXRhZGF0YS5mcmFnbWVudCkge1xuXHRcdFx0XHRvUHJvbWlzZSA9IG9Db250ZXh0VmlzaXRvci5pbnNlcnRGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvTm9kZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvbGRLZXlzID0gT2JqZWN0LmtleXModGVtcG9yYXJ5T2JqZWN0U3RvcmUpO1xuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IGF3YWl0IG9JbnN0YW5jZS5nZXRUZW1wbGF0ZSEob05vZGUpO1xuXG5cdFx0XHRcdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MuaXNSdW50aW1lKSB7XG5cdFx0XHRcdFx0Ly8gRm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzLCB3ZSBuZWVkIHRvIGF0dGFjaCBhbGwgb2JqZWN0cyB0byB0aGUgY29udmVydGVyQ29udGV4dCBkaXJlY3RseSwgYXMgdGhlIGFjdHVhbCByZW5kZXJpbmcgdGFrZXMgcGxhY2UgYXQgcnVudGltZVxuXHRcdFx0XHRcdGZvciAoY29uc3Qgc3RvcmVLZXkgaW4gdGVtcG9yYXJ5T2JqZWN0U3RvcmUpIHtcblx0XHRcdFx0XHRcdGlmICghb2xkS2V5cy5pbmNsdWRlcyhzdG9yZUtleSkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHVuc3RvcmVPYmplY3RWYWx1ZShzdG9yZUtleSk7XG5cdFx0XHRcdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShzdG9yZUtleSwgZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGhhc0Vycm9yID0gXCJcIjtcblx0XHRcdFx0aWYgKHRlbXBsYXRlU3RyaW5nKSB7XG5cdFx0XHRcdFx0bGV0IGhhc1BhcnNlRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0XHRsZXQgcGFyc2VkVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyh0ZW1wbGF0ZVN0cmluZywgdHJ1ZSk7XG5cdFx0XHRcdFx0Ly8gRm9yIHNhZmV0eSBwdXJwb3NlIHdlIHRyeSB0byBkZXRlY3QgdHJhaWxpbmcgdGV4dCBpbiBiZXR3ZWVuIFhNTCBUYWdzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHBhcnNlZFRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVyID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcblx0XHRcdFx0XHRcdGxldCB0ZXh0bm9kZSA9IGl0ZXIubmV4dE5vZGUoKTtcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmxvY2FsTmFtZSA9PT0gXCJwYXJzZXJlcnJvclwiKSB7XG5cdFx0XHRcdFx0XHRcdGhhc1BhcnNlRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0d2hpbGUgKHRleHRub2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0ZXh0bm9kZS50ZXh0Q29udGVudCAmJiB0ZXh0bm9kZS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGhhc0Vycm9yID0gdGV4dG5vZGUudGV4dENvbnRlbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGhhc1BhcnNlRXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgcGFyc2VlcnJvciB3aGlsZSBwcm9jZXNzaW5nIHRoZSBYTUwgaXQgbWVhbnMgdGhlIFhNTCBpdHNlbGYgaXMgbWFsZm9ybWVkLCBhcyBzdWNoIHdlIHJlcnVuIHRoZSB0ZW1wbGF0ZSBwcm9jZXNzXG5cdFx0XHRcdFx0XHQvLyBTZXR0aW5nIGlzVHJhY2VNb2RlIHRydWUgd2lsbCBtYWtlIGl0IHNvIHRoYXQgZWFjaCB4bWxgIGV4cHJlc3Npb24gaXMgY2hlY2tlZCBmb3IgdmFsaWRpdHkgZnJvbSBYTUwgcGVyc3BlY3RpdmVcblx0XHRcdFx0XHRcdC8vIElmIGFuIGVycm9yIGlzIGZvdW5kIGl0J3MgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGZyYWdtZW50XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEueG1sVGFnIHx8IG9NZXRhZGF0YS5uYW1lfWApO1xuXHRcdFx0XHRcdFx0cGFyc2VkVGVtcGxhdGUgPSAoYXdhaXQgcHJvY2Vzc1htbEluVHJhY2UoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpbml0aWFsVGVtcGxhdGUgPSBhd2FpdCBvSW5zdGFuY2UuZ2V0VGVtcGxhdGU/LihvTm9kZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXJzZVhNTFN0cmluZyhpbml0aWFsVGVtcGxhdGUgPz8gXCJcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9KSkgYXMgRWxlbWVudFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzRXJyb3IubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgdHJhaWxpbmcgdGV4dCB3ZSBjcmVhdGUgYSBzdGFuZGFyZCBlcnJvciBhbmQgZGlzcGxheSBpdC5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXJyb3JUZXh0ID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRgVHJhaWxpbmcgdGV4dCB3YXMgZm91bmQgaW4gdGhlIFhNTDogJHtoYXNFcnJvcn1gXG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlLm1hcCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLm91dGVySFRNTCkuam9pbihcIlxcblwiKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yVGV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Ob2RlLnJlcGxhY2VXaXRoKC4uLnBhcnNlZFRlbXBsYXRlKTtcblxuXHRcdFx0XHRcdGNvbnN0IHZpc2l0ZWROb2RlcyA9IHBhcnNlZFRlbXBsYXRlLm1hcChhc3luYyAoaW50ZXJuYWxOb2RlKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzU2xvdHMob0FnZ3JlZ2F0aW9ucywgb01ldGFkYXRhLmFnZ3JlZ2F0aW9ucywgaW50ZXJuYWxOb2RlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHRWaXNpdG9yLnZpc2l0Tm9kZShpbnRlcm5hbE5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5hbGwodmlzaXRlZE5vZGVzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvTm9kZS5yZW1vdmUoKTtcblx0XHRcdFx0XHRvUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0Y29uc3Qgb01hY3JvRWxlbWVudCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdO1xuXHRcdFx0cHJvY2Vzc1Nsb3RzKG9BZ2dyZWdhdGlvbnMsIG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMsIG9NYWNyb0VsZW1lbnQsIHRydWUpO1xuXHRcdFx0aWYgKG9NYWNyb0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvUmVtYWluaW5nU2xvdHMgPSBvTWFjcm9FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRcdFx0XHRvUmVtYWluaW5nU2xvdHMuZm9yRWFjaChmdW5jdGlvbiAob1Nsb3RFbGVtZW50KSB7XG5cdFx0XHRcdFx0b1Nsb3RFbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGNvcmVSZXF1aXJlKSB7XG5cdFx0XHRcdFx0bGV0IHJlcXVpcmVPbk1hY3JvID0gb01hY3JvRWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiKTtcblx0XHRcdFx0XHRpZiAocmVxdWlyZU9uTWFjcm8pIHtcblx0XHRcdFx0XHRcdHJlcXVpcmVPbk1hY3JvID0gcmVxdWlyZU9uTWFjcm8uc3Vic3RyaW5nKDAsIHJlcXVpcmVPbk1hY3JvLmxlbmd0aCAtIDEpICsgXCIsXCIgKyBjb3JlUmVxdWlyZS5zdWJzdHJpbmcoMSk7IC8vIFJlbW92ZSBsYXN0IH0gYW5kIGZpcnN0IHtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWlyZU9uTWFjcm8gPSBjb3JlUmVxdWlyZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b01hY3JvRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiLCByZXF1aXJlT25NYWNybyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9QcmV2aW91c01hY3JvSW5mbykge1xuXHRcdFx0Ly9yZXN0b3JlIG1hY3JvIGluZm8gaWYgYXZhaWxhYmxlXG5cdFx0XHRvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdID0gb1ByZXZpb3VzTWFjcm9JbmZvO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgb1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXTtcblx0XHR9XG5cdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIGEgZ2VuZXJpYyBlcnJvciAodXN1YWxseSBjb2RlIGVycm9yKSwgd2UgcmV0cmlldmUgdGhlIGN1cnJlbnQgY29udGV4dCBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEgZGVkaWNhdGVkIGVycm9yIG1lc3NhZ2Vcblx0XHRjb25zdCB0cmFjZURldGFpbHMgPSB7XG5cdFx0XHRpbml0aWFsUHJvcGVydGllczoge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRyZXNvbHZlZFByb3BlcnRpZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0bWlzc2luZ0NvbnRleHRzOiBtTWlzc2luZ0NvbnRleHRcblx0XHR9O1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGluaXRpYWxLZXlzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0cGF0aDogcHJvcGVydHlWYWx1ZS5nZXRQYXRoKCksXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYWNlRGV0YWlscy5pbml0aWFsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKCFpbml0aWFsS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLmdldE9iamVjdCgpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgb0Vycm9yID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRbYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEubmFtZX1gXSxcblx0XHRcdG9Ob2RlLm91dGVySFRNTCxcblx0XHRcdHRyYWNlRGV0YWlscyxcblx0XHRcdChlIGFzIEVycm9yKS5zdGFja1xuXHRcdCk7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yLCB0cnVlKTtcblx0XHRvTm9kZS5yZXBsYWNlV2l0aCguLi5vVGVtcGxhdGUpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRTaW5nbGVDb250ZXh0KFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQgfCB1bmRlZmluZWQ+LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b0N0eDoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHR9XG4pOiB2b2lkIHtcblx0Y29uc3Qgc0tleSA9IChvQ3R4Lm5hbWUgfHwgb0N0eC5tb2RlbCB8fCB1bmRlZmluZWQpIGFzIHN0cmluZztcblx0aWYgKG1Db250ZXh0c1tzS2V5XSkge1xuXHRcdHJldHVybjsgLy8gZG8gbm90IGFkZCB0d2ljZVxuXHR9XG5cdHRyeSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9DdHgucGF0aDtcblx0XHRpZiAob0N0eC5tb2RlbCAhPT0gbnVsbCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYCR7b0N0eC5tb2RlbH0+JHtzQ29udGV4dFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbVNldHRpbmcgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHRcdGlmIChvQ3R4Lm1vZGVsID09PSBcImNvbnZlcnRlckNvbnRleHRcIiAmJiBvQ3R4LnBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWxdLmdldENvbnRleHQob0N0eC5wYXRoIC8qLCBtU2V0dGluZy5iaW5kaW5nQ29udGV4dHNbb0N0eC5tb2RlbF0qLyk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSBpZiAoIW1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsIV0gJiYgbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXSkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXS5nZXRDb250ZXh0KG9DdHgucGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBvVmlzaXRvci5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH1cblx0fSBjYXRjaCAoZXgpIHtcblx0XHQvLyBpZ25vcmUgdGhlIGNvbnRleHQgYXMgdGhpcyBjYW4gb25seSBiZSB0aGUgY2FzZSBpZiB0aGUgbW9kZWwgaXMgbm90IHJlYWR5LFxuXHRcdC8vIGkuZS4gbm90IGEgcHJlcHJvY2Vzc2luZyBtb2RlbCBidXQgbWF5YmUgYSBtb2RlbCBmb3IgcHJvdmlkaW5nIGFmdGVyd2FyZHNcblx0fVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gQnVpbGRpbmdCbG9ja0NsYXNzIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckJ1aWxkaW5nQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UpOiB2b2lkIHtcblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciwgdHJ1ZSksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVblJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gQnVpbGRpbmdCbG9ja0NsYXNzIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrQmFzZSk6IHZvaWQge1xuXHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0XHRcdG51bGwsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRudWxsLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yWE1MKGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdLCB4bWxGcmFnbWVudDogc3RyaW5nLCBhZGRpdGlvbmFsRGF0YT86IG9iamVjdCwgc3RhY2s/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBlcnJvckxhYmVscyA9IGVycm9yTWVzc2FnZXMubWFwKChlcnJvck1lc3NhZ2UpID0+IHhtbGA8bTpMYWJlbCB0ZXh0PVwiJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShlcnJvck1lc3NhZ2UpfVwiLz5gKTtcblx0bGV0IGVycm9yU3RhY2sgPSBcIlwiO1xuXHRpZiAoc3RhY2spIHtcblx0XHRjb25zdCBzdGFja0Zvcm1hdHRlZCA9IGJ0b2EoYDxwcmU+JHtzdGFja308L3ByZT5gKTtcblx0XHRlcnJvclN0YWNrID0geG1sYDxtOkZvcm1hdHRlZFRleHQgaHRtbFRleHQ9XCJ7PSBCQkYuYmFzZTY0RGVjb2RlKCcke3N0YWNrRm9ybWF0dGVkfScpIH1cIiAvPmA7XG5cdH1cblx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0aWYgKGFkZGl0aW9uYWxEYXRhKSB7XG5cdFx0YWRkaXRpb25hbFRleHQgPSB4bWxgPG06VkJveD5cblx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJUcmFjZSBJbmZvXCIvPlxuXHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwianNvblwiICB2YWx1ZT1cIiR7YHs9IEJCRi5iYXNlNjREZWNvZGUoJyR7YnRvYShKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsRGF0YSwgbnVsbCwgNCkpfScpIH1gfVwiIGhlaWdodD1cIjMwMHB4XCIgLz5cblx0XHRcdFx0XHQ8L206VkJveD5gO1xuXHR9XG5cdHJldHVybiB4bWxgPGNvbnRyb2xzOkZvcm1FbGVtZW50V3JhcHBlciB4bWxuczpjb250cm9scz1cInNhcC5mZS5jb3JlLmNvbnRyb2xzXCI+XG5cdFx0XHRcdFx0PG06VkJveCB4bWxuczptPVwic2FwLm1cIiB4bWxuczpjb2RlPVwic2FwLnVpLmNvZGVlZGl0b3JcIiBjb3JlOnJlcXVpcmU9XCJ7QkJGOidzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrRm9ybWF0dGVyJ31cIj5cblx0XHRcdFx0XHQke2Vycm9yTGFiZWxzfVxuXHRcdFx0XHRcdCR7ZXJyb3JTdGFja31cblx0XHRcdFx0XHRcdDxncmlkOkNTU0dyaWQgZ3JpZFRlbXBsYXRlUm93cz1cImZyXCIgZ3JpZFRlbXBsYXRlQ29sdW1ucz1cInJlcGVhdCgyLDFmcilcIiBncmlkR2FwPVwiMXJlbVwiIHhtbG5zOmdyaWQ9XCJzYXAudWkubGF5b3V0LmNzc2dyaWRcIiA+XG5cdFx0XHRcdFx0XHRcdDxtOlZCb3g+XG5cdFx0XHRcdFx0XHRcdFx0PG06TGFiZWwgdGV4dD1cIkhvdyB0aGUgYnVpbGRpbmcgYmxvY2sgd2FzIGNhbGxlZFwiLz5cblx0XHRcdFx0XHRcdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJ4bWxcIiB2YWx1ZT1cIiR7YHs9IEJCRi5iYXNlNjREZWNvZGUoJyR7YnRvYSh4bWxGcmFnbWVudC5yZXBsYWNlQWxsKFwiJmd0O1wiLCBcIj5cIikpfScpIH1gfVwiIGhlaWdodD1cIjMwMHB4XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdFx0XHRcdCR7YWRkaXRpb25hbFRleHR9XG5cdFx0XHRcdFx0XHQ8L2dyaWQ6Q1NTR3JpZD5cblx0XHRcdFx0XHQ8L206VkJveD5cblx0XHRcdFx0PC9jb250cm9sczpGb3JtRWxlbWVudFdyYXBwZXI+YDtcbn1cblxuY29uc3QgdGVtcG9yYXJ5T2JqZWN0U3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbi8qKlxuICogU3RvcmVzIGFuIG9iamVjdCB2YWx1ZSBpbiBhIHRlbXBvcmFyeSBzdG9yYWdlIGFuZCByZXR1cm5zIGFuIElEIHVzZWQgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZSBhdCBhIGxhdGVyIHBvaW50IGluIHRpbWUuXG4gKlxuICogUmVxdWlyZWQgYXMgdGhlcmUgaXMgZnVuY3Rpb25hbGl0eSBsaWtlIHRoZSB4bWxgIGZ1bmN0aW9uLCB3aGljaCBtaWdodCB0YWtlIG9iamVjdHMgYXMgcGFyYW1ldGVycyBidXQgbmVlZHMgdG8gcmV0dXJuIGEgc2VyaWFsaXplZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHN0b3JlXG4gKiBAcmV0dXJucyBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHN0b3JlT2JqZWN0VmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0eVVJRCA9IGAvdWlkLS0ke3VpZCgpfWA7XG5cdHRlbXBvcmFyeU9iamVjdFN0b3JlW3Byb3BlcnR5VUlEXSA9IHZhbHVlO1xuXHRyZXR1cm4gcHJvcGVydHlVSUQ7XG59XG5cbi8qKlxuICogVW5zdG9yZXMgYW4gb2JqZWN0IGZyb20gYSB0ZW1wb3Jhcnkgc3RvcmUgYnkgcmVtb3ZpbmcgaXQgYW5kIHJldHVybmluZyBpdHMgb2JqZWN0IHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVVJRCBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKiBAcmV0dXJucyBPYmplY3QgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdW5zdG9yZU9iamVjdFZhbHVlKHByb3BlcnR5VUlEOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgdmFsdWUgPSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdGRlbGV0ZSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdHJldHVybiB2YWx1ZTtcbn1cblxubGV0IHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgYWxsIHhtbGAgY2FsbHMgaW5zaWRlIHRoZSBnaXZlbiBtZXRob2QgYXJlIHByb2Nlc3NlZCBpbiB0cmFjZSBtb2RlLlxuICpcbiAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBleGVjdXRlXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBnaXZlbiBtZXRob2RcbiAqL1xuY29uc3QgcHJvY2Vzc1htbEluVHJhY2UgPSBhc3luYyBmdW5jdGlvbiAobWV0aG9kOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IHRydWU7XG5cdGxldCByZXR1cm5WYWx1ZTtcblx0dHJ5IHtcblx0XHRyZXR1cm5WYWx1ZSA9IG1ldGhvZCgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbi8qKlxuICogUGFyc2UgYW4gWE1MIHN0cmluZyBhbmQgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB4bWxTdHJpbmcgVGhlIHhtbCBzdHJpbmdcbiAqIEBwYXJhbSBbYWRkRGVmYXVsdE5hbWVzcGFjZXNdIFdoZXRoZXIgb3Igbm90IGRlZmF1bHQgbmFtZXNwYWNlcyBzaG91bGQgYmUgYWRkZWRcbiAqIEByZXR1cm5zIFRoZSBYTUwgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVhNTFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZywgYWRkRGVmYXVsdE5hbWVzcGFjZXMgPSBmYWxzZSk6IEVsZW1lbnRbXSB7XG5cdGlmIChhZGREZWZhdWx0TmFtZXNwYWNlcykge1xuXHRcdHhtbFN0cmluZyA9IGA8dGVtcGxhdGVcblx0XHRcdFx0XHRcdHhtbG5zOnRlbXBsYXRlPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIlxuXHRcdFx0XHRcdFx0eG1sbnM6bT1cInNhcC5tXCJcblx0XHRcdFx0XHRcdHhtbG5zOm1hY3Jvcz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCJcblx0XHRcdFx0XHRcdHhtbG5zOm1kYz1cInNhcC51aS5tZGNcIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIj4ke3htbFN0cmluZ308L3RlbXBsYXRlPmA7XG5cdH1cblx0Y29uc3QgeG1sRG9jdW1lbnQgPSBET01QYXJzZXJJbnN0YW5jZS5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRsZXQgb3V0cHV0ID0geG1sRG9jdW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdHdoaWxlIChvdXRwdXQ/LmxvY2FsTmFtZSA9PT0gXCJ0ZW1wbGF0ZVwiKSB7XG5cdFx0b3V0cHV0ID0gb3V0cHV0LmZpcnN0RWxlbWVudENoaWxkO1xuXHR9XG5cdGNvbnN0IGNoaWxkcmVuID0gb3V0cHV0Py5wYXJlbnRFbGVtZW50ID8gb3V0cHV0Py5wYXJlbnRFbGVtZW50LmNoaWxkcmVuIDogW291dHB1dCBhcyBFbGVtZW50XTtcblx0cmV0dXJuIEFycmF5LmZyb20oY2hpbGRyZW4pO1xufVxuXG4vKipcbiAqIEVzY2FwZSBhbiBYTUwgYXR0cmlidXRlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHZhbHVlPy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVySW5UcmFjZU1vZGUob3V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB4bWxSZXN1bHQgPSBwYXJzZVhNTFN0cmluZyhvdXRTdHIsIHRydWUpO1xuXHRpZiAoeG1sUmVzdWx0Py5sZW5ndGggPiAwICYmIHhtbFJlc3VsdFswXT8ubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoeG1sUmVzdWx0WzBdIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgfHwgKHhtbFJlc3VsdFswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuXHRcdHJldHVybiBjcmVhdGVFcnJvclhNTChbZXJyb3JNZXNzYWdlLnNwbGl0KFwiXFxuXCIpWzBdXSwgb3V0U3RyKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb3V0U3RyO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFhNTFByb2Nlc3NvclR5cGVWYWx1ZSA9XG5cdHwgc3RyaW5nXG5cdHwgYm9vbGVhblxuXHR8IG51bWJlclxuXHR8IHVuZGVmaW5lZFxuXHR8IG51bGxcblx0fCBvYmplY3Rcblx0fCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHR8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPlxuXHR8IEFycmF5PHN0cmluZz5cblx0fCBBcnJheTxGdW5jdGlvbj5cblx0fCBGdW5jdGlvblxuXHR8IENvbnRleHQ7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbCB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIG9iamVjdCBjYXNlLlxuICpcbiAqIEBwYXJhbSBzdHJpbmdzIFRoZSBzdHJpbmcgcGFydHMgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBkb2N1bWVudCByZXByZXNlbnRpbmcgdGhlIHN0cmluZyB0aGF0IHdhcyB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgeG1sID0gKHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi52YWx1ZXM6IFhNTFByb2Nlc3NvclR5cGVWYWx1ZVtdKTogc3RyaW5nID0+IHtcblx0bGV0IG91dFN0ciA9IFwiXCI7XG5cdGxldCBpO1xuXHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b3V0U3RyICs9IHN0cmluZ3NbaV07XG5cblx0XHQvLyBIYW5kbGUgdGhlIGRpZmZlcmVudCBjYXNlIG9mIG9iamVjdCwgaWYgaXQncyBhbiBhcnJheSB3ZSBqb2luIHRoZW0sIGlmIGl0J3MgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhlbiB3ZSBjb21waWxlIGl0LlxuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZhbHVlWzBdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWUuZmxhdCg1KS5qb2luKFwiXFxuXCIpLnRyaW0oKTtcblx0XHR9IGVsc2UgaWYgKGlzRnVuY3Rpb25BcnJheSh2YWx1ZSkpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZS5tYXAoKHZhbHVlZm4pID0+IHZhbHVlZm4oKSkuam9pbihcIlxcblwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgY29tcGlsZWRFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUpO1xuXHRcdFx0b3V0U3RyICs9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGNvbXBpbGVkRXhwcmVzc2lvbik7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdG91dFN0ciArPSBcInt0aGlzPnVuZGVmaW5lZFZhbHVlfVwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRpZiAoaXNDb250ZXh0KHZhbHVlKSkge1xuXHRcdFx0XHRvdXRTdHIgKz0gdmFsdWUuZ2V0UGF0aCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlVSWQgPSBzdG9yZU9iamVjdFZhbHVlKHZhbHVlKTtcblx0XHRcdFx0b3V0U3RyICs9IGAke3Byb3BlcnR5VUlkfWA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCI8XCIpICYmICF2YWx1ZS5zdGFydHNXaXRoKFwiJmx0O1wiKSkge1xuXHRcdFx0b3V0U3RyICs9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlO1xuXHRcdH1cblx0fVxuXHRvdXRTdHIgKz0gc3RyaW5nc1tpXTtcblx0b3V0U3RyID0gb3V0U3RyLnRyaW0oKTtcblx0aWYgKHByb2Nlc3NOZXh0WG1sSW5UcmFjZSkge1xuXHRcdHJldHVybiByZW5kZXJJblRyYWNlTW9kZShvdXRTdHIpO1xuXHR9XG5cdHJldHVybiBvdXRTdHI7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBOEJBLE1BQU1BLFlBQVksR0FBRywyREFBMkQ7RUFDaEYsTUFBTUMsZ0JBQWdCLEdBQUcsZ0VBQWdFO0VBQ3pGLE1BQU1DLGlCQUFpQixHQUFHLElBQUlDLFNBQVMsRUFBRTtFQTRHekMsU0FBU0MsNEJBQTRCLENBQ3BDQyxLQUFhLEVBQ2JDLFNBQWtDLEVBQ2xDQyxnQkFBd0QsRUFDeERDLElBQVksRUFDTDtJQUNQLE1BQU1DLFFBQVEsR0FBR0gsU0FBUyxDQUFDRSxJQUFJLENBQUM7SUFDaEMsTUFBTUUsY0FBYyxHQUFHRCxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRUUsU0FBUyxFQUd6QztJQUVELElBQUlKLGdCQUFnQixDQUFDSyxRQUFRLEtBQUssSUFBSSxLQUFLLENBQUNILFFBQVEsSUFBSUMsY0FBYyxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ2pGLE1BQU0sSUFBSUcsS0FBSyxDQUFFLEdBQUVSLEtBQU0sK0JBQThCRyxJQUFLLGNBQWEsQ0FBQztJQUMzRSxDQUFDLE1BQU0sSUFBSUUsY0FBYyxFQUFFO01BQzFCO01BQ0E7TUFDQSxJQUFJQSxjQUFjLENBQUNJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSUosY0FBYyxDQUFDSyxLQUFLLEtBQUtDLFNBQVMsSUFBSVQsZ0JBQWdCLENBQUNVLGFBQWEsS0FBS0QsU0FBUyxFQUFFO1FBQ2pJO1FBQ0EsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1UsYUFBYSxDQUFDQyxRQUFRLENBQUNSLGNBQWMsQ0FBQ0ssS0FBSyxDQUFDLEVBQUU7VUFDbkUsTUFBTSxJQUFJRixLQUFLLENBQ2IsR0FBRVIsS0FBTSxNQUFLRyxJQUFLLHNCQUFxQkQsZ0JBQWdCLENBQUNVLGFBQWMsYUFDdEVQLGNBQWMsQ0FBQ0ssS0FDZixNQUFLTixR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
|
|
932
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dHRVJfU0NPUEUiLCJYTUxURU1QTEFUSU5HX05TIiwiRE9NUGFyc2VySW5zdGFuY2UiLCJET01QYXJzZXIiLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwic05hbWUiLCJtQ29udGV4dHMiLCJvQ29udGV4dFNldHRpbmdzIiwic0tleSIsIm9Db250ZXh0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRPYmplY3QiLCJyZXF1aXJlZCIsIkVycm9yIiwiaGFzT3duUHJvcGVydHkiLCIka2luZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkVHlwZXMiLCJpbmNsdWRlcyIsImdldFBhdGgiLCIkVHlwZSIsImV4cGVjdGVkQW5ub3RhdGlvblR5cGVzIiwidmFsaWRhdGVNYWNyb1NpZ25hdHVyZSIsIm9NZXRhZGF0YSIsIm9Ob2RlIiwiYU1ldGFkYXRhQ29udGV4dEtleXMiLCJtZXRhZGF0YUNvbnRleHRzIiwiT2JqZWN0Iiwia2V5cyIsImFQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIm9BdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwiZm9yRWFjaCIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwiaGFzQXR0cmlidXRlIiwic3RhcnRzV2l0aCIsIkxvZyIsIndhcm5pbmciLCJTQVBfVUlfQ09SRV9FTEVNRU5UIiwiU0FQX1VJX01PREVMX0NPTlRFWFQiLCJ0cmFuc2Zvcm1NZXRhZGF0YSIsImJ1aWxkaW5nQmxvY2tNZXRhZGF0YSIsImFnZ3JlZ2F0aW9ucyIsImRlcGVuZGVudHMiLCJ0eXBlIiwic2xvdCIsImlzUHVibGljIiwiY3VzdG9tRGF0YSIsImxheW91dERhdGEiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyIsIm9TZXR0aW5ncyIsInNBdHRyaWJ1dGVWYWx1ZSIsInNNZXRhUGF0aCIsInNDb250ZXh0UGF0aCIsImN1cnJlbnRDb250ZXh0UGF0aCIsImVuZHNXaXRoIiwibW9kZWwiLCJwYXRoIiwiX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQiLCJzQXR0cmlidXRlTmFtZSIsInJldHVybkNvbnRleHQiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJkYXRhIiwidW5zdG9yZU9iamVjdFZhbHVlIiwic2V0UHJvcGVydHkiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJfZ2V0TWV0YWRhdGFDb250ZXh0Iiwib1Zpc2l0b3IiLCJiRG9Ob3RSZXNvbHZlIiwiaXNPcGVuIiwib01ldGFkYXRhQ29udGV4dCIsImdldEF0dHJpYnV0ZSIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiZ2V0Q29udGV4dCIsImUiLCJwcm9jZXNzUHJvcGVydGllcyIsImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwiYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyIsInByb3BlcnR5VmFsdWVzIiwic0tleVZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVlcENsb25lIiwiZXJyb3IiLCJ2aXNpdEF0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJnZXROYW1lZEl0ZW0iLCJ2YWx1ZSIsIk51bWJlciIsInByb2Nlc3NDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibU1pc3NpbmdDb250ZXh0Iiwib0RlZmluaXRpb25Db250ZXh0cyIsImFEZWZpbml0aW9uQ29udGV4dHNLZXlzIiwiY29udGV4dFBhdGhJbmRleCIsImluZGV4T2YiLCJjb250ZXh0UGF0aERlZmluaXRpb24iLCJzcGxpY2UiLCJwcm9wZXJ0eVZhbHVlIiwibGVuZ3RoIiwibmFtZSIsImFkZFNpbmdsZUNvbnRleHQiLCJwYXJzZUFnZ3JlZ2F0aW9uIiwib0FnZ3JlZ2F0aW9uIiwicHJvY2Vzc0FnZ3JlZ2F0aW9ucyIsIm9PdXRPYmplY3RzIiwiY2hpbGRyZW4iLCJjaGlsZElkeCIsImNoaWxkRGVmaW5pdGlvbiIsImNoaWxkS2V5Iiwic2V0QXR0cmlidXRlIiwiYWdncmVnYXRpb25PYmplY3QiLCJrZXkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiYW5jaG9yIiwidGFnTmFtZSIsIm5vZGVOYW1lIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsImZpcnN0RWxlbWVudENoaWxkIiwib0ZpcnN0RWxlbWVudENoaWxkIiwibmFtZXNwYWNlVVJJIiwib1BhcmVudCIsInBhcmVudE5vZGUiLCJpQ2hpbGRJbmRleCIsIkFycmF5IiwiZnJvbSIsInZpc2l0Tm9kZSIsIm5leHRFbGVtZW50U2libGluZyIsInNDaGlsZE5hbWUiLCJsb2NhbE5hbWUiLCJzQWdncmVnYXRpb25OYW1lIiwidG9VcHBlckNhc2UiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJwYXJzZWRBZ2dyZWdhdGlvbiIsInBhcnNlZEFnZ3JlZ2F0aW9uS2V5Iiwib05leHRDaGlsZCIsIm5leHRDaGlsZCIsImhhc1ZpcnR1YWxOb2RlIiwiY2hpbGRXcmFwcGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsIm9OZXdDaGlsZCIsImNsb25lTm9kZSIsImFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXMiLCJjaGlsZEluZGV4Iiwic3ViQ2hpbGQiLCJzdWJPYmplY3RLZXkiLCJzdWJPYmplY3QiLCJzdWJDaGlsZEF0dHJpYnV0ZU5hbWVzIiwic3ViQ2hpbGRBdHRyaWJ1dGVOYW1lIiwibXlDaGlsZCIsInB1c2giLCJwcm9jZXNzU2xvdHMiLCJvTWV0YWRhdGFBZ2dyZWdhdGlvbnMiLCJwcm9jZXNzQ3VzdG9tRGF0YSIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvRWxlbWVudENoaWxkIiwic1Nsb3ROYW1lIiwib1RhcmdldEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZSIsInByb2Nlc3NCdWlsZGluZ0Jsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJzRnJhZ21lbnROYW1lIiwiZnJhZ21lbnQiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJ4bWxUYWciLCJnZXRTZXR0aW5ncyIsIkpTT05Nb2RlbCIsImluaXRpYWxLZXlzIiwib0NvbnRyb2xDb25maWciLCJ2aWV3RGF0YSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwicHJvcE5hbWUiLCJvRGF0YSIsIm9yaWdpbmFsRGVmaW5pdGlvbiIsInZhbGlkYXRlIiwiaXNBIiwiZ2V0TW9kZWwiLCJvSW5zdGFuY2UiLCJnZXRQcm9wZXJ0aWVzIiwic0NvbnRleHROYW1lIiwidGFyZ2V0T2JqZWN0IiwiaXNDb250ZXh0IiwiYXR0cmlidXRlVmFsdWUiLCJzdG9yZU9iamVjdFZhbHVlIiwibmV3Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwib1ByZXZpb3VzTWFjcm9JbmZvIiwiY29yZVJlcXVpcmUiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJvQ29udGV4dFZpc2l0b3IiLCJ3aXRoIiwib1Byb21pc2UiLCJpbnNlcnRGcmFnbWVudCIsIm9sZEtleXMiLCJ0ZW1wb3JhcnlPYmplY3RTdG9yZSIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0VGVtcGxhdGUiLCJpc1J1bnRpbWUiLCJzdG9yZUtleSIsImhhc0Vycm9yIiwiaGFzUGFyc2VFcnJvciIsInBhcnNlZFRlbXBsYXRlIiwicGFyc2VYTUxTdHJpbmciLCJlbGVtZW50IiwiaXRlciIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0bm9kZSIsIm5leHROb2RlIiwidGV4dENvbnRlbnQiLCJ0cmltIiwicHJvY2Vzc1htbEluVHJhY2UiLCJpbml0aWFsVGVtcGxhdGUiLCJvRXJyb3JUZXh0IiwiY3JlYXRlRXJyb3JYTUwiLCJtYXAiLCJ0ZW1wbGF0ZSIsIm91dGVySFRNTCIsImpvaW4iLCJ2aXNpdGVkTm9kZXMiLCJpbnRlcm5hbE5vZGUiLCJQcm9taXNlIiwiYWxsIiwicmVtb3ZlIiwicmVzb2x2ZSIsIm9NYWNyb0VsZW1lbnQiLCJvUmVtYWluaW5nU2xvdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwib1Nsb3RFbGVtZW50IiwicmVxdWlyZU9uTWFjcm8iLCJnZXRBdHRyaWJ1dGVOUyIsInN1YnN0cmluZyIsInNldEF0dHJpYnV0ZU5TIiwidHJhY2VEZXRhaWxzIiwiaW5pdGlhbFByb3BlcnRpZXMiLCJyZXNvbHZlZFByb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJvRXJyb3IiLCJzdGFjayIsIm9UZW1wbGF0ZSIsIm9DdHgiLCJtU2V0dGluZyIsImV4IiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIiwidW5yZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJlcnJvck1lc3NhZ2VzIiwieG1sRnJhZ21lbnQiLCJhZGRpdGlvbmFsRGF0YSIsImVycm9yTGFiZWxzIiwiZXJyb3JNZXNzYWdlIiwieG1sIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJlcnJvclN0YWNrIiwic3RhY2tGb3JtYXR0ZWQiLCJidG9hIiwiYWRkaXRpb25hbFRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZUFsbCIsInByb3BlcnR5VUlEIiwidWlkIiwicHJvY2Vzc05leHRYbWxJblRyYWNlIiwibWV0aG9kIiwicmV0dXJuVmFsdWUiLCJ4bWxTdHJpbmciLCJhZGREZWZhdWx0TmFtZXNwYWNlcyIsInhtbERvY3VtZW50IiwicGFyc2VGcm9tU3RyaW5nIiwib3V0cHV0IiwicGFyZW50RWxlbWVudCIsInJlbmRlckluVHJhY2VNb2RlIiwib3V0U3RyIiwieG1sUmVzdWx0IiwiaW5uZXJUZXh0IiwiaW5uZXJIVE1MIiwic3BsaXQiLCJzdHJpbmdzIiwiaSIsInZhbHVlcyIsImlzQXJyYXkiLCJmbGF0IiwiaXNGdW5jdGlvbkFycmF5IiwidmFsdWVmbiIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9wZXJ0eVVJZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9BdHRyaWJ1dGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tCYXNlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0QnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24sXG5cdE9iamVjdFZhbHVlLFxuXHRPYmplY3RWYWx1ZTJcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNDb250ZXh0LCBpc0Z1bmN0aW9uQXJyYXkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTWFjcm9JbmZvIH0gZnJvbSBcIi4vVHJhY2VJbmZvXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuL1RyYWNlSW5mb1wiO1xuXG5jb25zdCBMT0dHRVJfU0NPUEUgPSBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuY29uc3QgWE1MVEVNUExBVElOR19OUyA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIjtcbmNvbnN0IERPTVBhcnNlckluc3RhbmNlID0gbmV3IERPTVBhcnNlcigpO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSAmIHtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgbWV0YSBkYXRhIGNvbnRleHRcbiAqL1xudHlwZSBNZXRhRGF0YUNvbnRleHQgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG1vZGVsOiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGN1cnJlbnRDb250ZXh0UGF0aDogQ29udGV4dDtcblx0aXNQdWJsaWM6IGJvb2xlYW47XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRtb2RlbHM6IFJlY29yZDxzdHJpbmcsIE1vZGVsPiAmIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0OiBKU09OTW9kZWw7XG5cdFx0dmlld0RhdGE6IEpTT05Nb2RlbDtcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFwic2FwLmZlLmkxOG5cIj86IFJlc291cmNlTW9kZWw7XG5cdH07XG5cdGJpbmRpbmdDb250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD47XG5cdF9tYWNyb0luZm8/OiBNYWNyb0luZm87XG5cdFtrOiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgSVZpc2l0b3JDYWxsYmFjayA9IHtcblx0Z2V0U2V0dGluZ3MoKTogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncztcblx0LyoqXG5cdCAqIFZpc2l0cyB0aGUgZ2l2ZW4gbm9kZSBhbmQgZWl0aGVyIHByb2Nlc3NlcyBhIHRlbXBsYXRlIGluc3RydWN0aW9uLCBjYWxsc1xuXHQgKiBhIHZpc2l0b3IsIG9yIHNpbXBseSBjYWxscyBib3RoIHtAbGlua1xuXHQgKiBzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3Nvci5JQ2FsbGJhY2sudmlzaXRBdHRyaWJ1dGVzIHZpc2l0QXR0cmlidXRlc31cblx0ICogYW5kIHtAbGluayBzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3Nvci5JQ2FsbGJhY2sudmlzaXRDaGlsZE5vZGVzXG5cdCAqIHZpc2l0Q2hpbGROb2Rlc30uXG5cdCAqXG5cdCAqIEBwYXJhbSBvTm9kZVxuXHQgKiAgIFRoZSBYTUwgRE9NIG5vZGVcblx0ICogQHJldHVybnNcblx0ICogICBBIHRoZW5hYmxlIHdoaWNoIHJlc29sdmVzIHdpdGggPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhcyBzb29uIGFzIHZpc2l0aW5nXG5cdCAqICAgaXMgZG9uZSwgb3IgaXMgcmVqZWN0ZWQgd2l0aCBhIGNvcnJlc3BvbmRpbmcgZXJyb3IgaWYgdmlzaXRpbmcgZmFpbHNcblx0ICovXG5cdHZpc2l0Tm9kZShvTm9kZTogTm9kZSk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIEluc2VydHMgdGhlIGZyYWdtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gcGxhY2Ugb2YgdGhlIGdpdmVuIGVsZW1lbnQuIExvYWRzIHRoZVxuXHQgKiBmcmFnbWVudCwgdGFrZXMgY2FyZSBvZiBjYWNoaW5nIChmb3IgdGhlIGN1cnJlbnQgcHJlLXByb2Nlc3NvciBydW4pIGFuZCB2aXNpdHMgdGhlXG5cdCAqIGZyYWdtZW50J3MgY29udGVudCBvbmNlIGl0IGhhcyBiZWVuIGltcG9ydGVkIGludG8gdGhlIGVsZW1lbnQncyBvd25lciBkb2N1bWVudCBhbmRcblx0ICogcHV0IGludG8gcGxhY2UuIExvYWRpbmcgb2YgZnJhZ21lbnRzIGlzIGFzeW5jaHJvbm91cyBpZiB0aGUgdGVtcGxhdGUgdmlldyBpc1xuXHQgKiBhc3luY2hyb25vdXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRnJhZ21lbnRcblx0ICogICB0aGUgZnJhZ21lbnQncyByZXNvbHZlZCBuYW1lXG5cdCAqIEBwYXJhbSBvRWxlbWVudFxuXHQgKiAgIHRoZSBYTUwgRE9NIGVsZW1lbnQsIGUuZy4gPHNhcC51aS5jb3JlOkZyYWdtZW50PiBvciA8Y29yZTpFeHRlbnNpb25Qb2ludD5cblx0ICogQHBhcmFtIG9XaXRoXG5cdCAqICAgdGhlIHBhcmVudCdzIFwid2l0aFwiIGNvbnRyb2xcblx0ICogQHJldHVybnNcblx0ICogQSBzeW5jIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgd2l0aCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGFzIHNvb24gYXMgdGhlIGZyYWdtZW50XG5cdCAqICAgaGFzIGJlZW4gaW5zZXJ0ZWQsIG9yIGlzIHJlamVjdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nIGVycm9yIGlmIGxvYWRpbmcgb3IgdmlzaXRpbmdcblx0ICogICBmYWlscy5cblx0ICovXG5cdGluc2VydEZyYWdtZW50KHNGcmFnbWVudDogc3RyaW5nLCBvRWxlbWVudDogRWxlbWVudCwgb1dpdGg/OiBDb250cm9sKTogUHJvbWlzZTx2b2lkPjtcblx0dmlzaXRBdHRyaWJ1dGUob05vZGU6IEVsZW1lbnQsIG9BdHRyaWJ1dGU6IEF0dHIpOiBQcm9taXNlPHZvaWQ+O1xuXHR2aXNpdEF0dHJpYnV0ZXMob05vZGU6IEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRWaWV3SW5mbygpOiBQcm9taXNlPHVua25vd24+O1xuXHR2aXNpdENoaWxkTm9kZXMob05vZGU6IE5vZGUpOiBQcm9taXNlPHZvaWQ+O1xuXHQvKipcblx0ICogSW50ZXJwcmV0cyB0aGUgZ2l2ZW4gWE1MIERPTSBhdHRyaWJ1dGUgdmFsdWUgYXMgYSBiaW5kaW5nIGFuZCByZXR1cm5zIHRoZVxuXHQgKiByZXN1bHRpbmcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVmFsdWVcblx0ICogICBBbiBYTUwgRE9NIGF0dHJpYnV0ZSB2YWx1ZVxuXHQgKiBAcGFyYW0gW2VsZW1lbnRdXG5cdCAqICAgVGhlIFhNTCBET00gZWxlbWVudCB0aGUgYXR0cmlidXRlIHZhbHVlIGJlbG9uZ3MgdG8gKG5lZWRlZCBvbmx5IGZvclxuXHQgKiAgIHdhcm5pbmdzIHdoaWNoIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUpXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSB0aGVuYWJsZSB3aGljaCByZXNvbHZlcyB3aXRoIHRoZSByZXN1bHRpbmcgdmFsdWUsIG9yIGlzIHJlamVjdGVkIHdpdGggYVxuXHQgKiAgIGNvcnJlc3BvbmRpbmcgZXJyb3IgKGZvciBleGFtcGxlLCBhbiBlcnJvciB0aHJvd24gYnkgYSBmb3JtYXR0ZXIpIG9yXG5cdCAqICAgPGNvZGU+bnVsbDwvY29kZT4gaW4gY2FzZSB0aGUgYmluZGluZyBpcyBub3QgcmVhZHkgKGJlY2F1c2UgaXQgcmVmZXJzIHRvIGFcblx0ICogICBtb2RlbCB3aGljaCBpcyBub3QgYXZhaWxhYmxlKSAoc2luY2UgMS41Ny4wKVxuXHQgKi9cblx0Z2V0UmVzdWx0KHNWYWx1ZTogc3RyaW5nLCBlbGVtZW50PzogRWxlbWVudCk6IFByb21pc2U8Q29udGV4dD4gfCBudWxsO1xuXHRnZXRDb250ZXh0KHNQYXRoPzogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0LyoqXG5cdCAqIFJldHVybnMgYSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBtYXAgb2YgdmFyaWFibGVzIHdoaWNoXG5cdCAqIG92ZXJyaWRlIGN1cnJlbnRseSBrbm93biB2YXJpYWJsZXMgb2YgdGhlIHNhbWUgbmFtZSBpbiA8Y29kZT50aGlzPC9jb2RlPlxuXHQgKiBwYXJlbnQgaW50ZXJmYWNlIG9yIHJlcGxhY2UgdGhlbSBhbHRvZ2V0aGVyLiBFYWNoIHZhcmlhYmxlIG5hbWUgYmVjb21lcyBhXG5cdCAqIG5hbWVkIG1vZGVsIHdpdGggYSBjb3JyZXNwb25kaW5nIG9iamVjdCBiaW5kaW5nIGFuZCBjYW4gYmUgdXNlZCBpbnNpZGUgdGhlXG5cdCAqIFhNTCB0ZW1wbGF0ZSBpbiB0aGUgdXN1YWwgd2F5LCB0aGF0IGlzLCB3aXRoIGEgYmluZGluZyBleHByZXNzaW9uIGxpa2Vcblx0ICogPGNvZGU+XCJ7dmFyPnNvbWUvcmVsYXRpdmUvcGF0aH1cIjwvY29kZT4gKHNlZSBleGFtcGxlKS5cblx0ICpcblx0ICogQHBhcmFtIFttVmFyaWFibGVzPXt9XVxuXHQgKiAgIE1hcCBmcm9tIHZhcmlhYmxlIG5hbWUgKHN0cmluZykgdG8gdmFsdWVcblx0ICogQHBhcmFtIFtiUmVwbGFjZV1cblx0ICogICBXaGV0aGVyIG9ubHkgdGhlIGdpdmVuIHZhcmlhYmxlcyBhcmUga25vd24gaW4gdGhlIG5ldyBjYWxsYmFjayBpbnRlcmZhY2Vcblx0ICogICBpbnN0YW5jZSwgbm8gaW5oZXJpdGVkIG9uZXNcblx0ICogQHJldHVybnNcblx0ICogICBBIGNhbGxiYWNrIGludGVyZmFjZSBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gbVZhcmlhYmxlc1xuXHQgKiBAcGFyYW0gYlJlcGxhY2Vcblx0ICovXG5cdFwid2l0aFwiKG1WYXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0PiwgYlJlcGxhY2U/OiBib29sZWFuKTogSVZpc2l0b3JDYWxsYmFjaztcbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTWFjcm9NZXRhZGF0YUNvbnRleHQoXG5cdHNOYW1lOiBzdHJpbmcsXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sXG5cdG9Db250ZXh0U2V0dGluZ3M6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uLFxuXHRzS2V5OiBzdHJpbmdcbik6IHZvaWQge1xuXHRjb25zdCBvQ29udGV4dCA9IG1Db250ZXh0c1tzS2V5XTtcblx0Y29uc3Qgb0NvbnRleHRPYmplY3QgPSBvQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMge1xuXHRcdCRUeXBlPzogc3RyaW5nO1xuXHRcdCRraW5kPzogc3RyaW5nO1xuXHR9O1xuXG5cdGlmIChvQ29udGV4dFNldHRpbmdzLnJlcXVpcmVkID09PSB0cnVlICYmICghb0NvbnRleHQgfHwgb0NvbnRleHRPYmplY3QgPT09IG51bGwpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGAke3NOYW1lfTogUmVxdWlyZWQgbWV0YWRhdGFDb250ZXh0ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdH0gZWxzZSBpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHQvLyBJZiBjb250ZXh0IG9iamVjdCBoYXMgJGtpbmQgcHJvcGVydHksICRUeXBlIHNob3VsZCBub3QgYmUgY2hlY2tlZFxuXHRcdC8vIFRoZXJlZm9yZSByZW1vdmUgZnJvbSBjb250ZXh0IHNldHRpbmdzXG5cdFx0aWYgKG9Db250ZXh0T2JqZWN0Lmhhc093blByb3BlcnR5KFwiJGtpbmRcIikgJiYgb0NvbnRleHRPYmplY3QuJGtpbmQgIT09IHVuZGVmaW5lZCAmJiBvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkVHlwZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlICRraW5kIGlzIHBhcnQgb2YgdGhlIGFsbG93ZWQgb25lc1xuXHRcdFx0aWYgKCFvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkVHlwZXMuaW5jbHVkZXMob0NvbnRleHRPYmplY3QuJGtpbmQpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgJHtzTmFtZX06ICcke3NLZXl9JyBtdXN0IGJlICcka2luZCcgJyR7b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzfScgYnV0IGlzICcke1xuXHRcdFx0XHRcdFx0b0NvbnRleHRPYmplY3QuJGtpbmRcblx0XHRcdFx0XHR9JzogJHtvQ29udGV4dC5nZXRQYXRoKCl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpICYmXG5cdFx0XHRvQ29udGV4dE9iamVjdC4kVHlwZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkQW5ub3RhdGlvblR5cGVzXG5cdFx0KSB7XG5cdFx0XHQvLyBDaGVjayBvbmx5ICRUeXBlXG5cdFx0XHRpZiAoIW9Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXMuaW5jbHVkZXMob0NvbnRleHRPYmplY3QuJFR5cGUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgJHtzTmFtZX06ICcke3NLZXl9JyBtdXN0IGJlICckVHlwZScgJyR7b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZEFubm90YXRpb25UeXBlc30nIGJ1dCBpcyAnJHtcblx0XHRcdFx0XHRcdG9Db250ZXh0T2JqZWN0LiRUeXBlXG5cdFx0XHRcdFx0fSc6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlKFxuXHRzTmFtZTogc3RyaW5nLFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LFxuXHRvTm9kZTogRWxlbWVudFxuKTogdm9pZCB7XG5cdGNvbnN0IGFNZXRhZGF0YUNvbnRleHRLZXlzID0gKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKSkgfHwgW10sXG5cdFx0YVByb3BlcnRpZXMgPSAob01ldGFkYXRhLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMob01ldGFkYXRhLnByb3BlcnRpZXMpKSB8fCBbXSxcblx0XHRvQXR0cmlidXRlTmFtZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cblx0Ly8gY29sbGVjdCBhbGwgYXR0cmlidXRlcyB0byBmaW5kIHVuY2hlY2tlZCBwcm9wZXJ0aWVzXG5cdGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gb05vZGUuZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0Zm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG5cdFx0b0F0dHJpYnV0ZU5hbWVzW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblx0fVxuXG5cdC8vQ2hlY2sgbWV0YWRhdGFDb250ZXh0c1xuXHRhTWV0YWRhdGFDb250ZXh0S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0Y29uc3Qgb0NvbnRleHRTZXR0aW5ncyA9IG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NLZXldO1xuXG5cdFx0dmFsaWRhdGVNYWNyb01ldGFkYXRhQ29udGV4dChzTmFtZSwgbUNvbnRleHRzLCBvQ29udGV4dFNldHRpbmdzLCBzS2V5KTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZU5hbWVzW3NLZXldO1xuXHR9KTtcblx0Ly9DaGVjayBwcm9wZXJ0aWVzXG5cdGFQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRjb25zdCBvUHJvcGVydHlTZXR0aW5ncyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzW3NLZXldO1xuXHRcdGlmICghb05vZGUuaGFzQXR0cmlidXRlKHNLZXkpKSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5U2V0dGluZ3MucmVxdWlyZWQgJiYgIW9Qcm9wZXJ0eVNldHRpbmdzLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgJHtzTmFtZX06IGAgKyBgUmVxdWlyZWQgcHJvcGVydHkgJyR7c0tleX0nIGlzIG1pc3NpbmdgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVOYW1lc1tzS2V5XTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIFVuY2hlY2tlZCBwcm9wZXJ0aWVzXG5cdE9iamVjdC5rZXlzKG9BdHRyaWJ1dGVOYW1lcykuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0Ly8gbm8gY2hlY2sgZm9yIHByb3BlcnRpZXMgd2hpY2ggY29udGFpbiBhIGNvbG9uIFwiOlwiIChkaWZmZXJlbnQgbmFtZXNwYWNlKSwgZS5nLiB4bWxuczp0cmFjZSwgdHJhY2U6bWFjcm9JRCwgdW5pdHRlc3Q6aWRcblx0XHRpZiAoIXNLZXkuaW5jbHVkZXMoXCI6XCIpICYmICFzS2V5LnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0TG9nLndhcm5pbmcoYFVuY2hlY2tlZCBwYXJhbWV0ZXI6ICR7c05hbWV9OiAke3NLZXl9YCwgdW5kZWZpbmVkLCBMT0dHRVJfU0NPUEUpO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IFNBUF9VSV9DT1JFX0VMRU1FTlQgPSBcInNhcC51aS5jb3JlLkVsZW1lbnRcIjtcblxuZXhwb3J0IGNvbnN0IFNBUF9VSV9NT0RFTF9DT05URVhUID0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIG1ldGFkYXRhIG9mIGEgYnVpbGRpbmcgYmxvY2sgYnkgYWRkaW5nIGFkZGl0aW9uYWwgYWdncmVnYXRpb25zLFxuICogYW5kIHNwbGl0dGluZyBwcm9wZXJ0aWVzIGludG8gYWN0dWFsIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIGNvbnRleHRzLlxuICpcbiAqIEBwYXJhbSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEgVGhlIG1ldGFkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGlucHV0XG4gKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtTWV0YWRhdGEoYnVpbGRpbmdCbG9ja01ldGFkYXRhOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEpOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGNvbnN0IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4gPSB7XG5cdFx0ZGVwZW5kZW50czoge1xuXHRcdFx0dHlwZTogU0FQX1VJX0NPUkVfRUxFTUVOVCxcblx0XHRcdHNsb3Q6IFwiZGVwZW5kZW50c1wiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9LFxuXHRcdGN1c3RvbURhdGE6IHtcblx0XHRcdHR5cGU6IFNBUF9VSV9DT1JFX0VMRU1FTlQsXG5cdFx0XHRzbG90OiBcImN1c3RvbURhdGFcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fSxcblx0XHRsYXlvdXREYXRhOiB7XG5cdFx0XHR0eXBlOiBTQVBfVUlfQ09SRV9FTEVNRU5ULFxuXHRcdFx0c2xvdDogXCJsYXlvdXREYXRhXCIsXG5cdFx0XHRpc1B1YmxpYzogdHJ1ZVxuXHRcdH0sXG5cdFx0Li4uYnVpbGRpbmdCbG9ja01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1xuXHR9O1xuXHRjb25zdCBtZXRhZGF0YUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllcykpIHtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGU7XG5cblx0XHRpZiAocHJvcGVydHlUeXBlICE9PSBTQVBfVUlfTU9ERUxfQ09OVEVYVCkge1xuXHRcdFx0cHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cblx0XHRpZiAoW1NBUF9VSV9NT0RFTF9DT05URVhULCBcIm9iamVjdFwiLCBcImFycmF5XCJdLmluY2x1ZGVzKHByb3BlcnR5VHlwZSkpIHtcblx0XHRcdC8vIEV4cGxpY2l0bHkgZGVmaW5lZCBjb250ZXh0cywgb2JqZWN0cywgYW5kIGFycmF5cyBtYXkgY29tZSBmcm9tIHRoZSBtZXRhZGF0YUNvbnRleHRcblx0XHRcdG1ldGFkYXRhQ29udGV4dHNbcHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gYXMgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb247XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5idWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdFx0cHJvcGVydGllcyxcblx0XHRtZXRhZGF0YUNvbnRleHRzLFxuXHRcdGFnZ3JlZ2F0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgYWJzb2x1dGUgb3IgY29udGV4dCBwYXRocyBhbmQgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSBNZXRhQ29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb1NldHRpbmdzIEFkZGl0aW9uYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSBzQXR0cmlidXRlVmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMgVGhlIG1ldGEgZGF0YSBjb250ZXh0IG9iamVjdFxuICovXG5mdW5jdGlvbiBfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyhvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsIHNBdHRyaWJ1dGVWYWx1ZTogc3RyaW5nKTogTWV0YURhdGFDb250ZXh0IHtcblx0bGV0IHNNZXRhUGF0aDogc3RyaW5nO1xuXHRpZiAoc0F0dHJpYnV0ZVZhbHVlICYmIHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIGFic29sdXRlIHBhdGggLSB3ZSBqdXN0IHVzZSB0aGlzIG9uZVxuXHRcdHNNZXRhUGF0aCA9IHNBdHRyaWJ1dGVWYWx1ZTtcblx0fSBlbHNlIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aC5nZXRQYXRoKCk7XG5cdFx0aWYgKCFzQ29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggKz0gXCIvXCI7XG5cdFx0fVxuXHRcdHNNZXRhUGF0aCA9IHNDb250ZXh0UGF0aCArIHNBdHRyaWJ1dGVWYWx1ZTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdHBhdGg6IHNNZXRhUGF0aFxuXHR9O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGhlbHBzIHRvIGNyZWF0ZSB0aGUgbWV0YWRhdGEgY29udGV4dCBpbiBjYXNlIGl0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gb1NldHRpbmdzIEFkZGl0aW9uYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSBzQXR0cmlidXRlTmFtZSBUaGUgYXR0cmlidXRlIG5hbWVcbiAqIEBwYXJhbSBzQXR0cmlidXRlVmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMgVGhlIG1ldGEgZGF0YSBjb250ZXh0IG9iamVjdFxuICovXG5mdW5jdGlvbiBfY3JlYXRlSW5pdGlhbE1ldGFkYXRhQ29udGV4dChcblx0b1NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRzQXR0cmlidXRlVmFsdWU6IHN0cmluZ1xuKTogTWV0YURhdGFDb250ZXh0IHtcblx0bGV0IHJldHVybkNvbnRleHQ6IE1ldGFEYXRhQ29udGV4dDtcblx0aWYgKHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL3VpZC0tXCIpICYmICFvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuZ2V0UHJvcGVydHkoc0F0dHJpYnV0ZVZhbHVlKSkge1xuXHRcdGNvbnN0IGRhdGEgPSB1bnN0b3JlT2JqZWN0VmFsdWUoc0F0dHJpYnV0ZVZhbHVlKTtcblx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc0F0dHJpYnV0ZVZhbHVlLCBkYXRhKTtcblx0XHRyZXR1cm5Db250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IFwiY29udmVydGVyQ29udGV4dFwiLFxuXHRcdFx0cGF0aDogc0F0dHJpYnV0ZVZhbHVlXG5cdFx0fTtcblx0fSBlbHNlIGlmICgoc0F0dHJpYnV0ZU5hbWUgPT09IFwibWV0YVBhdGhcIiAmJiBvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoKSB8fCBzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSB7XG5cdFx0cmV0dXJuQ29udGV4dCA9IF9jaGVja0Fic29sdXRlQW5kQ29udGV4dFBhdGhzKG9TZXR0aW5ncywgc0F0dHJpYnV0ZVZhbHVlKTtcblx0fSBlbHNlIGlmIChzQXR0cmlidXRlVmFsdWUgJiYgc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0Ly8gYWJzb2x1dGUgcGF0aCAtIHdlIGp1c3QgdXNlIHRoaXMgb25lXG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdFx0cGF0aDogc0F0dHJpYnV0ZVZhbHVlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm5Db250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IFwibWV0YU1vZGVsXCIsXG5cdFx0XHRwYXRoOiBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmVudGl0eVNldCA/IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuZW50aXR5U2V0LmdldFBhdGgoc0F0dHJpYnV0ZVZhbHVlKSA6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHJldHVybkNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRNZXRhZGF0YUNvbnRleHQoXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0b05vZGU6IEVsZW1lbnQsXG5cdHNBdHRyaWJ1dGVOYW1lOiBzdHJpbmcsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRiRG9Ob3RSZXNvbHZlOiBib29sZWFuLFxuXHRpc09wZW46IGJvb2xlYW5cbik6IE1ldGFEYXRhQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdGxldCBvTWV0YWRhdGFDb250ZXh0OiBNZXRhRGF0YUNvbnRleHQgfCB1bmRlZmluZWQ7XG5cdGlmICghYkRvTm90UmVzb2x2ZSAmJiBvTm9kZS5oYXNBdHRyaWJ1dGUoc0F0dHJpYnV0ZU5hbWUpKSB7XG5cdFx0Y29uc3Qgc0F0dHJpYnV0ZVZhbHVlID0gb05vZGUuZ2V0QXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKSBhcyBzdHJpbmc7XG5cdFx0b01ldGFkYXRhQ29udGV4dCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzQXR0cmlidXRlVmFsdWUpO1xuXHRcdGlmICghb01ldGFkYXRhQ29udGV4dCkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IF9jcmVhdGVJbml0aWFsTWV0YWRhdGFDb250ZXh0KG9TZXR0aW5ncywgc0F0dHJpYnV0ZU5hbWUsIHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpKSB7XG5cdFx0b01ldGFkYXRhQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBzQXR0cmlidXRlTmFtZSxcblx0XHRcdHBhdGg6IFwiXCJcblx0XHR9O1xuXHR9IGVsc2UgaWYgKGlzT3Blbikge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAob1Zpc2l0b3IuZ2V0Q29udGV4dChgJHtzQXR0cmlidXRlTmFtZX0+YCkpIHtcblx0XHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IHtcblx0XHRcdFx0XHRtb2RlbDogc0F0dHJpYnV0ZU5hbWUsXG5cdFx0XHRcdFx0cGF0aDogXCJcIlxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvTWV0YWRhdGFDb250ZXh0O1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBpbmNvbWluZyBYTUwgbm9kZSBhbmQgdHJ5IHRvIHJlc29sdmUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCB0aGVyZS5cbiAqXG4gKiBAcGFyYW0gb01ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gb05vZGUgVGhlIFhNTCBub2RlIHRvIHBhcnNlXG4gKiBAcGFyYW0gaXNQdWJsaWMgV2hldGhlciB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpbiBhIHB1YmxpYyBjb250ZXh0IG9yIG5vdFxuICogQHBhcmFtIG9WaXNpdG9yIFRoZSB2aXNpdG9yIGluc3RhbmNlXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHByb3BlcnRpZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMoXG5cdG9NZXRhZGF0YTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2tcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+PiB7XG5cdGNvbnN0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gb01ldGFkYXRhLnByb3BlcnRpZXM7XG5cblx0Ly8gUmV0cmlldmUgcHJvcGVydGllcyB2YWx1ZXNcblx0Y29uc3QgYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluaXRpb25Qcm9wZXJ0aWVzKTtcblxuXHRjb25zdCBwcm9wZXJ0eVZhbHVlczogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+ID0ge307XG5cdGZvciAoY29uc3Qgc0tleVZhbHVlIG9mIGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMpIHtcblx0XHRpZiAoZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID1cblx0XHRcdFx0ZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5kZWZhdWx0VmFsdWUgJiYgZGVlcENsb25lKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlKTsgLy8gVG8gYXZvaWQgdmFsdWVzIGJlaW5nIHJldXNlZCBhY3Jvc3MgbWFjcm9zXG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BlcnR5VmFsdWVzW3NLZXlWYWx1ZV0gPSBkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleVZhbHVlKSAmJiBpc1B1YmxpYyAmJiBkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmlzUHVibGljID09PSBmYWxzZSkge1xuXHRcdFx0TG9nLmVycm9yKGBQcm9wZXJ0eSAke3NLZXlWYWx1ZX0gd2FzIGlnbm9yZWQgYXMgaXQgaXMgbm90IGludGVuZGVkIGZvciBwdWJsaWMgdXNhZ2VgKTtcblx0XHR9IGVsc2UgaWYgKG9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5VmFsdWUpKSB7XG5cdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdEF0dHJpYnV0ZShvTm9kZSwgb05vZGUuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oc0tleVZhbHVlKSBhcyBBdHRyKTtcblx0XHRcdGxldCB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBvTm9kZS5nZXRBdHRyaWJ1dGUoc0tleVZhbHVlKTtcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVZhbHVlcztcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgaW5jb21pbmcgWE1MIG5vZGUgYW5kIHRyeSB0byByZXNvbHZlIHRoZSBiaW5kaW5nIGNvbnRleHRzIGRlZmluZWQgaW5zaWRlLlxuICpcbiAqIEBwYXJhbSBvTWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBvU2V0dGluZ3MgVGhlIHNldHRpbmdzIG9iamVjdFxuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSB0byBwYXJzZVxuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHBhcmFtIG1Db250ZXh0cyBUaGUgY29udGV4dHMgdG8gYmUgdXNlZFxuICogQHBhcmFtIHByb3BlcnR5VmFsdWVzIFRoZSBjdXJyZW50IHByb3BlcnR5IHZhbHVlc1xuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBhbmQgbWlzc2luZyBjb250ZXh0c1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29udGV4dHMoXG5cdG9NZXRhZGF0YTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0b05vZGU6IEVsZW1lbnQsXG5cdGlzUHVibGljOiBib29sZWFuLFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0bUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pixcblx0cHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPlxuKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuXHRvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoID0gb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5jb250ZXh0UGF0aDtcblx0Y29uc3QgbU1pc3NpbmdDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBvRGVmaW5pdGlvbkNvbnRleHRzID0gb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHM7XG5cdGNvbnN0IGFEZWZpbml0aW9uQ29udGV4dHNLZXlzID0gT2JqZWN0LmtleXMob0RlZmluaXRpb25Db250ZXh0cyk7XG5cdC8vIFNpbmNlIHRoZSBtZXRhUGF0aCBhbmQgb3RoZXIgcHJvcGVydHkgY2FuIGJlIHJlbGF0aXZlIHRvIHRoZSBjb250ZXh0UGF0aCB3ZSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoIGZpcnN0XG5cdGNvbnN0IGNvbnRleHRQYXRoSW5kZXggPSBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5pbmRleE9mKFwiY29udGV4dFBhdGhcIik7XG5cdGlmIChjb250ZXh0UGF0aEluZGV4ICE9PSAtMSkge1xuXHRcdC8vIElmIGl0IGlzIGRlZmluZWQgd2UgZXh0cmFjdCBpdCBhbmQgcmVpbnNlcnQgaXQgaW4gdGhlIGZpcnN0IHBvc2l0aW9uIG9mIHRoZSBhcnJheVxuXHRcdGNvbnN0IGNvbnRleHRQYXRoRGVmaW5pdGlvbiA9IGFEZWZpbml0aW9uQ29udGV4dHNLZXlzLnNwbGljZShjb250ZXh0UGF0aEluZGV4LCAxKTtcblx0XHRhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5zcGxpY2UoMCwgMCwgY29udGV4dFBhdGhEZWZpbml0aW9uWzBdKTtcblx0fVxuXHRmb3IgKGNvbnN0IHNBdHRyaWJ1dGVOYW1lIG9mIGFEZWZpbml0aW9uQ29udGV4dHNLZXlzKSB7XG5cdFx0Ly8gSWYgdGhlIGNvbnRleHQgd2FzIHJlc29sdmVkIGFzIGEgcHJvcGVydHkgKGJpbmRpbmcgLyB4bWwgYWdncmVnYXRpb24pIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byByZXNvbHZlIGl0IGhlcmUuXG5cdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWUgYXMgb2JqZWN0KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRkZWxldGUgb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGJEb05vdFJlc29sdmUgPSBpc1B1YmxpYyAmJiBvRGVmaW5pdGlvbkNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXS5pc1B1YmxpYyA9PT0gZmFsc2UgJiYgb05vZGUuaGFzQXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKTtcblx0XHRjb25zdCBvTWV0YWRhdGFDb250ZXh0ID0gX2dldE1ldGFkYXRhQ29udGV4dChvU2V0dGluZ3MsIG9Ob2RlLCBzQXR0cmlidXRlTmFtZSwgb1Zpc2l0b3IsIGJEb05vdFJlc29sdmUsIG9NZXRhZGF0YS5pc09wZW4gPz8gZmFsc2UpO1xuXHRcdGlmIChvTWV0YWRhdGFDb250ZXh0KSB7XG5cdFx0XHRvTWV0YWRhdGFDb250ZXh0Lm5hbWUgPSBzQXR0cmlidXRlTmFtZTtcblx0XHRcdGFkZFNpbmdsZUNvbnRleHQobUNvbnRleHRzLCBvVmlzaXRvciwgb01ldGFkYXRhQ29udGV4dCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChzQXR0cmlidXRlTmFtZSA9PT0gXCJlbnRpdHlTZXRcIiB8fCBzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSAmJlxuXHRcdFx0XHQhb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5oYXNPd25Qcm9wZXJ0eShzQXR0cmlidXRlTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHRvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXSA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0XHRpZiAoc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdFx0XHRvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmIChtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0F0dHJpYnV0ZU5hbWVdID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHQvLyBJZiB0aGUgYmluZGluZyBjb3VsZG4ndCBiZSByZXNvbHZlZCBjb25zaWRlciB0aGF0IHRoZXJlIHdhcyBubyB2YWx1ZSBoZXJlXG5cdFx0XHRcdGRlbGV0ZSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1NaXNzaW5nQ29udGV4dFtzQXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbU1pc3NpbmdDb250ZXh0O1xufVxuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRwb3NpdGlvbjogUG9zaXRpb247XG5cdHR5cGU6IFwiU2xvdFwiO1xufTtcbmZ1bmN0aW9uIHBhcnNlQWdncmVnYXRpb24ob0FnZ3JlZ2F0aW9uPzogRWxlbWVudCwgcHJvY2Vzc0FnZ3JlZ2F0aW9ucz86IEZ1bmN0aW9uKTogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uPiB7XG5cdGNvbnN0IG9PdXRPYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24+ID0ge307XG5cdGlmIChvQWdncmVnYXRpb24gJiYgb0FnZ3JlZ2F0aW9uLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjaGlsZHJlbiA9IG9BZ2dyZWdhdGlvbi5jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZERlZmluaXRpb24gPSBjaGlsZHJlbltjaGlsZElkeF07XG5cdFx0XHRsZXQgY2hpbGRLZXkgPSBjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIHx8IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRcdGlmIChjaGlsZEtleSkge1xuXHRcdFx0XHRjaGlsZEtleSA9IGBJbmxpbmVYTUxfJHtjaGlsZEtleX1gO1xuXHRcdFx0XHRjaGlsZERlZmluaXRpb24uc2V0QXR0cmlidXRlKFwia2V5XCIsIGNoaWxkS2V5KTtcblx0XHRcdFx0bGV0IGFnZ3JlZ2F0aW9uT2JqZWN0OiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24gPSB7XG5cdFx0XHRcdFx0a2V5OiBjaGlsZEtleSxcblx0XHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiAoY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcInBsYWNlbWVudFwiKSBhcyBQbGFjZW1lbnQpIHx8IFBsYWNlbWVudC5BZnRlcixcblx0XHRcdFx0XHRcdGFuY2hvcjogY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImFuY2hvclwiKSB8fCB1bmRlZmluZWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwcm9jZXNzQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25PYmplY3QgPSBwcm9jZXNzQWdncmVnYXRpb25zKGNoaWxkRGVmaW5pdGlvbiwgYWdncmVnYXRpb25PYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9PdXRPYmplY3RzW2FnZ3JlZ2F0aW9uT2JqZWN0LmtleV0gPSBhZ2dyZWdhdGlvbk9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoY2hpbGREZWZpbml0aW9uLnRhZ05hbWUgIT09IFwic2xvdFwiKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgVGhlIGFnZ3JlZ2F0aW9uICR7Y2hpbGREZWZpbml0aW9uLm5vZGVOYW1lfSBpcyBtaXNzaW5nIGEgS2V5IGF0dHJpYnV0ZS4gSXQgaXMgbm90IGRpc3BsYXllZGApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb091dE9iamVjdHM7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgYW5kIHBhcnNlcyB0aGVtIGFzIGVpdGhlciBhZ2dyZWdhdGlvbnMgb3Igb2JqZWN0LS9hcnJheS1iYXNlZCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSBmb3Igd2hpY2ggdG8gcHJvY2VzcyB0aGUgY2hpbGRyZW5cbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHBhcmFtIG9NZXRhZGF0YSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlcyBUaGUgdmFsdWVzIG9mIGFscmVhZHkgcGFyc2VkIHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIGNoaWxkcmVuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NDaGlsZHJlbihcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0cHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPlxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBFbGVtZW50Pj4ge1xuXHRjb25zdCBvQWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50PiA9IHt9O1xuXHRpZiAob05vZGUuZmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRsZXQgb0ZpcnN0RWxlbWVudENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG9Ob2RlLmZpcnN0RWxlbWVudENoaWxkIGFzIEVsZW1lbnQgfCBudWxsO1xuXG5cdFx0d2hpbGUgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZC5uYW1lc3BhY2VVUkkgPT09IFhNTFRFTVBMQVRJTkdfTlMpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB3ZSBlbmNvdW50ZXIgYSB0ZW1wbGF0aW5nIHRhZywgcnVuIHRoZSB2aXNpdG9yIG9uIGl0IGFuZCBjb250aW51ZSB3aXRoIHRoZSByZXN1bHRpbmcgY2hpbGRcblx0XHRcdFx0Y29uc3Qgb1BhcmVudCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5wYXJlbnROb2RlO1xuXHRcdFx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGlDaGlsZEluZGV4ID0gQXJyYXkuZnJvbShvUGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF0gPyBvUGFyZW50LmNoaWxkcmVuW2lDaGlsZEluZGV4XSA6IG51bGw7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gTm90IHN1cmUgaG93IHRoaXMgY291bGQgaGFwcGVuIGJ1dCBJIGFsc28gZG9uJ3Qgd2FudCB0byBjcmVhdGUgaW5maW5pdGUgbG9vcHNcblx0XHRcdFx0XHRvRmlyc3RFbGVtZW50Q2hpbGQgPSBvRmlyc3RFbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdFx0bGV0IHNBZ2dyZWdhdGlvbk5hbWUgPSBzQ2hpbGROYW1lO1xuXHRcdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZVswXS50b1VwcGVyQ2FzZSgpID09PSBzQWdncmVnYXRpb25OYW1lWzBdKSB7XG5cdFx0XHRcdFx0Ly8gbm90IGEgc3ViIGFnZ3JlZ2F0aW9uLCBnbyBiYWNrIHRvIGRlZmF1bHQgQWdncmVnYXRpb25cblx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lID0gb01ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiB8fCBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24gIT09IHVuZGVmaW5lZCAmJiAhYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QpIHtcblx0XHRcdFx0XHRjb25zdCBwYXJzZWRBZ2dyZWdhdGlvbiA9IHBhcnNlQWdncmVnYXRpb24ob0ZpcnN0RWxlbWVudENoaWxkLCBhZ2dyZWdhdGlvbkRlZmluaXRpb24ucHJvY2Vzc0FnZ3JlZ2F0aW9ucyk7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBwYXJzZWRBZ2dyZWdhdGlvbjtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcnNlZEFnZ3JlZ2F0aW9uS2V5IGluIHBhcnNlZEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRvTWV0YWRhdGEuYWdncmVnYXRpb25zW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XSA9IHBhcnNlZEFnZ3JlZ2F0aW9uW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvRmlyc3RFbGVtZW50Q2hpbGQgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR3aGlsZSAob0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBvTmV4dENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lWzBdLnRvVXBwZXJDYXNlKCkgPT09IHNBZ2dyZWdhdGlvbk5hbWVbMF0pIHtcblx0XHRcdFx0Ly8gbm90IGEgc3ViIGFnZ3JlZ2F0aW9uLCBnbyBiYWNrIHRvIGRlZmF1bHQgQWdncmVnYXRpb25cblx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0T2JqZWN0LmtleXMob01ldGFkYXRhLmFnZ3JlZ2F0aW9ucykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkgJiZcblx0XHRcdFx0KCFpc1B1YmxpYyB8fCBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLmlzUHVibGljID09PSB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdGlmICghYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QgJiYgb0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsICYmIG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0bGV0IGNoaWxkRGVmaW5pdGlvbiA9IG9GaXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0XHR3aGlsZSAoY2hpbGREZWZpbml0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0Q2hpbGQgPSBjaGlsZERlZmluaXRpb24ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkRlZmluaXRpb24uaGFzVmlydHVhbE5vZGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9Ob2RlLm5hbWVzcGFjZVVSSSwgY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSEpO1xuXHRcdFx0XHRcdFx0XHRjaGlsZFdyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGREZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIV0gPSBjaGlsZFdyYXBwZXI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW2NoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikhXSA9IGNoaWxkRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLnJlbW92ZUF0dHJpYnV0ZShcImtleVwiKTtcblx0XHRcdFx0XHRcdGNoaWxkRGVmaW5pdGlvbiA9IG5leHRDaGlsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QpIHtcblx0XHRcdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdE5vZGUob0ZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSAhPT0gc0NoaWxkTmFtZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb05ld0NoaWxkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5hcHBlbmRDaGlsZChvRmlyc3RFbGVtZW50Q2hpbGQuY2xvbmVOb2RlKHRydWUpIGFzIEVsZW1lbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSBhcyBFbGVtZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdGlmIChvTWV0YWRhdGEucHJvcGVydGllc1tzQWdncmVnYXRpb25OYW1lXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0Ly8gT2JqZWN0IFR5cGUgcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMiB8IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj4+ID0ge307XG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlTmFtZXMgPSBvRmlyc3RFbGVtZW50Q2hpbGQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXNbYXR0cmlidXRlTmFtZV0gPSBvRmlyc3RFbGVtZW50Q2hpbGQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly9yZXRyaWV2ZSBvbmUgbGV2ZWwgc3ViT2JqZWN0IHByb3BlcnRpZXNcblx0XHRcdFx0XHRcdGZvciAobGV0IGNoaWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwgb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuLmxlbmd0aDsgY2hpbGRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN1YkNoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuW2NoaWxkSW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJPYmplY3RLZXkgPSBzdWJDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN1Yk9iamVjdDogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJDaGlsZEF0dHJpYnV0ZU5hbWVzID0gc3ViQ2hpbGQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBzdWJDaGlsZEF0dHJpYnV0ZU5hbWUgb2Ygc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lcykge1xuXHRcdFx0XHRcdFx0XHRcdHN1Yk9iamVjdFtzdWJDaGlsZEF0dHJpYnV0ZU5hbWVdID0gc3ViQ2hpbGQuZ2V0QXR0cmlidXRlKHN1YkNoaWxkQXR0cmlidXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YWdncmVnYXRpb25Qcm9wZXJ0eVZhbHVlc1tzdWJPYmplY3RLZXldID0gc3ViT2JqZWN0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQWdncmVnYXRpb25OYW1lXSA9IGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXM7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01ldGFkYXRhLnByb3BlcnRpZXNbc0FnZ3JlZ2F0aW9uTmFtZV0udHlwZSA9PT0gXCJhcnJheVwiKSB7XG5cdFx0XHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCAmJiBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW47XG5cdFx0XHRcdFx0XHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPltdID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkRGVmaW5pdGlvbiA9IGNoaWxkcmVuW2NoaWxkSWR4XTtcblx0XHRcdFx0XHRcdFx0Ly8gbm9uIGtleWVkIGNoaWxkLCBqdXN0IGFkZCBpdCB0byB0aGUgYWdncmVnYXRpb25cblx0XHRcdFx0XHRcdFx0Y29uc3QgbXlDaGlsZDogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRteUNoaWxkW2F0dHJpYnV0ZU5hbWVdID0gY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvT3V0T2JqZWN0cy5wdXNoKG15Q2hpbGQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBvT3V0T2JqZWN0cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9BZ2dyZWdhdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90cyhcblx0b0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4sXG5cdG9NZXRhZGF0YUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4sXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRwcm9jZXNzQ3VzdG9tRGF0YSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0aWYgKE9iamVjdC5rZXlzKG9BZ2dyZWdhdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG9BZ2dyZWdhdGlvbkVsZW1lbnQgPSBvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0aWYgKG9Ob2RlICE9PSBudWxsICYmIG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgb0FnZ3JlZ2F0aW9uRWxlbWVudCkge1xuXHRcdFx0XHQvLyBzbG90cyBjYW4gaGF2ZSA6OiBhcyBrZXlzIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGFnZ3JlZ2F0aW9uIG5hbWUgdGhlcmVmb3JlIHJlcGxhY2luZyB0aGVtXG5cdFx0XHRcdGNvbnN0IG9FbGVtZW50Q2hpbGQgPSBvQWdncmVnYXRpb25FbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRpZiAoIVtcImRlcGVuZGVudHNcIiwgXCJjdXN0b21EYXRhXCIsIFwibGF5b3V0RGF0YVwiXS5pbmNsdWRlcyhzQWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHQob01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQgJiYgb01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLnNsb3QpIHx8XG5cdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb05vZGUucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld0NoaWxkID0gcHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudChvTm9kZSwgc0FnZ3JlZ2F0aW9uTmFtZSwgb0VsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0XHRvVGFyZ2V0RWxlbWVudC5yZXBsYWNlV2l0aCguLi4ob05ld0NoaWxkLmNoaWxkcmVuIGFzIHVua25vd24gYXMgTm9kZVtdKSk7IC8vIFNvbWVob3cgVFMgZG9lc24ndCBsaWtlIHRoaXMgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXMgc2hvdWxkIHdvcmtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvY2Vzc0N1c3RvbURhdGEgJiYgb0VsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGUsIHNBZ2dyZWdhdGlvbk5hbWUsIG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdG9Ob2RlLmFwcGVuZENoaWxkKG9OZXdDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlQWdncmVnYXRpb25FbGVtZW50KG9Ob2RlOiBFbGVtZW50LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcsIG9FbGVtZW50Q2hpbGQ6IEVsZW1lbnQgfCBudWxsKTogRWxlbWVudCB7XG5cdGNvbnN0IG9OZXdDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUucmVwbGFjZSgvOi9naSwgXCJfXCIpKTtcblx0d2hpbGUgKG9FbGVtZW50Q2hpbGQpIHtcblx0XHRjb25zdCBvTmV4dENoaWxkID0gb0VsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0b05ld0NoaWxkLmFwcGVuZENoaWxkKG9FbGVtZW50Q2hpbGQpO1xuXHRcdG9FbGVtZW50Q2hpbGQgPSBvTmV4dENoaWxkO1xuXHR9XG5cdHJldHVybiBvTmV3Q2hpbGQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NCdWlsZGluZ0Jsb2NrKFxuXHRCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrQmFzZSxcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRpc1B1YmxpYyA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb01ldGFkYXRhID0gdHJhbnNmb3JtTWV0YWRhdGEoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhKTtcblxuXHRjb25zdCBzRnJhZ21lbnROYW1lID0gb01ldGFkYXRhLmZyYWdtZW50ID8/IGAke29NZXRhZGF0YS5uYW1lc3BhY2UgPz8gb01ldGFkYXRhLnB1YmxpY05hbWVzcGFjZX0uJHtvTWV0YWRhdGEueG1sVGFnID8/IG9NZXRhZGF0YS5uYW1lfWA7XG5cblx0Y29uc3QgbUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0PiA9IHt9O1xuXHRjb25zdCBvU2V0dGluZ3MgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXG5cdC8vIEFkZCBhbiBlbXB0eSBjb252ZXJ0ZXIgY29udGV4dCBpZiB0aGVyZSBpcyBub25lIGluIG9yZGVyIHRvIGhhdmUgYSBwbGFjZSB0byBzdG9yZSBvYmplY3QgdmFsdWVzXG5cdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dCA/Pz0gbmV3IEpTT05Nb2RlbCgpO1xuXG5cdC8vSW5qZWN0IHN0b3JhZ2UgZm9yIG1hY3Jvc1xuXHRpZiAoIW9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSkge1xuXHRcdG9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSA9IHt9O1xuXHR9XG5cblx0Ly8gRmlyc3Qgb2YgYWxsIHdlIG5lZWQgdG8gdmlzaXQgdGhlIGF0dHJpYnV0ZXMgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydGllcyBhbmQgdGhlIG1ldGFkYXRhIGNvbnRleHRzXG5cdGNvbnN0IHByb3BlcnR5VmFsdWVzID0gYXdhaXQgcHJvY2Vzc1Byb3BlcnRpZXMob01ldGFkYXRhLCBvTm9kZSwgaXNQdWJsaWMsIG9WaXNpdG9yKTtcblx0Y29uc3QgaW5pdGlhbEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlcyk7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dCA9IHByb2Nlc3NDb250ZXh0cyhvTWV0YWRhdGEsIG9TZXR0aW5ncywgb05vZGUsIGlzUHVibGljLCBvVmlzaXRvciwgbUNvbnRleHRzLCBwcm9wZXJ0eVZhbHVlcyk7XG5cblx0dHJ5IHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBhbmQgY29tcGxleCB0eXBlIHN1cHBvcnRcblx0XHRjb25zdCBvQWdncmVnYXRpb25zID0gYXdhaXQgcHJvY2Vzc0NoaWxkcmVuKG9Ob2RlLCBvVmlzaXRvciwgb01ldGFkYXRhLCBpc1B1YmxpYywgcHJvcGVydHlWYWx1ZXMpO1xuXHRcdGxldCBvQ29udHJvbENvbmZpZyA9IHt9O1xuXG5cdFx0aWYgKG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEpIHtcblx0XHRcdC8vIE9ubHkgdXNlZCBpbiB0aGUgRmllbGQgbWFjcm8gYW5kIGV2ZW4gdGhlbiBtYXliZSBub3QgcmVhbGx5IHVzZWZ1bFxuXHRcdFx0b0NvbnRyb2xDb25maWcgPSBvU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldFByb3BlcnR5KFwiL2NvbnRyb2xDb25maWd1cmF0aW9uXCIpO1xuXHRcdH1cblx0XHRsZXQgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblxuXHRcdE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0bGV0IG9EYXRhID0gcHJvcGVydHlWYWx1ZXNbcHJvcE5hbWVdIGFzIHVua25vd24gYXMgQ29udGV4dDtcblx0XHRcdC8vY2hlY2sgZm9yIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBmdW5jdGlvbiB0byB2YWxpZGF0ZSAvIG92ZXJ3cml0ZSBwYXJhbWV0ZXJzXG5cdFx0XHRjb25zdCBvcmlnaW5hbERlZmluaXRpb24gPSBCdWlsZGluZ0Jsb2NrQ2xhc3M/Lm1ldGFkYXRhPy5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcblx0XHRcdGlmIChvcmlnaW5hbERlZmluaXRpb24/LnZhbGlkYXRlKSB7XG5cdFx0XHRcdG9EYXRhID0gb3JpZ2luYWxEZWZpbml0aW9uLnZhbGlkYXRlKG9EYXRhKSB8fCBvRGF0YTtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YT8uaXNBPy4oU0FQX1VJX01PREVMX0NPTlRFWFQpICYmICFvRGF0YS5nZXRNb2RlbCgpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV0gPSBvRGF0YS5nZXRPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0eVZhbHVlcy5pc1B1YmxpYyA9IGlzUHVibGljO1xuXG5cdFx0Y29uc3Qgb0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyh7IC4uLnByb3BlcnR5VmFsdWVzLCAuLi5vQWdncmVnYXRpb25zIH0sIG9Db250cm9sQ29uZmlnLCBvU2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzID0gb0luc3RhbmNlLmdldFByb3BlcnRpZXMoKTtcblx0XHRPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0NvbnRleHROYW1lOiBzdHJpbmcpIHtcblx0XHRcdGlmIChwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShzQ29udGV4dE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzW3NDb250ZXh0TmFtZV07XG5cdFx0XHRcdGlmIChpc0NvbnRleHQodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gdGFyZ2V0T2JqZWN0IGFzIENvbnRleHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gc3RvcmVPYmplY3RWYWx1ZSh0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVWYWx1ZSwgdGFyZ2V0T2JqZWN0KTtcblx0XHRcdFx0XHRjb25zdCBuZXdDb250ZXh0ID0gb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGF0dHJpYnV0ZVZhbHVlKSE7XG5cdFx0XHRcdFx0dW5zdG9yZU9iamVjdFZhbHVlKGF0dHJpYnV0ZVZhbHVlKTtcblx0XHRcdFx0XHRtQ29udGV4dHNbc0NvbnRleHROYW1lXSA9IG5ld0NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG9BdHRyaWJ1dGVzTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBBdHRyaWJ1dGVNb2RlbChvTm9kZSwgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMsIEJ1aWxkaW5nQmxvY2tDbGFzcyk7XG5cdFx0bUNvbnRleHRzW1widGhpc1wiXSA9IG9BdHRyaWJ1dGVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHRcdGxldCBvUHJldmlvdXNNYWNyb0luZm86IE1hY3JvSW5mbyB8IHVuZGVmaW5lZDtcblx0XHQvLyBjb3JlOnJlcXVpcmUgbmVlZCB0byBiZSBkZWZpbmVkIG9uIHRoZSBub2RlIGl0c2VsZiB0byBiZSBwaWNrZWQgdXAgZHVlIHRvIHRoZSB0ZW1wbGF0aW5nIHN0ZXBcblx0XHRjb25zdCBjb3JlUmVxdWlyZSA9IG9Ob2RlPy5nZXRBdHRyaWJ1dGUoXCJjb3JlOnJlcXVpcmVcIikgfHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gS2VlcCB0cmFja1xuXHRcdGlmIChUcmFjZUluZm8uaXNUcmFjZUluZm9BY3RpdmUoKSkge1xuXHRcdFx0Y29uc3Qgb1RyYWNlSW5mbyA9IFRyYWNlSW5mby50cmFjZU1hY3JvQ2FsbHMoc0ZyYWdtZW50TmFtZSwgb01ldGFkYXRhLCBtQ29udGV4dHMsIG9Ob2RlLCBvVmlzaXRvcik7XG5cdFx0XHRpZiAob1RyYWNlSW5mbz8ubWFjcm9JbmZvKSB7XG5cdFx0XHRcdG9QcmV2aW91c01hY3JvSW5mbyA9IG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvVHJhY2VJbmZvLm1hY3JvSW5mbztcblx0XHRcdH1cblx0XHR9XG5cdFx0dmFsaWRhdGVNYWNyb1NpZ25hdHVyZShzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUpO1xuXG5cdFx0Y29uc3Qgb0NvbnRleHRWaXNpdG9yID0gb1Zpc2l0b3Iud2l0aChtQ29udGV4dHMsIG9NZXRhZGF0YS5pc09wZW4gIT09IHVuZGVmaW5lZCA/ICFvTWV0YWRhdGEuaXNPcGVuIDogdHJ1ZSk7XG5cdFx0Y29uc3Qgb1BhcmVudCA9IG9Ob2RlLnBhcmVudE5vZGU7XG5cblx0XHRsZXQgaUNoaWxkSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgb1Byb21pc2U7XG5cdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdGlDaGlsZEluZGV4ID0gQXJyYXkuZnJvbShvUGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKG9Ob2RlKTtcblxuXHRcdFx0aWYgKG9NZXRhZGF0YS5mcmFnbWVudCkge1xuXHRcdFx0XHRvUHJvbWlzZSA9IG9Db250ZXh0VmlzaXRvci5pbnNlcnRGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvTm9kZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvbGRLZXlzID0gT2JqZWN0LmtleXModGVtcG9yYXJ5T2JqZWN0U3RvcmUpO1xuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IGF3YWl0IG9JbnN0YW5jZS5nZXRUZW1wbGF0ZSEob05vZGUpO1xuXG5cdFx0XHRcdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MuaXNSdW50aW1lKSB7XG5cdFx0XHRcdFx0Ly8gRm9yIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzLCB3ZSBuZWVkIHRvIGF0dGFjaCBhbGwgb2JqZWN0cyB0byB0aGUgY29udmVydGVyQ29udGV4dCBkaXJlY3RseSwgYXMgdGhlIGFjdHVhbCByZW5kZXJpbmcgdGFrZXMgcGxhY2UgYXQgcnVudGltZVxuXHRcdFx0XHRcdGZvciAoY29uc3Qgc3RvcmVLZXkgaW4gdGVtcG9yYXJ5T2JqZWN0U3RvcmUpIHtcblx0XHRcdFx0XHRcdGlmICghb2xkS2V5cy5pbmNsdWRlcyhzdG9yZUtleSkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHVuc3RvcmVPYmplY3RWYWx1ZShzdG9yZUtleSk7XG5cdFx0XHRcdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShzdG9yZUtleSwgZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGhhc0Vycm9yID0gXCJcIjtcblx0XHRcdFx0aWYgKHRlbXBsYXRlU3RyaW5nKSB7XG5cdFx0XHRcdFx0bGV0IGhhc1BhcnNlRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0XHRsZXQgcGFyc2VkVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyh0ZW1wbGF0ZVN0cmluZywgdHJ1ZSk7XG5cdFx0XHRcdFx0Ly8gRm9yIHNhZmV0eSBwdXJwb3NlIHdlIHRyeSB0byBkZXRlY3QgdHJhaWxpbmcgdGV4dCBpbiBiZXR3ZWVuIFhNTCBUYWdzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHBhcnNlZFRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVyID0gZG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcblx0XHRcdFx0XHRcdGxldCB0ZXh0bm9kZSA9IGl0ZXIubmV4dE5vZGUoKTtcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmxvY2FsTmFtZSA9PT0gXCJwYXJzZXJlcnJvclwiKSB7XG5cdFx0XHRcdFx0XHRcdGhhc1BhcnNlRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0d2hpbGUgKHRleHRub2RlKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0ZXh0bm9kZS50ZXh0Q29udGVudCAmJiB0ZXh0bm9kZS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGhhc0Vycm9yID0gdGV4dG5vZGUudGV4dENvbnRlbnQ7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGhhc1BhcnNlRXJyb3IpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgcGFyc2VlcnJvciB3aGlsZSBwcm9jZXNzaW5nIHRoZSBYTUwgaXQgbWVhbnMgdGhlIFhNTCBpdHNlbGYgaXMgbWFsZm9ybWVkLCBhcyBzdWNoIHdlIHJlcnVuIHRoZSB0ZW1wbGF0ZSBwcm9jZXNzXG5cdFx0XHRcdFx0XHQvLyBTZXR0aW5nIGlzVHJhY2VNb2RlIHRydWUgd2lsbCBtYWtlIGl0IHNvIHRoYXQgZWFjaCB4bWxgIGV4cHJlc3Npb24gaXMgY2hlY2tlZCBmb3IgdmFsaWRpdHkgZnJvbSBYTUwgcGVyc3BlY3RpdmVcblx0XHRcdFx0XHRcdC8vIElmIGFuIGVycm9yIGlzIGZvdW5kIGl0J3MgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGZyYWdtZW50XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEueG1sVGFnIHx8IG9NZXRhZGF0YS5uYW1lfWApO1xuXHRcdFx0XHRcdFx0cGFyc2VkVGVtcGxhdGUgPSAoYXdhaXQgcHJvY2Vzc1htbEluVHJhY2UoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpbml0aWFsVGVtcGxhdGUgPSBhd2FpdCBvSW5zdGFuY2UuZ2V0VGVtcGxhdGU/LihvTm9kZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXJzZVhNTFN0cmluZyhpbml0aWFsVGVtcGxhdGUgPz8gXCJcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9KSkgYXMgRWxlbWVudFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzRXJyb3IubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgdHJhaWxpbmcgdGV4dCB3ZSBjcmVhdGUgYSBzdGFuZGFyZCBlcnJvciBhbmQgZGlzcGxheSBpdC5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXJyb3JUZXh0ID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRgVHJhaWxpbmcgdGV4dCB3YXMgZm91bmQgaW4gdGhlIFhNTDogJHtoYXNFcnJvcn1gXG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlLm1hcCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLm91dGVySFRNTCkuam9pbihcIlxcblwiKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yVGV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Ob2RlLnJlcGxhY2VXaXRoKC4uLnBhcnNlZFRlbXBsYXRlKTtcblxuXHRcdFx0XHRcdGNvbnN0IHZpc2l0ZWROb2RlcyA9IHBhcnNlZFRlbXBsYXRlLm1hcChhc3luYyAoaW50ZXJuYWxOb2RlKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzU2xvdHMob0FnZ3JlZ2F0aW9ucywgb01ldGFkYXRhLmFnZ3JlZ2F0aW9ucywgaW50ZXJuYWxOb2RlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHRWaXNpdG9yLnZpc2l0Tm9kZShpbnRlcm5hbE5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5hbGwodmlzaXRlZE5vZGVzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvTm9kZS5yZW1vdmUoKTtcblx0XHRcdFx0XHRvUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0Y29uc3Qgb01hY3JvRWxlbWVudCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdO1xuXHRcdFx0cHJvY2Vzc1Nsb3RzKG9BZ2dyZWdhdGlvbnMsIG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMsIG9NYWNyb0VsZW1lbnQsIHRydWUpO1xuXHRcdFx0aWYgKG9NYWNyb0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvUmVtYWluaW5nU2xvdHMgPSBvTWFjcm9FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRcdFx0XHRvUmVtYWluaW5nU2xvdHMuZm9yRWFjaChmdW5jdGlvbiAob1Nsb3RFbGVtZW50KSB7XG5cdFx0XHRcdFx0b1Nsb3RFbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGNvcmVSZXF1aXJlKSB7XG5cdFx0XHRcdFx0bGV0IHJlcXVpcmVPbk1hY3JvID0gb01hY3JvRWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiKTtcblx0XHRcdFx0XHRpZiAocmVxdWlyZU9uTWFjcm8pIHtcblx0XHRcdFx0XHRcdHJlcXVpcmVPbk1hY3JvID0gcmVxdWlyZU9uTWFjcm8uc3Vic3RyaW5nKDAsIHJlcXVpcmVPbk1hY3JvLmxlbmd0aCAtIDEpICsgXCIsXCIgKyBjb3JlUmVxdWlyZS5zdWJzdHJpbmcoMSk7IC8vIFJlbW92ZSBsYXN0IH0gYW5kIGZpcnN0IHtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWlyZU9uTWFjcm8gPSBjb3JlUmVxdWlyZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b01hY3JvRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiLCByZXF1aXJlT25NYWNybyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9QcmV2aW91c01hY3JvSW5mbykge1xuXHRcdFx0Ly9yZXN0b3JlIG1hY3JvIGluZm8gaWYgYXZhaWxhYmxlXG5cdFx0XHRvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdID0gb1ByZXZpb3VzTWFjcm9JbmZvO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgb1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXTtcblx0XHR9XG5cdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIGEgZ2VuZXJpYyBlcnJvciAodXN1YWxseSBjb2RlIGVycm9yKSwgd2UgcmV0cmlldmUgdGhlIGN1cnJlbnQgY29udGV4dCBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEgZGVkaWNhdGVkIGVycm9yIG1lc3NhZ2Vcblx0XHRjb25zdCB0cmFjZURldGFpbHMgPSB7XG5cdFx0XHRpbml0aWFsUHJvcGVydGllczoge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRyZXNvbHZlZFByb3BlcnRpZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0bWlzc2luZ0NvbnRleHRzOiBtTWlzc2luZ0NvbnRleHRcblx0XHR9O1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGluaXRpYWxLZXlzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0cGF0aDogcHJvcGVydHlWYWx1ZS5nZXRQYXRoKCksXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYWNlRGV0YWlscy5pbml0aWFsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKCFpbml0aWFsS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLmdldE9iamVjdCgpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgb0Vycm9yID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRbYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEubmFtZX1gXSxcblx0XHRcdG9Ob2RlLm91dGVySFRNTCxcblx0XHRcdHRyYWNlRGV0YWlscyxcblx0XHRcdChlIGFzIEVycm9yKS5zdGFja1xuXHRcdCk7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yLCB0cnVlKTtcblx0XHRvTm9kZS5yZXBsYWNlV2l0aCguLi5vVGVtcGxhdGUpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRTaW5nbGVDb250ZXh0KFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQgfCB1bmRlZmluZWQ+LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b0N0eDoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHR9XG4pOiB2b2lkIHtcblx0Y29uc3Qgc0tleSA9IChvQ3R4Lm5hbWUgfHwgb0N0eC5tb2RlbCB8fCB1bmRlZmluZWQpIGFzIHN0cmluZztcblx0aWYgKG1Db250ZXh0c1tzS2V5XSkge1xuXHRcdHJldHVybjsgLy8gZG8gbm90IGFkZCB0d2ljZVxuXHR9XG5cdHRyeSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9DdHgucGF0aDtcblx0XHRpZiAob0N0eC5tb2RlbCAhPT0gbnVsbCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYCR7b0N0eC5tb2RlbH0+JHtzQ29udGV4dFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbVNldHRpbmcgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHRcdGlmIChvQ3R4Lm1vZGVsID09PSBcImNvbnZlcnRlckNvbnRleHRcIiAmJiBvQ3R4LnBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWxdLmdldENvbnRleHQob0N0eC5wYXRoIC8qLCBtU2V0dGluZy5iaW5kaW5nQ29udGV4dHNbb0N0eC5tb2RlbF0qLyk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSBpZiAoIW1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsIV0gJiYgbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXSkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXS5nZXRDb250ZXh0KG9DdHgucGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBvVmlzaXRvci5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH1cblx0fSBjYXRjaCAoZXgpIHtcblx0XHQvLyBpZ25vcmUgdGhlIGNvbnRleHQgYXMgdGhpcyBjYW4gb25seSBiZSB0aGUgY2FzZSBpZiB0aGUgbW9kZWwgaXMgbm90IHJlYWR5LFxuXHRcdC8vIGkuZS4gbm90IGEgcHJlcHJvY2Vzc2luZyBtb2RlbCBidXQgbWF5YmUgYSBtb2RlbCBmb3IgcHJvdmlkaW5nIGFmdGVyd2FyZHNcblx0fVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gQnVpbGRpbmdCbG9ja0NsYXNzIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckJ1aWxkaW5nQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UpOiB2b2lkIHtcblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciwgdHJ1ZSksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVblJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gQnVpbGRpbmdCbG9ja0NsYXNzIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrQmFzZSk6IHZvaWQge1xuXHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0XHRcdG51bGwsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRudWxsLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yWE1MKGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdLCB4bWxGcmFnbWVudDogc3RyaW5nLCBhZGRpdGlvbmFsRGF0YT86IG9iamVjdCwgc3RhY2s/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBlcnJvckxhYmVscyA9IGVycm9yTWVzc2FnZXMubWFwKChlcnJvck1lc3NhZ2UpID0+IHhtbGA8bTpMYWJlbCB0ZXh0PVwiJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShlcnJvck1lc3NhZ2UpfVwiLz5gKTtcblx0bGV0IGVycm9yU3RhY2sgPSBcIlwiO1xuXHRpZiAoc3RhY2spIHtcblx0XHRjb25zdCBzdGFja0Zvcm1hdHRlZCA9IGJ0b2EoYDxwcmU+JHtzdGFja308L3ByZT5gKTtcblx0XHRlcnJvclN0YWNrID0geG1sYDxtOkZvcm1hdHRlZFRleHQgaHRtbFRleHQ9XCJ7PSBCQkYuYmFzZTY0RGVjb2RlKCcke3N0YWNrRm9ybWF0dGVkfScpIH1cIiAvPmA7XG5cdH1cblx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0aWYgKGFkZGl0aW9uYWxEYXRhKSB7XG5cdFx0YWRkaXRpb25hbFRleHQgPSB4bWxgPG06VkJveD5cblx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJUcmFjZSBJbmZvXCIvPlxuXHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwianNvblwiICB2YWx1ZT1cIiR7YHs9IEJCRi5iYXNlNjREZWNvZGUoJyR7YnRvYShKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsRGF0YSwgbnVsbCwgNCkpfScpIH1gfVwiIGhlaWdodD1cIjMwMHB4XCIgLz5cblx0XHRcdFx0XHQ8L206VkJveD5gO1xuXHR9XG5cdHJldHVybiB4bWxgPGNvbnRyb2xzOkZvcm1FbGVtZW50V3JhcHBlciB4bWxuczpjb250cm9scz1cInNhcC5mZS5jb3JlLmNvbnRyb2xzXCI+XG5cdFx0XHRcdFx0PG06VkJveCB4bWxuczptPVwic2FwLm1cIiB4bWxuczpjb2RlPVwic2FwLnVpLmNvZGVlZGl0b3JcIiBjb3JlOnJlcXVpcmU9XCJ7QkJGOidzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrRm9ybWF0dGVyJ31cIj5cblx0XHRcdFx0XHQke2Vycm9yTGFiZWxzfVxuXHRcdFx0XHRcdCR7ZXJyb3JTdGFja31cblx0XHRcdFx0XHRcdDxncmlkOkNTU0dyaWQgZ3JpZFRlbXBsYXRlUm93cz1cImZyXCIgZ3JpZFRlbXBsYXRlQ29sdW1ucz1cInJlcGVhdCgyLDFmcilcIiBncmlkR2FwPVwiMXJlbVwiIHhtbG5zOmdyaWQ9XCJzYXAudWkubGF5b3V0LmNzc2dyaWRcIiA+XG5cdFx0XHRcdFx0XHRcdDxtOlZCb3g+XG5cdFx0XHRcdFx0XHRcdFx0PG06TGFiZWwgdGV4dD1cIkhvdyB0aGUgYnVpbGRpbmcgYmxvY2sgd2FzIGNhbGxlZFwiLz5cblx0XHRcdFx0XHRcdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJ4bWxcIiB2YWx1ZT1cIiR7YHs9IEJCRi5iYXNlNjREZWNvZGUoJyR7YnRvYSh4bWxGcmFnbWVudC5yZXBsYWNlQWxsKFwiJmd0O1wiLCBcIj5cIikpfScpIH1gfVwiIGhlaWdodD1cIjMwMHB4XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdFx0XHRcdCR7YWRkaXRpb25hbFRleHR9XG5cdFx0XHRcdFx0XHQ8L2dyaWQ6Q1NTR3JpZD5cblx0XHRcdFx0XHQ8L206VkJveD5cblx0XHRcdFx0PC9jb250cm9sczpGb3JtRWxlbWVudFdyYXBwZXI+YDtcbn1cblxuY29uc3QgdGVtcG9yYXJ5T2JqZWN0U3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbi8qKlxuICogU3RvcmVzIGFuIG9iamVjdCB2YWx1ZSBpbiBhIHRlbXBvcmFyeSBzdG9yYWdlIGFuZCByZXR1cm5zIGFuIElEIHVzZWQgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZSBhdCBhIGxhdGVyIHBvaW50IGluIHRpbWUuXG4gKlxuICogUmVxdWlyZWQgYXMgdGhlcmUgaXMgZnVuY3Rpb25hbGl0eSBsaWtlIHRoZSB4bWxgIGZ1bmN0aW9uLCB3aGljaCBtaWdodCB0YWtlIG9iamVjdHMgYXMgcGFyYW1ldGVycyBidXQgbmVlZHMgdG8gcmV0dXJuIGEgc2VyaWFsaXplZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHN0b3JlXG4gKiBAcmV0dXJucyBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHN0b3JlT2JqZWN0VmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0eVVJRCA9IGAvdWlkLS0ke3VpZCgpfWA7XG5cdHRlbXBvcmFyeU9iamVjdFN0b3JlW3Byb3BlcnR5VUlEXSA9IHZhbHVlO1xuXHRyZXR1cm4gcHJvcGVydHlVSUQ7XG59XG5cbi8qKlxuICogVW5zdG9yZXMgYW4gb2JqZWN0IGZyb20gYSB0ZW1wb3Jhcnkgc3RvcmUgYnkgcmVtb3ZpbmcgaXQgYW5kIHJldHVybmluZyBpdHMgb2JqZWN0IHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVVJRCBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKiBAcmV0dXJucyBPYmplY3QgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdW5zdG9yZU9iamVjdFZhbHVlKHByb3BlcnR5VUlEOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgdmFsdWUgPSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdGRlbGV0ZSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdHJldHVybiB2YWx1ZTtcbn1cblxubGV0IHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgYWxsIHhtbGAgY2FsbHMgaW5zaWRlIHRoZSBnaXZlbiBtZXRob2QgYXJlIHByb2Nlc3NlZCBpbiB0cmFjZSBtb2RlLlxuICpcbiAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBleGVjdXRlXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBnaXZlbiBtZXRob2RcbiAqL1xuY29uc3QgcHJvY2Vzc1htbEluVHJhY2UgPSBhc3luYyBmdW5jdGlvbiAobWV0aG9kOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IHRydWU7XG5cdGxldCByZXR1cm5WYWx1ZTtcblx0dHJ5IHtcblx0XHRyZXR1cm5WYWx1ZSA9IG1ldGhvZCgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbi8qKlxuICogUGFyc2UgYW4gWE1MIHN0cmluZyBhbmQgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB4bWxTdHJpbmcgVGhlIHhtbCBzdHJpbmdcbiAqIEBwYXJhbSBbYWRkRGVmYXVsdE5hbWVzcGFjZXNdIFdoZXRoZXIgb3Igbm90IGRlZmF1bHQgbmFtZXNwYWNlcyBzaG91bGQgYmUgYWRkZWRcbiAqIEByZXR1cm5zIFRoZSBYTUwgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVhNTFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZywgYWRkRGVmYXVsdE5hbWVzcGFjZXMgPSBmYWxzZSk6IEVsZW1lbnRbXSB7XG5cdGlmIChhZGREZWZhdWx0TmFtZXNwYWNlcykge1xuXHRcdHhtbFN0cmluZyA9IGA8dGVtcGxhdGVcblx0XHRcdFx0XHRcdHhtbG5zOnRlbXBsYXRlPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIlxuXHRcdFx0XHRcdFx0eG1sbnM6bT1cInNhcC5tXCJcblx0XHRcdFx0XHRcdHhtbG5zOm1hY3Jvcz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCJcblx0XHRcdFx0XHRcdHhtbG5zOm1kYz1cInNhcC51aS5tZGNcIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIj4ke3htbFN0cmluZ308L3RlbXBsYXRlPmA7XG5cdH1cblx0Y29uc3QgeG1sRG9jdW1lbnQgPSBET01QYXJzZXJJbnN0YW5jZS5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRsZXQgb3V0cHV0ID0geG1sRG9jdW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdHdoaWxlIChvdXRwdXQ/LmxvY2FsTmFtZSA9PT0gXCJ0ZW1wbGF0ZVwiKSB7XG5cdFx0b3V0cHV0ID0gb3V0cHV0LmZpcnN0RWxlbWVudENoaWxkO1xuXHR9XG5cdGNvbnN0IGNoaWxkcmVuID0gb3V0cHV0Py5wYXJlbnRFbGVtZW50ID8gb3V0cHV0Py5wYXJlbnRFbGVtZW50LmNoaWxkcmVuIDogW291dHB1dCBhcyBFbGVtZW50XTtcblx0cmV0dXJuIEFycmF5LmZyb20oY2hpbGRyZW4pO1xufVxuXG4vKipcbiAqIEVzY2FwZSBhbiBYTUwgYXR0cmlidXRlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHZhbHVlPy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVySW5UcmFjZU1vZGUob3V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB4bWxSZXN1bHQgPSBwYXJzZVhNTFN0cmluZyhvdXRTdHIsIHRydWUpO1xuXHRpZiAoeG1sUmVzdWx0Py5sZW5ndGggPiAwICYmIHhtbFJlc3VsdFswXT8ubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoeG1sUmVzdWx0WzBdIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgfHwgKHhtbFJlc3VsdFswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuXHRcdHJldHVybiBjcmVhdGVFcnJvclhNTChbZXJyb3JNZXNzYWdlLnNwbGl0KFwiXFxuXCIpWzBdXSwgb3V0U3RyKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb3V0U3RyO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFhNTFByb2Nlc3NvclR5cGVWYWx1ZSA9XG5cdHwgc3RyaW5nXG5cdHwgYm9vbGVhblxuXHR8IG51bWJlclxuXHR8IHVuZGVmaW5lZFxuXHR8IG51bGxcblx0fCBvYmplY3Rcblx0fCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHR8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPlxuXHR8IEFycmF5PHN0cmluZz5cblx0fCBBcnJheTxGdW5jdGlvbj5cblx0fCBGdW5jdGlvblxuXHR8IENvbnRleHQ7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbCB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIG9iamVjdCBjYXNlLlxuICpcbiAqIEBwYXJhbSBzdHJpbmdzIFRoZSBzdHJpbmcgcGFydHMgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBkb2N1bWVudCByZXByZXNlbnRpbmcgdGhlIHN0cmluZyB0aGF0IHdhcyB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgeG1sID0gKHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi52YWx1ZXM6IFhNTFByb2Nlc3NvclR5cGVWYWx1ZVtdKTogc3RyaW5nID0+IHtcblx0bGV0IG91dFN0ciA9IFwiXCI7XG5cdGxldCBpO1xuXHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b3V0U3RyICs9IHN0cmluZ3NbaV07XG5cblx0XHQvLyBIYW5kbGUgdGhlIGRpZmZlcmVudCBjYXNlIG9mIG9iamVjdCwgaWYgaXQncyBhbiBhcnJheSB3ZSBqb2luIHRoZW0sIGlmIGl0J3MgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhlbiB3ZSBjb21waWxlIGl0LlxuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZhbHVlWzBdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWUuZmxhdCg1KS5qb2luKFwiXFxuXCIpLnRyaW0oKTtcblx0XHR9IGVsc2UgaWYgKGlzRnVuY3Rpb25BcnJheSh2YWx1ZSkpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZS5tYXAoKHZhbHVlZm4pID0+IHZhbHVlZm4oKSkuam9pbihcIlxcblwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgY29tcGlsZWRFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUpO1xuXHRcdFx0b3V0U3RyICs9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGNvbXBpbGVkRXhwcmVzc2lvbik7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdG91dFN0ciArPSBcInt0aGlzPnVuZGVmaW5lZFZhbHVlfVwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRpZiAoaXNDb250ZXh0KHZhbHVlKSkge1xuXHRcdFx0XHRvdXRTdHIgKz0gdmFsdWUuZ2V0UGF0aCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlVSWQgPSBzdG9yZU9iamVjdFZhbHVlKHZhbHVlKTtcblx0XHRcdFx0b3V0U3RyICs9IGAke3Byb3BlcnR5VUlkfWA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCI8XCIpICYmICF2YWx1ZS5zdGFydHNXaXRoKFwiJmx0O1wiKSkge1xuXHRcdFx0b3V0U3RyICs9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlO1xuXHRcdH1cblx0fVxuXHRvdXRTdHIgKz0gc3RyaW5nc1tpXTtcblx0b3V0U3RyID0gb3V0U3RyLnRyaW0oKTtcblx0aWYgKHByb2Nlc3NOZXh0WG1sSW5UcmFjZSkge1xuXHRcdHJldHVybiByZW5kZXJJblRyYWNlTW9kZShvdXRTdHIpO1xuXHR9XG5cdHJldHVybiBvdXRTdHI7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBOEJBLE1BQU1BLFlBQVksR0FBRywyREFBMkQ7RUFDaEYsTUFBTUMsZ0JBQWdCLEdBQUcsZ0VBQWdFO0VBQ3pGLE1BQU1DLGlCQUFpQixHQUFHLElBQUlDLFNBQVMsRUFBRTtFQTRHekMsU0FBU0MsNEJBQTRCLENBQ3BDQyxLQUFhLEVBQ2JDLFNBQWtDLEVBQ2xDQyxnQkFBd0QsRUFDeERDLElBQVksRUFDTDtJQUNQLE1BQU1DLFFBQVEsR0FBR0gsU0FBUyxDQUFDRSxJQUFJLENBQUM7SUFDaEMsTUFBTUUsY0FBYyxHQUFHRCxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRUUsU0FBUyxFQUd6QztJQUVELElBQUlKLGdCQUFnQixDQUFDSyxRQUFRLEtBQUssSUFBSSxLQUFLLENBQUNILFFBQVEsSUFBSUMsY0FBYyxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ2pGLE1BQU0sSUFBSUcsS0FBSyxDQUFFLEdBQUVSLEtBQU0sK0JBQThCRyxJQUFLLGNBQWEsQ0FBQztJQUMzRSxDQUFDLE1BQU0sSUFBSUUsY0FBYyxFQUFFO01BQzFCO01BQ0E7TUFDQSxJQUFJQSxjQUFjLENBQUNJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSUosY0FBYyxDQUFDSyxLQUFLLEtBQUtDLFNBQVMsSUFBSVQsZ0JBQWdCLENBQUNVLGFBQWEsS0FBS0QsU0FBUyxFQUFFO1FBQ2pJO1FBQ0EsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1UsYUFBYSxDQUFDQyxRQUFRLENBQUNSLGNBQWMsQ0FBQ0ssS0FBSyxDQUFDLEVBQUU7VUFDbkUsTUFBTSxJQUFJRixLQUFLLENBQ2IsR0FBRVIsS0FBTSxN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
|
|
@@ -619,9 +619,9 @@ async function processChildren(
|
|
|
619
619
|
const oNewChild = document.createElementNS(oNode.namespaceURI, sAggregationName);
|
|
620
620
|
oAggregations[sAggregationName] = oNewChild;
|
|
621
621
|
}
|
|
622
|
-
oAggregations[sAggregationName].appendChild(oFirstElementChild);
|
|
622
|
+
oAggregations[sAggregationName].appendChild(oFirstElementChild.cloneNode(true) as Element);
|
|
623
623
|
} else {
|
|
624
|
-
oAggregations[sAggregationName] = oFirstElementChild;
|
|
624
|
+
oAggregations[sAggregationName] = oFirstElementChild.cloneNode(true) as Element;
|
|
625
625
|
}
|
|
626
626
|
}
|
|
627
627
|
} else if (Object.keys(oMetadata.properties).includes(sAggregationName)) {
|