@sapui5/sap.fe.templates 1.139.0 → 1.140.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListComponent.js +4 -1
- package/src/sap/fe/templates/ListComponent.ts +4 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +46 -3
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +45 -2
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/Component.js +4 -1
- package/src/sap/fe/templates/ObjectPage/Component.ts +4 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +5 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +7 -1
- package/src/sap/fe/templates/ObjectPage/card/BaseCardContentProvider.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/BaseCardContentProvider.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/card/Generator.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/Generator.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderContent.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderContent.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderTitle.js +1 -2
- package/src/sap/fe/templates/ObjectPage/card/facets/HeaderTitle.ts +0 -1
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +15 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +16 -0
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle_de.properties +2 -2
- package/src/sap/fe/templates/messagebundle_es.properties +1 -1
|
@@ -1146,6 +1146,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1146
1146
|
}).then(() => tableBinding));
|
|
1147
1147
|
}
|
|
1148
1148
|
});
|
|
1149
|
+
const isSkipBindingToView = skipBindingToView;
|
|
1150
|
+
const isStandardSave = isSkipBindingToView && typeof isSkipBindingToView == "object" && isSkipBindingToView.getSource().getCommand() === "Save";
|
|
1149
1151
|
const bindings = await Promise.all(awaitCreateDocuments);
|
|
1150
1152
|
// We need to either reject or resolve a promise here and return it since this save
|
|
1151
1153
|
// function is not only called when pressing the save button in the footer, but also
|
|
@@ -1157,7 +1159,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1157
1159
|
bExecuteSideEffectsOnError: executeSideEffectsOnError,
|
|
1158
1160
|
bindings: bindings,
|
|
1159
1161
|
mergePatchDraft: this.mergePatchDraft,
|
|
1160
|
-
skipBindingToView
|
|
1162
|
+
skipBindingToView,
|
|
1163
|
+
isStandardSave
|
|
1161
1164
|
});
|
|
1162
1165
|
} catch (error) {
|
|
1163
1166
|
// If the saveDocument in editFlow returns errors we need
|
|
@@ -1568,4 +1571,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1568
1571
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _class2)) || _class);
|
|
1569
1572
|
return ObjectPageController;
|
|
1570
1573
|
}, false);
|
|
1571
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsImVuYWJsZUFuaW1hdGlvbiIsImdldEZpcnN0RWRpdGFibGVJbnB1dCIsImRvbUVkaXRhYmxlRWxlbWVudCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJVSTVFbGVtZW50IiwiY2xvc2VzdFRvIiwiZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib2JqZWN0UGFnZSIsImZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJnZXRFbmFibGVkIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJFZGl0YWJsZUhlYWRlciIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZm9yRWFjaCIsInN1YkJsb2NrIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImJsb2NrQ29udHJvbCIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJuYXZCYWNrIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiaGlzdG9yeSIsImJhY2siLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwid2FybmluZyIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYmluZGluZ0NvbnRleHQiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJ0YWJsZURlZmluaXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvTW9kZWwiLCJvRmluYWxVSVN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsIl91cGRhdGVBdmFpbGFibGVDYXJkcyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJjYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvYmplY3RQYWdlRGVzY3JpcHRpb24iLCJhcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJmbkNsZWFyQ2FjaGVUaXRsZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJfZXhlY3V0ZUhlYWRlclNob3J0Y3V0Iiwic0J1dHRvbklkIiwib0J1dHRvbiIsIm9FbGVtZW50IiwiZmlyZUJ1dHRvblByZXNzIiwiX2V4ZWN1dGVGb290ZXJTaG9ydGN1dCIsImdldEZvb3RlciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJvTWVzc2FnZSIsImlzRXJyb3JNZXNzYWdlIiwidmFsaWRhdGlvbiIsIm1lc3NhZ2VWYWxpZGF0aW9uIiwiaW5jbHVkZXMiLCJlcnIiLCJvUmV0IiwiaXNFZGl0TW9kZSIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsIm9JdGVtQmluZGluZyIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiaXNDb25uZWN0ZWQiLCJza2lwQmluZGluZ1RvVmlldyIsIm1vZGVsIiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImRpYWxvZ0FjdGlvbiIsIkNvbGxhYm9yYXRpb25EaXNjYXJkIiwiZ2V0VXNlckFjdGlvbiIsImNyZWF0aW9uUm93IiwidGFibGVCaW5kaW5nIiwiY29udGV4dEtleXMiLCJzdGFydHNXaXRoIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGVBdEVuZCIsInNraXBTaWRlRWZmZWN0cyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsInJlcGxhY2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmsiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCwgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnkgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgRm9ybSBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1cIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVUeXBlQmFzZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9UYWJsZVR5cGVCYXNlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIExpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aW9uRHJhZnQgZnJvbSBcIi4vY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRHJhZnRcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuZXhwb3J0IHR5cGUgQmluZGluZ1BhcmFtcyA9IHtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG59O1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IEZFVmlldztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oQ29sbGFib3JhdGlvbk1hbmFnZXIub3ZlcnJpZGUoQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSkpXG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyITogQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uITogTWVzc2FnZUJ1dHRvbjtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25NZXNzYWdlPzogTWVzc2FnZTtcblxuXHRwcml2YXRlIG1lcmdlUGF0Y2hEcmFmdCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgYXV0b1F1ZXVlTG9jazogUmV0dXJuVHlwZTxPRGF0YU1vZGVsW1wibG9ja1wiXT4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQmluZGluZz86IEJpbmRpbmc7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHNcIiwge1xuXHRcdFx0dmlzaWJpbGl0eTogZmFsc2UsXG5cdFx0XHRpdGVtczogbnVsbFxuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgTWVzc2FnZUJ1dHRvbjtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiKTtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nPy5hdHRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRFbmFibGVkXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdFZpc2libGVcIiwgdHJ1ZSk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uZGV0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgYXBwIGlzIHN1c3BlbmRlZCwgd2UgZG8gbm90IHNob3cgdGhlIG1lc3NhZ2VzICh0aGUgTWVzc2FnZU1vZGVsIGNvbnRhaW5zIG1lc3NhZ2VzIGZyb20gdGhlIGFjdGl2ZSBhcHApLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nPy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuX3Nob3dNZXNzYWdlcyhtZXNzYWdlcywgXCJCYWNrZW5kXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBUYWJsZSk6IE9EYXRhTGlzdEJpbmRpbmcge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBsYXN0IHZpc2libGUgc3Vic2VjdGlvbiBhbmQgYWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBHcmlkVGFibGUgb3IgYSBUcmVlVGFibGUuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0QmxvY2tzKCksIC4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKGJsb2Nrcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAodGFibGUuZ2V0VHlwZSgpIGFzIFRhYmxlVHlwZUJhc2UpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKVxuXHRcdFx0XHRcdD8gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGFibGVUeXBlICYmXG5cdFx0XHRcdFx0KHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpIHx8IHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5UcmVlVGFibGVUeXBlXCIpKSAmJlxuXHRcdFx0XHRcdHRhYmxlQVBJPy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnJvd0NvdW50TW9kZSA9PT0gXCJBdXRvXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzdWJTZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5kZXRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb25JbmRleCA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IHN1YlNlY3Rpb25JbmRleCA+PSAwOyBzdWJTZWN0aW9uSW5kZXgtLSkge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF0uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RWaXNpYmxlU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24sIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcuZ2V0Vmlld0RhdGEoKT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGxldCBzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRpZiAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRVc2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGl0ZW0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgeyBpc0ZpcnN0UmVuZGVyaW5nPzogKCkgPT4gYm9vbGVhbiB9KS5pc0ZpcnN0UmVuZGVyaW5nPy4oKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdGNvbnN0IGZuT1BSZW5kZXJpbmdMYXlvdXQgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5lZGl0YWJsZUhlYWRlckNvbnRlbnQpIHtcblx0XHRcdFx0XHRmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKGZuT1BSZW5kZXJpbmdMYXlvdXQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0dGhpcy5faW5pdGlhbGl6ZVBhZ2luYXRpb24ob0NvbnRleHQsIG9JbnRlcm5hbE1vZGVsLCBtUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcpO1xuXG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyhvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgeyBvQ29udGFpbmVyOiBDb250cm9sIH0pLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHR0aGlzLnBsYWNlaG9sZGVyLmVuYWJsZUFuaW1hdGlvbigpO1xuXHRcdFx0XHQob05hdkNvbnRhaW5lciBhcyB1bmtub3duIGFzIHsgc2hvd1BsYWNlaG9sZGVyOiBGdW5jdGlvbiB9KS5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZCBpbiB0aGUgaGVhZGVyXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIChvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFjdGlvbnMuZmluZChmdW5jdGlvbiAoYWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTaGFyZUFQST4oXCJzYXAuZmUubWFjcm9zLnNoYXJlLlNoYXJlQVBJXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8RWFzeUZpbGxCdXR0b24+KFwic2FwLmZlLm1hY3Jvcy5haS5FYXN5RmlsbEJ1dHRvblwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8Q29sbGFib3JhdGlvbkRyYWZ0PihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb21wb25lbnRzLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSwgc3VtbWFyaXplIGFuZCBDb2xsYWJvcmF0aW9uRHJhZnQgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2JhbGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhY3Rpb24uaXNBPEludmlzaWJsZVRleHQ+KFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhYWN0aW9uLmlzQTxUb29sYmFyU3BhY2VyPihcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKSAmJiAoYWN0aW9uIGFzIEJ1dHRvbikuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSBiaW5kaW5ncyBvZiBibG9ja3MgaW4gT2JqZWN0IFBhZ2UgTGF5b3V0IGJhc2VkIG9uIHRoZSBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDM7IC8vIDMgc2VjdGlvbnMvc3Vic2VjdGlvbnMgYXJlIGxvYWRlZCBpbml0aWFsbHksIHRoZSBvdGhlcnMgYXJlIGxvYWRlZCBsYXppbHlcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBiaW5kaW5nIGlzIGVuYWJsZWQuXG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgY29udGVudHMgYmluZGluZyBpcyBkaXNhYmxlZC5cblx0XHRcdFx0XHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIGFTdWJTZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBhQmxvY2tzID0gc3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyAoRm9ybSB8IEZvcm1BUEkpW107XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGJsb2NrQ29udHJvbCBvZiBhQmxvY2tzKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYmxvY2tDb250cm9sLmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGJsb2NrQ29udHJvbC5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCAmJiBibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpPy5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSAoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChibG9ja0NvbnRyb2w/LmdldENvbnRlbnQ/LigpPy5pc0E8Rm9ybUFQST4oXCJzYXAuZmUubWFjcm9zLmZvcm0uRm9ybUFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSAoKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybUFQSSkuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUNvbnRhaW5lciBvZiBhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gZm9ybUNvbnRhaW5lci5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtRWxlbWVudCBvZiBhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBmb3JtRWxlbWVudC5nZXRGaWVsZHMoKSBhcyBJbnB1dEJhc2VbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZW1wdHlGaWVsZCA9IHRoaXMuZ2V0Rmlyc3RFbXB0eVJlcXVpcmVkRmllbGQoYUZpZWxkcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbXB0eUZpZWxkKSByZXR1cm4gZW1wdHlGaWVsZDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWZXJpZnkgaWYgdGhlIGZpcnN0IGZpZWxkIGlzIGVtcHR5IGFuZCByZXF1aXJlZC5cblx0ICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBlbXB0eSByZXF1aXJlZCBmaWVsZCBvciB1bmRlZmluZWQgaWYgbm8gc3VjaCBmaWVsZCBleGlzdHNcblx0ICovXG5cdGdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGZpZWxkczogSW5wdXRCYXNlW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuXHRcdGlmICghZmllbGRzWzBdLmdldFJlcXVpcmVkPy4oKSkgcmV0dXJuO1xuXG5cdFx0bGV0IGlzRW1wdHkgPSBmYWxzZTtcblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAoZmllbGRzWzBdLmlzQShcInNhcC5mZS5tYWNyb3MuTXVsdGlWYWx1ZUZpZWxkXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1zID0gKGZpZWxkc1swXSBhcyB1bmtub3duIGFzIE11bHRpVmFsdWVGaWVsZEJsb2NrKS5nZXRNdWx0aVZhbHVlRmllbGQoKS5nZXRJdGVtcygpO1xuXHRcdFx0XHRpc0VtcHR5ID0gaXRlbXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAoZmllbGRzWzBdIGFzIElucHV0QmFzZSkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0aXNFbXB0eSA9ICF2YWx1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIGNoZWNraW5nIGZpZWxkIHByb3BlcnRpZXM6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzRW1wdHkgPyBmaWVsZHNbMF0gOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbml0aWFsIGZvY3VzIGluIGVkaXQgbW9kZS5cblx0ICogQHBhcmFtIGFTdWJTZWN0aW9ucyBPYmplY3QgcGFnZSBzdWIgc2VjdGlvbnNcblx0ICovXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dChcblx0XHRcdGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0XHRcdGxldCBvRmllbGRUb0ZvY3VzO1xuXHRcdFx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZC5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAoXG5cdFx0XHRcdFx0XHRcdG9NYW5kYXRvcnlGaWVsZCBhcyB1bmtub3duIGFzIHsgY29udGVudDogeyBnZXRDb250ZW50RWRpdDogRnVuY3Rpb24gfSB9XG5cdFx0XHRcdFx0XHQpLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IHRoaXMuZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgPz8gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gb0ZpZWxkVG9Gb2N1cy5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdFx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cy5pc0EoXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkSW5wdXRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvRmllbGRUb0ZvY3VzLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdDBcblx0XHQpO1xuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRjb25zdCBibG9ja3MgPSBvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSBhcyBTdWJTZWN0aW9uQmxvY2tbXTtcblx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblxuXHRcdC8vIEZ1bmN0aW9uIHRvIG5hdmlnYXRlIGJhY2ssIG9yIGRpc3BsYXkgdGhlIGxhdW5jaHBhZCBpZiB3ZSdyZSBvbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgaGlzdG9yeVxuXHRcdGNvbnN0IG5hdkJhY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50VVJMID0gZG9jdW1lbnQuVVJMO1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhZ2UgaW4gdGhlIGhpc3RvcnksIGhpc3RvcnkuYmFjayBkb2VzIG5vdGhpbmcuXG5cdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdXNlIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0LCB0aGF0IHdpbGwgZGlzcGxheSB0aGUgaG9tZSBwYWdlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LlVSTCA9PT0gY3VycmVudFVSTCkge1xuXHRcdFx0XHRcdHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCAxMDApO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGlzIG9iamVjdCBwYWdlIGRvZXNuJ3QgaGF2ZSBhIGJpbmRpbmcgY29udGV4dCwgYnV0IHN0aWxsIGhhbmRsZXMgdGhlIHNoZWxsIGJhY2sgbmF2aWdhdGlvbiAtLT4gcGZvcm0gdGhlIG5hdiBiYWNrIGFuZCByZW1vdmUgdGhlIG5hdmJhY2sgaGFuZGxlciBhcyBpdCBtYWtlcyBubyBzZW5zZSBhbnkgbG9uZ2VyXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0LnNldEJhY2tOYXZpZ2F0aW9uKHVuZGVmaW5lZClcblx0XHRcdFx0LnRoZW4obmF2QmFjaylcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzZXR0aW5nIGJhY2sgbmF2aWdhdGlvblwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRuYXZCYWNrLFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhpbnB1dEJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB2aWV3Py5nZXRWaWV3RGF0YSgpPy52aWV3TGV2ZWw7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwge30pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdFx0Ly8gb25seSBmb3IgZWRpdCBtb2RlLCB3ZSBjbGVhciB0aGUgdGFibGUgY2FjaGVcblx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1RhYmxlUm93QmluZGluZykge1xuXHRcdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdFx0KG9UYWJsZVJvd0JpbmRpbmcgYXMgdW5rbm93biBhcyB7IHJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzOiBGdW5jdGlvbiB9KS5yZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyhcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBlbmRzIGhlcmUhIVxuXG5cdFx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlIGFuZCB1cGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYWNjb3JkaW5nbHlcblx0XHRcdFx0Ly8gV2lsbCB0byBiZSBmaXhlZCB3aXRoIEJMSTogRklPUklURUNIUDEtMjQzMThcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSB0YWJsZUFQSSA/IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCkgOiB7fTtcblxuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBbXSwgXCJ0YWJsZVwiKTtcblxuXHRcdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRcdG9GaW5hbFVJU3RhdGU6IFByb21pc2U8dW5rbm93bj4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBUYWJsZSk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHRcdG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0KCkpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5lZGl0Rmxvdy5jb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzXG5cdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgYmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHt9LCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdChvT2JqZWN0UGFnZSBhcyB1bmtub3duIGFzIHsgX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHM6IEZ1bmN0aW9uIH0pLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKFtdKTtcblx0XHR0aGlzLmRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShtUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQpO1xuXHRcdHRoaXMuX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk7XG5cblx0XHRjb25zdCBhcHBseUFwcFN0YXRlID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHZpZXcuZ2V0SWQoKSwgdmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuYWRkQ2FyZHNUb0NvbGxhYm9yYXRpb25NYW5hZ2VyKGNhcmRPYmplY3QsIHBhcmVudEFwcElkKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuc2hhcmVBdmFpbGFibGVDYXJkcygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTWVzc2FnZXN0cmlwIE9QLlxuXHQgKi9cblx0X3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIsIHsgLi4uaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIpIH0pO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0KG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHQ/LmZpbmRFbGVtZW50cyh0cnVlLCAoZWxlbTogQ29udHJvbCkgPT4gZWxlbS5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpXG5cdFx0XHRcdC5mb3JFYWNoKChtZXNzYWdlU3RyaXA6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlU3RyaXAuc2V0QmluZGluZ0NvbnRleHQoXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSEsXG5cdFx0XHRcdFx0XHRcImludGVybmFsXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdC8vIElmIHRoZSB2aWV3J3MgYmluZGluZyBjb250ZXh0IGFscmVhZHkgaGFkIG1lc3NhZ2VzIHRoYXQgd2VyZSBub3QgY2xlYXJlZCwgd2Ugd291bGQgbmVlZCB0byByZS1ldmFsdWF0ZSB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0dGhpcy5fZm5TaG93T1BNZXNzYWdlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNob3cgYSBtZXNzYWdlIHN0cmlwIGlmIGEgcmVkaXJlY3Rpb24gdG8gYSBub24tZHJhZnQgZWxlbWVudCBoYXMgYmVlbiBkb25lLlxuXHQgKiBSZW1vdmUgdGhlIG1lc3NhZ2Ugc3RyaXAgaW4gY2FzZSB3ZSBuYXZpZ2F0ZSB0byBhbm90aGVyIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gZW50aXR5TmFtZSBOYW1lIG9mIHRoZSBFbnRpdHkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlXG5cdCAqL1xuXHRkaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UoZW50aXR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UpIHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdFx0ZGVsZXRlIHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2U7XG5cdFx0fVxuXG5cdFx0aWYgKGVudGl0eU5hbWUpIHtcblx0XHRcdHRoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJSRVJPVVRFRF9OQVZJR0FUSU9OX1RPX1NBVkVEX1ZFUlNJT05cIiwgW2VudGl0eU5hbWVdKSxcblx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24sXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbiA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBjdHh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvLyBzZXR0aW5nIHRoaXMgbW9kZWwgZGF0YSB0byBiZSB1c2VkIGZvciByZWNvbW1lbmRhdGlvbnMgYmluZGluZ1xuXHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvY3VycmVudEN0eHRcIiwgY3R4dCk7XG5cblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGRvIG5vdCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBhY3Rpb24gaWYgd2UgYXJlIGluIERpc3BsYXkgbW9kZVxuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRpZiAoaXNFZGl0YWJsZSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoW3sgY29udGV4dDogb0JpbmRpbmdDb250ZXh0IH1dKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmZvcmNlRm9jdXMpIHtcblx0XHRcdHNldEZvY3VzKCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RoZSBmb2xsb3dpbmcgY29kaW5nIGlzIGRvbmUgdG8gbWVyZ2UgYW4gb3BlbiBQQVRDSCBhbmQgdGhlIGRyYWZ0cHJlcGFyZS9kcmFmdGFjdGl2YXRlXG5cdFx0Ly9yZXF1ZXN0IGludG8gb25lICRiYXRjaCByZXF1ZXN0XG5cdFx0Ly9UbyBhY2hpZXZlIHRoaXMgdGhlICRhdXRvIHF1ZXVlIGlzIGxvY2tlZCBhdCB0aGUgbW91c2Vkb3duIGV2ZW50IChiZWZvcmUgZm9jdXNvdXQpIGluXG5cdFx0Ly9vcmRlciB0byB3YWl0IGZvciB0aGUgZHJhZnQgcmVxdWVzdCBpc3N1ZWQgaW4gdGhlIHNhdmUgYnV0dG9ucyBwcmVzcyBldmVudCBoYW5kbGVyLlxuXHRcdC8vVGhlIHF1ZXVlIGlzIHJlbGVhc2VkIGFnYWluIGR1cmluZyBtb3VzZXVwIChiZWZvcmUgcHJlc3MpLlxuXHRcdC8vVGhpcyBpcyBvbmx5IHBvc3NpYmxlIG9uIG5vbiB0b3VjaCBkZXZpY2VzIGJlY2F1c2Ugb24gdG91Y2ggZGV2aWNlcyB0aGUgZm9jdXNvdXQgYW5kIHByZXNzXG5cdFx0Ly9ldmVudHMgYXJlIGJvdGggaW5pdGlhdGVkIGF0IHRvdWNoZW5kIGJ5IHNhcC5tLkJ1dHRvbi5cblx0XHQvL21vdXNlSGFuZGxlclNldCBpcyB1c2VkIHRvIGVuc3VyZXMgdGhhdCB0aGUgZXZlbnQgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIG9ubHkgb25lIHRpbWUuXG5cdFx0Ly9UaGVyZSBjYW4gYmUgbXVsdGlwbGUgb25QYWdlUmVhZHkgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQvZGlzcGxheSBtb2RlXG5cdFx0aWYgKCF0aGlzLm1lcmdlUGF0Y2hEcmFmdCAmJiAhRGV2aWNlLnN1cHBvcnQudG91Y2gpIHtcblx0XHRcdGNvbnN0IHNhdmVCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OlNhdmVcIikgYXMgQnV0dG9uO1xuXHRcdFx0Y29uc3QgYXV0b1F1ZXVlVW5sb2NrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrLnVubG9jaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdH07XG5cblx0XHRcdHNhdmVCdXR0b24/LmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlZG93blwiLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5sb2NrKFwiJGF1dG9cIik7XG5cdFx0XHRcdFx0Ly93aGVuIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGF3YXkgZnJvbSB0aGUgc2F2ZSBidXR0b24gd2hpbGUgcHJlc3NlZCB0aGVuIHRoZXJlIHdpbGwgYmUgbm9cblx0XHRcdFx0XHQvL21vdXNldXAgZXZlbnQgb24gdGhlIHNhdmUgYnV0dG9uLiBUaGVyZWZvcmUsIHRoZSB1bmxvY2tpbmcgaXMgZG9uZSBvbiBcIm1vdXNldXBcIiBhbmQgXCJibHVyXCJcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVyZ2VQYXRjaERyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk6IE9iamVjdFBhZ2VMYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9IHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9iamVjdFBhZ2VEZXNjcmlwdGlvbiA9IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlRGVzY3JpcHRpb25cIik7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSBhcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgZm5DbGVhckNhY2hlVGl0bGUgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlKG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdH07XG5cdFx0aWYgKG9PYmplY3RQYWdlU3VidGl0bGUgJiYgIXRoaXMuY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXApIHtcblx0XHRcdG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0QmluZGluZyhcInZhbHVlXCIpPy5hdHRhY2hDaGFuZ2UoZm5DbGVhckNhY2hlVGl0bGUsIHRoaXMpO1xuXHRcdFx0dGhpcy5jbGVhclRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIixcblx0XHRcdGRlc2NyaXB0aW9uOiBvYmplY3RQYWdlRGVzY3JpcHRpb25cblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZCgob0VsZW1lbnQpID0+IG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZCk7XG5cdFx0aWYgKG9CdXR0b24pIHtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9XG5cdH1cblxuXHRfZXhlY3V0ZUZvb3RlclNob3J0Y3V0KHNJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgT3ZlcmZsb3dUb29sYmFyKS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAoXG5cdFx0XHRcdG9FbGVtZW50OiBVSTVFbGVtZW50XG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSAob0V4ZWN1dGlvbi5nZXRTb3VyY2UoKSBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24pLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSEpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAtMSAmJiBpU2VjdGlvbkluZGV4TWF4ID4gMCkge1xuXHRcdFx0aWYgKHNDb21tYW5kID09PSBcIk5leHRUYWJcIikge1xuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4IDw9IGlTZWN0aW9uSW5kZXhNYXggLSAxKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1srK2lTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdC8vIFByZXZpb3VzVGFiXG5cdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0XHRcdGNvbnN0IGlzRXJyb3JNZXNzYWdlID0gb01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIjtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZVZhbGlkYXRpb24gPSBpc0hpZGRlbkRyYWZ0RW5hYmxlZFxuXHRcdFx0XHRcdD8gaXNFcnJvck1lc3NhZ2Vcblx0XHRcdFx0XHQ6IGlzRXJyb3JNZXNzYWdlICYmIG9NZXNzYWdlLmdldFRhcmdldHMoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5pbmNsdWRlcyhzVmlld0lkKSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlVmFsaWRhdGlvbikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKGVycj86IHN0cmluZywgb1JldD86IHVua25vd24pOiB1bmtub3duIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0Y29uc3QgaXNFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3ID0gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHRcdDogKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdENvbnRhaW5lcigpIGFzIE5hdkNvbnRhaW5lcikuZ2V0Q3VycmVudFBhZ2UoKTtcblx0XHRpZiAoaXNFZGl0TW9kZSAmJiAhY3VycmVudFBhZ2VWaWV3LmlzQShcInNhcC5tLk1lc3NhZ2VQYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMubWVzc2FnZUJ1dHRvbixcblx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyID0gb01lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyLFxuXHRcdFx0XHRvSXRlbUJpbmRpbmcgPSBvTWVzc2FnZVBvcG92ZXIuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIExpc3RCaW5kaW5nO1xuXG5cdFx0XHRpZiAob0l0ZW1CaW5kaW5nLmdldExlbmd0aCgpID4gMCAmJiAhb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdG9NZXNzYWdlQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgb01lc3NhZ2VCdXR0b24gaXMgcmVuZGVyZWQgd2hlbiBvcGVuQnkgaXMgY2FsbGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9NZXNzYWdlUG9wb3Zlci5vcGVuQnkob01lc3NhZ2VCdXR0b24pO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9SZXQ7XG5cdH1cblxuXHRhc3luYyBfZWRpdERvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IENvbnRleHQ+IHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQuYXBwbHkodGhpcy5lZGl0RmxvdywgW29Db250ZXh0XSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRlZmF1bHQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgb2JqZWN0LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSB2YWx1ZSBvZiB0aGUgZGF0YSBwb2ludCBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBUaGUgc2VtYW50aWMgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3Rcblx0ICovXG5cdF9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZ1xuXHQpOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBwcm9wZXJ0eVBhdGhcblx0XHRcdFx0fSxcblx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc2VtYW50aWNPYmplY3Rcblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGlzIHRyaWdnZXJlZCBvbiB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQ6XG5cdCAqIC0gb24gYSB0cmFuc2llbnQgY29udGV4dDpcblx0ICogLSBpZiB0aGUgY29udGV4dCBnZXRzIGRhdGEsIHdhaXQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY29udGV4dCBhbmQgZXhlY3V0ZSB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICogLSBpZiBubyBkYXRhIGlzIGZvdW5kIG9uIHRoaXMgY29udGV4dCwgb25seSB0aGUgcHJlcGFyZUFjdGlvbiBpcyByZXF1ZXN0ZWRcblx0ICogLSBvbiBhIHJlZ3VsYXIgY29udGV4dCwgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIGlzIHJlcXVlc3RlZC5cblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBleGVjdXRlZFxuXHQgKi9cblx0YXN5bmMgX3ZhbGlkYXRlRG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBVSTVFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKSBhcyBDb250cm9sO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFjb250cm9sIHx8ICFjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRsZXQgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZTtcblx0XHRpZiAoY29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnlQYXNzU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLmhvbGRNZXNzYWdlc0ZvckNvbnRyb2woY29udHJvbCk7XG5cdFx0Y29uc3QgcmV0ID0gYXdhaXQgdGhpcy5leGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyk7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoeyBjb250cm9sIH0pO1xuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9mIHRoZSBkcmFmdFxuXHQgKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGlzIHRyaWdnZXJlZCBvbiB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQ6XG5cdCAqIC0gdGhlIGdsb2JhbCBzaWRlIGVmZmVjdHMgYXJlIGV4ZWN1dGVkIGlmIHRoZXNlIHNpZGUgZWZmZWN0cyBhcmUgZGVmaW5lZCBpbiB0aGUgY29udGV4dFxuXHQgKiAtIHRoZSBkcmFmdCBWYWxpZGF0aW9uIG9uIHRoZSBEcmFmdFJvb3QgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHRcblx0ICogQHBhcmFtIGJ5UGFzc1NpZGVFZmZlY3RzIE9ubHkgdGhlIGRyYWZ0IFZhbGlkYXRpb24gc3RlcCBpcyBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzID0gZmFsc2UpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHQvLyB0aGUgZHJhZnQgdmFsaWRhdGlvbiBpcyB0cmVhdGVkIGFzIGEgdXNlciBpbnRlcmFjdGlvbiwgYW5kIHRoZSBzZXJ2aWNlIG11c3QgcmV0dXJuIHRyYW5zaXRpb24gbWVzc2FnZXMgYWdhaW4gaWYgc3RpbGwgdmFsaWRcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICghYnlQYXNzU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHMgPSBlbnRpdHlUeXBlID8gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSkgOiBbXTtcblx0XHRcdC8vIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBnbG9iYWwgU2lkZUVmZmVjdHMgZm9yIHRoZSByZWxhdGVkIGVudGl0eSwgZXhlY3V0ZSBpdC90aGVtXG5cdFx0XHRpZiAoZ2xvYmFsU2lkZUVmZmVjdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGdsb2JhbFNpZGVFZmZlY3RzLm1hcChhc3luYyAoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IChhd2FpdCBDb21tb25VdGlscy5jcmVhdGVSb290Q29udGV4dChcblx0XHRcdFByb2dyYW1taW5nTW9kZWwuRHJhZnQsXG5cdFx0XHR0aGlzLmdldFZpZXcoKSxcblx0XHRcdGFwcENvbXBvbmVudFxuXHRcdCkpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzIChpZ25vcmUgRVRhZ3MgaW4gY29sbGFib3JhdGlvbiBkcmFmdClcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50LCB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIElmIGRhdGEgaGFzIGJlZW4gcHJvdmlkZWQgb24gdGhlIGNyZWF0aW9uIHJvd3MsIHRoZSByZWxhdGVkIGRvY3VtZW50cyBhcmUgY3JlYXRlZFxuXHQgKiBiZWZvcmUgc2F2aW5nIHRoZSBkcmFmdCB2ZXJzaW9uLlxuXHQgKiBAcGFyYW0gc2tpcEJpbmRpbmdUb1ZpZXcgSW5kaWNhdGVzIGlmIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3IHNob3VsZCBiZSBza2lwcGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQoc2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHM6IFByb21pc2U8dm9pZCB8IE9EYXRhTGlzdEJpbmRpbmc+W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhtb2RlbCk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIHRydWUpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29sbGFib3JhdGlvbiBkaXNjYXJkOiAke2Vycn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgodGFibGU6IFRhYmxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29udGV4dEtleXMgPSBPYmplY3Qua2V5cygoY3JlYXRpb25Sb3c/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRPYmplY3QoKSB8fCB7fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0S2V5cy5maWx0ZXIoKGtleSkgPT4gIWtleS5zdGFydHNXaXRoKFwiQCR1aTUuXCIpKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvd1xuXHRcdFx0XHRcdFx0XHQuY3JlYXRlRG9jdW1lbnQodGFibGVCaW5kaW5nLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uUm93OiBjcmVhdGlvblJvdyxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVBdEVuZDogdGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIixcblx0XHRcdFx0XHRcdFx0XHRza2lwU2lkZUVmZmVjdHM6IHRydWUgLy8gdGhlIHNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleSwgd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB0YWJsZUJpbmRpbmcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRcdGJpbmRpbmdzOiBiaW5kaW5ncyBhcyB1bmtub3duIGFzIE9EYXRhTGlzdEJpbmRpbmdbXSxcblx0XHRcdFx0XHRtZXJnZVBhdGNoRHJhZnQ6IHRoaXMubWVyZ2VQYXRjaERyYWZ0LFxuXHRcdFx0XHRcdHNraXBCaW5kaW5nVG9WaWV3XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0aWYgKGVycm9yICE9PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG1vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhtb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2NhbmNlbERvY3VtZW50KG1QYXJhbWV0ZXJzOiB7IGNhbmNlbEJ1dHRvbjogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRleHQgfCB2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKSBhcyBCdXR0b24gfCB1bmRlZmluZWQ7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdGNvbnN0IGxhc3RGb2N1c2VkQ29udHJvbElkID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk/LmdldElkKCk7XG5cdFx0bGV0IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgZmFsc2UpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgaGF2ZSBkaXNwbGF5ZWQgdGhlIGRpYWxvZyBhbmQgdGhlIHVzZXIgY29uZmlybWVkIHRoZSBkaXNjYXJkIC0+IFdlIHNraXAgdGhlIGRpc2NhcmQgY29uZmlybWF0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiZGlzY2FyZENvbmZpcm1lZFwiKSB7XG5cdFx0XHRcdFx0c2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBnZXQgY29sbGFib3JhdGl2ZSB1c2Vyc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaXNEb2N1bWVudE1vZGlmaWVkID1cblx0XHRcdCEhdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5c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
|
|
1574
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsImVuYWJsZUFuaW1hdGlvbiIsImdldEZpcnN0RWRpdGFibGVJbnB1dCIsImRvbUVkaXRhYmxlRWxlbWVudCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJVSTVFbGVtZW50IiwiY2xvc2VzdFRvIiwiZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib2JqZWN0UGFnZSIsImZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJnZXRFbmFibGVkIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJFZGl0YWJsZUhlYWRlciIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZm9yRWFjaCIsInN1YkJsb2NrIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImJsb2NrQ29udHJvbCIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJuYXZCYWNrIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiaGlzdG9yeSIsImJhY2siLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwid2FybmluZyIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYmluZGluZ0NvbnRleHQiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJ0YWJsZURlZmluaXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvTW9kZWwiLCJvRmluYWxVSVN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsIl91cGRhdGVBdmFpbGFibGVDYXJkcyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJjYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvYmplY3RQYWdlRGVzY3JpcHRpb24iLCJhcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJmbkNsZWFyQ2FjaGVUaXRsZSIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJfZXhlY3V0ZUhlYWRlclNob3J0Y3V0Iiwic0J1dHRvbklkIiwib0J1dHRvbiIsIm9FbGVtZW50IiwiZmlyZUJ1dHRvblByZXNzIiwiX2V4ZWN1dGVGb290ZXJTaG9ydGN1dCIsImdldEZvb3RlciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJvTWVzc2FnZSIsImlzRXJyb3JNZXNzYWdlIiwidmFsaWRhdGlvbiIsIm1lc3NhZ2VWYWxpZGF0aW9uIiwiaW5jbHVkZXMiLCJlcnIiLCJvUmV0IiwiaXNFZGl0TW9kZSIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsIm9JdGVtQmluZGluZyIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiaXNDb25uZWN0ZWQiLCJza2lwQmluZGluZ1RvVmlldyIsIm1vZGVsIiwiYXdhaXRDcmVhdGVEb2N1bWVudHMiLCJleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsImRpYWxvZ0FjdGlvbiIsIkNvbGxhYm9yYXRpb25EaXNjYXJkIiwiZ2V0VXNlckFjdGlvbiIsImNyZWF0aW9uUm93IiwidGFibGVCaW5kaW5nIiwiY29udGV4dEtleXMiLCJzdGFydHNXaXRoIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGVBdEVuZCIsInNraXBTaWRlRWZmZWN0cyIsImlzU2tpcEJpbmRpbmdUb1ZpZXciLCJpc1N0YW5kYXJkU2F2ZSIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImlzRG9jdW1lbnRNb2RpZmllZCIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiYWZ0ZXJDYW5jZWwiLCJwcm9taXNlUmVzdWx0IiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiaXRlbTEiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsInJlcGxhY2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmsiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCwgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBGb3JtIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybVwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbGxhYm9yYXRpb25EcmFmdCBmcm9tIFwiLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EcmFmdFwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBCaW5kaW5nUGFyYW1zID0ge1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBGRVZpZXc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKENvbGxhYm9yYXRpb25NYW5hZ2VyLm92ZXJyaWRlKENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUpKVxuXHRjb2xsYWJvcmF0aW9uTWFuYWdlciE6IENvbGxhYm9yYXRpb25NYW5hZ2VyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbiE6IE1lc3NhZ2VCdXR0b247XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKTogdm9pZCB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIE1lc3NhZ2VCdXR0b247XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIik7XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgR3JpZFRhYmxlIG9yIGEgVHJlZVRhYmxlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcblx0XHRcdFx0XHQ/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlVHlwZSAmJlxuXHRcdFx0XHRcdCh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkgJiZcblx0XHRcdFx0XHR0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uSW5kZXggPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBzdWJTZWN0aW9uSW5kZXggPj0gMDsgc3ViU2VjdGlvbkluZGV4LS0pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGlzIGV2ZW50IGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgT2JqZWN0IFBhZ2UgTGF6eSBMb2FkaW5nIG1lY2hhbmlzbVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgbGFzdFZpc2libGVTdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3LmdldFZpZXdEYXRhKCk/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKTtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBpdGVtLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIHsgaXNGaXJzdFJlbmRlcmluZz86ICgpID0+IGJvb2xlYW4gfSkuaXNGaXJzdFJlbmRlcmluZz8uKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHRjb25zdCBmbk9QUmVuZGVyaW5nTGF5b3V0ID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uZWRpdGFibGVIZWFkZXJDb250ZW50KSB7XG5cdFx0XHRcdFx0Zm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIHsgb0NvbnRhaW5lcjogQ29udHJvbCB9KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0dGhpcy5wbGFjZWhvbGRlci5lbmFibGVBbmltYXRpb24oKTtcblx0XHRcdFx0KG9OYXZDb250YWluZXIgYXMgdW5rbm93biBhcyB7IHNob3dQbGFjZWhvbGRlcjogRnVuY3Rpb24gfSkuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEZpcnN0RWRpdGFibGVJbnB1dCgpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkb21FZGl0YWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTtcblx0XHRyZXR1cm4gZG9tRWRpdGFibGVFbGVtZW50ID8gVUk1RWxlbWVudC5jbG9zZXN0VG8oZG9tRWRpdGFibGVFbGVtZW50KSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IGNsaWNrYWJsZSBlbGVtZW50IGluIHRoZSBoZWFkZXIgb2YgdGhlIG9iamVjdCBwYWdlLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgZm91bmQgaW4gdGhlIGhlYWRlclxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGxldCBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiAob2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRmaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhY3Rpb25zLmZpbmQoZnVuY3Rpb24gKGFjdGlvbjogQ29udHJvbCkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U2hhcmVBUEk+KFwic2FwLmZlLm1hY3Jvcy5zaGFyZS5TaGFyZUFQSVwiKSB8fFxuXHRcdFx0XHRcdGFjdGlvbi5pc0E8U3VtbWFyaXphdGlvbkJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLlN1bW1hcml6YXRpb25CdXR0b25cIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPEVhc3lGaWxsQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuRWFzeUZpbGxCdXR0b25cIikgfHxcblx0XHRcdFx0XHRhY3Rpb24uaXNBPENvbGxhYm9yYXRpb25EcmFmdD4oXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29tcG9uZW50cy5Db2xsYWJvcmF0aW9uRHJhZnRcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gc2luY2UgU2hhcmVBUEksIHN1bW1hcml6ZSBhbmQgQ29sbGFib3JhdGlvbkRyYWZ0IGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNiYWxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKTtcblx0XHRcdFx0fSBlbHNlIGlmICghYWN0aW9uLmlzQTxJbnZpc2libGVUZXh0PihcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIWFjdGlvbi5pc0E8VG9vbGJhclNwYWNlcj4oXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgKGFjdGlvbiBhcyBCdXR0b24pLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgYmluZGluZ3Mgb2YgYmxvY2tzIGluIE9iamVjdCBQYWdlIExheW91dCBiYXNlZCBvbiB0aGUgaXRzIG92ZXJhbGwgY29udGVudC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICovXG5cdF9kaXNhYmxlQmxvY2tzQmluZGluZ3ModGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VjdGlvbnMgPSBvYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRsZXQgaVNraXAgPSAzOyAvLyAzIHNlY3Rpb25zL3N1YnNlY3Rpb25zIGFyZSBsb2FkZWQgaW5pdGlhbGx5LCB0aGUgb3RoZXJzIGFyZSBsb2FkZWQgbGF6aWx5XG5cdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0XHRibG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpKTtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiBJbnB1dEJhc2UgfCB1bmRlZmluZWQge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBhU3ViU2VjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBibG9ja0NvbnRyb2wgb2YgYUJsb2Nrcykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBibG9ja0NvbnRyb2wuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sLmdldENvbnRlbnQgJiYgYmxvY2tDb250cm9sLmdldENvbnRlbnQoKT8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYmxvY2tDb250cm9sPy5nZXRDb250ZW50Py4oKT8uaXNBPEZvcm1BUEk+KFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gKChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm1BUEkpLmdldENvbnRlbnQoKSBhcyBGb3JtKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1Db250YWluZXIgb2YgYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGZvcm1Db250YWluZXIuZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgZm9ybUVsZW1lbnQgb2YgYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gZm9ybUVsZW1lbnQuZ2V0RmllbGRzKCkgYXMgSW5wdXRCYXNlW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVtcHR5RmllbGQgPSB0aGlzLmdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkKGFGaWVsZHMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZW1wdHlGaWVsZCkgcmV0dXJuIGVtcHR5RmllbGQ7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHQwXG5cdFx0KTtcblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cblx0XHQvLyBGdW5jdGlvbiB0byBuYXZpZ2F0ZSBiYWNrLCBvciBkaXNwbGF5IHRoZSBsYXVuY2hwYWQgaWYgd2UncmUgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGhpc3Rvcnlcblx0XHRjb25zdCBuYXZCYWNrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudFVSTCA9IGRvY3VtZW50LlVSTDtcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBwYWdlIGluIHRoZSBoaXN0b3J5LCBoaXN0b3J5LmJhY2sgZG9lcyBub3RoaW5nLlxuXHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHVzZSBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCwgdGhhdCB3aWxsIGRpc3BsYXkgdGhlIGhvbWUgcGFnZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmIChkb2N1bWVudC5VUkwgPT09IGN1cnJlbnRVUkwpIHtcblx0XHRcdFx0XHR0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwKTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Ly8gVGhpcyBvYmplY3QgcGFnZSBkb2Vzbid0IGhhdmUgYSBiaW5kaW5nIGNvbnRleHQsIGJ1dCBzdGlsbCBoYW5kbGVzIHRoZSBzaGVsbCBiYWNrIG5hdmlnYXRpb24gLS0+IHBmb3JtIHRoZSBuYXYgYmFjayBhbmQgcmVtb3ZlIHRoZSBuYXZiYWNrIGhhbmRsZXIgYXMgaXQgbWFrZXMgbm8gc2Vuc2UgYW55IGxvbmdlclxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdC5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKG5hdkJhY2spXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBiYWNrIG5hdmlnYXRpb25cIiwgZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0bmF2QmFjayxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdmlldz8uZ2V0Vmlld0RhdGEoKT8udmlld0xldmVsO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgdW5rbm93biBhcyB7IF90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzOiBGdW5jdGlvbiB9KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0Ly8gd2UgYXJlIGNsZWFyaW5nIGFueSBwcmV2aW91cyBkYXRhIGZyb20gcmVjb21tZW5kYXRpb25zIGV2ZXJ5IHRpbWUgd2UgY29tZSB0byBuZXcgT1Bcblx0XHQvLyBzbyB0aGF0IGNhY2hlZCByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBzaG93biB0byB1c2VyXG5cdFx0aWYgKHZpZXdMZXZlbCAmJiB2aWV3TGV2ZWwgPT09IDEpIHtcblx0XHRcdG9GaW5hbFVJU3RhdGU/LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlY29tbWVuZGF0aW9ucy5jbGVhclJlY29tbWVuZGF0aW9ucygpO1xuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLl91cGRhdGVBdmFpbGFibGVDYXJkcyhbXSk7XG5cdFx0dGhpcy5kaXNwbGF5Q29sbGFib3JhdGlvbk1lc3NhZ2UobVBhcmFtZXRlcnM/LnJlZGlyZWN0ZWRUb05vbkRyYWZ0KTtcblx0XHR0aGlzLl9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpO1xuXG5cdFx0Y29uc3QgYXBwbHlBcHBTdGF0ZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSh2aWV3LmdldElkKCksIHZpZXcpO1xuXHRcdHRoaXMucGFnZVJlYWR5LndhaXRGb3IoYXBwbHlBcHBTdGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBjYXJkcyB3aGVuIHRoZSBiaW5kaW5nIGlzIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIGNhcmRzIEFycmF5IG9mIGNhcmRzIHRvIGJlIHVwZGF0ZWRcblx0ICovXG5cdGFzeW5jIF91cGRhdGVBdmFpbGFibGVDYXJkcyhjYXJkczogV3JhcHBlZENhcmRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIuY29sbGVjdEF2YWlsYWJsZUNhcmRzKGNhcmRzKTtcblx0XHRpZiAoY2FyZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgY2FyZE9iamVjdCA9IHRoaXMuY29sbGFib3JhdGlvbk1hbmFnZXIudXBkYXRlQ2FyZHMoY2FyZHMpO1xuXHRcdFx0Y29uc3QgcGFyZW50QXBwSWQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldElkKCk7XG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLmFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlcihjYXJkT2JqZWN0LCBwYXJlbnRBcHBJZCk7XG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpLnNoYXJlQXZhaWxhYmxlQ2FyZHMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIE1lc3NhZ2VzdHJpcCBPUC5cblx0ICovXG5cdF9zZXRPUE1lc3NhZ2VTdHJpcEludGVybmFsQ29udGV4dCgpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcIk1lc3NhZ2VTdHJpcFwiLCB7IC4uLmludGVybmFsTW9kZWxDb250ZXh0Py5nZXRQcm9wZXJ0eShcIk1lc3NhZ2VTdHJpcFwiKSB9KTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdChvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIHVua25vd24gYXMgQ29udHJvbClcblx0XHRcdFx0Py5maW5kRWxlbWVudHModHJ1ZSwgKGVsZW06IENvbnRyb2wpID0+IGVsZW0uaXNBKFwic2FwLm0uTWVzc2FnZVN0cmlwXCIpKVxuXHRcdFx0XHQuZm9yRWFjaCgobWVzc2FnZVN0cmlwOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZVN0cmlwLnNldEJpbmRpbmdDb250ZXh0KFxuXHRcdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHRcblx0XHRcdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhLFxuXHRcdFx0XHRcdFx0XCJpbnRlcm5hbFwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBJZiB0aGUgdmlldydzIGJpbmRpbmcgY29udGV4dCBhbHJlYWR5IGhhZCBtZXNzYWdlcyB0aGF0IHdlcmUgbm90IGNsZWFyZWQsIHdlIHdvdWxkIG5lZWQgdG8gcmUtZXZhbHVhdGUgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcC5cblx0XHRcdHRoaXMuX2ZuU2hvd09QTWVzc2FnZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IGEgbWVzc2FnZSBzdHJpcCBpZiBhIHJlZGlyZWN0aW9uIHRvIGEgbm9uLWRyYWZ0IGVsZW1lbnQgaGFzIGJlZW4gZG9uZS5cblx0ICogUmVtb3ZlIHRoZSBtZXNzYWdlIHN0cmlwIGluIGNhc2Ugd2UgbmF2aWdhdGUgdG8gYW5vdGhlciBvYmplY3QgcGFnZS5cblx0ICogQHBhcmFtIGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgRW50aXR5IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZVxuXHQgKi9cblx0ZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKGVudGl0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlKSB7XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlO1xuXHRcdH1cblxuXHRcdGlmIChlbnRpdHlOYW1lKSB7XG5cdFx0XHR0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiUkVST1VURURfTkFWSUdBVElPTl9UT19TQVZFRF9WRVJTSU9OXCIsIFtlbnRpdHlOYW1lXSksXG5cdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uLFxuXHRcdFx0XHR0YXJnZXQ6IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHRcdH0pO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhc3luYyBvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogeyBmb3JjZUZvY3VzOiBib29sZWFuIH0gfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpOiB2b2lkID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb24gPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgY3R4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly8gc2V0dGluZyB0aGlzIG1vZGVsIGRhdGEgdG8gYmUgdXNlZCBmb3IgcmVjb21tZW5kYXRpb25zIGJpbmRpbmdcblx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwiL2N1cnJlbnRDdHh0XCIsIGN0eHQpO1xuXG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBkbyBub3QgcmVxdWVzdCByZWNvbW1lbmRhdGlvbnMgYWN0aW9uIGlmIHdlIGFyZSBpbiBEaXNwbGF5IG1vZGVcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0aWYgKGlzRWRpdGFibGUgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKFt7IGNvbnRleHQ6IG9CaW5kaW5nQ29udGV4dCB9XSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRzZXRGb2N1cygpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly9UaGUgZm9sbG93aW5nIGNvZGluZyBpcyBkb25lIHRvIG1lcmdlIGFuIG9wZW4gUEFUQ0ggYW5kIHRoZSBkcmFmdHByZXBhcmUvZHJhZnRhY3RpdmF0ZVxuXHRcdC8vcmVxdWVzdCBpbnRvIG9uZSAkYmF0Y2ggcmVxdWVzdFxuXHRcdC8vVG8gYWNoaWV2ZSB0aGlzIHRoZSAkYXV0byBxdWV1ZSBpcyBsb2NrZWQgYXQgdGhlIG1vdXNlZG93biBldmVudCAoYmVmb3JlIGZvY3Vzb3V0KSBpblxuXHRcdC8vb3JkZXIgdG8gd2FpdCBmb3IgdGhlIGRyYWZ0IHJlcXVlc3QgaXNzdWVkIGluIHRoZSBzYXZlIGJ1dHRvbnMgcHJlc3MgZXZlbnQgaGFuZGxlci5cblx0XHQvL1RoZSBxdWV1ZSBpcyByZWxlYXNlZCBhZ2FpbiBkdXJpbmcgbW91c2V1cCAoYmVmb3JlIHByZXNzKS5cblx0XHQvL1RoaXMgaXMgb25seSBwb3NzaWJsZSBvbiBub24gdG91Y2ggZGV2aWNlcyBiZWNhdXNlIG9uIHRvdWNoIGRldmljZXMgdGhlIGZvY3Vzb3V0IGFuZCBwcmVzc1xuXHRcdC8vZXZlbnRzIGFyZSBib3RoIGluaXRpYXRlZCBhdCB0b3VjaGVuZCBieSBzYXAubS5CdXR0b24uXG5cdFx0Ly9tb3VzZUhhbmRsZXJTZXQgaXMgdXNlZCB0byBlbnN1cmVzIHRoYXQgdGhlIGV2ZW50IGhhbmRsZXJzIGFyZSBhdHRhY2hlZCBvbmx5IG9uZSB0aW1lLlxuXHRcdC8vVGhlcmUgY2FuIGJlIG11bHRpcGxlIG9uUGFnZVJlYWR5IGUuZy4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlZGl0L2Rpc3BsYXkgbW9kZVxuXHRcdGlmICghdGhpcy5tZXJnZVBhdGNoRHJhZnQgJiYgIURldmljZS5zdXBwb3J0LnRvdWNoKSB7XG5cdFx0XHRjb25zdCBzYXZlQnV0dG9uID0gb1ZpZXcuYnlJZChcImZlOjpGb290ZXJCYXI6OlN0YW5kYXJkQWN0aW9uOjpTYXZlXCIpIGFzIEJ1dHRvbjtcblx0XHRcdGNvbnN0IGF1dG9RdWV1ZVVubG9jayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jay51bmxvY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHR9O1xuXG5cdFx0XHRzYXZlQnV0dG9uPy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZWRvd25cIiwgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jayA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkubG9jayhcIiRhdXRvXCIpO1xuXHRcdFx0XHRcdC8vd2hlbiB0aGUgbW91c2UgaXMgZHJhZ2dlZCBhd2F5IGZyb20gdGhlIHNhdmUgYnV0dG9uIHdoaWxlIHByZXNzZWQgdGhlbiB0aGVyZSB3aWxsIGJlIG5vXG5cdFx0XHRcdFx0Ly9tb3VzZXVwIGV2ZW50IG9uIHRoZSBzYXZlIGJ1dHRvbi4gVGhlcmVmb3JlLCB0aGUgdW5sb2NraW5nIGlzIGRvbmUgb24gXCJtb3VzZXVwXCIgYW5kIFwiYmx1clwiXG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1lcmdlUGF0Y2hEcmFmdCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpOiBPYmplY3RQYWdlTGF5b3V0IHtcblx0XHRyZXR1cm4gdGhpcy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpOiB7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGEpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRjb25zdCBvYmplY3RQYWdlRGVzY3JpcHRpb24gPSBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZURlc2NyaXB0aW9uXCIpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmIChvT2JqZWN0UGFnZVN1YnRpdGxlICYmICF0aGlzLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb2JqZWN0UGFnZURlc2NyaXB0aW9uXG5cdFx0fTtcblx0fVxuXG5cdF9leGVjdXRlSGVhZGVyU2hvcnRjdXQoc0lkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpXG5cdFx0XHRcdC5nZXRBY3Rpb25zKClcblx0XHRcdFx0LmZpbmQoKG9FbGVtZW50KSA9PiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQpO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIE92ZXJmbG93VG9vbGJhcikuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0XHRvRWxlbWVudDogVUk1RWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5CdXR0b25cIiAmJiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gKG9FeGVjdXRpb24uZ2V0U291cmNlKCkgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uKS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkhKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdGNvbnN0IGlzSGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdD8uZW5hYmxlZDtcblx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdFx0XHRjb25zdCBpc0Vycm9yTWVzc2FnZSA9IG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIkVycm9yXCI7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VWYWxpZGF0aW9uID0gaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0XHRcdFx0XHQ/IGlzRXJyb3JNZXNzYWdlXG5cdFx0XHRcdFx0OiBpc0Vycm9yTWVzc2FnZSAmJiBvTWVzc2FnZS5nZXRUYXJnZXRzKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQuaW5jbHVkZXMoc1ZpZXdJZCkpO1xuXHRcdFx0XHRpZiAobWVzc2FnZVZhbGlkYXRpb24pIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBzdHJpbmcsIG9SZXQ/OiB1bmtub3duKTogdW5rbm93biB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IGlzRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKGlzRWRpdE1vZGUgJiYgIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBMaXN0QmluZGluZztcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0YXN5bmMgX2VkaXREb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdC5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgdmFsdWUgb2YgdGhlIGRhdGEgcG9pbnQgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHNlbWFudGljIG9iamVjdFxuXHQgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgdGhlIGRlZmF1bHQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgb2JqZWN0XG5cdCAqL1xuXHRfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmdcblx0KTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHNlbWFudGljT2JqZWN0XG5cdFx0XHR9XG5cdFx0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIG9uIGEgdHJhbnNpZW50IGNvbnRleHQ6XG5cdCAqIC0gaWYgdGhlIGNvbnRleHQgZ2V0cyBkYXRhLCB3YWl0IGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIGV4ZWN1dGUgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqIC0gaWYgbm8gZGF0YSBpcyBmb3VuZCBvbiB0aGlzIGNvbnRleHQsIG9ubHkgdGhlIHByZXBhcmVBY3Rpb24gaXMgcmVxdWVzdGVkXG5cdCAqIC0gb24gYSByZWd1bGFyIGNvbnRleHQsIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBpcyByZXF1ZXN0ZWQuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZXhlY3V0ZWRcblx0ICovXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCkgYXMgQ29udHJvbDtcblx0XHRjb25zdCBjb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghY29udHJvbCB8fCAhY29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IGJ5UGFzc1NpZGVFZmZlY3RzID0gZmFsc2U7XG5cdFx0aWYgKGNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ5UGFzc1NpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5ob2xkTWVzc2FnZXNGb3JDb250cm9sKGNvbnRyb2wpO1xuXHRcdGNvbnN0IHJldCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMpO1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29udHJvbCB9KTtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvZiB0aGUgZHJhZnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAtIHRoZSBnbG9iYWwgc2lkZSBlZmZlY3RzIGFyZSBleGVjdXRlZCBpZiB0aGVzZSBzaWRlIGVmZmVjdHMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnRleHRcblx0ICogLSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBvbiB0aGUgRHJhZnRSb290IGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0XG5cdCAqIEBwYXJhbSBieVBhc3NTaWRlRWZmZWN0cyBPbmx5IHRoZSBkcmFmdCBWYWxpZGF0aW9uIHN0ZXAgaXMgZXhlY3V0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICovXG5cdGFzeW5jIGV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Ly8gdGhlIGRyYWZ0IHZhbGlkYXRpb24gaXMgdHJlYXRlZCBhcyBhIHVzZXIgaW50ZXJhY3Rpb24sIGFuZCB0aGUgc2VydmljZSBtdXN0IHJldHVybiB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFnYWluIGlmIHN0aWxsIHZhbGlkXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAoIWJ5UGFzc1NpZGVFZmZlY3RzKSB7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IGdsb2JhbFNpZGVFZmZlY3RzID0gZW50aXR5VHlwZSA/IHNpZGVFZmZlY3RzU2VydmljZS5nZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGUpIDogW107XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2xvYmFsIFNpZGVFZmZlY3RzIGZvciB0aGUgcmVsYXRlZCBlbnRpdHksIGV4ZWN1dGUgaXQvdGhlbVxuXHRcdFx0aWYgKGdsb2JhbFNpZGVFZmZlY3RzLmxlbmd0aCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRnbG9iYWxTaWRlRWZmZWN0cy5tYXAoYXN5bmMgKHNpZGVFZmZlY3RzKSA9PiB0aGlzLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMsIGNvbnRleHQpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSAoYXdhaXQgQ29tbW9uVXRpbHMuY3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRQcm9ncmFtbWluZ01vZGVsLkRyYWZ0LFxuXHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRhcHBDb21wb25lbnRcblx0XHQpKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHQvL0V4ZWN1dGUgdGhlIGRyYWZ0VmFsaWRhdGlvbiBpZiB0aGVyZSBpcyBubyBnbG9iYWxTaWRlRWZmZWN0cyAoaWdub3JlIEVUYWdzIGluIGNvbGxhYm9yYXRpb24gZHJhZnQpXG5cdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCwgdGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb25uZWN0ZWQoKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBJZiBkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIG9uIHRoZSBjcmVhdGlvbiByb3dzLCB0aGUgcmVsYXRlZCBkb2N1bWVudHMgYXJlIGNyZWF0ZWRcblx0ICogYmVmb3JlIHNhdmluZyB0aGUgZHJhZnQgdmVyc2lvbi5cblx0ICogQHBhcmFtIHNraXBCaW5kaW5nVG9WaWV3IEluZGljYXRlcyBpZiB0aGUgYmluZGluZyB0byB0aGUgdmlldyBzaG91bGQgYmUgc2tpcHBlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfc2F2ZURvY3VtZW50KHNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzOiBQcm9taXNlPHZvaWQgfCBPRGF0YUxpc3RCaW5kaW5nPltdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sobW9kZWwpO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCB0cnVlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGNvbGxhYm9yYXRpb24gZGlzY2FyZDogJHtlcnJ9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKHRhYmxlOiBUYWJsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRLZXlzID0gT2JqZWN0LmtleXMoKGNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0T2JqZWN0KCkgfHwge30pO1xuXHRcdFx0XHRpZiAoY29udGV4dEtleXMuZmlsdGVyKChrZXkpID0+ICFrZXkuc3RhcnRzV2l0aChcIkAkdWk1LlwiKSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3dcblx0XHRcdFx0XHRcdFx0LmNyZWF0ZURvY3VtZW50KHRhYmxlQmluZGluZywge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvblJvdzogY3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHRhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2tpcFNpZGVFZmZlY3RzOiB0cnVlIC8vIHRoZSBza2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXksIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4gdGFibGVCaW5kaW5nKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgaXNTa2lwQmluZGluZ1RvVmlldyA9IHNraXBCaW5kaW5nVG9WaWV3IGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQ7XG5cdFx0XHRjb25zdCBpc1N0YW5kYXJkU2F2ZSA9XG5cdFx0XHRcdGlzU2tpcEJpbmRpbmdUb1ZpZXcgJiYgdHlwZW9mIGlzU2tpcEJpbmRpbmdUb1ZpZXcgPT0gXCJvYmplY3RcIiAmJiBpc1NraXBCaW5kaW5nVG9WaWV3LmdldFNvdXJjZSgpLmdldENvbW1hbmQoKSA9PT0gXCJTYXZlXCI7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRcdGJpbmRpbmdzOiBiaW5kaW5ncyBhcyB1bmtub3duIGFzIE9EYXRhTGlzdEJpbmRpbmdbXSxcblx0XHRcdFx0XHRtZXJnZVBhdGNoRHJhZnQ6IHRoaXMubWVyZ2VQYXRjaERyYWZ0LFxuXHRcdFx0XHRcdHNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGlzU3RhbmRhcmRTYXZlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0aWYgKGVycm9yICE9PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG1vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhtb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2NhbmNlbERvY3VtZW50KG1QYXJhbWV0ZXJzOiB7IGNhbmNlbEJ1dHRvbjogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRleHQgfCB2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKSBhcyBCdXR0b24gfCB1bmRlZmluZWQ7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdGNvbnN0IGxhc3RGb2N1c2VkQ29udHJvbElkID0gVUk1RWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk/LmdldElkKCk7XG5cdFx0bGV0IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgZmFsc2UpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgaGF2ZSBkaXNwbGF5ZWQgdGhlIGRpYWxvZyBhbmQgdGhlIHVzZXIgY29uZmlybWVkIHRoZSBkaXNjYXJkIC0+IFdlIHNraXAgdGhlIGRpc2NhcmQgY29uZmlybWF0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiZGlzY2FyZENvbmZpcm1lZFwiKSB7XG5cdFx0XHRcdFx0c2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBnZXQgY29sbGFib3JhdGl2ZSB1c2Vyc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgaXNEb2N1bWVudE1vZGlmaWVkID1cblx0XHRcdCEhdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQpIHx8ICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3R0EsTUFBTUEsZ0JBQWdCLEdBQUdDLFNBQVMsQ0FBQ0QsZ0JBQWdCO0VBQUMsSUFHOUNFLG9CQUFvQixJQUFBQyxJQUFBLEdBRHpCQyxjQUFjLENBQUMsa0RBQWtELENBQUMsRUFBQUMsS0FBQSxHQUlqRUMsY0FBYyxDQUFDQyxXQUFXLENBQUMsRUFBQUMsS0FBQSxHQUczQkYsY0FBYyxDQUFDRyxLQUFLLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc5Q04sY0FBYyxDQUFDTyxlQUFlLENBQUNILFFBQVEsQ0FBQ0ksdUJBQXVCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2pFVCxjQUFjLENBQUNVLFNBQVMsQ0FBQ04sUUFBUSxDQUFDTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHckRaLGNBQWMsQ0FBQ2EsY0FBYyxDQUFDVCxRQUFRLENBQUNV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
|