@sapui5/sap.fe.core 1.136.8 → 1.136.9

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.
Files changed (45) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +28 -16
  4. package/src/sap/fe/core/AppComponent.ts +36 -20
  5. package/src/sap/fe/core/AppStateHandler.js +6 -5
  6. package/src/sap/fe/core/AppStateHandler.ts +5 -5
  7. package/src/sap/fe/core/PageController.js +4 -4
  8. package/src/sap/fe/core/PageController.ts +3 -3
  9. package/src/sap/fe/core/TemplateComponent.js +3 -3
  10. package/src/sap/fe/core/TemplateComponent.ts +2 -2
  11. package/src/sap/fe/core/controllerextensions/EditFlow.js +159 -34
  12. package/src/sap/fe/core/controllerextensions/EditFlow.ts +177 -39
  13. package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -3
  14. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  15. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +28 -17
  16. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +35 -18
  17. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +5 -2
  18. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +3 -1
  19. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +13 -9
  20. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +13 -9
  21. package/src/sap/fe/core/converters/annotations/DataField.js +6 -2
  22. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  23. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +6 -5
  24. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +5 -4
  25. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -2
  26. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -1
  27. package/src/sap/fe/core/fpm/manifest.json +1 -1
  28. package/src/sap/fe/core/library.js +1 -1
  29. package/src/sap/fe/core/messagebundle_da.properties +3 -3
  30. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  31. package/src/sap/fe/core/messagebundle_fr.properties +9 -9
  32. package/src/sap/fe/core/messagebundle_hu.properties +1 -1
  33. package/src/sap/fe/core/messagebundle_id.properties +1 -1
  34. package/src/sap/fe/core/messagebundle_ja.properties +1 -1
  35. package/src/sap/fe/core/messagebundle_lv.properties +1 -1
  36. package/src/sap/fe/core/messagebundle_uk.properties +1 -1
  37. package/src/sap/fe/core/messagebundle_zh_CN.properties +1 -1
  38. package/src/sap/fe/core/rootView/RootViewBaseController.js +17 -17
  39. package/src/sap/fe/core/rootView/RootViewBaseController.ts +24 -29
  40. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +13 -6
  41. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +17 -5
  42. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  43. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  44. package/src/sap/fe/core/templating/UIFormatters.js +2 -2
  45. package/src/sap/fe/core/templating/UIFormatters.ts +1 -1
@@ -367,7 +367,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
367
367
  const pathForText = externalIdPath ? externalIdPath : path;
368
368
  const propertyForText = externalIdProperty ? externalIdProperty : property;
369
369
  // Check for Text Arrangement.
370
- const displayMode = getDisplayMode(propertyForText, propertyDataModelObjectPath);
370
+ const displayMode = getDisplayMode(propertyForText, propertyDataModelObjectPath.targetEntityType);
371
371
  let descriptionIndex;
372
372
  switch (displayMode) {
373
373
  case "Description":
@@ -428,6 +428,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
428
428
  }
429
429
  }
430
430
  relatedProperties = _collectAdditionalPropertiesForAnalyticalTable(property, navigationPathPrefix, tableType, relatedProperties);
431
+ if (Object.keys(relatedProperties.additionalProperties).length > 0 && relativePath) {
432
+ // We don't need to consider additionalProperties for the export
433
+ relatedProperties.exportSettings.property = [relativePath];
434
+ }
431
435
  if (Object.keys(relatedProperties.additionalProperties).length > 0 && Object.keys(relatedProperties.properties).length === 0) {
432
436
  // Collect underlying property if not collected already.
433
437
  // This is to ensure that additionalProperties are made available only to complex property infos.
@@ -642,4 +646,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/helpers/Agg
642
646
  _exports.getDataFieldDataType = getDataFieldDataType;
643
647
  return _exports;
644
648
  }, false);
645
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJfZXhwb3J0cyIsImlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAiLCIkVHlwZSIsImlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uIiwiaXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGQiLCJoYXNGaWVsZEdyb3VwVGFyZ2V0IiwiZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImRhdGFGaWVsZFRhcmdldCIsIlRhcmdldCIsIiR0YXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJoYXNJZGVudGlmaWNhdGlvblRhcmdldCIsImlzQW5ub3RhdGlvbk9mVGVybSIsImhhc0RhdGFQb2ludFRhcmdldCIsInZpc2libGVFeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsInVuZGVmaW5lZCIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldCIsInRhcmdldE9iamVjdCIsImlzQWN0aW9uV2l0aERpYWxvZyIsImFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwibGVuZ3RoIiwiZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCIsInNvdXJjZSIsInRhcmdldFZhbHVlIiwiaXNQcm9wZXJ0eSIsImRhdGFQb2ludCIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXRWYWx1ZSIsIk1heGltdW1WYWx1ZSIsInRvU3RyaW5nIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0IiwicHJvcGVydHkiLCJpc1JhdGluZ1Zpc3VhbGl6YXRpb25Gcm9tRGF0YUZpZWxkRGVmYXVsdCIsIlZpc3VhbGl6YXRpb24iLCJpc0FQcm9ncmVzc1R5cGVGcm9tRGF0YVBvaW50IiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwib2JqZWN0IiwiVmFsdWUiLCJTZW1hbnRpY09iamVjdCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5jbHVkZXMiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIl9jb2xsZWN0QWRkaXRpb25hbFByb3BlcnRpZXNGb3JBbmFseXRpY2FsVGFibGUiLCJuYXZpZ2F0aW9uUGF0aFByZWZpeCIsInRhYmxlVHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzIiwiaGlkZGVuQW5ub3RhdGlvbiIsImhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyaXRpY2FsaXR5IiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5UGF0aCIsIl9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4Iiwia2V5IiwidmFsdWUiLCJkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbiIsInByb3BlcnRpZXMiLCJhbm5vdGF0aW9uUHJvcGVydHkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsIl9hcHBlbmRUZW1wbGF0ZSIsImV4cG9ydFNldHRpbmdzIiwidGVtcGxhdGUiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwiYXJndW1lbnRzIiwiYWRkVW5pdEluVGVtcGxhdGUiLCJpc0Fubm90YXRlZEFzSGlkZGVuIiwidmFsdWVJbmRleCIsImV4dGVybmFsSWRQYXRoIiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgiLCJleHRlcm5hbElkUHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5IiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwidGV4dFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSIsInRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRDb250ZXh0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJ0ZXh0UHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dFJlbGF0aXZlUGF0aCIsIndyYXAiLCJ0ZXh0QXJyYW5nZW1lbnRUb0JlQ29uc2lkZXJlZCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJwYXRoRm9yVGV4dCIsInByb3BlcnR5Rm9yVGV4dCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJkZXNjcmlwdGlvbkluZGV4IiwiY3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwidW5pdFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImN1cnJlbmN5T3JVb01Qcm9wZXJ0eSIsImN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbiIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidGltZXpvbmVQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwidGltZXpvbmVBbm5vdGF0aW9uIiwiVGltZXpvbmUiLCJjb2xsZWN0Q3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiY29sbGVjdFRpbWV6b25lUHJvcGVydGllcyIsIlZhbHVlRm9ybWF0IiwiY29sbGVjdERhdGFQb2ludFByb3BlcnRpZXMiLCJjb250YWN0UHJvcGVydHkiLCJmbiIsImNvbnRhY3RQcm9wZXJ0eVBhdGgiLCJ1bml0IiwiaXNDdXJyZW5jeSIsInRpbWV6b25lIiwiZ2V0RGF0YVBvaW50VmlzdWFsaXphdGlvbiIsImRhdGFQb2ludFByb3BlcnR5IiwiZGF0YXBvaW50VGFyZ2V0IiwiZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5IiwiZGF0YVBvaW50SW5kZXgiLCJuYW1lIiwiZGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsInRpbWV6b25lT3JVb01JbmRleCIsImN1cnJlbmN5T3JVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgiLCJ1bml0T3JDdXJyZW5jeVByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsInVuaXRPckN1cnJlbmN5UmVsYXRpdmVQYXRoIiwiY3VycmVuY3lPclVvTUluZGV4Iiwic2NhbGUiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsImlzRW1iZWRkZWQiLCJpc1N0YXRpY2FsbHlIaWRkZW4iLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsIkRhdGEiLCJmb3JFYWNoIiwiaW5uZXJEYXRhRmllbGQiLCJkYXRhRmllbGRDb250YWN0IiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJvRGF0YUZpZWxkIiwidHlwZSIsInNEYXRhVHlwZSIsIiRQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhRmllbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRGVjaW1hbCwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcmltaXRpdmVUeXBlLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDb250YWN0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cCxcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHREYXRhUG9pbnRUeXBlLFxuXHREYXRhUG9pbnRUeXBlVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMsIFZpc3VhbGl6YXRpb25UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGVxdWFsLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIG5vdCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ29sdW1uRXhwb3J0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCxcblx0aGFzU3RhdGljUGVyY2VudFVuaXRcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwiLi4vLi4vdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlNb2RlIH0gZnJvbSBcIi4uLy4uL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBDb21wbGV4UHJvcGVydHlJbmZvID0ge1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB7IGFubm90YXRpb25Qcm9wZXJ0eTogUHJvcGVydHk7IGRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uPzogRGlzcGxheU1vZGUgfT47XG5cdGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cdGV4cG9ydFNldHRpbmdzOiBDb2x1bW5FeHBvcnRTZXR0aW5ncztcbn07XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0XCIuXG4gKiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCBoYXMgYW4gaW5saW5lIGFjdGlvbiBkZWZpbmVkLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBWYWxpZGF0ZXMgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGlmIHRoZSBnaXZlbiBkYXRhRmllbGRBYnN0cmFjdCB0aGF0IGlzIHBhc3NlZCBpcyBhIFwiRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcIi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVmFsaWRhdGVzIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHtcblx0cmV0dXJuIGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcImlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiLlxuICogaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIGhhcyBhbiBpbmxpbmUgJFR5cGUgcHJvcGVydHkgdGhhdCBjYW4gYmUgdXNlZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVmFsaWRhdGVzIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgfCB1bmRlZmluZWRcbik6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHtcblx0cmV0dXJuIGRhdGFGaWVsZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZEZvckFjdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCB1bmRlZmluZWQpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQWN0aW9uIHtcblx0cmV0dXJuIGRhdGFGaWVsZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGlmIHRoZSBnaXZlbiBkYXRhRmllbGRBYnN0cmFjdCB0aGF0IGlzIHBhc3NlZCBpcyBhIFwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIuXG4gKiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gaGFzIGFuIGlubGluZSAkVHlwZSBwcm9wZXJ0eSB0aGF0IGNhbiBiZSB1c2VkLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBWYWxpZGF0ZXMgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24ge1xuXHRyZXR1cm4gZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb247XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZFR5cGVzXCIuXG4gKiBEYXRhRmllbGQgaGFzIGEgdmFsdWUgZGVmaW5lZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVmFsaWRhdGUgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRUeXBlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCB1bmtub3duKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZFR5cGVzIHtcblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLmhhc093blByb3BlcnR5KFwiVmFsdWVcIik7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZFwiLlxuICogRGF0YUZpZWxkIGhhcyBhIHZhbHVlIGRlZmluZWQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFZhbGlkYXRlIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZChkYXRhRmllbGQ6IERhdGFGaWVsZCB8IHVua25vd24pOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkIHtcblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIGlzIGEgZmllbGQgZ3JvdXAuXG4gKiBAcGFyYW0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBUaGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBiZWluZyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gaXMgYSBmaWVsZCBncm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0ZpZWxkR3JvdXBUYXJnZXQoZGF0YUZpZWxkRm9yQW5ub3RhdGlvbjogRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IFJlZmVyZW5jZUZhY2V0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RmllbGRHcm91cD4oZGF0YUZpZWxkVGFyZ2V0LCBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpcyBhIGZpZWxkIGdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZEZvckFubm90YXRpb24gVGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIGlzIGEgZmllbGQgZ3JvdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNJZGVudGlmaWNhdGlvblRhcmdldChkYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIHwgUmVmZXJlbmNlRmFjZXQpOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YUZpZWxkVGFyZ2V0ID0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0cmV0dXJuIGlzQW5ub3RhdGlvbk9mVGVybTxJZGVudGlmaWNhdGlvbj4oZGF0YUZpZWxkVGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbik7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpcyBhIGRhdGEgcG9pbnQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBUaGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBiZWluZyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gaXMgYSBkYXRhIHBvaW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRGF0YVBvaW50VGFyZ2V0KGRhdGFGaWVsZEZvckFubm90YXRpb246IERhdGFGaWVsZEZvckFubm90YXRpb24pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YUZpZWxkVGFyZ2V0ID0gZGF0YUZpZWxkRm9yQW5ub3RhdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0cmV0dXJuIGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhUG9pbnQ+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciAndmlzaWJsZScgc2V0dGluZyBmb3IgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgcmVjb3JkIHdoaWNoIGNvdWxkIGJlIERhdGFGaWVsZEZvckFjdGlvbiwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIG9yIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gYmUgdXNlZCBmb3Igc2V0dGluZyAndmlzaWJsZScgYmFzZWQgb24gVUkuSGlkZGVuIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVFeHByZXNzaW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoXG5cdFx0ZXF1YWwoXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiwgW10sIHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKCkpLFxuXHRcdFx0dHJ1ZVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGggdGFyZ2V0aW5nIGEgZGF0YUZpZWxkIGZvciBhY3Rpb24gb3BlbnMgdXAgYSBkaWFsb2cuXG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBgRGlhbG9nYCB8IGBOb25lYCBpZiBhIGRpYWxvZyBpcyBuZWVkZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YU1vZGVsT2JqZWN0UGF0aEZvckFjdGlvbldpdGhEaWFsb2coXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cbik6IFwiRGlhbG9nXCIgfCBcIk5vbmVcIiB7XG5cdGNvbnN0IHRhcmdldCA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRyZXR1cm4gaXNBY3Rpb25XaXRoRGlhbG9nKGlzRGF0YUZpZWxkRm9yQWN0aW9uKHRhcmdldCkgPyB0YXJnZXQgOiB1bmRlZmluZWQpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgZGF0YUZpZWxkIGZvciBhY3Rpb24gb3BlbnMgdXAgYSBkaWFsb2cuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcmV0dXJucyBgRGlhbG9nYCB8IGBOb25lYCBpZiBhIGRpYWxvZyBpcyBuZWVkZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQ/OiBEYXRhRmllbGRGb3JBY3Rpb24pOiBcIkRpYWxvZ1wiIHwgXCJOb25lXCIge1xuXHRjb25zdCBhY3Rpb24gPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldDtcblx0aWYgKGFjdGlvbikge1xuXHRcdGNvbnN0IGJDcml0aWNhbCA9IGFjdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb24ucGFyYW1ldGVycy5sZW5ndGggPiAxIHx8IGJDcml0aWNhbCkge1xuXHRcdFx0cmV0dXJuIFwiRGlhbG9nXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIk5vbmVcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBUYXJnZXRWYWx1ZSBmcm9tIGEgRGF0YVBvaW50LlxuICogQHBhcmFtIHNvdXJjZSBUaGUgdGFyZ2V0IHByb3BlcnR5IG9yIERhdGFQb2ludFxuICogQHJldHVybnMgVGhlIFRhcmdldFZhbHVlIGFzIGEgZGVjaW1hbCBvciBhIHByb3BlcnR5IHBhdGhcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChzb3VyY2U6IFByb3BlcnR5IHwgRGF0YVBvaW50VHlwZSk6IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPiB8IHN0cmluZyB7XG5cdGxldCB0YXJnZXRWYWx1ZTogRGVjaW1hbCB8IHVuZGVmaW5lZCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjx1bmtub3duPiB8IHN0cmluZztcblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSkge1xuXHRcdGNvbnN0IGRhdGFQb2ludCA9IChzb3VyY2UuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50VHlwZTtcblx0XHR0YXJnZXRWYWx1ZSA9IGRhdGFQb2ludD8uVGFyZ2V0VmFsdWUgPz8gZGF0YVBvaW50Py5NYXhpbXVtVmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0VmFsdWUgPSBzb3VyY2UuVGFyZ2V0VmFsdWUgPz8gc291cmNlLk1heGltdW1WYWx1ZTtcblx0fVxuXHRpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0cmV0dXJuIHRhcmdldFZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRhcmdldFZhbHVlKSA/IHRhcmdldFZhbHVlIDogXCIxMDBcIjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHByb3BlcnR5IHVzZXMgYSBEYXRhUG9pbnQgd2l0aGluIGEgRGF0YUZpZWxkRGVmYXVsdC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGhhcyBhIERhdGFQb2ludCB3aXRoaW4gdGhlIERhdGFGaWVsZERlZmF1bHQsIGZhbHNlIGVsc2VcbiAqL1xuXG5leHBvcnQgY29uc3QgaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGEgcHJvcGVydHkgdXNlcyBhIGRlZmF1bHQgdmlzdWFsaXphdGlvbiBSYXRpbmcgdGhyb3VnaCBhIERhdGFGaWVsZERlZmF1bHQuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmlzdWFsaXphdGlvbiB0aHJvdWdoIGEgRGF0YUZpZWxkRGVmYXVsdCBpcyBhIFJhdGluZ1xuICovXG5cbmV4cG9ydCBjb25zdCBpc1JhdGluZ1Zpc3VhbGl6YXRpb25Gcm9tRGF0YUZpZWxkRGVmYXVsdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0KHByb3BlcnR5KSAmJlxuXHRcdCgocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQgYXMgQW5ub3RhdGlvblRlcm08RGF0YVBvaW50Pilcblx0XHRcdD8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIlxuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHByb3BlcnR5IHVzZXMgYSBQcm9ncmVzcyB2aXN1YWxpemF0aW9uIFJhdGluZyB0aHJvdWdoIGEgRGF0YUZpZWxkRGVmYXVsdCBvciBhIGRpcmVjdCBEYXRhUG9pbnQuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmlzdWFsaXphdGlvbiBpcyBhIFByb2dyZXNzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGlzQVByb2dyZXNzVHlwZUZyb21EYXRhUG9pbnQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik6IGJvb2xlYW4ge1xuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgJiYgaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eSA9IHByb3BlcnR5LmFubm90YXRpb25zLlVJPy5EYXRhRmllbGREZWZhdWx0IGFzIERhdGFGaWVsZEZvckFubm90YXRpb247XG5cdH1cblx0cmV0dXJuICgocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGUpPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RQYXRoKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAodHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChpc0RhdGFGaWVsZFR5cGVzKG9iamVjdCkgJiYgb2JqZWN0LlZhbHVlPy4kdGFyZ2V0KSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IG9iamVjdC5WYWx1ZT8uJHRhcmdldDtcblx0XHRcdGlmIChwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5Py5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNQcm9wZXJ0eShvYmplY3QpKSB7XG5cdFx0XHRpZiAob2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgob2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggZm9yIGEgcHJvcGVydHkgcGF0aC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIEZvciBlLmcuIC9FbnRpdHlUeXBlL05hdmlnYXRpb24vUHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IEZvciBlLmcuIC9FbnRpdHlUeXBlL05hdmlnYXRpb24vXG4gKi9cbmZ1bmN0aW9uIF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRpZiAocGF0aCkge1xuXHRcdHJldHVybiBwYXRoLmluY2x1ZGVzKFwiL1wiKSA/IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgOiBcIlwiO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufVxuXG4vKipcbiAqIENvbGxlY3QgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciB0aGUgQUxQIHRhYmxlIHVzZS1jYXNlLlxuICpcbiAqIEZvciBlLmcuIElmIFVJLkhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSwgaW5jbHVkZSB0aGlzIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqIEBwYXJhbSB0YXJnZXQgUHJvcGVydHkgb3IgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIG5hdmlnYXRpb25QYXRoUHJlZml4IE5hdmlnYXRpb24gcGF0aCBwcmVmaXgsIGFwcGxpY2FibGUgaW4gY2FzZSBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkIHNvIGZhci5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZC5cbiAqL1xuZnVuY3Rpb24gX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZShcblx0dGFyZ2V0OiBQcmltaXRpdmVUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aFByZWZpeDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IHRhcmdldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvbj8ucGF0aCAmJiBpc1Byb3BlcnR5KGhpZGRlbkFubm90YXRpb24uJHRhcmdldCkpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGhpZGRlbkFubm90YXRpb24ucGF0aDtcblx0XHRcdC8vIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkIHRvIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG1hcCBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2hpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGhdID0gaGlkZGVuQW5ub3RhdGlvbi4kdGFyZ2V0O1xuXHRcdH1cblxuXHRcdGNvbnN0IGNyaXRpY2FsaXR5ID0gdGFyZ2V0LkNyaXRpY2FsaXR5O1xuXHRcdGlmIChjcml0aWNhbGl0eT8ucGF0aCAmJiBpc1Byb3BlcnR5KGNyaXRpY2FsaXR5Py4kdGFyZ2V0KSkge1xuXHRcdFx0Y29uc3QgY3JpdGljYWxpdHlQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGNyaXRpY2FsaXR5LnBhdGg7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5hZGRpdGlvbmFsUHJvcGVydGllc1tjcml0aWNhbGl0eVByb3BlcnR5UGF0aF0gPSBjcml0aWNhbGl0eT8uJHRhcmdldDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSByZWxhdGVkUHJvcGVydGllc1xuICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIHZhbHVlIFRoZSBwcm9wZXJ0aWVzIG9iamVjdCBjb250YWluaW5nIHZhbHVlIHByb3BlcnR5LCBkZXNjcmlwdGlvbiBwcm9wZXJ0eS4uLlxuICogQHBhcmFtIGRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uIFRoZSBkaXNwbGF5IG1vZGUgaWYgdGhlIHByb3BlcnR5IGlzIHJlZmVyZW5jZWQgYXMgZGVzY3JpcHRpb24gb24gdGV4dCBhcnJhbmdlbWVudFxuICogQHJldHVybnMgSW5kZXggYXQgd2hpY2ggdGhlIHByb3BlcnR5IGlzIGF2YWlsYWJsZVxuICovXG5mdW5jdGlvbiBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm8sXG5cdGtleTogc3RyaW5nLFxuXHR2YWx1ZTogUHJvcGVydHksXG5cdGRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uPzogRGlzcGxheU1vZGVcbik6IG51bWJlciB7XG5cdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllc1trZXldID0geyBhbm5vdGF0aW9uUHJvcGVydHk6IHZhbHVlIH07XG5cdFx0aWYgKGRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0uZGlzcGxheU1vZGVPZlByb3BlcnR5VXNlZEFzRGVzY3JpcHRpb24gPSBkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyB0byBhcHBlbmQgdGhlIGV4cG9ydCBzZXR0aW5ncyB0ZW1wbGF0ZSB3aXRoIGEgZm9ybWF0dGVkIHRleHQuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXNcbiAqIEBwYXJhbSB2YWx1ZSBGb3JtYXR0ZWQgdGV4dFxuICovXG5mdW5jdGlvbiBfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm8sIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudGVtcGxhdGUgPSByZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGVcblx0XHQ/IGAke3JlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlfSR7dmFsdWV9YFxuXHRcdDogYCR7dmFsdWV9YDtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHkncyBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGlnbm9yZVNlbGYgV2hldGhlciB0byBleGNsdWRlIHRoZSBzYW1lIHByb3BlcnR5IGZyb20gdGhlIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkIHNvIGZhci5cbiAqIEBwYXJhbSBhZGRVbml0SW5UZW1wbGF0ZSBUcnVlIGlmIHRoZSB1bml0L2N1cnJlbmN5IHByb3BlcnR5IG5lZWRzIHRvIGJlIGFkZGVkIGluIHRoZSBleHBvcnQgdGVtcGxhdGVcbiAqIEBwYXJhbSBpc0Fubm90YXRlZEFzSGlkZGVuIFRydWUgaWYgdGhlIERhdGFGaWVsZCBvciB0aGUgcHJvcGVydHkgYXJlIHN0YXRpY2FsbHkgaGlkZGVuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdHBhdGg6IHN0cmluZyxcblx0cHJvcGVydHk6IFByaW1pdGl2ZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlnbm9yZVNlbGY6IGJvb2xlYW4sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRyZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5SW5mbyA9IHtcblx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRhZGRpdGlvbmFsUHJvcGVydGllczoge30sXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IHt9XG5cdH0sXG5cdGFkZFVuaXRJblRlbXBsYXRlID0gZmFsc2UsXG5cdGlzQW5ub3RhdGVkQXNIaWRkZW4gPSBmYWxzZVxuKTogQ29tcGxleFByb3BlcnR5SW5mbyB7XG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0bGV0IHZhbHVlSW5kZXg6IG51bWJlcjtcblx0XHQvKiBFWFRFUk5BTElEICovXG5cdFx0Y29uc3QgZXh0ZXJuYWxJZFBhdGggPSBnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5UGF0aChwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cblx0XHRpZiAoaXNBbm5vdGF0ZWRBc0hpZGRlbikge1xuXHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5XG5cdFx0XHR2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgocmVsYXRlZFByb3BlcnRpZXMsIHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0cmV0dXJuIHJlbGF0ZWRQcm9wZXJ0aWVzO1xuXHRcdH1cblx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwYXRoKTtcblxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdC8vIENoZWNrIGZvciBUZXh0IGFubm90YXRpb24uXG5cdFx0Y29uc3QgdGV4dFByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eShleHRlcm5hbElkUHJvcGVydHkgfHwgcHJvcGVydHkpO1xuXHRcdGNvbnN0IHRleHRQcm9wZXJ0eVBhdGggPSBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChleHRlcm5hbElkUHJvcGVydHkgfHwgcHJvcGVydHkpO1xuXG5cdFx0Ly8gZ2V0IHRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIGZvciB0aGUgY29sdW1uXG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRjb25zdCBwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oZGF0YU1vZGVsT2JqZWN0UGF0aCwgZXh0ZXJuYWxJZFBhdGggfHwgcGF0aCk7XG5cdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdGNvbnN0IHRleHRQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4ocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCB0ZXh0UHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCB0ZXh0UmVsYXRpdmVQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCh0ZXh0UHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblxuXHRcdGlmIChyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5ncz8udGVtcGxhdGUpIHtcblx0XHRcdC8vIEZpZWxkR3JvdXAgdXNlLWNhc2UuIE5lZWQgdG8gYWRkIGVhY2ggRmllbGQgaW4gbmV3IGxpbmUuXG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIFwiXFxuXCIpO1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3Mud3JhcCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHRleHQgYXJyYW5nZW1lbnQgd2lsbCBiZSBjb25zaWRlcmVkIG9ubHkgaWYgdGhlIHRleHQgcHJvcGVydHkgaXMgZ3JvdXBhYmxlXG5cdFx0Y29uc3QgdGV4dEFycmFuZ2VtZW50VG9CZUNvbnNpZGVyZWQgPVxuXHRcdFx0dGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICEhYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSlcblx0XHRcdFx0PyAhIXRleHRQcm9wZXJ0eSAmJiAhIWFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUodGV4dFByb3BlcnR5KVxuXHRcdFx0XHQ6IHRydWU7XG5cdFx0aWYgKHRleHRQcm9wZXJ0eSAmJiB0ZXh0UmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRpZiAodGV4dEFycmFuZ2VtZW50VG9CZUNvbnNpZGVyZWQpIHtcblx0XHRcdFx0Y29uc3QgcGF0aEZvclRleHQgPSBleHRlcm5hbElkUGF0aCA/IGV4dGVybmFsSWRQYXRoIDogcGF0aDtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlGb3JUZXh0ID0gZXh0ZXJuYWxJZFByb3BlcnR5ID8gZXh0ZXJuYWxJZFByb3BlcnR5IDogcHJvcGVydHk7XG5cdFx0XHRcdC8vIENoZWNrIGZvciBUZXh0IEFycmFuZ2VtZW50LlxuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IGdldERpc3BsYXlNb2RlKHByb3BlcnR5Rm9yVGV4dCwgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KFxuXHRcdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdFx0dGV4dFJlbGF0aXZlUGF0aCxcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcIkRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHtkZXNjcmlwdGlvbkluZGV4fX1gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aEZvclRleHQsIHByb3BlcnR5Rm9yVGV4dCk7XG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbkluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdFx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0XHR0ZXh0UmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRcdFx0XHR0ZXh0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFwiVmFsdWVEZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBgeyR7dmFsdWVJbmRleH19ICh7JHtkZXNjcmlwdGlvbkluZGV4fX0pYCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHR2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgocmVsYXRlZFByb3BlcnRpZXMsIHBhdGhGb3JUZXh0LCBwcm9wZXJ0eUZvclRleHQpO1xuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KFxuXHRcdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdFx0dGV4dFJlbGF0aXZlUGF0aCxcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcIkRlc2NyaXB0aW9uVmFsdWVcIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske2Rlc2NyaXB0aW9uSW5kZXh9fSAoeyR7dmFsdWVJbmRleH19KWApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aEZvclRleHQsIHByb3BlcnR5Rm9yVGV4dCk7XG5cdFx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHVuZGVybHlpbmcgcHJvcGVydHlcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgZmllbGQgY29udGFpbmluZyBDdXJyZW5jeSBPciBVbml0IFByb3BlcnRpZXMgb3IgVGltZXpvbmVcblx0XHRcdGNvbnN0IGN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSA9IGN1cnJlbmN5UHJvcGVydHkgPz8gdW5pdFByb3BlcnR5O1xuXHRcdFx0Y29uc3QgY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPiA9XG5cdFx0XHRcdHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRjb25zdCB0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpO1xuXHRcdFx0Y29uc3QgdGltZXpvbmVBbm5vdGF0aW9uID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXG5cdFx0XHRpZiAoY3VycmVuY3lPclVvTVByb3BlcnR5KSB7XG5cdFx0XHRcdGNvbGxlY3RDdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMoXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoID8/IHBhdGgsXG5cdFx0XHRcdFx0YWRkVW5pdEluVGVtcGxhdGUsXG5cdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSxcblx0XHRcdFx0XHRjdXJyZW5jeVByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRpbWV6b25lUHJvcGVydHkgJiYgdGltZXpvbmVBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHRcdGNvbGxlY3RUaW1lem9uZVByb3BlcnRpZXMocHJvcGVydHksIHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBhZGRVbml0SW5UZW1wbGF0ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSAmJiAhcHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py5WYWx1ZUZvcm1hdCkgfHxcblx0XHRcdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29sbGVjdERhdGFQb2ludFByb3BlcnRpZXMocHJvcGVydHksIHJlbGF0ZWRQcm9wZXJ0aWVzLCByZWxhdGl2ZVBhdGgpO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZSkge1xuXHRcdFx0XHRjb25zdCBjb250YWN0UHJvcGVydHkgPSBwcm9wZXJ0eS5mbj8uJHRhcmdldDtcblx0XHRcdFx0Y29uc3QgY29udGFjdFByb3BlcnR5UGF0aCA9IHByb3BlcnR5LmZuPy5wYXRoO1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGhQcmVmaXggPyBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGNvbnRhY3RQcm9wZXJ0eVBhdGggOiBjb250YWN0UHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRhY3RQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdH0gZWxzZSBpZiAoIWlnbm9yZVNlbGYpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0aWYgKGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnVuaXQgPSBgJHtjdXJyZW5jeU9yVW5pdEFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCBjdXJyZW5jeS91bml0XG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5ncy5pc0N1cnJlbmN5ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodGltZXpvbmVBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudGltZXpvbmUgPSBgJHt0aW1lem9uZUFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCB0aW1lem9uZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKHByb3BlcnR5LCBuYXZpZ2F0aW9uUGF0aFByZWZpeCwgdGFibGVUeXBlLCByZWxhdGVkUHJvcGVydGllcyk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwICYmIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5IGlmIG5vdCBjb2xsZWN0ZWQgYWxyZWFkeS5cblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYWRkaXRpb25hbFByb3BlcnRpZXMgYXJlIG1hZGUgYXZhaWxhYmxlIG9ubHkgdG8gY29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0eXBlIG9mIFZpc3VhbGl6YXRpb24gb2YgdGhlIERhdGFQb2ludC5cbiAqIEBwYXJhbSBzb3VyY2UgU291cmNlIG9mIHRoZSBEYXRhUG9pbnQuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiBWaXN1YWxpemF0aW9uIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vbmUuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFQb2ludFZpc3VhbGl6YXRpb24oc291cmNlOiBQcm9wZXJ0eSB8IERhdGFQb2ludFR5cGUpOiBWaXN1YWxpemF0aW9uVHlwZSB7XG5cdGxldCBkYXRhUG9pbnQ6IERhdGFQb2ludFR5cGU7XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkpIHtcblx0XHRkYXRhUG9pbnQgPSAoc291cmNlLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGU7XG5cdH0gZWxzZSB7XG5cdFx0ZGF0YVBvaW50ID0gc291cmNlO1xuXHR9XG5cdHJldHVybiBkYXRhUG9pbnQuVmlzdWFsaXphdGlvbiA/PyBWaXN1YWxpemF0aW9uVHlwZS5OdW1iZXI7XG59XG5cbi8qKlxuICpcdENvbGxlY3QgdGhlIHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIGEgRGF0YVBvaW50LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdERhdGFQb2ludFByb3BlcnRpZXMocHJvcGVydHk6IFByaW1pdGl2ZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvLCBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Ly8gcGF0aCBtdXN0IG5vdCBiZSB1bmRlZmluZWQsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggbWF5IHJldHVybiB1bmRlZmluZWRcblx0aWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBkYXRhUG9pbnRQcm9wZXJ0eSA9IHByb3BlcnR5LlRhcmdldD8uJHRhcmdldD8uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgZGF0YXBvaW50VGFyZ2V0ID0gcHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0O1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwYXRoKTtcblx0Ly8gRGF0YVBvaW50IHVzZS1jYXNlIHVzaW5nIERhdGFGaWVsZERlZmF1bHQuXG5cdGNvbnN0IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0Y29uc3QgdmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkgPyBwcm9wZXJ0eSA6IGRhdGFQb2ludFByb3BlcnR5KTtcblx0Ly8gSWYgd2UgaGF2ZSBhIERhdGFQb2ludCB3aXRob3V0IHZpc3VhbGl6YXRpb24sIG9yIGEgTnVtYmVyLCB3ZSBkb24ndCBoYXZlIGEgVGFyZ2V0VmFsdWUvTWF4aW11bVZhbHVlXG5cdGlmIChnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSA/IHByb3BlcnR5IDogZGF0YXBvaW50VGFyZ2V0KSA9PT0gVmlzdWFsaXphdGlvblR5cGUuTnVtYmVyKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkgPyBwcm9wZXJ0eSA6IGRhdGFwb2ludFRhcmdldCk7XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRWYWx1ZSkpIHtcblx0XHRpZiAodGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly9pbiBjYXNlIGl0J3MgYSBkeW5hbWljIHRhcmdldFZhbHVlXG5cdFx0XHRjb25zdCBkYXRhUG9pbnRJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KFxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0bmF2aWdhdGlvblBhdGhQcmVmaXggPyBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIHRhcmdldFZhbHVlLiR0YXJnZXQubmFtZSA6IHRhcmdldFZhbHVlLiR0YXJnZXQubmFtZSxcblx0XHRcdFx0dGFyZ2V0VmFsdWUuJHRhcmdldFxuXHRcdFx0KTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWUucGF0aDtcblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske3ZhbHVlSW5kZXh9fS97JHtkYXRhUG9pbnRJbmRleH19YCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSA/IHByb3BlcnR5IDogZGF0YVBvaW50UHJvcGVydHkpICYmIGlzQVByb2dyZXNzVHlwZUZyb21EYXRhUG9pbnQocHJvcGVydHkpKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudW5pdCA9IFwiJVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWU7XG5cdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBgeyR7dmFsdWVJbmRleH19LyR7dGFyZ2V0VmFsdWV9YCk7XG5cdH1cbn1cblxuLyoqXG4gKlx0Q29sbGVjdCB0aGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSB3aXRoIFRpbWV6b25lLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aC5cbiAqIEBwYXJhbSBhZGRVbml0SW5UZW1wbGF0ZSBTaG91bGQgd2UgYWRkIHRoZSB1bml0IGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdFRpbWV6b25lUHJvcGVydGllcyhcblx0cHJvcGVydHk6IFByaW1pdGl2ZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvLFxuXHRwYXRoOiBzdHJpbmcsXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuXG4pOiB2b2lkIHtcblx0Y29uc3QgdGltZXpvbmVBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uLlRpbWV6b25lO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwYXRoKTtcblx0Y29uc3QgdmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBwcm9wZXJ0eSk7XG5cblx0Y29uc3QgdGltZXpvbmVPclVvTUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0bmF2aWdhdGlvblBhdGhQcmVmaXggKyB0aW1lem9uZUFubm90YXRpb24ucGF0aCxcblx0XHR0aW1lem9uZUFubm90YXRpb24uJHRhcmdldFxuXHQpO1xuXHRpZiAoYWRkVW5pdEluVGVtcGxhdGUpIHtcblx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX0gIHske3RpbWV6b25lT3JVb01JbmRleH19YCk7XG5cdH0gZWxzZSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IG5hdmlnYXRpb25QYXRoUHJlZml4ICsgdGltZXpvbmVBbm5vdGF0aW9uLnBhdGg7XG5cdH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IHRoZSByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5IHdpdGggY3VycmVuY2llcyBvciB1bml0cy5cbiAqIEBwYXJhbSByZWxhdGVkUHJvcGVydGllcyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgc28gZmFyIGZvciB0aGUgY29sdW1uLlxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcHJvcGVydHkgcmVsYXRpdmUgcGF0aC5cbiAqIEBwYXJhbSBhZGRVbml0SW5UZW1wbGF0ZSBTcGVjaWZ5IGlmIHRoZSB1bml0IHNob3VsZCBiZSBhZGRlZCBpbiB0aGUgdGVtcGxhdGUuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSBUaGUgY3VycmVuY3kgb3IgdW5pdCBvZiBtZWFzdXJlIHByb3BlcnR5IGxpbmtlZCB0byB0aGUgY29sdW1uLlxuICogQHBhcmFtIGN1cnJlbmN5UHJvcGVydHkgVGhlIGN1cnJlbmN5IHByb3BlcnR5IGxpbmtlZCB0byB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0Q3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzKFxuXHRyZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5SW5mbyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRjdXJyZW5jeU9yVW9NUHJvcGVydHk6IFByb3BlcnR5LFxuXHRjdXJyZW5jeVByb3BlcnR5PzogUHJvcGVydHlcbik6IHZvaWQge1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChwcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JVbml0UHJvcGVydHlQYXRoID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRjdXJyZW5jeU9yVW5pdFByb3BlcnR5UGF0aFxuXHRcdCk7XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lSZWxhdGl2ZVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHVuaXRPckN1cnJlbmN5UHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCB2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgocmVsYXRlZFByb3BlcnRpZXMsIHJlbGF0aXZlUGF0aCwgcHJvcGVydHkpO1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JVb01JbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCB1bml0T3JDdXJyZW5jeVJlbGF0aXZlUGF0aCEsIGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSk7XG5cdFx0aWYgKGFkZFVuaXRJblRlbXBsYXRlKSB7XG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX0gIHske2N1cnJlbmN5T3JVb01JbmRleH19YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHVuaXRPckN1cnJlbmN5UmVsYXRpdmVQYXRoO1xuXHRcdH1cblx0XHRpZiAoY3VycmVuY3lQcm9wZXJ0eSkge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MuaXNDdXJyZW5jeSA9IHRydWU7XG5cdFx0fVxuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnNjYWxlID0gcHJvcGVydHkuc2NhbGU7XG5cdH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IHByb3BlcnRpZXMgY29uc3VtZWQgYnkgYSBEYXRhRmllbGQuXG4gKiBUaGlzIGlzIGZvciBwb3B1bGF0aW5nIHRoZSBDb21wbGV4UHJvcGVydHlJbmZvcyBvZiB0aGUgdGFibGUgZGVsZWdhdGUuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBEYXRhRmllbGQgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgaWRlbnRpZmllZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gaXNFbWJlZGRlZCBUcnVlIGlmIHRoZSBEYXRhRmllbGQgaXMgZW1iZWRkZWQgaW4gYW5vdGhlciBhbm5vdGF0aW9uIChzdWNoIGFzIEZpZWxkR3JvdXApLlxuICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgRGF0YUZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0ge1xuXHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7fSxcblx0XHRleHBvcnRTZXR0aW5nczoge31cblx0fSxcblx0aXNFbWJlZGRlZCA9IGZhbHNlXG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0bGV0IGlzU3RhdGljYWxseUhpZGRlbiA9IGZhbHNlO1xuXHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGlmIChkYXRhRmllbGQuVmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhRmllbGQuVmFsdWU7XG5cdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlbiA9IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGRhdGFGaWVsZCk7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdHByb3BlcnR5LnBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkuJHRhcmdldCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkLFxuXHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aFByZWZpeCxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZTpcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRcdGlubmVyRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW4gPSBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpO1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLnBhdGgsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdGlzRW1iZWRkZWQsXG5cdFx0XHRcdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZTpcblx0XHRcdFx0XHRjb25zdCBkYXRhRmllbGRDb250YWN0ID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIENvbnRhY3Q7XG5cdFx0XHRcdFx0aXNTdGF0aWNhbGx5SGlkZGVuID0gaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQudmFsdWUsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGRDb250YWN0LFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlbixcblx0XHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0aXNFbWJlZGRlZCxcblx0XHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZERhdGFUeXBlID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChpc1Byb3BlcnR5KG9EYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIG9EYXRhRmllbGQudHlwZTtcblx0fVxuXHRsZXQgc0RhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAob0RhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKG9EYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkVGFyZ2V0LiRUeXBlID09PSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLkNvbnRhY3RUeXBlICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZFRhcmdldC5mbikpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPSBkYXRhRmllbGRUYXJnZXQuZm4uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGRUYXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPSBkYXRhRmllbGRUYXJnZXQuVmFsdWU/LiRQYXRoPy4kVHlwZSB8fCBkYXRhRmllbGRUYXJnZXQuVmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0Ly8gRmllbGRHcm91cCBQcm9wZXJ0aWVzIGhhdmUgbm8gdHlwZSwgc28gd2UgZGVmaW5lIGl0IGFzIGEgYm9vbGVhbiB0eXBlIHRvIHByZXZlbnQgZXhjZXB0aW9ucyBkdXJpbmcgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSB3aWR0aFxuXHRcdFx0XHRcdHNEYXRhVHlwZSA9XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0RGVmaW5pdGlvblR5cGVcIiA/IHVuZGVmaW5lZCA6IFwiRWRtLkJvb2xlYW5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLDRCQUE0QkEsQ0FBQ0MsU0FBaUMsRUFBZ0Q7SUFDN0gsT0FBUUEsU0FBUyxDQUFxQ0MsY0FBYyxDQUFDLFFBQVEsQ0FBQztFQUMvRTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFDLFFBQUEsQ0FBQUgsNEJBQUEsR0FBQUEsNEJBQUE7RUFLTyxTQUFTSSx5QkFBeUJBLENBQUNILFNBQWlDLEVBQXdDO0lBQ2xILE9BQU9BLFNBQVMsQ0FBQ0ksS0FBSyx5REFBOEM7RUFDckU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFGLFFBQUEsQ0FBQUMseUJBQUEsR0FBQUEseUJBQUE7RUFNTyxTQUFTRSx3QkFBd0JBLENBQ3ZDTCxTQUFrRSxFQUM1QjtJQUN0QyxPQUFPQSxTQUFTLEVBQUVJLEtBQUssd0RBQTZDO0VBQ3JFO0VBQUNGLFFBQUEsQ0FBQUcsd0JBQUEsR0FBQUEsd0JBQUE7RUFFTSxTQUFTQyxvQkFBb0JBLENBQUNOLFNBQTZDLEVBQW1DO0lBQ3BILE9B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
649
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJfZXhwb3J0cyIsImlzRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAiLCIkVHlwZSIsImlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uIiwiaXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGQiLCJoYXNGaWVsZEdyb3VwVGFyZ2V0IiwiZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiIsImRhdGFGaWVsZFRhcmdldCIsIlRhcmdldCIsIiR0YXJnZXQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJoYXNJZGVudGlmaWNhdGlvblRhcmdldCIsImlzQW5ub3RhdGlvbk9mVGVybSIsImhhc0RhdGFQb2ludFRhcmdldCIsInZpc2libGVFeHByZXNzaW9uIiwiY29udmVydGVyQ29udGV4dCIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsInVuZGVmaW5lZCIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldCIsInRhcmdldE9iamVjdCIsImlzQWN0aW9uV2l0aERpYWxvZyIsImFjdGlvbiIsIkFjdGlvblRhcmdldCIsImJDcml0aWNhbCIsIkNvbW1vbiIsIklzQWN0aW9uQ3JpdGljYWwiLCJwYXJhbWV0ZXJzIiwibGVuZ3RoIiwiZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCIsInNvdXJjZSIsInRhcmdldFZhbHVlIiwiaXNQcm9wZXJ0eSIsImRhdGFQb2ludCIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXRWYWx1ZSIsIk1heGltdW1WYWx1ZSIsInRvU3RyaW5nIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJpc0RhdGFQb2ludEZyb21EYXRhRmllbGREZWZhdWx0IiwicHJvcGVydHkiLCJpc1JhdGluZ1Zpc3VhbGl6YXRpb25Gcm9tRGF0YUZpZWxkRGVmYXVsdCIsIlZpc3VhbGl6YXRpb24iLCJpc0FQcm9ncmVzc1R5cGVGcm9tRGF0YVBvaW50IiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwib2JqZWN0IiwiVmFsdWUiLCJTZW1hbnRpY09iamVjdCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5jbHVkZXMiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIl9jb2xsZWN0QWRkaXRpb25hbFByb3BlcnRpZXNGb3JBbmFseXRpY2FsVGFibGUiLCJuYXZpZ2F0aW9uUGF0aFByZWZpeCIsInRhYmxlVHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzIiwiaGlkZGVuQW5ub3RhdGlvbiIsImhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNyaXRpY2FsaXR5IiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVByb3BlcnR5UGF0aCIsIl9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4Iiwia2V5IiwidmFsdWUiLCJkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbiIsInByb3BlcnRpZXMiLCJhbm5vdGF0aW9uUHJvcGVydHkiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsIl9hcHBlbmRUZW1wbGF0ZSIsImV4cG9ydFNldHRpbmdzIiwidGVtcGxhdGUiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwiYXJndW1lbnRzIiwiYWRkVW5pdEluVGVtcGxhdGUiLCJpc0Fubm90YXRlZEFzSGlkZGVuIiwidmFsdWVJbmRleCIsImV4dGVybmFsSWRQYXRoIiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgiLCJleHRlcm5hbElkUHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkRXh0ZXJuYWxJZFByb3BlcnR5IiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwidGV4dFByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSIsInRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRDb250ZXh0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJ0ZXh0UHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dFJlbGF0aXZlUGF0aCIsIndyYXAiLCJ0ZXh0QXJyYW5nZW1lbnRUb0JlQ29uc2lkZXJlZCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJwYXRoRm9yVGV4dCIsInByb3BlcnR5Rm9yVGV4dCIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVzY3JpcHRpb25JbmRleCIsImN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsInVuaXRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJjdXJyZW5jeU9yVW9NUHJvcGVydHkiLCJjdXJyZW5jeU9yVW5pdEFubm90YXRpb24iLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInRpbWV6b25lUHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSIsInRpbWV6b25lQW5ub3RhdGlvbiIsIlRpbWV6b25lIiwiY29sbGVjdEN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsImNvbGxlY3RUaW1lem9uZVByb3BlcnRpZXMiLCJWYWx1ZUZvcm1hdCIsImNvbGxlY3REYXRhUG9pbnRQcm9wZXJ0aWVzIiwiY29udGFjdFByb3BlcnR5IiwiZm4iLCJjb250YWN0UHJvcGVydHlQYXRoIiwidW5pdCIsImlzQ3VycmVuY3kiLCJ0aW1lem9uZSIsImdldERhdGFQb2ludFZpc3VhbGl6YXRpb24iLCJkYXRhUG9pbnRQcm9wZXJ0eSIsImRhdGFwb2ludFRhcmdldCIsImRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSIsImRhdGFQb2ludEluZGV4IiwibmFtZSIsImRhdGFQb2ludFRhcmdldFZhbHVlIiwiaGFzU3RhdGljUGVyY2VudFVuaXQiLCJ0aW1lem9uZU9yVW9NSW5kZXgiLCJjdXJyZW5jeU9yVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwidW5pdE9yQ3VycmVuY3lQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJ1bml0T3JDdXJyZW5jeVJlbGF0aXZlUGF0aCIsImN1cnJlbmN5T3JVb01JbmRleCIsInNjYWxlIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJpc0VtYmVkZGVkIiwiaXNTdGF0aWNhbGx5SGlkZGVuIiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJEYXRhIiwiZm9yRWFjaCIsImlubmVyRGF0YUZpZWxkIiwiZGF0YUZpZWxkQ29udGFjdCIsImdldERhdGFGaWVsZERhdGFUeXBlIiwib0RhdGFGaWVsZCIsInR5cGUiLCJzRGF0YVR5cGUiLCIkUGF0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGF0YUZpZWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIERlY2ltYWwsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQ29udGFjdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHsgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uR3JvdXAsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZSxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRJZGVudGlmaWNhdGlvbixcblx0UmVmZXJlbmNlRmFjZXRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IENvbHVtbkV4cG9ydFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtLCBpc0Fubm90YXRpb25PZlR5cGUsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0RGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc1N0YXRpY1BlcmNlbnRVbml0XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcIi4uLy4uL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCIuLi8uLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4gfSBmcm9tIFwiLi4vaGVscGVycy9EYXRhRmllbGRIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFByb3BlcnR5SW5mbyA9IHtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgeyBhbm5vdGF0aW9uUHJvcGVydHk6IFByb3BlcnR5OyBkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbj86IERpc3BsYXlNb2RlIH0+O1xuXHRhZGRpdGlvbmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRleHBvcnRTZXR0aW5nczogQ29sdW1uRXhwb3J0U2V0dGluZ3M7XG59O1xuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFwiLlxuICogRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QgaGFzIGFuIGlubGluZSBhY3Rpb24gZGVmaW5lZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVmFsaWRhdGVzIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzIHtcblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcykuaGFzT3duUHJvcGVydHkoXCJBY3Rpb25cIik7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwXCIuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFZhbGlkYXRlcyB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZEZvckFjdGlvbkdyb3VwKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cCB7XG5cdHJldHVybiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJpc0RhdGFGaWVsZEZvckFubm90YXRpb25cIi5cbiAqIGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBoYXMgYW4gaW5saW5lICRUeXBlIHByb3BlcnR5IHRoYXQgY2FuIGJlIHVzZWQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFZhbGlkYXRlcyB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZEZvckFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkXG4pOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB7XG5cdHJldHVybiBkYXRhRmllbGQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgdW5kZWZpbmVkKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbiB7XG5cdHJldHVybiBkYXRhRmllbGQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb247XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiLlxuICogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIGhhcyBhbiBpbmxpbmUgJFR5cGUgcHJvcGVydHkgdGhhdCBjYW4gYmUgdXNlZC5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIHRvIGJlIGV2YWx1YXRlZFxuICogQHJldHVybnMgVmFsaWRhdGVzIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHtcblx0cmV0dXJuIGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJEYXRhRmllbGRUeXBlc1wiLlxuICogRGF0YUZpZWxkIGhhcyBhIHZhbHVlIGRlZmluZWQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFZhbGlkYXRlIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkVHlwZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgdW5rbm93bik6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgaWYgdGhlIGdpdmVuIGRhdGFGaWVsZEFic3RyYWN0IHRoYXQgaXMgcGFzc2VkIGlzIGEgXCJEYXRhRmllbGRcIi5cbiAqIERhdGFGaWVsZCBoYXMgYSB2YWx1ZSBkZWZpbmVkLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBWYWxpZGF0ZSB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGQoZGF0YUZpZWxkOiBEYXRhRmllbGQgfCB1bmtub3duKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZCB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/Lmhhc093blByb3BlcnR5KFwiVmFsdWVcIik7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpcyBhIGZpZWxkIGdyb3VwLlxuICogQHBhcmFtIGRhdGFGaWVsZEZvckFubm90YXRpb24gVGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIGlzIGEgZmllbGQgZ3JvdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNGaWVsZEdyb3VwVGFyZ2V0KGRhdGFGaWVsZEZvckFubm90YXRpb246IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBSZWZlcmVuY2VGYWNldCk6IGJvb2xlYW4ge1xuXHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRyZXR1cm4gaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gaXMgYSBmaWVsZCBncm91cC5cbiAqIEBwYXJhbSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIFRoZSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIGJlaW5nIHByb2Nlc3NlZFxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBpcyBhIGZpZWxkIGdyb3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzSWRlbnRpZmljYXRpb25UYXJnZXQoZGF0YUZpZWxkRm9yQW5ub3RhdGlvbjogRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IFJlZmVyZW5jZUZhY2V0KTogYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdHJldHVybiBpc0Fubm90YXRpb25PZlRlcm08SWRlbnRpZmljYXRpb24+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb24pO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gaXMgYSBkYXRhIHBvaW50LlxuICogQHBhcmFtIGRhdGFGaWVsZEZvckFubm90YXRpb24gVGhlIGRhdGFGaWVsZEZvckFubm90YXRpb24gYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhRmllbGRGb3JBbm5vdGF0aW9uIGlzIGEgZGF0YSBwb2ludC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0RhdGFQb2ludFRhcmdldChkYXRhRmllbGRGb3JBbm5vdGF0aW9uOiBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKTogYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZEZvckFubm90YXRpb24uVGFyZ2V0LiR0YXJnZXQ7XG5cdHJldHVybiBpc0Fubm90YXRpb25PZlR5cGU8RGF0YVBvaW50PihkYXRhRmllbGRUYXJnZXQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgJ3Zpc2libGUnIHNldHRpbmcgZm9yIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHJlY29yZCB3aGljaCBjb3VsZCBiZSBEYXRhRmllbGRGb3JBY3Rpb24sIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvciBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHNldHRpbmcgJ3Zpc2libGUnIGJhc2VkIG9uIFVJLkhpZGRlbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXNpYmxlRXhwcmVzc2lvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cCB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KFxuXHRcdGVxdWFsKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sIFtdLCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpKSxcblx0XHRcdHRydWVcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIHRhcmdldGluZyBhIGRhdGFGaWVsZCBmb3IgYWN0aW9uIG9wZW5zIHVwIGEgZGlhbG9nLlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgYERpYWxvZ2AgfCBgTm9uZWAgaWYgYSBkaWFsb2cgaXMgbmVlZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFNb2RlbE9iamVjdFBhdGhGb3JBY3Rpb25XaXRoRGlhbG9nKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+XG4pOiBcIkRpYWxvZ1wiIHwgXCJOb25lXCIge1xuXHRjb25zdCB0YXJnZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0cmV0dXJuIGlzQWN0aW9uV2l0aERpYWxvZyhpc0RhdGFGaWVsZEZvckFjdGlvbih0YXJnZXQpID8gdGFyZ2V0IDogdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdGhlIGRhdGFGaWVsZCBmb3IgYWN0aW9uIG9wZW5zIHVwIGEgZGlhbG9nLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIGFjdGlvblxuICogQHJldHVybnMgYERpYWxvZ2AgfCBgTm9uZWAgaWYgYSBkaWFsb2cgaXMgbmVlZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkPzogRGF0YUZpZWxkRm9yQWN0aW9uKTogXCJEaWFsb2dcIiB8IFwiTm9uZVwiIHtcblx0Y29uc3QgYWN0aW9uID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ7XG5cdGlmIChhY3Rpb24pIHtcblx0XHRjb25zdCBiQ3JpdGljYWwgPSBhY3Rpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNBY3Rpb25Dcml0aWNhbDtcblx0XHRpZiAoYWN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgVGFyZ2V0VmFsdWUgZnJvbSBhIERhdGFQb2ludC5cbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHRhcmdldCBwcm9wZXJ0eSBvciBEYXRhUG9pbnRcbiAqIEByZXR1cm5zIFRoZSBUYXJnZXRWYWx1ZSBhcyBhIGRlY2ltYWwgb3IgYSBwcm9wZXJ0eSBwYXRoXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQoc291cmNlOiBQcm9wZXJ0eSB8IERhdGFQb2ludFR5cGUpOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248dW5rbm93bj4gfCBzdHJpbmcge1xuXHRsZXQgdGFyZ2V0VmFsdWU6IERlY2ltYWwgfCB1bmRlZmluZWQgfCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248dW5rbm93bj4gfCBzdHJpbmc7XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkpIHtcblx0XHRjb25zdCBkYXRhUG9pbnQgPSAoc291cmNlLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGU7XG5cdFx0dGFyZ2V0VmFsdWUgPSBkYXRhUG9pbnQ/LlRhcmdldFZhbHVlID8/IGRhdGFQb2ludD8uTWF4aW11bVZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdHRhcmdldFZhbHVlID0gc291cmNlLlRhcmdldFZhbHVlID8/IHNvdXJjZS5NYXhpbXVtVmFsdWU7XG5cdH1cblx0aWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuXHRcdHJldHVybiB0YXJnZXRWYWx1ZS50b1N0cmluZygpO1xuXHR9XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRWYWx1ZSkgPyB0YXJnZXRWYWx1ZSA6IFwiMTAwXCI7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwcm9wZXJ0eSB1c2VzIGEgRGF0YVBvaW50IHdpdGhpbiBhIERhdGFGaWVsZERlZmF1bHQuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVmZXJlbmNlZCBwcm9wZXJ0eSBoYXMgYSBEYXRhUG9pbnQgd2l0aGluIHRoZSBEYXRhRmllbGREZWZhdWx0LCBmYWxzZSBlbHNlXG4gKi9cblxuZXhwb3J0IGNvbnN0IGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0KHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZVxuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhIHByb3BlcnR5IHVzZXMgYSBkZWZhdWx0IHZpc3VhbGl6YXRpb24gUmF0aW5nIHRocm91Z2ggYSBEYXRhRmllbGREZWZhdWx0LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZpc3VhbGl6YXRpb24gdGhyb3VnaCBhIERhdGFGaWVsZERlZmF1bHQgaXMgYSBSYXRpbmdcbiAqL1xuXG5leHBvcnQgY29uc3QgaXNSYXRpbmdWaXN1YWxpemF0aW9uRnJvbURhdGFGaWVsZERlZmF1bHQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0aXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkgJiZcblx0XHQoKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEFubm90YXRpb25UZXJtPERhdGFQb2ludD4pXG5cdFx0XHQ/LlZpc3VhbGl6YXRpb24gPT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCJcblx0KTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwcm9wZXJ0eSB1c2VzIGEgUHJvZ3Jlc3MgdmlzdWFsaXphdGlvbiBSYXRpbmcgdGhyb3VnaCBhIERhdGFGaWVsZERlZmF1bHQgb3IgYSBkaXJlY3QgRGF0YVBvaW50LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZpc3VhbGl6YXRpb24gaXMgYSBQcm9ncmVzc1xuICovXG5cbmV4cG9ydCBjb25zdCBpc0FQcm9ncmVzc1R5cGVGcm9tRGF0YVBvaW50ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEZvckFubm90YXRpb24pOiBib29sZWFuIHtcblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpICYmIGlzRGF0YVBvaW50RnJvbURhdGFGaWVsZERlZmF1bHQocHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHkgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucy5VST8uRGF0YUZpZWxkRGVmYXVsdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uO1xuXHR9XG5cdHJldHVybiAoKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnRUeXBlKT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0UGF0aChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvYmplY3Q6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoaXNEYXRhRmllbGRUeXBlcyhvYmplY3QpICYmIG9iamVjdC5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBvYmplY3QuVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUHJvcGVydHkob2JqZWN0KSkge1xuXHRcdFx0aWYgKG9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKG9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IGZvciBhIHByb3BlcnR5IHBhdGguXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCBGb3IgZS5nLiAvRW50aXR5VHlwZS9OYXZpZ2F0aW9uL1Byb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBwYXRoIHByZWZpeCBGb3IgZS5nLiAvRW50aXR5VHlwZS9OYXZpZ2F0aW9uL1xuICovXG5mdW5jdGlvbiBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0aWYgKHBhdGgpIHtcblx0XHRyZXR1cm4gcGF0aC5pbmNsdWRlcyhcIi9cIikgPyBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcblx0fVxuXHRyZXR1cm4gXCJcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gdGFyZ2V0IFByb3BlcnR5IG9yIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFByZWZpeCBOYXZpZ2F0aW9uIHBhdGggcHJlZml4LCBhcHBsaWNhYmxlIGluIGNhc2Ugb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRhYmxlVHlwZSBUYWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQuXG4gKi9cbmZ1bmN0aW9uIF9jb2xsZWN0QWRkaXRpb25hbFByb3BlcnRpZXNGb3JBbmFseXRpY2FsVGFibGUoXG5cdHRhcmdldDogUHJpbWl0aXZlVHlwZSxcblx0bmF2aWdhdGlvblBhdGhQcmVmaXg6IHN0cmluZyxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvXG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb24gPSB0YXJnZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdFx0aWYgKGhpZGRlbkFubm90YXRpb24/LnBhdGggJiYgaXNQcm9wZXJ0eShoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQpKSB7XG5cdFx0XHRjb25zdCBoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGhQcmVmaXggKyBoaWRkZW5Bbm5vdGF0aW9uLnBhdGg7XG5cdFx0XHQvLyBUaGlzIHByb3BlcnR5IHNob3VsZCBiZSBhZGRlZCB0byBhZGRpdGlvbmFsUHJvcGVydGllcyBtYXAgZm9yIHRoZSBBTFAgdGFibGUgdXNlLWNhc2UuXG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5hZGRpdGlvbmFsUHJvcGVydGllc1toaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoXSA9IGhpZGRlbkFubm90YXRpb24uJHRhcmdldDtcblx0XHR9XG5cblx0XHRjb25zdCBjcml0aWNhbGl0eSA9IHRhcmdldC5Dcml0aWNhbGl0eTtcblx0XHRpZiAoY3JpdGljYWxpdHk/LnBhdGggJiYgaXNQcm9wZXJ0eShjcml0aWNhbGl0eT8uJHRhcmdldCkpIHtcblx0XHRcdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGhQcmVmaXggKyBjcml0aWNhbGl0eS5wYXRoO1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuYWRkaXRpb25hbFByb3BlcnRpZXNbY3JpdGljYWxpdHlQcm9wZXJ0eVBhdGhdID0gY3JpdGljYWxpdHk/LiR0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyB0byBwdXNoIHVuaXF1ZSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXNcbiAqIEBwYXJhbSBrZXkgVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgcHJvcGVydGllcyBvYmplY3QgY29udGFpbmluZyB2YWx1ZSBwcm9wZXJ0eSwgZGVzY3JpcHRpb24gcHJvcGVydHkuLi5cbiAqIEBwYXJhbSBkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbiBUaGUgZGlzcGxheSBtb2RlIGlmIHRoZSBwcm9wZXJ0eSBpcyByZWZlcmVuY2VkIGFzIGRlc2NyaXB0aW9uIG9uIHRleHQgYXJyYW5nZW1lbnRcbiAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcbiAqL1xuZnVuY3Rpb24gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvLFxuXHRrZXk6IHN0cmluZyxcblx0dmFsdWU6IFByb3BlcnR5LFxuXHRkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbj86IERpc3BsYXlNb2RlXG4pOiBudW1iZXIge1xuXHRpZiAoIXJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXNba2V5XSA9IHsgYW5ub3RhdGlvblByb3BlcnR5OiB2YWx1ZSB9O1xuXHRcdGlmIChkaXNwbGF5TW9kZU9mUHJvcGVydHlVc2VkQXNEZXNjcmlwdGlvbikge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllc1trZXldLmRpc3BsYXlNb2RlT2ZQcm9wZXJ0eVVzZWRBc0Rlc2NyaXB0aW9uID0gZGlzcGxheU1vZGVPZlByb3BlcnR5VXNlZEFzRGVzY3JpcHRpb247XG5cdFx0fVxuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzKS5pbmRleE9mKGtleSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZvciBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcbiAqL1xuZnVuY3Rpb24gX2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnRlbXBsYXRlID0gcmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlXG5cdFx0PyBgJHtyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHQ6IGAke3ZhbHVlfWA7XG59XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBpZ25vcmVTZWxmIFdoZXRoZXIgdG8gZXhjbHVkZSB0aGUgc2FtZSBwcm9wZXJ0eSBmcm9tIHRoZSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gYWRkVW5pdEluVGVtcGxhdGUgVHJ1ZSBpZiB0aGUgdW5pdC9jdXJyZW5jeSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBhZGRlZCBpbiB0aGUgZXhwb3J0IHRlbXBsYXRlXG4gKiBAcGFyYW0gaXNBbm5vdGF0ZWRBc0hpZGRlbiBUcnVlIGlmIHRoZSBEYXRhRmllbGQgb3IgdGhlIHByb3BlcnR5IGFyZSBzdGF0aWNhbGx5IGhpZGRlblxuICogQHJldHVybnMgVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBQcmltaXRpdmVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpZ25vcmVTZWxmOiBib29sZWFuLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm8gPSB7XG5cdFx0cHJvcGVydGllczoge30sXG5cdFx0YWRkaXRpb25hbFByb3BlcnRpZXM6IHt9LFxuXHRcdGV4cG9ydFNldHRpbmdzOiB7fVxuXHR9LFxuXHRhZGRVbml0SW5UZW1wbGF0ZSA9IGZhbHNlLFxuXHRpc0Fubm90YXRlZEFzSGlkZGVuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAocGF0aCAmJiBwcm9wZXJ0eSkge1xuXHRcdGxldCB2YWx1ZUluZGV4OiBudW1iZXI7XG5cdFx0LyogRVhURVJOQUxJRCAqL1xuXHRcdGNvbnN0IGV4dGVybmFsSWRQYXRoID0gZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgocHJvcGVydHkpO1xuXHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkocHJvcGVydHkpO1xuXG5cdFx0aWYgKGlzQW5ub3RhdGVkQXNIaWRkZW4pIHtcblx0XHRcdC8vIENvbGxlY3QgdW5kZXJseWluZyBwcm9wZXJ0eVxuXHRcdFx0dmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcblx0XHR9XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHkoZXh0ZXJuYWxJZFByb3BlcnR5IHx8IHByb3BlcnR5KTtcblx0XHRjb25zdCB0ZXh0UHJvcGVydHlQYXRoID0gZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgoZXh0ZXJuYWxJZFByb3BlcnR5IHx8IHByb3BlcnR5KTtcblxuXHRcdC8vIGdldCB0aGUgRGF0YU1vZGVsT2JqZWN0UGF0aCBmb3IgdGhlIGNvbHVtblxuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKS5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0Y29uc3QgcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGRhdGFNb2RlbE9iamVjdFBhdGgsIGV4dGVybmFsSWRQYXRoIHx8IHBhdGgpO1xuXHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgocHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCB0ZXh0UHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgdGV4dFByb3BlcnR5UGF0aCk7XG5cdFx0Y29uc3QgdGV4dFJlbGF0aXZlUGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgodGV4dFByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cblx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3M/LnRlbXBsYXRlKSB7XG5cdFx0XHQvLyBGaWVsZEdyb3VwIHVzZS1jYXNlLiBOZWVkIHRvIGFkZCBlYWNoIEZpZWxkIGluIG5ldyBsaW5lLlxuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBcIlxcblwiKTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLndyYXAgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB0ZXh0IGFycmFuZ2VtZW50IHdpbGwgYmUgY29uc2lkZXJlZCBvbmx5IGlmIHRoZSB0ZXh0IHByb3BlcnR5IGlzIGdyb3VwYWJsZVxuXHRcdGNvbnN0IHRleHRBcnJhbmdlbWVudFRvQmVDb25zaWRlcmVkID1cblx0XHRcdHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhIWFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpXG5cdFx0XHRcdD8gISF0ZXh0UHJvcGVydHkgJiYgISFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHRleHRQcm9wZXJ0eSlcblx0XHRcdFx0OiB0cnVlO1xuXHRcdGlmICh0ZXh0UHJvcGVydHkgJiYgdGV4dFJlbGF0aXZlUGF0aCkge1xuXHRcdFx0aWYgKHRleHRBcnJhbmdlbWVudFRvQmVDb25zaWRlcmVkKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGhGb3JUZXh0ID0gZXh0ZXJuYWxJZFBhdGggPyBleHRlcm5hbElkUGF0aCA6IHBhdGg7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5Rm9yVGV4dCA9IGV4dGVybmFsSWRQcm9wZXJ0eSA/IGV4dGVybmFsSWRQcm9wZXJ0eSA6IHByb3BlcnR5O1xuXHRcdFx0XHQvLyBDaGVjayBmb3IgVGV4dCBBcnJhbmdlbWVudC5cblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eUZvclRleHQsIHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlKTtcblx0XHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KFxuXHRcdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdFx0dGV4dFJlbGF0aXZlUGF0aCxcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcIkRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHtkZXNjcmlwdGlvbkluZGV4fX1gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aEZvclRleHQsIHByb3BlcnR5Rm9yVGV4dCk7XG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbkluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdFx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0XHR0ZXh0UmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRcdFx0XHR0ZXh0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFwiVmFsdWVEZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBgeyR7dmFsdWVJbmRleH19ICh7JHtkZXNjcmlwdGlvbkluZGV4fX0pYCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHR2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgocmVsYXRlZFByb3BlcnRpZXMsIHBhdGhGb3JUZXh0LCBwcm9wZXJ0eUZvclRleHQpO1xuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KFxuXHRcdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdFx0dGV4dFJlbGF0aXZlUGF0aCxcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcIkRlc2NyaXB0aW9uVmFsdWVcIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske2Rlc2NyaXB0aW9uSW5kZXh9fSAoeyR7dmFsdWVJbmRleH19KWApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aEZvclRleHQsIHByb3BlcnR5Rm9yVGV4dCk7XG5cdFx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHVuZGVybHlpbmcgcHJvcGVydHlcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgZmllbGQgY29udGFpbmluZyBDdXJyZW5jeSBPciBVbml0IFByb3BlcnRpZXMgb3IgVGltZXpvbmVcblx0XHRcdGNvbnN0IGN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSA9IGN1cnJlbmN5UHJvcGVydHkgPz8gdW5pdFByb3BlcnR5O1xuXHRcdFx0Y29uc3QgY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPiA9XG5cdFx0XHRcdHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRjb25zdCB0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpO1xuXHRcdFx0Y29uc3QgdGltZXpvbmVBbm5vdGF0aW9uID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXG5cdFx0XHRpZiAoY3VycmVuY3lPclVvTVByb3BlcnR5KSB7XG5cdFx0XHRcdGNvbGxlY3RDdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMoXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoID8/IHBhdGgsXG5cdFx0XHRcdFx0YWRkVW5pdEluVGVtcGxhdGUsXG5cdFx0XHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSxcblx0XHRcdFx0XHRjdXJyZW5jeVByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRpbWV6b25lUHJvcGVydHkgJiYgdGltZXpvbmVBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHRcdGNvbGxlY3RUaW1lem9uZVByb3BlcnRpZXMocHJvcGVydHksIHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBhZGRVbml0SW5UZW1wbGF0ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSAmJiAhcHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py5WYWx1ZUZvcm1hdCkgfHxcblx0XHRcdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29sbGVjdERhdGFQb2ludFByb3BlcnRpZXMocHJvcGVydHksIHJlbGF0ZWRQcm9wZXJ0aWVzLCByZWxhdGl2ZVBhdGgpO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS4kVHlwZSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZSkge1xuXHRcdFx0XHRjb25zdCBjb250YWN0UHJvcGVydHkgPSBwcm9wZXJ0eS5mbj8uJHRhcmdldDtcblx0XHRcdFx0Y29uc3QgY29udGFjdFByb3BlcnR5UGF0aCA9IHByb3BlcnR5LmZuPy5wYXRoO1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGhQcmVmaXggPyBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGNvbnRhY3RQcm9wZXJ0eVBhdGggOiBjb250YWN0UHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnRhY3RQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdH0gZWxzZSBpZiAoIWlnbm9yZVNlbGYpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdFx0aWYgKGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnVuaXQgPSBgJHtjdXJyZW5jeU9yVW5pdEFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCBjdXJyZW5jeS91bml0XG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KSB7XG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5ncy5pc0N1cnJlbmN5ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAodGltZXpvbmVBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudGltZXpvbmUgPSBgJHt0aW1lem9uZUFubm90YXRpb259YDsgLy8gSGFyZC1jb2RlZCB0aW1lem9uZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKHByb3BlcnR5LCBuYXZpZ2F0aW9uUGF0aFByZWZpeCwgdGFibGVUeXBlLCByZWxhdGVkUHJvcGVydGllcyk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwICYmIHJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBhZGRpdGlvbmFsUHJvcGVydGllcyBmb3IgdGhlIGV4cG9ydFxuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MucHJvcGVydHkgPSBbcmVsYXRpdmVQYXRoXTtcblx0XHR9XG5cdFx0aWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwICYmIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5IGlmIG5vdCBjb2xsZWN0ZWQgYWxyZWFkeS5cblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYWRkaXRpb25hbFByb3BlcnRpZXMgYXJlIG1hZGUgYXZhaWxhYmxlIG9ubHkgdG8gY29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdHZhbHVlSW5kZXggPSBfc2V0UmVsYXRlZFByb3BlcnRpZXNBbmRHZXRJbmRleChyZWxhdGVkUHJvcGVydGllcywgcGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0eXBlIG9mIFZpc3VhbGl6YXRpb24gb2YgdGhlIERhdGFQb2ludC5cbiAqIEBwYXJhbSBzb3VyY2UgU291cmNlIG9mIHRoZSBEYXRhUG9pbnQuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiBWaXN1YWxpemF0aW9uIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSdzIG5vbmUuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFQb2ludFZpc3VhbGl6YXRpb24oc291cmNlOiBQcm9wZXJ0eSB8IERhdGFQb2ludFR5cGUpOiBWaXN1YWxpemF0aW9uVHlwZSB7XG5cdGxldCBkYXRhUG9pbnQ6IERhdGFQb2ludFR5cGU7XG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkpIHtcblx0XHRkYXRhUG9pbnQgPSAoc291cmNlLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludFR5cGU7XG5cdH0gZWxzZSB7XG5cdFx0ZGF0YVBvaW50ID0gc291cmNlO1xuXHR9XG5cdHJldHVybiBkYXRhUG9pbnQuVmlzdWFsaXphdGlvbiA/PyBWaXN1YWxpemF0aW9uVHlwZS5OdW1iZXI7XG59XG5cbi8qKlxuICpcdENvbGxlY3QgdGhlIHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIGEgRGF0YVBvaW50LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdERhdGFQb2ludFByb3BlcnRpZXMocHJvcGVydHk6IFByaW1pdGl2ZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvLCBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0Ly8gcGF0aCBtdXN0IG5vdCBiZSB1bmRlZmluZWQsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggbWF5IHJldHVybiB1bmRlZmluZWRcblx0aWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBkYXRhUG9pbnRQcm9wZXJ0eSA9IHByb3BlcnR5LlRhcmdldD8uJHRhcmdldD8uVmFsdWUuJHRhcmdldCBhcyBQcm9wZXJ0eTtcblx0Y29uc3QgZGF0YXBvaW50VGFyZ2V0ID0gcHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0O1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwYXRoKTtcblx0Ly8gRGF0YVBvaW50IHVzZS1jYXNlIHVzaW5nIERhdGFGaWVsZERlZmF1bHQuXG5cdGNvbnN0IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0Y29uc3QgdmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkgPyBwcm9wZXJ0eSA6IGRhdGFQb2ludFByb3BlcnR5KTtcblx0Ly8gSWYgd2UgaGF2ZSBhIERhdGFQb2ludCB3aXRob3V0IHZpc3VhbGl6YXRpb24sIG9yIGEgTnVtYmVyLCB3ZSBkb24ndCBoYXZlIGEgVGFyZ2V0VmFsdWUvTWF4aW11bVZhbHVlXG5cdGlmIChnZXREYXRhUG9pbnRWaXN1YWxpemF0aW9uKGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSA/IHByb3BlcnR5IDogZGF0YXBvaW50VGFyZ2V0KSA9PT0gVmlzdWFsaXphdGlvblR5cGUuTnVtYmVyKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IHRhcmdldFZhbHVlID0gZ2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludChkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkgPyBwcm9wZXJ0eSA6IGRhdGFwb2ludFRhcmdldCk7XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0YXJnZXRWYWx1ZSkpIHtcblx0XHRpZiAodGFyZ2V0VmFsdWUuJHRhcmdldCkge1xuXHRcdFx0Ly9pbiBjYXNlIGl0J3MgYSBkeW5hbWljIHRhcmdldFZhbHVlXG5cdFx0XHRjb25zdCBkYXRhUG9pbnRJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KFxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0bmF2aWdhdGlvblBhdGhQcmVmaXggPyBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIHRhcmdldFZhbHVlLiR0YXJnZXQubmFtZSA6IHRhcmdldFZhbHVlLiR0YXJnZXQubmFtZSxcblx0XHRcdFx0dGFyZ2V0VmFsdWUuJHRhcmdldFxuXHRcdFx0KTtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWUucGF0aDtcblx0XHRcdF9hcHBlbmRUZW1wbGF0ZShyZWxhdGVkUHJvcGVydGllcywgYHske3ZhbHVlSW5kZXh9fS97JHtkYXRhUG9pbnRJbmRleH19YCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eSA/IHByb3BlcnR5IDogZGF0YVBvaW50UHJvcGVydHkpICYmIGlzQVByb2dyZXNzVHlwZUZyb21EYXRhUG9pbnQocHJvcGVydHkpKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudW5pdCA9IFwiJVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLmRhdGFQb2ludFRhcmdldFZhbHVlID0gdGFyZ2V0VmFsdWU7XG5cdFx0X2FwcGVuZFRlbXBsYXRlKHJlbGF0ZWRQcm9wZXJ0aWVzLCBgeyR7dmFsdWVJbmRleH19LyR7dGFyZ2V0VmFsdWV9YCk7XG5cdH1cbn1cblxuLyoqXG4gKlx0Q29sbGVjdCB0aGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSB3aXRoIFRpbWV6b25lLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcHJvcGVydHkgcGF0aC5cbiAqIEBwYXJhbSBhZGRVbml0SW5UZW1wbGF0ZSBTaG91bGQgd2UgYWRkIHRoZSB1bml0IGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdFRpbWV6b25lUHJvcGVydGllcyhcblx0cHJvcGVydHk6IFByaW1pdGl2ZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvLFxuXHRwYXRoOiBzdHJpbmcsXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuXG4pOiB2b2lkIHtcblx0Y29uc3QgdGltZXpvbmVBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uLlRpbWV6b25lO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwYXRoKTtcblx0Y29uc3QgdmFsdWVJbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCBwYXRoLCBwcm9wZXJ0eSk7XG5cblx0Y29uc3QgdGltZXpvbmVPclVvTUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgoXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0bmF2aWdhdGlvblBhdGhQcmVmaXggKyB0aW1lem9uZUFubm90YXRpb24ucGF0aCxcblx0XHR0aW1lem9uZUFubm90YXRpb24uJHRhcmdldFxuXHQpO1xuXHRpZiAoYWRkVW5pdEluVGVtcGxhdGUpIHtcblx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX0gIHske3RpbWV6b25lT3JVb01JbmRleH19YCk7XG5cdH0gZWxzZSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IG5hdmlnYXRpb25QYXRoUHJlZml4ICsgdGltZXpvbmVBbm5vdGF0aW9uLnBhdGg7XG5cdH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IHRoZSByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5IHdpdGggY3VycmVuY2llcyBvciB1bml0cy5cbiAqIEBwYXJhbSByZWxhdGVkUHJvcGVydGllcyBUaGUgcmVsYXRlZCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgc28gZmFyIGZvciB0aGUgY29sdW1uLlxuICogQHBhcmFtIHJlbGF0aXZlUGF0aCBUaGUgcHJvcGVydHkgcmVsYXRpdmUgcGF0aC5cbiAqIEBwYXJhbSBhZGRVbml0SW5UZW1wbGF0ZSBTcGVjaWZ5IGlmIHRoZSB1bml0IHNob3VsZCBiZSBhZGRlZCBpbiB0aGUgdGVtcGxhdGUuXG4gKiBAcGFyYW0gcHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBiZSBjb25zaWRlcmVkLlxuICogQHBhcmFtIGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSBUaGUgY3VycmVuY3kgb3IgdW5pdCBvZiBtZWFzdXJlIHByb3BlcnR5IGxpbmtlZCB0byB0aGUgY29sdW1uLlxuICogQHBhcmFtIGN1cnJlbmN5UHJvcGVydHkgVGhlIGN1cnJlbmN5IHByb3BlcnR5IGxpbmtlZCB0byB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0Q3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzKFxuXHRyZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5SW5mbyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuLFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRjdXJyZW5jeU9yVW9NUHJvcGVydHk6IFByb3BlcnR5LFxuXHRjdXJyZW5jeVByb3BlcnR5PzogUHJvcGVydHlcbik6IHZvaWQge1xuXHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdGlmIChwcm9wZXJ0eSkge1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JVbml0UHJvcGVydHlQYXRoID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lQcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRjdXJyZW5jeU9yVW5pdFByb3BlcnR5UGF0aFxuXHRcdCk7XG5cdFx0Y29uc3QgdW5pdE9yQ3VycmVuY3lSZWxhdGl2ZVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHVuaXRPckN1cnJlbmN5UHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0XHRjb25zdCB2YWx1ZUluZGV4ID0gX3NldFJlbGF0ZWRQcm9wZXJ0aWVzQW5kR2V0SW5kZXgocmVsYXRlZFByb3BlcnRpZXMsIHJlbGF0aXZlUGF0aCwgcHJvcGVydHkpO1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JVb01JbmRleCA9IF9zZXRSZWxhdGVkUHJvcGVydGllc0FuZEdldEluZGV4KHJlbGF0ZWRQcm9wZXJ0aWVzLCB1bml0T3JDdXJyZW5jeVJlbGF0aXZlUGF0aCEsIGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSk7XG5cdFx0aWYgKGFkZFVuaXRJblRlbXBsYXRlKSB7XG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUocmVsYXRlZFByb3BlcnRpZXMsIGB7JHt2YWx1ZUluZGV4fX0gIHske2N1cnJlbmN5T3JVb01JbmRleH19YCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHVuaXRPckN1cnJlbmN5UmVsYXRpdmVQYXRoO1xuXHRcdH1cblx0XHRpZiAoY3VycmVuY3lQcm9wZXJ0eSkge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3MuaXNDdXJyZW5jeSA9IHRydWU7XG5cdFx0fVxuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzLnNjYWxlID0gcHJvcGVydHkuc2NhbGU7XG5cdH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IHByb3BlcnRpZXMgY29uc3VtZWQgYnkgYSBEYXRhRmllbGQuXG4gKiBUaGlzIGlzIGZvciBwb3B1bGF0aW5nIHRoZSBDb21wbGV4UHJvcGVydHlJbmZvcyBvZiB0aGUgdGFibGUgZGVsZWdhdGUuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBEYXRhRmllbGQgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgaWRlbnRpZmllZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gaXNFbWJlZGRlZCBUcnVlIGlmIHRoZSBEYXRhRmllbGQgaXMgZW1iZWRkZWQgaW4gYW5vdGhlciBhbm5vdGF0aW9uIChzdWNoIGFzIEZpZWxkR3JvdXApLlxuICogQHJldHVybnMgVGhlIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgRGF0YUZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0ge1xuXHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7fSxcblx0XHRleHBvcnRTZXR0aW5nczoge31cblx0fSxcblx0aXNFbWJlZGRlZCA9IGZhbHNlXG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0bGV0IGlzU3RhdGljYWxseUhpZGRlbiA9IGZhbHNlO1xuXHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdGlmIChkYXRhRmllbGQuVmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhRmllbGQuVmFsdWU7XG5cdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlbiA9IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGRhdGFGaWVsZCk7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdHByb3BlcnR5LnBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkuJHRhcmdldCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkLFxuXHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aFByZWZpeCA9IF9nZXROYXZpZ2F0aW9uUGF0aFByZWZpeChwcm9wZXJ0eS5wYXRoKTtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aFByZWZpeCxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZTpcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRcdGlubmVyRGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW4gPSBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpO1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLnBhdGgsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRcdGlzRW1iZWRkZWQsXG5cdFx0XHRcdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZTpcblx0XHRcdFx0XHRjb25zdCBkYXRhRmllbGRDb250YWN0ID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0IGFzIENvbnRhY3Q7XG5cdFx0XHRcdFx0aXNTdGF0aWNhbGx5SGlkZGVuID0gaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQudmFsdWUsXG5cdFx0XHRcdFx0XHRkYXRhRmllbGRDb250YWN0LFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlbixcblx0XHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdFx0aXNFbWJlZGRlZCxcblx0XHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZERhdGFUeXBlID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChpc1Byb3BlcnR5KG9EYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIG9EYXRhRmllbGQudHlwZTtcblx0fVxuXHRsZXQgc0RhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAob0RhdGFGaWVsZC4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKG9EYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSkge1xuXHRcdFx0XHRjb25zdCBkYXRhRmllbGRUYXJnZXQgPSBvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkVGFyZ2V0LiRUeXBlID09PSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLkNvbnRhY3RUeXBlICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZFRhcmdldC5mbikpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPSBkYXRhRmllbGRUYXJnZXQuZm4uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGRUYXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPSBkYXRhRmllbGRUYXJnZXQuVmFsdWU/LiRQYXRoPy4kVHlwZSB8fCBkYXRhRmllbGRUYXJnZXQuVmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0Ly8gRmllbGRHcm91cCBQcm9wZXJ0aWVzIGhhdmUgbm8gdHlwZSwgc28gd2UgZGVmaW5lIGl0IGFzIGEgYm9vbGVhbiB0eXBlIHRvIHByZXZlbnQgZXhjZXB0aW9ucyBkdXJpbmcgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSB3aWR0aFxuXHRcdFx0XHRcdHNEYXRhVHlwZSA9XG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0RGVmaW5pdGlvblR5cGVcIiA/IHVuZGVmaW5lZCA6IFwiRWRtLkJvb2xlYW5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLDRCQUE0QkEsQ0FBQ0MsU0FBaUMsRUFBZ0Q7SUFDN0gsT0FBUUEsU0FBUyxDQUFxQ0MsY0FBYyxDQUFDLFFBQVEsQ0FBQztFQUMvRTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFDLFFBQUEsQ0FBQUgsNEJBQUEsR0FBQUEsNEJBQUE7RUFLTyxTQUFTSSx5QkFBeUJBLENBQUNILFNBQWlDLEVBQXdDO0lBQ2xILE9BQU9BLFNBQVMsQ0FBQ0ksS0FBSyx5REFBOEM7RUFDckU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFGLFFBQUEsQ0FBQUMseUJBQUEsR0FBQUEseUJBQUE7RUFNTyxTQUFTRSx3QkFBd0JBLENBQ3ZDTCxTQUFrRSxFQUM1QjtJQUN0QyxPQUFPQSxTQUFTLEVBQUVJLEtBQUssd0RBQTZDO0VBQ3JFO0VBQUNGLFFBQUEsQ0FBQUcsd0JBQUEsR0FBQUEsd0JBQUE7RUFFTSxTQUFTQyxvQkFBb0JBLENBQUNOLFNBQTZDLEVBQW1DO0lBQ3BILE9BQU9BLFNBQVMsRUFBRUksS0FBSyxvREFBeUM7RUFDakU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFGLFFBQUEsQ0FBQUksb0JBQUEsR0FBQUEsb0JBQUE7RUFNTyxTQUFTQyxtQ0FBbUNBLENBQUNQLFNBQWlDLEVBQWtEO0lBQ3RJLE9BQU9BLFNBQVMsQ0FBQ0ksS0FBSyxtRUFBd0Q7RUFDL0U7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFGLFFBQUEsQ0FBQUssbUNBQUEsR0FBQUEsbUNBQUE7RUFNTyxTQUFTQyxnQkFBZ0JBLENBQUNSLFNBQTJDLEVBQStCO0lBQzFHLE9BQVFBLFNBQVMsQ0FBb0JDLGNBQWMsQ0FBQyxPQUFPLENBQUM7RUFDN0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFDLFFBQUEsQ0FBQU0sZ0JBQUEsR0FBQUEsZ0JBQUE7RUFNTyxTQUFTQyxXQUFXQSxDQUFDVCxTQUE4QixFQUEwQjtJQUNuRixPQUFRQSxTQUFTLEVBQWdCQyxjQUFjLENBQUMsT0FBTyxDQUFDO0VBQ3pEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQUMsUUFBQSxDQUFBTyxXQUFBLEdBQUFBLFdBQUE7RUFLTyxTQUFTQyxtQkFBbUJBLENBQUNDLHNCQUErRCxFQUFXO0lBQzdHLE1BQU1DLGVBQWUsR0FBR0Qsc0JBQXNCLENBQUNFLE1BQU0sQ0FBQ0MsT0FBTztJQUM3RCxPQUFPQyxrQkFBa0IsQ0FBYUgsZUFBZSw2Q0FBa0MsQ0FBQztFQUN6Rjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFWLFFBQUEsQ0FBQVEsbUJBQUEsR0FBQUEsbUJBQUE7RUFLTyxTQUFTTSx1QkFBdUJBLENBQUNMLHNCQUErRCxFQUFXO0lBQ2pILE1BQU1DLGVBQWUsR0FBR0Qsc0JBQXNCLENBQUNFLE1BQU0sQ0FBQ0MsT0FBTztJQUM3RCxPQUFPRyxrQkFBa0IsQ0FBaUJMLGVBQWUsNkNBQWtDLENBQUM7RUFDN0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBVixRQUFBLENBQUFjLHVCQUFBLEdBQUFBLHVCQUFBO0VBS08sU0FBU0Usa0JBQWtCQSxDQUFDUCxzQkFBOEMsRUFBVztJQUMzRixNQUFNQyxlQUFlLEdBQUdELHNCQUFzQixDQUFDRSxNQUFNLENBQUNDLE9BQU87SUFDN0QsT0FBT0Msa0JBQWtCLENBQVlILGVBQWUsNENBQWlDLENBQUM7RUFDdkY7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFWLFFBQUEsQ0FBQWdCLGtCQUFBLEdBQUFBLGtCQUFBO0VBTU8sU0FBU0MsaUJBQWlCQSxDQUNoQ25CLFNBQXVHLEVBQ3ZHb0IsZ0JBQXlELEVBQ3JCO0lBQ3BDLE9BQU9DLEdBQUcsQ0FDVEMsS0FBSyxDQUNKQywyQkFBMkIsQ0FBQ3ZCLFNBQVMsRUFBRXdCLFdBQVcsRUFBRUMsRUFBRSxFQUFFQyxNQUFNLEVBQUUsRUFBRSxFQUFFQyxTQUFTLEVBQUVQLGdCQUFnQixDQUFDUSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsRUFDL0gsSUFDRCxDQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkExQixRQUFBLENBQUFpQixpQkFBQSxHQUFBQSxpQkFBQTtFQUtPLFNBQVNVLHdDQUF3Q0EsQ0FDdkRDLG1CQUFnRSxFQUM1QztJQUNwQixNQUFNQyxNQUFNLEdBQUdELG1CQUFtQixDQUFDRSxZQUFZO0lBQy9DLE9BQU9DLGtCQUFrQixDQUFDM0Isb0JBQW9CLENBQUN5QixNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHSixTQUFTLENBQUM7RUFDN0U7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBekIsUUFBQSxDQUFBMkIsd0NBQUEsR0FBQUEsd0NBQUE7RUFLTyxTQUFTSSxrQkFBa0JBLENBQUNqQyxTQUE4QixFQUFxQjtJQUNyRixNQUFNa0MsTUFBTSxHQUFHbEMsU0FBUyxFQUFFbUMsWUFBWTtJQUN0QyxJQUFJRCxNQUFNLEVBQUU7TUFDWCxNQUFNRSxTQUFTLEdBQUdGLE1BQU0sQ0FBQ1YsV0FBVyxFQUFFYSxNQUFNLEVBQUVDLGdCQUFnQjtNQUM5RCxJQUFJSixNQUFNLENBQUNLLFVBQVUsQ0FBQ0MsTUFBTSxHQUFHLENBQUMsSUFBSUosU0FBUyxFQUFFO1FBQzlDLE9BQU8sUUFBUTtNQUNoQixDQUFDLE1BQU07UUFDTixPQUFPLE1BQU07TUFDZDtJQUNELENBQUMsTUFBTTtNQUNOLE9BQU8sTUFBTTtJQUNkO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBbEMsUUFBQSxDQUFBK0Isa0JBQUEsR0FBQUEsa0JBQUE7RUFNTyxTQUFTUSx5QkFBeUJBLENBQUNDLE1BQWdDLEVBQThDO0lBQ3ZILElBQUlDLFdBQTZFO0lBQ2pGLElBQUlDLFVBQVUsQ0FBQ0YsTUFBTSxDQUFDLEVBQUU7TUFDdkIsTUFBTUcsU0FBUyxHQUFJSCxNQUFNLENBQUNsQixXQUFXLEVBQUVDLEVBQUUsRUFBRXFCLGdCQUFnQixFQUE2QmpDLE1BQU0sRUFBRUMsT0FBd0I7TUFDeEg2QixXQUFXLEdBQUdFLFNBQVMsRUFBRUUsV0FBVyxJQUFJRixTQUFTLEVBQUVHLFlBQVk7SUFDaEUsQ0FBQyxNQUFNO01BQ05MLFdBQVcsR0FBR0QsTUFBTSxDQUFDSyxXQUFXLElBQUlMLE1BQU0sQ0FBQ00sWUFBWTtJQUN4RDtJQUNBLElBQUksT0FBT0wsV0FBVyxLQUFLLFFBQVEsRUFBRTtNQUNwQyxPQUFPQSxXQUFXLENBQUNNLFFBQVEsQ0FBQyxDQUFDO0lBQzlCO0lBQ0EsT0FBT0MsMEJBQTBCLENBQUNQLFdBQVcsQ0FBQyxHQUFHQSxXQUFXLEdBQUcsS0FBSztFQUNyRTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkF6QyxRQUFBLENBQUF1Qyx5QkFBQSxHQUFBQSx5QkFBQTtFQU1PLE1BQU1VLCtCQUErQixHQUFHLFNBQUFBLENBQVVDLFFBQWtCLEVBQVc7SUFDckYsT0FDRUEsUUFBUSxDQUFDNUIsV0FBVyxFQUFFQyxFQUFFLEVBQUVxQixnQkFBZ0IsRUFBNkJqQyxNQUFNLEVBQUVDLE9BQU8sRUFBRVYsS0FBSywrQ0FBb0M7RUFFcEksQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFGLFFBQUEsQ0FBQWlELCtCQUFBLEdBQUFBLCtCQUFBO0VBTU8sTUFBTUUseUNBQXlDLEdBQUcsU0FBQUEsQ0FBVUQsUUFBa0IsRUFBVztJQUMvRixPQUNDRCwrQkFBK0IsQ0FBQ0MsUUFBUSxDQUFDLElBQ3ZDQSxRQUFRLENBQUM1QixXQUFXLEVBQUVDLEVBQUUsRUFBRXFCLGdCQUFnQixFQUE2QmpDLE1BQU0sRUFBRUMsT0FBTyxFQUNyRndDLGFBQWEsS0FBSyw2QkFBNkI7RUFFcEQsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFwRCxRQUFBLENBQUFtRCx5Q0FBQSxHQUFBQSx5Q0FBQTtFQU1PLE1BQU1FLDRCQUE0QixHQUFHLFNBQUFBLENBQVVILFFBQTJDLEVBQVc7SUFDM0csSUFBSVIsVUFBVSxDQUFDUSxRQUFRLENBQUMsSUFBSUQsK0JBQStCLENBQUNDLFFBQVEsQ0FBQyxFQUFFO01BQ3RFQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQzVCLFdBQVcsQ0FBQ0MsRUFBRSxFQUFFcUIsZ0JBQTBDO0lBQy9FO0lBQ0EsT0FBU00sUUFBUSxDQUE0QnZDLE1BQU0sRUFBRUMsT0FBTyxFQUFvQndDLGFBQWEsS0FBSywrQkFBK0I7RUFDbEksQ0FBQztFQUFDcEQsUUFBQSxDQUFBcUQsNEJBQUEsR0FBQUEsNEJBQUE7RUFFSyxTQUFTQyxxQkFBcUJBLENBQ3BDcEMsZ0JBQXlELEVBQ3pEcUMsTUFBeUMsRUFDcEI7SUFDckIsSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxFQUFFO01BQy9CLElBQUlqRCxnQkFBZ0IsQ0FBQ2lELE1BQU0sQ0FBQyxJQUFJQSxNQUFNLENBQUNDLEtBQUssRUFBRTVDLE9BQU8sRUFBRTtRQUN0RCxNQUFNc0MsUUFBUSxHQUFHSyxNQUFNLENBQUNDLEtBQUssRUFBRTVDLE9BQU87UUFDdEMsSUFBSXNDLFFBQVEsRUFBRTVCLFdBQVcsRUFBRWEsTUFBTSxFQUFFc0IsY0FBYyxLQUFLaEMsU0FBUyxFQUFFO1VBQ2hFLE9BQU9QLGdCQUFnQixDQUFDd0MsK0JBQStCLENBQUNSLFFBQVEsRUFBRVMsa0JBQWtCLENBQUM7UUFDdEY7TUFDRCxDQUFDLE1BQU0sSUFBSWpCLFVBQVUsQ0FBQ2EsTUFBTSxDQUFDLEVBQUU7UUFDOUIsSUFBSUEsTUFBTSxFQUFFakMsV0FBVyxFQUFFYSxNQUFNLEVBQUVzQixjQUFjLEtBQUtoQyxTQUFTLEVBQUU7VUFDOUQsT0FBT1AsZ0JBQWdCLENBQUN3QywrQkFBK0IsQ0FBQ0gsTUFBTSxFQUFFSSxrQkFBa0IsQ0FBQztRQUNwRjtNQUNEO0lBQ0Q7SUFDQSxPQUFPbEMsU0FBUztFQUNqQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkF6QixRQUFBLENBQUFzRCxxQkFBQSxHQUFBQSxxQkFBQTtFQUtBLFNBQVNNLHdCQUF3QkEsQ0FBQ0MsSUFBd0IsRUFBVTtJQUNuRSxJQUFJQSxJQUFJLEVBQUU7TUFDVCxPQUFPQSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBR0QsSUFBSSxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUFFRixJQUFJLENBQUNHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO0lBQzlFO0lBQ0EsT0FBTyxFQUFFO0VBQ1Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyw4Q0FBOENBLENBQ3REcEMsTUFBcUIsRUFDckJxQyxvQkFBNEIsRUFDNUJDLFNBQW9CLEVBQ3BCQyxpQkFBc0MsRUFDaEI7SUFDdEIsSUFBSUQsU0FBUyxLQUFLLGlCQUFpQixFQUFFO01BQ3BDLE1BQU1FLGdCQUFnQixHQUFHeEMsTUFBTSxDQUFDUCxXQUFXLEVBQUVDLEVBQUUsRUFBRUMsTUFBTTtNQUN2RCxJQUFJNkMsZ0JBQWdCLEVBQUVSLElBQUksSUFBSW5CLFVBQVUsQ0FBQzJCLGdCQUFnQixDQUFDekQsT0FBTyxDQUFDLEVBQUU7UUFDbkUsTUFBTTBELDRCQUE0QixHQUFHSixvQkFBb0IsR0FBR0csZ0JBQWdCLENBQUNSLElBQUk7UUFDakY7UUFDQU8saUJBQWlCLENBQUNHLG9CQUFvQixDQUFDRCw0QkFBNEIsQ0FBQyxHQUFHRCxnQkFBZ0IsQ0FBQ3pELE9BQU87TUFDaEc7TUFFQSxNQUFNNEQsV0FBVyxHQUFHM0MsTUFBTSxDQUFDNEMsV0FBVztNQUN0QyxJQUFJRCxXQUFXLEVBQUVYLElBQUksSUFBSW5CLFVBQVUsQ0FBQzhCLFdBQVcsRUFBRTVELE9BQU8sQ0FBQyxFQUFFO1FBQzFELE1BQU04RCx1QkFBdUIsR0FBR1Isb0JBQW9CLEdBQUdNLFdBQVcsQ0FBQ1gsSUFBSTtRQUN2RU8saUJBQWlCLENBQUNHLG9CQUFvQixDQUFDRyx1QkFBdUIsQ0FBQyxHQUFHRixXQUFXLEVBQUU1RCxPQUFPO01BQ3ZGO0lBQ0Q7SUFDQSxPQUFPd0QsaUJBQWlCO0VBQ3pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTTyxnQ0FBZ0NBLENBQ3hDUCxpQkFBc0MsRUFDdENRLEdBQVcsRUFDWEMsS0FBZSxFQUNmQyxzQ0FBb0QsRUFDM0M7SUFDVCxJQUFJLENBQUNWLGlCQUFpQixDQUFDVyxVQUFVLENBQUNoRixjQUFjLENBQUM2RSxHQUFHLENBQUMsRUFBRTtNQUN0RFIsaUJBQWlCLENBQUNXLFVBQVUsQ0FBQ0gsR0FBRyxDQUFDLEdBQUc7UUFBRUksa0JBQWtCLEVBQUVIO01BQU0sQ0FBQztNQUNqRSxJQUFJQyxzQ0FBc0MsRUFBRTtRQUMzQ1YsaUJBQWlCLENBQUNXLFVBQVUsQ0FBQ0gsR0FBRyxDQUFDLENBQUNFLHNDQUFzQyxHQUFHQSxzQ0FBc0M7TUFDbEg7SUFDRDtJQUNBLE9BQU9HLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDZCxpQkFBaUIsQ0FBQ1csVUFBVSxDQUFDLENBQUNJLE9BQU8sQ0FBQ1AsR0FBRyxDQUFDO0VBQzlEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTUSxlQUFlQSxDQUFDaEIsaUJBQXNDLEVBQUVTLEtBQWEsRUFBUTtJQUNyRlQsaUJBQWlCLENBQUNpQixjQUFjLENBQUNDLFFBQVEsR0FBR2xCLGlCQUFpQixDQUFDaUIsY0FBYyxFQUFFQyxRQUFRLEdBQ25GLEdBQUdsQixpQkFBaUIsQ0FBQ2lCLGNBQWMsQ0FBQ0MsUUFBUSxHQUFHVCxLQUFLLEVBQUUsR0FDdEQsR0FBR0EsS0FBSyxFQUFFO0VBQ2Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU1Usd0JBQXdCQSxDQUN2QzFCLElBQVksRUFDWlgsUUFBdUIsRUFDdkJoQyxnQkFBa0MsRUFDbENzRSxVQUFtQixFQUNuQnJCLFNBQW9CLEVBUUU7SUFBQSxJQVB0QkMsaUJBQXNDLEdBQUFxQixTQUFBLENBQUFuRCxNQUFBLFFBQUFtRCxTQUFBLFFBQUFoRSxTQUFBLEdBQUFnRSxTQUFBLE1BQUc7TUFDeENWLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZFIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO01BQ3hCYyxjQUFjLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBQUEsSUFDREssaUJBQWlCLEdBQUFELFNBQUEsQ0FBQW5ELE1BQUEsUUFBQW1ELFNBQUEsUUFBQWhFLFNBQUEsR0FBQWdFLFNBQUEsTUFBRyxLQUFLO0lBQUEsSUFDekJFLG1CQUFtQixHQUFBRixTQUFBLENBQUFuRCxNQUFBLFFBQUFtRCxTQUFBLFFBQUFoRSxTQUFBLEdBQUFnRSxTQUFBLE1BQUcsS0FBSztJQUUzQixJQUFJNUIsSUFBSSxJQUFJWCxRQUFRLEVBQUU7TUFDckIsSUFBSTBDLFVBQWtCO01BQ3RCO01BQ0EsTUFBTUMsY0FBYyxHQUFHQyxtQ0FBbUMsQ0FBQzVDLFFBQVEsQ0FBQztNQUNwRSxNQUFNNkMsa0JBQWtCLEdBQUdDLCtCQUErQixDQUFDOUMsUUFBUSxDQUFDO01BRXBFLElBQUl5QyxtQkFBbUIsRUFBRTtRQUN4QjtRQUNBQyxVQUFVLEdBQUdqQixnQ0FBZ0MsQ0FBQ1AsaUJBQWlCLEVBQUVQLElBQUksRUFBRVgsUUFBUSxDQUFDO1FBQ2hGa0MsZUFBZSxDQUFDaEIsaUJBQWlCLEVBQUUsSUFBSXdCLFVBQVUsR0FBRyxDQUFDO1FBQ3JELE9BQU94QixpQkFBaUI7TUFDekI7TUFDQSxNQUFNRixvQkFBb0IsR0FBR04sd0JBQXdCLENBQUNDLElBQUksQ0FBQztNQUUzRCxNQUFNb0MsVUFBVSxHQUFHL0UsZ0JBQWdCLENBQUNnRixhQUFhLENBQUMsQ0FBQztNQUNuRCxNQUFNQyxpQkFBaUIsR0FBRyxJQUFJQyxpQkFBaUIsQ0FBQ0gsVUFBVSxFQUFFL0UsZ0JBQWdCLENBQUM7O01BRTdFO01BQ0EsTUFBTW1GLFlBQVksR0FBR0MseUJBQXlCLENBQUNQLGtCQUFrQixJQUFJN0MsUUFBUSxDQUFDO01BQzlFLE1BQU1xRCxnQkFBZ0IsR0FBR0MsNkJBQTZCLENBQUNULGtCQUFrQixJQUFJN0MsUUFBUSxDQUFDOztNQUV0RjtNQUNBLE1BQU10QixtQkFBbUIsR0FBR1YsZ0JBQWdCLENBQUN1RixzQkFBc0IsQ0FBQ3ZGLGdCQUFnQixDQUFDd0YsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxzQkFBc0IsQ0FBQyxDQUFDO01BQy9ILE1BQU1DLDJCQUEyQixHQUFHQyxvQkFBb0IsQ0FBV2pGLG1CQUFtQixFQUFFaUUsY0FBYyxJQUFJaEMsSUFBSSxDQUFDO01BQy9HLE1BQU1pRCxZQUFZLEdBQUdDLGtDQUFrQyxDQUFDSCwyQkFBMkIsQ0FBQztNQUNwRixNQUFNSSwrQkFBK0IsR0FBR0gsb0JBQW9CLENBQVdELDJCQUEyQixFQUFFTCxnQkFBZ0IsQ0FBQztNQUNySCxNQUFNVSxnQkFBZ0IsR0FBR0Ysa0NBQWtDLENBQUNDLCtCQUErQixDQUFDO01BRTVGLElBQUk1QyxpQkFBaUIsQ0FBQ2lCLGNBQWMsRUFBRUMsUUFBUSxFQUFFO1FBQy9DO1FBQ0FGLGVBQWUsQ0FBQ2hCLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUN4Q0EsaUJBQWlCLENBQUNpQixjQUFjLENBQUM2QixJQUFJLEdBQUcsSUFBSTtNQUM3Qzs7TUFFQTtNQUNBLE1BQU1DLDZCQUE2QixHQUNsQ2hELFNBQVMsS0FBSyxpQkFBaUIsSUFBSSxDQUFDLENBQUNnQyxpQkFBaUIsQ0FBQ2lCLG1CQUFtQixDQUFDbEUsUUFBUSxDQUFDLEdBQ2pGLENBQUMsQ0FBQ21ELFlBQVksSUFBSSxDQUFDLENBQUNGLGlCQUFpQixDQUFDaUIsbUJBQW1CLENBQUNmLFlBQVksQ0FBQyxHQUN2RSxJQUFJO01BQ1IsSUFBSUEsWUFBWSxJQUFJWSxnQkFBZ0IsRUFBRTtRQUNyQyxJQUFJRSw2QkFBNkIsRUFBRTtVQUNsQyxNQUFNRSxXQUFXLEdBQUd4QixjQUFjLEdBQUdBLGNBQWMsR0FBR2hDLElBQUk7VUFDMUQsTUFBTXlELGVBQWUsR0FBR3ZCLGtCQUFrQixHQUFHQSxrQkFBa0IsR0FBRzdDLFFBQVE7VUFDMUU7VUFDQSxNQUFNcUUsV0FBVyxHQUFHQyxjQUFjLENBQUNGLGVBQWUsRUFBRVYsMkJBQTJCLENBQUNhLGdCQUFnQixDQUFDO1VBQ2pHLElBQUlDLGdCQUF3QjtVQUM1QixRQUFRSCxXQUFXO1lBQ2xCLEtBQUssYUFBYTtjQUNqQkcsZ0JBQWdCLEdBQUcvQyxnQ0FBZ0MsQ0FDbERQLGlCQUFpQixFQUNqQjZDLGdCQUFnQixFQUNoQlosWUFBWSxFQUNaLGFBQ0QsQ0FBQztjQUNEakIsZUFBZSxDQUFDaEIsaUJBQWlCLEVBQUUsSUFBSXNELGdCQUFnQixHQUFHLENBQUM7Y0FDM0Q7WUFFRCxLQUFLLGtCQUFrQjtjQUN0QjlCLFVBQVUsR0FBR2pCLGdDQUFnQyxDQUFDUCxpQkFBaUIsRUFBRWlELFdBQVcsRUFBRUMsZUFBZSxDQUFDO2NBQzlGSSxnQkFBZ0IsR0FBRy9DLGdDQUFnQyxDQUNsRFAsaUJBQWlCLEVBQ2pCNkMsZ0JBQWdCLEVBQ2hCWixZQUFZLEVBQ1osa0JBQ0QsQ0FBQztjQUNEakIsZUFBZSxDQUFDaEIsaUJBQWlCLEVBQUUsSUFBSXdCLFVBQVUsT0FBTzhCLGdCQUFnQixJQUFJLENBQUM7Y0FDN0U7WUFFRCxLQUFLLGtCQUFrQjtjQUN0QjlCLFVBQVUsR0FBR2pCLGdDQUFnQyxDQUFDUCxpQkFBaUIsRUFBRWlELFdBQVcsRUFBRUMsZUFBZSxDQUFDO2NBQzlGSSxnQkFBZ0IsR0FBRy9DLGdDQUFnQyxDQUNsRFAsaUJBQWlCLEVBQ2pCNkMsZ0JBQWdCLEVBQ2hCWixZQUFZLEVBQ1osa0JBQ0QsQ0FBQztjQUNEakIsZUFBZSxDQUFDaEIsaUJBQWlCLEVBQUUsSUFBSXNELGdCQUFnQixPQUFPOUIsVUFBVSxJQUFJLENBQUM7Y0FDN0U7WUFDRDtjQUNDQSxVQUFVLEdBQUdqQixnQ0FBZ0MsQ0FBQ1AsaUJBQWlCLEVBQUVpRCxXQUFXLEVBQUVDLGVBQWUsQ0FBQztjQUM5RmxDLGVBQWUsQ0FBQ2hCLGlCQUFpQixFQUFFLElBQUl3QixVQUFVLEdBQUcsQ0FBQztjQUNyRDtVQUNGO1FBQ0QsQ0FBQyxNQUFNO1VBQ047VUFDQUEsVUFBVSxHQUFHakIsZ0NBQWdDLENBQUNQLGlCQUFpQixFQUFFUCxJQUFJLEVBQUVYLFFBQVEsQ0FBQztVQUNoRmtDLGVBQWUsQ0FBQ2hCLGlCQUFpQixFQUFFLElBQUl3QixVQUFVLEdBQUcsQ0FBQztRQUN0RDtNQUNELENBQUMsTUFBTTtRQUNOO1FBQ0EsTUFBTStCLGdCQUFnQixHQUFHQyw2QkFBNkIsQ0FBQzFFLFFBQVEsQ0FBQztRQUNoRSxNQUFNMkUsWUFBWSxHQUFHQyx5QkFBeUIsQ0FBQzVFLFFBQVEsQ0FBQztRQUN4RCxNQUFNNkUscUJBQXFCLEdBQUdKLGdCQUFnQixJQUFJRSxZQUFZO1FBQzlELE1BQU1HLHdCQUEwRCxHQUMvRDlFLFFBQVEsRUFBRTVCLFdBQVcsRUFBRTJHLFFBQVEsRUFBRUMsV0FBVyxJQUFJaEYsUUFBUSxFQUFFNUIsV0FBVyxFQUFFMkcsUUFBUSxFQUFFRSxJQUFJO1FBQ3RGLE1BQU1DLGdCQUFnQixHQUFHQyw2QkFBNkIsQ0FBQ25GLFFBQVEsQ0FBQztRQUNoRSxNQUFNb0Ysa0JBQWtCLEdBQUdwRixRQUFRLEVBQUU1QixXQUFXLEVBQUVhLE1BQU0sRUFBRW9HLFFBQVE7UUFFbEUsSUFBSVIscUJBQXFCLEVBQUU7VUFDMUJTLCtCQUErQixDQUM5QnBFLGlCQUFpQixFQUNqQjBDLFlBQVksSUFBSWpELElBQUksRUFDcEI2QixpQkFBaUIsRUFDakJrQiwyQkFBMkIsRUFDM0JtQixxQkFBcUIsRUFDckJKLGdCQUNELENBQUM7UUFDRixDQUFDLE1BQU0sSUFBSVMsZ0JBQWdCLElBQUlFLGtCQUFrQixFQUFFMUgsT0FBTyxFQUFFO1VBQzNENkgseUJBQXlCLENBQUN2RixRQUFRLEVBQUVrQixpQkFBaUIsRUFBRVAsSUFBSSxFQUFFNkIsaUJBQWlCLENBQUM7UUFDaEYsQ0FBQyxNQUFNLElBQ0x4QyxRQUFRLENBQUN2QyxNQUFNLEVBQUVDLE9BQU8sRUFBRVYsS0FBSywrQ0FBb0MsSUFBSSxDQUFDZ0QsUUFBUSxDQUFDdkMsTUFBTSxFQUFFQyxPQUFPLEVBQUU4SCxXQUFXLElBQzlHeEYsUUFBUSxDQUFDNUIsV0FBVyxFQUFFQyxFQUFFLEVBQUVxQixnQkFBZ0IsRUFBRWpDLE1BQU0sRUFBRUMsT0FBTyxFQUFFVixLQUFLLCtDQUFvQyxFQUNyRztVQUNEeUksMEJBQTBCLENBQUN6RixRQUFRLEVBQUVrQixpQkFBaUIsRUFBRTBDLFlBQVksQ0FBQztRQUN0RSxDQUFDLE1BQU0sSUFBSTVELFFBQVEsQ0FBQ2hELEtBQUssd0RBQTZDLEVBQUU7VUFDdkUsTUFBTTBJLGVBQWUsR0FBRzFGLFFBQVEsQ0FBQzJGLEVBQUUsRUFBRWpJLE9BQU87VUFDNUMsTUFBTWtJLG1CQUFtQixHQUFHNUYsUUFBUSxDQUFDMkYsRUFBRSxFQUFFaEYsSUFBSTtVQUM3QytCLFVBQVUsR0FBR2pCLGdDQUFnQyxDQUM1Q1AsaUJBQWlCLEVBQ2pCRixvQkFBb0IsR0FBR0Esb0JBQW9CLEdBQUc0RSxtQkFBbUIsR0FBR0EsbUJBQW1CLEVBQ3ZGRixlQUNELENBQUM7VUFDRHhELGVBQWUsQ0FBQ2hCLGlCQUFpQixFQUFFLElBQUl3QixVQUFVLEdBQUcsQ0FBQztRQUN0RCxDQUFDLE1BQU0sSUFBSSxDQUFDSixVQUFVLEVBQUU7VUFDdkI7VUFDQUksVUFBVSxHQUFHakIsZ0NBQWdDLENBQUNQLGlCQUFpQixFQUFFUCxJQUFJLEVBQUVYLFFBQVEsQ0FBQztVQUNoRmtDLGVBQWUsQ0FBQ2hCLGlCQUFpQixFQUFFLElBQUl3QixVQUFVLEdBQUcsQ0FBQztVQUNyRCxJQUFJb0Msd0JBQXdCLEVBQUU7WUFDN0I1RCxpQkFBaUIsQ0FBQ2lCLGNBQWMsQ0FBQzBELElBQUksR0FBRyxHQUFHZix3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDdkUsSUFBSTlFLFFBQVEsRUFBRTVCLFdBQVcsRUFBRTJHLFFBQVEsRUFBRUMsV0FBVyxFQUFFO2NBQ2pEOUQsaUJBQWlCLENBQUNpQixjQUFjLENBQUMyRCxVQUFVLEdBQUcsSUFBSTtZQUNuRDtVQUNELENBQUMsTUFBTSxJQUFJVixrQkFBa0IsRUFBRTtZQUM5QmxFLGlCQUFpQixDQUFDaUIsY0FBYyxDQUFDNEQsUUFBUSxHQUFHLEdBQUdYLGtCQUFrQixFQUFFLENBQUMsQ0FBQztVQUN0RTtRQUNEO01BQ0Q7TUFFQWxFLGlCQUFpQixHQUFHSCw4Q0FBOEMsQ0FBQ2YsUUFBUSxFQUFFZ0Isb0JBQW9CLEVBQUVDLFNBQVMsRUFBRUMsaUJBQWlCLENBQUM7TUFDaEksSUFBSWEsTUFBTSxDQUFDQyxJQUFJLENBQUNkLGlCQUFpQixDQUFDRyxvQkFBb0IsQ0FBQyxDQUFDakMsTUFBTSxHQUFHLENBQUMsSUFBSXdFLFlBQVksRUFBRTtRQUNuRjtRQUNBMUMsaUJBQWlCLENBQUNpQixjQUFjLENBQUNuQyxRQUFRLEdBQUcsQ0FBQzRELFlBQVksQ0FBQztNQUMzRDtNQUNBLElBQUk3QixNQUFNLENBQUNDLElBQUksQ0FBQ2QsaUJBQWlCLENBQUNHLG9CQUFvQixDQUFDLENBQUNqQyxNQUFNLEdBQUcsQ0FBQyxJQUFJMkMsTUFBTSxDQUFDQyxJQUFJLENBQUNkLGlCQUFpQixDQUFDVyxVQUFVLENBQUMsQ0FBQ3pDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0g7UUFDQTtRQUNBc0QsVUFBVSxHQUFHakIsZ0NBQWdDLENBQUNQLGlCQUFpQixFQUFFUCxJQUFJLEVBQUVYLFFBQVEsQ0FBQztRQUNoRmtDLGVBQWUsQ0FBQ2hCLGlCQUFpQixFQUFFLElBQUl3QixVQUFVLEdBQUcsQ0FBQztNQUN0RDtJQUNEO0lBQ0EsT0FBT3hCLGlCQUFpQjtFQUN6Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFwRSxRQUFBLENBQUF1Rix3QkFBQSxHQUFBQSx3QkFBQTtFQUtBLFNBQVMyRCx5QkFBeUJBLENBQUMxRyxNQUFnQyxFQUFxQjtJQUN2RixJQUFJRyxTQUF3QjtJQUM1QixJQUFJRCxVQUFVLENBQUNGLE1BQU0sQ0FBQyxFQUFFO01BQ3ZCRyxTQUFTLEdBQUlILE1BQU0sQ0FBQ2xCLFdBQVcsRUFBRUMsRUFBRSxFQUFFcUIsZ0JBQWdCLEVBQTZCakMsTUFBTSxFQUFFQyxPQUF3QjtJQUNuSCxDQUFDLE1BQU07TUFDTitCLFNBQVMsR0FBR0gsTUFBTTtJQUNuQjtJQUNBLE9BQU9HLFNBQVMsQ0FBQ1MsYUFBYSxpQ0FBNEI7RUFDM0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3VGLDBCQUEwQkEsQ0FBQ3pGLFFBQXVCLEVBQUVrQixpQkFBc0MsRUFBRVAsSUFBd0IsRUFBUTtJQUNwSTtJQUNBLElBQUlBLElBQUksS0FBS3BDLFNBQVMsRUFBRTtNQUN2QjtJQUNEO0lBQ0EsTUFBTTBILGlCQUFpQixHQUFHakcsUUFBUSxDQUFDdkMsTUFBTSxFQUFFQyxPQUFPLEVBQUU0QyxLQUFLLENBQUM1QyxPQUFtQjtJQUM3RSxNQUFNd0ksZUFBZSxHQUFHbEcsUUFBUSxDQUFDdkMsTUFBTSxFQUFFQyxPQUFPO0lBQ2hELE1BQU1zRCxvQkFBb0IsR0FBR04sd0JBQXdCLENBQUNDLElBQUksQ0FBQztJQUMzRDtJQUNBLE1BQU13Rix3QkFBd0IsR0FBR25HLFFBQVEsQ0FBQzVCLFdBQVcsRUFBRUMsRUFBRSxFQUFFcUIsZ0JBQWdCO0lBQzNFLE1BQU1nRCxVQUFVLEdBQUdqQixnQ0FBZ0MsQ0FBQ1AsaUJBQWlCLEVBQUVQLElBQUksRUFBRXdGLHdCQUF3QixHQUFHbkcsUUFBUSxHQUFHaUcsaUJBQWlCLENBQUM7SUFDckk7SUFDQSxJQUFJRCx5QkFBeUIsQ0FBQ0csd0JBQXdCLEdBQUduRyxRQUFRLEdBQUdrRyxlQUFlLENBQUMsa0NBQTZCLEVBQUU7TUFDbEg7SUFDRDtJQUNBLE1BQU0zRyxXQUFXLEdBQUdGLHlCQUF5QixDQUFDOEcsd0JBQXdCLEdBQUduRyxRQUFRLEdBQUdrRyxlQUFlLENBQUM7SUFDcEcsSUFBSXBHLDBCQUEwQixDQUFDUCxXQUFXLENBQUMsRUFBRTtNQUM1QyxJQUFJQSxXQUFXLENBQUM3QixPQUFPLEVBQUU7UUFDeEI7UUFDQSxNQUFNMEksY0FBYyxHQUFHM0UsZ0NBQWdDLENBQ3REUCxpQkFBaUIsRUFDakJGLG9CQUFvQixHQUFHQSxvQkFBb0IsR0FBR3pCLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQzJJLElBQUksR0FBRzlHLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQzJJLElBQUksRUFDakc5RyxXQUFXLENBQUM3QixPQUNiLENBQUM7UUFDRHdELGlCQUFpQixDQUFDaUIsY0FBYyxDQUFDbUUsb0JBQW9CLEdBQUcvRyxXQUFXLENBQUNvQixJQUFJO1FBQ3hFdUIsZUFBZSxDQUFDaEIsaUJBQWlCLEVBQUUsSUFBSXdCLFVBQVUsTUFBTTBELGNBQWMsR0FBRyxDQUFDO01BQzFFO0lBQ0QsQ0FBQyxNQUFNLElBQUlHLG9CQUFvQixDQUFDSix3QkFBd0IsR0FBR25HLFFBQVEsR0FBR2lHLGlCQUFpQixDQUFDLElBQUk5Riw0QkFBNEIsQ0FBQ0gsUUFBUSxDQUFDLEVBQUU7TUFDbklrQixpQkFBaUIsQ0FBQ2lCLGNBQWMsQ0FBQzBELElBQUksR0FBRyxHQUFHO0lBQzVDLENBQUMsTUFBTTtNQUNOM0UsaUJBQWlCLENBQUNpQixjQUFjLENBQUNtRSxvQkFBb0IsR0FBRy9HLFdBQVc7TUFDbkUyQyxlQUFlLENBQUNoQixpQkFBaUIsRUFBRSxJQUFJd0IsVUFBVSxLQUFLbkQsV0FBVyxFQUFFLENBQUM7SUFDckU7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNnRyx5QkFBeUJBLENBQ2pDdkYsUUFBdUIsRUFDdkJrQixpQkFBc0MsRUFDdENQLElBQVksRUFDWjZCLGlCQUEwQixFQUNuQjtJQUNQLE1BQU00QyxrQkFBa0IsR0FBR3BGLFFBQVEsQ0FBQzVCLFdBQVcsQ0FBQ2EsTUFBTSxDQUFDb0csUUFBUTtJQUMvRCxNQUFNckUsb0JBQW9CLEdBQUdOLHdCQUF3QixDQUFDQyxJQUFJLENBQUM7SUFDM0QsTUFBTStCLFVBQVUsR0FBR2pCLGdDQUFnQyxDQUFDUCxpQkFBaUIsRUFBRVAsSUFBSSxFQUFFWCxRQUFRLENBQUM7SUFFdEYsTUFBTXdHLGtCQUFrQixHQUFHL0UsZ0NBQWdDLENBQzFEUCxpQkFBaUIsRUFDakJGLG9CQUFvQixHQUFHb0Usa0JBQWtCLENBQUN6RSxJQUFJLEVBQzlDeUUsa0JBQWtCLENBQUMxSCxPQUNwQixDQUFDO0lBQ0QsSUFBSThFLGlCQUFpQixFQUFFO01BQ3RCTixlQUFlLENBQUNoQixpQkFBaUIsRUFBRSxJQUFJd0IsVUFBVSxPQUFPOEQsa0JBQWtCLEdBQUcsQ0FBQztJQUMvRSxDQUFDLE1BQU07TUFDTnRGLGlCQUFpQixDQUFDaUIsY0FBYyxDQUFDK0MsZ0JBQWdCLEdBQUdsRSxvQkFBb0IsR0FBR29FLGtCQUFrQixDQUFDekUsSUFBSTtJQUNuRztFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMyRSwrQkFBK0JBLENBQ3ZDcEUsaUJBQXNDLEVBQ3RDMEMsWUFBb0IsRUFDcEJwQixpQkFBMEIsRUFDMUJrQiwyQkFBMEQsRUFDMURtQixxQkFBK0IsRUFDL0JKLGdCQUEyQixFQUNwQjtJQUNQLE1BQU16RSxRQUFRLEdBQUcwRCwyQkFBMkIsQ0FBQzlFLFlBQVk7SUFDekQsSUFBSW9CLFFBQVEsRUFBRTtNQUNiLE1BQU15RywwQkFBMEIsR0FBR0MsaUNBQWlDLENBQUMxRyxRQUFRLENBQUMsSUFBSTJHLDZCQUE2QixDQUFDM0csUUFBUSxDQUFDO01BQ3pILE1BQU00Ryx5Q0FBeUMsR0FBR2pELG9CQUFvQixDQUNyRUQsMkJBQTJCLEVBQzNCK0MsMEJBQ0QsQ0FBQztNQUNELE1BQU1JLDBCQUEwQixHQUFHaEQsa0NBQWtDLENBQUMrQyx5Q0FBeUMsQ0FBQztNQUNoSCxNQUFNbEUsVUFBVSxHQUFHakIsZ0NBQWdDLENBQUNQLGlCQUFpQixFQUFFMEMsWUFBWSxFQUFFNUQsUUFBUSxDQUFDO01BQzlGLE1BQU04RyxrQkFBa0IsR0FBR3JGLGdDQUFnQyxDQUFDUCxpQkFBaUIsRUFBRTJGLDBCQUEwQixFQUFHaEMscUJBQXFCLENBQUM7TUFDbEksSUFBSXJDLGlCQUFpQixFQUFFO1FBQ3RCTixlQUFlLENBQUNoQixpQkFBaUIsRUFBRSxJQUFJd0IsVUFBVSxPQUFPb0Usa0JBQWtCLEdBQUcsQ0FBQztNQUMvRSxDQUFDLE1BQU07UUFDTjVGLGlCQUFpQixDQUFDaUIsY0FBYyxDQUFDd0MsWUFBWSxHQUFHa0MsMEJBQTBCO01BQzNFO01BQ0EsSUFBSXBDLGdCQUFnQixFQUFFO1FBQ3JCdkQsaUJBQWlCLENBQUNpQixjQUFjLENBQUMyRCxVQUFVLEdBQUcsSUFBSTtNQUNuRDtNQUNBNUUsaUJBQWlCLENBQUNpQixjQUFjLENBQUM0RSxLQUFLLEdBQUcvRyxRQUFRLENBQUMrRyxLQUFLO0lBQ3hEO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxtQ0FBbUNBLENBQ2xEcEssU0FBaUMsRUFDakNvQixnQkFBa0MsRUFDbENpRCxTQUFvQixFQU9FO0lBQUEsSUFOdEJDLGlCQUFzQyxHQUFBcUIsU0FBQSxDQUFBbkQsTUFBQSxRQUFBbUQsU0FBQSxRQUFBaEUsU0FBQSxHQUFBZ0UsU0FBQSxNQUFHO01BQ3hDVixVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2RSLG9CQUFvQixFQUFFLENBQUMsQ0FBQztNQUN4QmMsY0FBYyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUFBLElBQ0Q4RSxVQUFVLEdBQUExRSxTQUFBLENBQUFuRCxNQUFBLFFBQUFtRCxTQUFBLFFBQUFoRSxTQUFBLEdBQUFnRSxTQUFBLE1BQUcsS0FBSztJQUVsQixJQUFJMkUsa0JBQWtCLEdBQUcsS0FBSztJQUM5QixRQUFRdEssU0FBUyxFQUFFSSxLQUFLO01BQ3ZCO01BQ0E7TUFDQTtNQUNBO01BQ0E7UUFDQyxJQUFJSixTQUFTLENBQUMwRCxLQUFLLEVBQUU7VUFDcEIsTUFBTU4sUUFBUSxHQUFHcEQsU0FBUyxDQUFDMEQsS0FBSztVQUNoQzRHLGtCQUFrQixHQUFHQyxtQ0FBbUMsQ0FBQ3ZLLFNBQVMsQ0FBQztVQUNuRXNFLGlCQUFpQixHQUFHbUIsd0JBQXdCLENBQzNDckMsUUFBUSxDQUFDVyxJQUFJLEVBQ2JYLFFBQVEsQ0FBQ3RDLE9BQU8sRUFDaEJNLGdCQUFnQixFQUNoQixLQUFLLEVBQ0xpRCxTQUFTLEVBQ1RDLGlCQUFpQixFQUNqQitGLFVBQVUsRUFDVkMsa0JBQ0QsQ0FBQztVQUNELE1BQU1sRyxvQkFBb0IsR0FBR04sd0JBQXdCLENBQUNWLFFBQVEsQ0FBQ1csSUFBSSxDQUFDO1VBQ3BFTyxpQkFBaUIsR0FBR0gsOENBQThDLENBQ2pFbkUsU0FBUyxFQUNUb0Usb0JBQW9CLEVBQ3BCQyxTQUFTLEVBQ1RDLGlCQUNELENBQUM7UUFDRjtRQUNBO01BRUQ7TUFDQTtRQUNDO01BRUQ7UUFDQyxRQUFRdEUsU0FBUyxDQUFDYSxNQUFNLEVBQUVDLE9BQU8sRUFBRVYsS0FBSztVQUN2QztZQUNDSixTQUFTLENBQUNhLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDMEosSUFBSSxFQUFFQyxPQUFPLENBQUVDLGNBQXNDLElBQUs7Y0FDbEZwRyxpQkFBaUIsR0FBRzhGLG1DQUFtQyxDQUN0RE0sY0FBYyxFQUNkdEosZ0JBQWdCLEVBQ2hCaUQsU0FBUyxFQUNUQyxpQkFBaUIsRUFDakIsSUFDRCxDQUFDO1lBQ0YsQ0FBQyxDQUFDO1lBQ0Y7VUFFRDtZQUNDZ0csa0JBQWtCLEdBQUdDLG1DQUFtQyxDQUFDdkssU0FBUyxDQUFDO1lBQ25Fc0UsaUJBQWlCLEdBQUdtQix3QkFBd0IsQ0FDM0N6RixTQUFTLENBQUNhLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDNEMsS0FBSyxDQUFDSyxJQUFJLEVBQ25DL0QsU0FBUyxFQUNUb0IsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTGlELFNBQVMsRUFDVEMsaUJBQWlCLEVBQ2pCK0YsVUFBVSxFQUNWQyxrQkFDRCxDQUFDO1lBQ0Q7VUFFRDtZQUNDLE1BQU1LLGdCQUFnQixHQUFHM0ssU0FBUyxDQUFDYSxNQUFNLENBQUNDLE9BQWtCO1lBQzVEd0osa0JBQWtCLEdBQUdDLG1DQUFtQyxDQUFDdkssU0FBUyxDQUFDO1lBQ25Fc0UsaUJBQWlCLEdBQUdtQix3QkFBd0IsQ0FDM0N6RixTQUFTLENBQUNhLE1BQU0sQ0FBQ2tFLEtBQUssRUFDdEI0RixnQkFBZ0IsRUFDaEJ2SixnQkFBZ0IsRUFDaEJrSixrQkFBa0IsRUFDbEJqRyxTQUFTLEVBQ1RDLGlCQUFpQixFQUNqQitGLFVBQVUsRUFDVkMsa0JBQ0QsQ0FBQztZQUNEO1VBQ0Q7WUFDQztRQUNGO1FBQ0E7TUFFRDtRQUNDO0lBQ0Y7SUFFQSxPQUFPaEcsaUJBQWlCO0VBQ3pCO0VBQUNwRSxRQUFBLENBQUFrSyxtQ0FBQSxHQUFBQSxtQ0FBQTtFQUVNLE1BQU1RLG9CQUFvQixHQUFHLFNBQUFBLENBQVVDLFVBQTZDLEVBQXNCO0lBQ2hILElBQUlqSSxVQUFVLENBQUNpSSxVQUFVLENBQUMsRUFBRTtNQUMzQixPQUFPQSxVQUFVLENBQUNDLElBQUk7SUFDdkI7SUFDQSxJQUFJQyxTQUE2QjtJQUNqQyxRQUFRRixVQUFVLENBQUN6SyxLQUFLO01BQ3ZCO01BQ0E7TUFDQTtNQUNBO1FBQ0MySyxTQUFTLEdBQUdwSixTQUFTO1FBQ3JCO01BRUQ7TUFDQTtNQUNBO01BQ0E7TUFDQTtRQUNDb0osU0FBUyxHQUFJRixVQUFVLEVBQWdCbkgsS0FBSyxFQUFFNUMsT0FBTyxFQUFFZ0ssSUFBSTtRQUMzRDtNQUVEO01BQ0E7UUFDQyxJQUFJRCxVQUFVLENBQUNoSyxNQUFNLEVBQUVDLE9BQU8sRUFBRVYsS0FBSyxFQUFFO1VBQ3RDLE1BQU1RLGVBQWUsR0FBR2lLLFVBQVUsQ0FBQ2hLLE1BQU0sQ0FBQ0MsT0FBTztVQUNqRCxJQUFJRixlQUFlLENBQUNSLEtBQUssd0RBQTZDLElBQUk4QywwQkFBMEIsQ0FBQ3RDLGVBQWUsQ0FBQ21JLEVBQUUsQ0FBQyxFQUFFO1lBQ3pIZ0MsU0FBUyxHQUFHbkssZUFBZSxDQUFDbUksRUFBRSxDQUFDakksT0FBTyxFQUFFZ0ssSUFBSTtVQUM3QyxDQUFDLE1BQU0sSUFBSWxLLGVBQWUsQ0FBQ1IsS0FBSywrQ0FBb0MsRUFBRTtZQUNyRTJLLFNBQVMsR0FBR25LLGVBQWUsQ0FBQzhDLEtBQUssRUFBRXNILEtBQUssRUFBRTVLLEtBQUssSUFBSVEsZUFBZSxDQUFDOEMsS0FBSyxFQUFFNUMsT0FBTyxFQUFFZ0ssSUFBSTtVQUN4RixDQUFDLE1BQU07WUFDTjtZQUNBO1lBQ0FDLFNBQVMsR0FDUkYsVUFBVSxDQUFDaEssTUFBTSxDQUFDQyxPQUFPLENBQUNWLEtBQUssS0FBSyxnREFBZ0QsR0FBR3VCLFNBQVMsR0FBRyxhQUFhO1VBQ2xIO1FBQ0QsQ0FBQyxNQUFNO1VBQ05vSixTQUFTLEdBQUdwSixTQUFTO1FBQ3RCO1FBQ0E7SUFDRjtJQUVBLE9BQU9vSixTQUFTO0VBQ2pCLENBQUM7RUFBQzdLLFFBQUEsQ0FBQTBLLG9CQUFBLEdBQUFBLG9CQUFBO0VBQUEsT0FBQTFLLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -420,7 +420,7 @@ export function collectRelatedProperties(
420
420
  const pathForText = externalIdPath ? externalIdPath : path;
421
421
  const propertyForText = externalIdProperty ? externalIdProperty : property;
422
422
  // Check for Text Arrangement.
423
- const displayMode = getDisplayMode(propertyForText, propertyDataModelObjectPath);
423
+ const displayMode = getDisplayMode(propertyForText, propertyDataModelObjectPath.targetEntityType);
424
424
  let descriptionIndex: number;
425
425
  switch (displayMode) {
426
426
  case "Description":
@@ -515,6 +515,10 @@ export function collectRelatedProperties(
515
515
  }
516
516
 
517
517
  relatedProperties = _collectAdditionalPropertiesForAnalyticalTable(property, navigationPathPrefix, tableType, relatedProperties);
518
+ if (Object.keys(relatedProperties.additionalProperties).length > 0 && relativePath) {
519
+ // We don't need to consider additionalProperties for the export
520
+ relatedProperties.exportSettings.property = [relativePath];
521
+ }
518
522
  if (Object.keys(relatedProperties.additionalProperties).length > 0 && Object.keys(relatedProperties.properties).length === 0) {
519
523
  // Collect underlying property if not collected already.
520
524
  // This is to ensure that additionalProperties are made available only to complex property infos.