@sapui5/sap.fe.core 1.124.0 → 1.124.2

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 (34) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +15 -4
  4. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +10 -0
  5. package/src/sap/fe/core/controllerextensions/EditFlow.js +2 -1
  6. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1 -0
  7. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -2
  8. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +1 -1
  9. package/src/sap/fe/core/controllerextensions/Routing.js +5 -3
  10. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -2
  11. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  12. package/src/sap/fe/core/controllerextensions/SideEffects.ts +5 -5
  13. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +54 -40
  14. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +62 -38
  15. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
  16. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1 -1
  17. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  18. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -0
  19. package/src/sap/fe/core/fpm/manifest.json +1 -1
  20. package/src/sap/fe/core/helpers/BindingToolkit.js +17 -5
  21. package/src/sap/fe/core/helpers/BindingToolkit.ts +8 -1
  22. package/src/sap/fe/core/helpers/ModelHelper.js +9 -1
  23. package/src/sap/fe/core/helpers/ModelHelper.ts +7 -0
  24. package/src/sap/fe/core/library.js +1 -1
  25. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +10 -6
  26. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +20 -5
  27. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  28. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  29. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  30. package/src/sap/fe/core/services/RoutingServiceFactory.ts +8 -1
  31. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +3 -3
  32. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +7 -2
  33. package/src/sap/fe/core/templating/UIFormatters.js +17 -9
  34. package/src/sap/fe/core/templating/UIFormatters.ts +26 -14
@@ -1390,7 +1390,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
1390
1390
  const aChangeSetLocalPromises = [];
1391
1391
  for (i = 0; i < aContexts.length; i++) {
1392
1392
  oAction = oModel.bindContext(`${sActionName}(...)`, aContexts[i], mBindingParameters);
1393
- aChangeSetLocalPromises.push(fnExecuteAction(oAction, aContexts.length <= 1 ? null : i, {
1393
+ aChangeSetLocalPromises.push(fnExecuteAction(oAction, aContexts.length < 1 ? null : i + 1, {
1394
1394
  context: aContexts[i],
1395
1395
  pathExpressions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.pathExpressions,
1396
1396
  triggerActions: mParameters.additionalSideEffect && mParameters.additionalSideEffect.triggerActions
@@ -1589,4 +1589,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
1589
1589
  };
1590
1590
  return operations;
1591
1591
  }, false);
1592
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiYUNvbnRleHRzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiQWN0aW9uUnVudGltZSIsImdldElzQWN0aW9uQ3JpdGljYWwiLCJleHRyYWN0U2luZ2xlUmVzdWx0IiwicmVzdWx0Iiwic3RhdHVzIiwidmFsdWUiLCJyZWFzb24iLCJjYWxsQWN0aW9uIiwidGhlbiIsImNhbGxBY3Rpb25JbXBvcnQiLCJhY3Rpb25OYW1lIiwibW9kZWwiLCJhcHBDb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibWV0YU1vZGVsIiwiYWN0aW9uUGF0aCIsImJpbmRDb250ZXh0IiwiYWN0aW9uTmFtZUZyb21Nb2RlbCIsImdldE9iamVjdCIsIiRBY3Rpb24iLCJ1bmJvdW5kQWN0aW9uSW5kZXgiLCJmaW5kSW5kZXgiLCJhY3Rpb24iLCIkSXNCb3VuZCIsImFjdGlvbkltcG9ydCIsImNhbGxCb3VuZEZ1bmN0aW9uIiwic0Z1bmN0aW9uTmFtZSIsImNvbnRleHQiLCJzRnVuY3Rpb25QYXRoIiwib0JvdW5kRnVuY3Rpb24iLCJfZXhlY3V0ZUZ1bmN0aW9uIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwicmVzb2x2ZSIsIm9GdW5jdGlvbkltcG9ydCIsIm9GdW5jdGlvbiIsInNHcm91cElkIiwiRXJyb3IiLCJmdW5jdGlvblRvQ2FsbCIsIm9GdW5jdGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwiYkdyb3VwZWQiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJDaGFuZ2VTZXQiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyIsImZuT25TdWJtaXR0ZWQiLCJvblN1Ym1pdHRlZCIsImZuT25SZXNwb25zZSIsIm9uUmVzcG9uc2UiLCJiR2V0Qm91bmRDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwic2VsZWN0ZWRJdGVtcyIsImFkZGl0aW9uYWxTaWRlRWZmZWN0IiwicGF0aEV4cHJlc3Npb25zIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXNzYWdlc1BhdGgiLCJleHAiLCIkaXNDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCIkVHlwZSIsIm1CaW5kaW5nUGFyYW1ldGVycyIsIiRzZWxlY3QiLCJzcGxpdCIsImluY2x1ZGVzIiwicHVzaCIsInRyaWdnZXJBY3Rpb25zIiwic3BsaWNlIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc0NyZWF0ZUFjdGlvbiIsImJPYmplY3RQYWdlIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwiZ3JvdXBJZCIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsInNvbWUiLCJhUGFyYW1ldGVyIiwiJEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXROYW1lIiwibWVzc2FnZUhhbmRsZXIiLCJpZ25vcmVFVGFnIiwib09wZXJhdGlvblJlc3VsdCIsImFmdGVyQWN0aW9uUmVzb2x1dGlvbiIsImNhdGNoIiwiaSIsImZpbmQiLCJlbGVtZW50IiwibmFtZSIsIl9leGVjdXRlQWN0aW9uIiwibWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiY29uY2F0Iiwic3RyaWN0SGFuZGxpbmdGYWlscyIsImFGYWlsZWRDb250ZXh0cyIsImZvckVhY2giLCJmYWlsIiwiZ2V0Q29udGV4dCIsIm9GYWlsZWRPcGVyYXRpb25SZXN1bHQiLCJhZGRNZXNzYWdlcyIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0IiwiaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJhTWVzc2FnZXMiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnNJbiIsImFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2siLCJ1bmRlZmluZWQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsIm9BY3Rpb25Db250ZXh0Iiwib1BhcmVudENvbnRyb2wiLCJib3VuZEFjdGlvbk5hbWUiLCJzdWZmaXhSZXNvdXJjZUtleSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic0NvbmZpcm1hdGlvblRleHQiLCJnZXRUZXh0IiwiY29uZmlybSIsIm9uQ2xvc2UiLCJzQWN0aW9uIiwiT0siLCJvT3BlcmF0aW9uIiwib0Vycm9yIiwiZSIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsImV4ZWN1dGVBUE1BY3Rpb24iLCJvRGlhbG9nIiwiYWZ0ZXI0MTIiLCJhUmVzdWx0Iiwib1NpbmdsZVJlc3VsdCIsImF0dGFjaEV2ZW50T25jZSIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsImlzT3BlbiIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJpc0EiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJzaG93TWVzc2FnZUJveCIsIm9Db250cm9sIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwidW5ib3VuZE1lc3NhZ2VzIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJBUERtZXNzYWdlcyIsImFjdGlvblBhcmFtIiwiQVBETWVzc2FnZSIsImlzQVBEVGFyZ2V0IiwiZXJyb3JUYXJnZXRzSW5BUEQiLCJoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UiLCJzTWVzc2FnZSIsInNEZXNjcmlwdGlvblRleHQiLCJtZXNzYWdlTW9kZWwiLCJtZXNzYWdlc0luTW9kZWwiLCJhQm91bmRNZXNzYWdlcyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldE1lc3NhZ2VzIiwiZ2VuZXJpY01lc3NhZ2UiLCJpc0VkaXRhYmxlIiwibm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2ciLCJnZXRUeXBlIiwibm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCIsInNldE1lc3NhZ2UiLCJnZXRNZXNzYWdlIiwiTWVzc2FnZSIsInR5cGUiLCJNZXNzYWdlVHlwZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJkZXNjcmlwdGlvbiIsImNvZGUiLCJ1bnNoaWZ0IiwiY2xvc2UiLCJkZXN0cm95IiwiZmlsdGVyZWRNZXNzYWdlcyIsImJJc0FQRE9wZW4iLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsImJpbmQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJzUGF0aCIsIl9nZXRQYXRoIiwiZW50aXR5U2V0Q29udGV4dCIsInNBY3Rpb25OYW1lUGF0aCIsImFjdGlvbk5hbWVDb250ZXh0Iiwic0ZyYWdtZW50TmFtZSIsImFjdGlvblBhcmFtZXRlckluZm9zIiwiX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIiLCJwYXJhbWV0ZXIiLCJhbGxNZXNzYWdlcyIsImdlbmVyYXRlIiwicmVsZXZhbnRNZXNzYWdlcyIsIm1zZyIsImdldENvbnRyb2xJZHMiLCJpZCIsInJlbW92ZU1lc3NhZ2VzIiwib0NvbnRyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJvRXZlbnQiLCJmaWVsZCIsImdldFNvdXJjZSIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsImdldFBhcmFtZXRlciIsImhhc0Vycm9yIiwiZXJyb3IiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiY3JlYXRlZEZyYWdtZW50IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImVudGl0eVNldCIsIm1vZGVscyIsImFGdW5jdGlvblBhcmFtcyIsIkNvbW1vblV0aWxzIiwic2V0VXNlckRlZmF1bHRzIiwib0RpYWxvZ0NvbnRlbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIm1hcCIsImFjdGlvblBhcmFtZXRlciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlzTXVsdGlWYWx1ZSIsImFjdGlvblJlc3VsdCIsImRpYWxvZ0NhbmNlbGxlZCIsImJ1dHRvbkxvY2siLCJEaWFsb2ciLCJ0aXRsZSIsImNvbnRlbnQiLCJlc2NhcGVIYW5kbGVyIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0ZXh0IiwiX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiLCJwcmVzcyIsIl92YWxpZGF0ZVByb3BlcnRpZXMiLCJCdXN5TG9ja2VyIiwibG9jayIsImZhaWxlZENvbnRleHRzIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidlBhcmFtZXRlclZhbHVlIiwiYWxsTnVsbFBhcmFtZXRlcnMiLCJvUGFyYW1ldGVyQ29udGV4dCIsIm9PcGVyYXRpb25CaW5kaW5nIiwiZ2V0UGFyYW1ldGVyQ29udGV4dCIsImFNVkZDb250ZW50IiwiYUtleVZhbHVlcyIsImoiLCJLZXkiLCJzZXRQcm9wZXJ0eSIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiaW5uZXJQYXJhbWV0ZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImVuZEJ1dHRvbiIsImJlZm9yZU9wZW4iLCJvQ2xvbmVFdmVudCIsImdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInNEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0JvdW5kRnVuY3Rpb25OYW1lIiwicGFyYW1ldGVyTW9kZWxEYXRhIiwicHJlZmlsbFBhcmFtZXRlciIsInNQYXJhbU5hbWUiLCJ2UGFyYW1EZWZhdWx0VmFsdWUiLCIkUGF0aCIsInZQYXJhbVZhbHVlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwicmVxdWVzdFByb3BlcnR5Iiwic1BhdGhGb3JDb250ZXh0IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwiTG9nIiwiYkxhdGVQcm9wZXJ0eUVycm9yIiwiaGFzT3duUHJvcGVydHkiLCJnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgiLCJnZXRQYXJhbWV0ZXJQYXRoIiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwib3BlcmF0aW9ucyIsImFQcmVmaWxsUGFyYW1Qcm9taXNlcyIsImFsbCIsImFFeGVjRnVuY3Rpb25Qcm9taXNlcyIsIm9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlIiwic01vZHVsZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImFQcm9taXNlcyIsImN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsImZ1bmN0aW9uUGFyYW1zIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsInZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwic2V0UGFyYW1ldGVyIiwiYkVycm9yRm91bmQiLCJvVmFsdWUiLCJzVGV4dCIsIndhcm5pbmciLCJjb250ZW50V2lkdGgiLCJmbkFzeW5jQmVmb3JlT3BlbiIsImFQYXJhbWV0ZXJzIiwib0NvbnRleHRPYmplY3QiLCJyZXF1ZXN0T2JqZWN0IiwiZ2V0SXRlbXMiLCJnZXRWYWx1ZSIsImFmdGVyQ2xvc2UiLCJzZXRNb2RlbCIsImJpbmRFbGVtZW50IiwicGF0aCIsIm9NVkZNb2RlbCIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJhZGREZXBlbmRlbnQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdEJpbmRpbmciLCJvcGVuIiwic2xpY2UiLCJzRW50aXR5U2V0TmFtZSIsImFBY3Rpb25OYW1lIiwic0tleSIsImJSZXNvdXJjZUtleUV4aXN0cyIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMiLCJpQ29udGV4dExlbmd0aCIsImN1cnJlbnRfY29udGV4dF9pbmRleCIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCIsImJFbmFibGVTdHJpY3RIYW5kbGluZyIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwib3BlcmF0aW9uc0hlbHBlciIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsInVwZGF0ZTQxMlRyYW5zaXN0aW9uTWVzc2FnZXMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJvbmx5U3VjY2Vzc01lc3NhZ2VzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiaXNEdXBsaWNhdGUiLCJnZXRJZCIsIlN1Y2Nlc3MiLCJnZXRQZXJzaXN0ZW50IiwiY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbiIsIm9Mb2NhbEFjdGlvblByb21pc2UiLCJ1bkJvdW5kTXNncyIsImJvdW5kTXNncyIsInNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFBY3Rpb25Qcm9taXNlcyIsIm9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0IiwiZm5FeGVjdXRlQWN0aW9uIiwiYWN0aW9uQ29udGV4dCIsIm9TaWRlRWZmZWN0IiwiaW5kaXZpZHVhbEFjdGlvblByb21pc2UiLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZm5SZXF1ZXN0U2lkZUVmZmVjdHMiLCJhbGxTZXR0bGVkIiwiZm5FeGVjdXRlU2luZ2xlQWN0aW9uIiwiZm5FeGVjdXRlQ2hhbmdlc2V0IiwiYUNoYW5nZVNldExvY2FsUHJvbWlzZXMiLCJub29wIiwicmVuZGVyTWVzc2FnZVZpZXciLCJzaFByb21pc2UiLCJzZXREYXRhIiwiZm5IYW5kbGVSZXN1bHRzIiwiZm5FeGVjdXRlU2VxdWVudGlhbGx5IiwiY29udGV4dHNUb0V4ZWN1dGUiLCJwcm9jZXNzT25lQWN0aW9uIiwiYWN0aW9uSW5kZXgiLCJpbml0aWFsVGFibGVDb250ZXh0IiwiZ2V0Um93QmluZGluZyIsImdldEhlYWRlckNvbnRleHQiLCJyZWR1Y2UiLCJwcm9taXNlIiwiZmluYWxseSIsImFsbFByb21pc2UiLCJzaWRlRWZmZWN0IiwiY3VycmVudFByb21pc2VWYWx1ZXMiLCJjdXJyZW50UHJvbWlzZVZhbHVlIiwiYWN0aW9uUGFyYW1ldGVycyIsImFMb2NhbFByb21pc2UiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib0xvY2FsUHJvbWlzZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImZhY2FkZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25TaWRlRWZmZWN0c1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IERpYWxvZyRCZWZvcmVPcGVuRXZlbnQgfSBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIsIHsgdHlwZSBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsIHR5cGUgU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uLy4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgQWN0aW9uUGFyYW1ldGVySW5mbyB9IGZyb20gXCIuL19pbnRlcm5hbFwiO1xuaW1wb3J0IHsgX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIsIF92YWxpZGF0ZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9faW50ZXJuYWxcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IE1lc3NhZ2VCb3guQWN0aW9uO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25SZXNwb25zZSA9IHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQ+W107XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBjb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyB0byBiZSBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgT0RhdGEgTW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVyc10gQSBtYXAgb2YgYmluZGluZyBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgcGFydCBvZiAkc2VsZWN0IGFuZCAkZXhwYW5kIGNvbWluZyBmcm9tIHNpZGUgZWZmZWN0cyBmb3IgYm91bmQgYWN0aW9uc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdF0gQXJyYXkgb2YgcHJvcGVydHkgcGF0aHMgdG8gYmUgcmVxdWVzdGVkIGluIGFkZGl0aW9uIHRvIGFjdHVhbCB0YXJnZXQgcHJvcGVydGllcyBvZiB0aGUgc2lkZSBlZmZlY3RcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogQ2hhbmdlc2V0IHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgSXNvbGF0ZWQgdG8gcHV0IHRoZW0gaW50byBzZXBhcmF0ZSBjaGFuZ2VzZXRzLCBkZWZhdWx0cyB0byBJc29sYXRlZFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJlbnRDb250cm9sXSBJZiBzcGVjaWZpZWQsIHRoZSBkaWFsb2dzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbnQgb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaWdub3JlRVRhZ10gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IEVUYWcgaGFuZGxpbmdcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQm91bmRBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IENhbGxBY3Rpb25QYXJhbWV0ZXJzLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdGlmICghc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpIHtcblx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyA9IHtcblx0XHRcdGlzNDEyRXhlY3V0ZWQ6IGZhbHNlLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM6IFtdLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdQcm9taXNlczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogW10sXG5cdFx0XHRkZWxheVN1Y2Nlc3NNZXNzYWdlczogW10sXG5cdFx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzOiBbXVxuXHRcdH07XG5cdH1cblx0aWYgKCFjb250ZXh0cyB8fCBjb250ZXh0cy5sZW5ndGggPT09IDApIHtcblx0XHQvL0luIEZyZWVzdHlsZSBhcHBzIGJvdW5kIGFjdGlvbnMgY2FuIGhhdmUgbm8gY29udGV4dFxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGFjdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb250ZXh0XCIpO1xuXHR9XG5cdC8vIHRoaXMgbWV0aG9kIGVpdGhlciBhY2NlcHRzIHNpbmdsZSBjb250ZXh0IG9yIGFuIGFycmF5IG9mIGNvbnRleHRzXG5cdC8vIFRPRE86IFJlZmFjdG9yIHRvIGFuIHVuYW1iaWd1b3MgQVBJXG5cdGNvbnN0IGlzQ2FsbGVkV2l0aEFycmF5ID0gQXJyYXkuaXNBcnJheShjb250ZXh0cyk7XG5cblx0Ly8gaW4gY2FzZSBvZiBzaW5nbGUgY29udGV4dCB3cmFwIGludG8gYW4gYXJyYXkgZm9yIGNhbGxlZCBtZXRob2RzIChlc3AuIGNhbGxBY3Rpb24pXG5cdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGlzQ2FsbGVkV2l0aEFycmF5ID8gY29udGV4dHMgOiBbY29udGV4dHNdO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0Ly8gQW5hbHl6aW5nIG1ldGFNb2RlbFBhdGggZm9yIGFjdGlvbiBvbmx5IGZyb20gZmlyc3QgY29udGV4dCBzZWVtcyB3ZWlyZCwgYnV0IHByb2JhYmx5IHdvcmtzIGluIGFsbCBleGlzdGluZyBzemVuYXJpb3MgLSBpZiBzZXZlcmFsIGNvbnRleHRzIGFyZSBwYXNzZWQsIHRoZXkgcHJvYmFibHlcblx0XHQvLyBiZWxvbmcgdG8gdGhlIHNhbWUgbWV0YW1vZGVscGF0aC4gVE9ETzogQ2hlY2ssIHdoZXRoZXIgdGhpcyBjYW4gYmUgaW1wcm92ZWQgLyBzemVuYXJpb3Mgd2l0aCBkaWZmZXJlbnQgbWV0YU1vZGVsUGF0aHMgbWlnaHQgZXhpc3Rcblx0XHRzQWN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgobVBhcmFtZXRlcnMuYUNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7c0FjdGlvbk5hbWV9YCxcblx0XHRvQm91bmRBY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZC8wYCkhO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gYXdhaXQgQWN0aW9uUnVudGltZS5nZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIHNBY3Rpb25QYXRoLCBtUGFyYW1ldGVycy5hQ29udGV4dHMpO1xuXG5cdC8vIFByb21pc2UgcmV0dXJuZWQgYnkgY2FsbEFjdGlvbiBjdXJyZW50bHkgaXMgcmVqZWN0ZWQgaW4gY2FzZSBvZiBleGVjdXRpb24gZm9yIG11bHRpcGxlIGNvbnRleHRzIHBhcnRseSBmYWlsaW5nLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIChzb21lIGZhaWxpbmcgY29udGV4dHMgZG8gbm90IG1lYW5cblx0Ly8gdGhhdCBmdW5jdGlvbiBkaWQgbm90IGZ1bGZpbGwgaXRzIHRhc2spLCBidXQgYXMgdGhpcyBpcyBhIGJpZ2dlciByZWZhY3RvcmluZywgZm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXQgYXQgdGhlIGNhbGxpbmcgcGxhY2UgKGkuZS4gaGVyZSlcblx0Ly8gPT4gcHJvdmlkZSB0aGUgc2FtZSBoYW5kbGVyIChtYXBwaW5nIGJhY2sgZnJvbSBhcnJheSB0byBzaW5nbGUgcmVzdWx0L2Vycm9yIGlmIG5lZWRlZCkgZm9yIHJlc29sdmVkL3JlamVjdGVkIGNhc2Vcblx0Y29uc3QgZXh0cmFjdFNpbmdsZVJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKTogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdC8vIHNpbmdsZSBhY3Rpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWRcblx0XHRpZiAocmVzdWx0WzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFswXS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkaWFsb2cgY2FuY2VsbGF0aW9uLCBubyBhcnJheSBpcyByZXR1cm5lZCA9PiB0aHJvdyB0aGUgcmVzdWx0LlxuXHRcdFx0Ly8gSWRlYWxseSwgZGlmZmVyZW50aWF0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUgPT4gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gd2hlbiBzZXBhcmF0aW5nIGRpYWxvZyBoYW5kbGluZyAoc2luZ2xlIG9iamVjdCB3aXRoIHNpbmdsZSByZXN1bHQpIGZyb20gYmFja2VuZFxuXHRcdFx0Ly8gZXhlY3V0aW9uIChwb3RlbnRpYWxseSBtdWx0aXBsZSBvYmplY3RzKVxuXHRcdFx0dGhyb3cgcmVzdWx0WzBdLnJlYXNvbiB8fCByZXN1bHQ7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEFjdGlvbiwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKS50aGVuKFxuXHRcdChyZXN1bHQpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0IGFzIFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0PltdKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdChyZXN1bHQpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHR0aHJvdyByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQgYXMgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQ+W10pO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cbi8qKlxuICogQ2FsbHMgYW4gYWN0aW9uIGltcG9ydC5cbiAqXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGltcG9ydCB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBtb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFtwYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuaWdub3JlRVRhZ10gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IEVUYWcgaGFuZGxpbmdcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQWN0aW9uSW1wb3J0KFxuXHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG1vZGVsOiBPRGF0YU1vZGVsLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFyYW1ldGVyczoge1xuXHRcdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W107XG5cdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0XHRvblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdFx0b25SZXNwb25zZTogRnVuY3Rpb247XG5cdFx0cGFyZW50Q29udHJvbDogVmlldztcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyO1xuXHRcdGJPYmplY3RQYWdlPzogYm9vbGVhbjtcblx0XHRzZWxlY3RlZEl0ZW1zPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0fSAmIHtcblx0XHRpc0NyaXRpY2FsQWN0aW9uPzogYm9vbGVhbjtcblx0fSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRpZiAoIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQWN0aW9uIGV4cGVjdHMgYSBtb2RlbC9jb250ZXh0IGZvciBleGVjdXRpb25cIik7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0YWN0aW9uUGF0aCA9IG1vZGVsLmJpbmRDb250ZXh0KGAvJHthY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRhY3Rpb25OYW1lRnJvbU1vZGVsID0gbWV0YU1vZGVsLmdldE9iamVjdChhY3Rpb25QYXRoKS4kQWN0aW9uLFxuXHRcdHVuYm91bmRBY3Rpb25JbmRleCA9IChtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHthY3Rpb25OYW1lRnJvbU1vZGVsfWApIGFzIE1ldGFNb2RlbEFjdGlvbltdKS5maW5kSW5kZXgoKGFjdGlvbikgPT4gIWFjdGlvbi4kSXNCb3VuZCksXG5cdFx0YWN0aW9uSW1wb3J0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHthY3Rpb25OYW1lRnJvbU1vZGVsfS8ke3VuYm91bmRBY3Rpb25JbmRleH1gKTtcblx0cGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gYXdhaXQgQWN0aW9uUnVudGltZS5nZXRJc0FjdGlvbkNyaXRpY2FsKG1ldGFNb2RlbCwgYCR7YWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oYWN0aW9uTmFtZSwgbW9kZWwsIGFjdGlvbkltcG9ydCwgYXBwQ29tcG9uZW50LCBwYXJhbWV0ZXJzLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBjYWxsQm91bmRGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQsIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgZnVuY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhIGNvbnRleHRcIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSl9LyR7c0Z1bmN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEZ1bmN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRGdW5jdGlvbiwgY29udGV4dCk7XG59XG50eXBlIFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzID0ge1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0Zm5PblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdGZuT25SZXNwb25zZTogRnVuY3Rpb247XG5cdGFjdGlvbk5hbWU6IHN0cmluZztcblx0bW9kZWw6IE9EYXRhTW9kZWw7XG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXTtcblx0YkdldEJvdW5kQ29udGV4dD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHNlbGVjdGVkSXRlbXM6IE9EYXRhVjRDb250ZXh0W107XG5cdGFDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdG1CaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0YWRkaXRpb25hbFNpZGVFZmZlY3Q/OiBBY3Rpb25TaWRlRWZmZWN0c1R5cGU7XG5cdGJHcm91cGVkPzogYm9vbGVhbjtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0aXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRiT2JqZWN0UGFnZT86IGJvb2xlYW47XG5cdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdGJJc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdGdyb3VwSWQ/OiBzdHJpbmc7XG5cdGlzU3RhdGljPzogYm9vbGVhbjtcblx0Y29udHJvbD86IENvbnRyb2w7XG5cdG9EaWFsb2c/OiBEaWFsb2c7XG5cdHJlcXVlc3RTaWRlRWZmZWN0cz86IEZ1bmN0aW9uO1xuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZT86IEZ1bmN0aW9uO1xufTtcbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbXBvcnQuXG4gKlxuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPHZvaWQgfCBPRGF0YVY0Q29udGV4dD4ge1xuXHRpZiAoIXNGdW5jdGlvbk5hbWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpIS5nZXRPYmplY3QoXCIkRnVuY3Rpb25cIil9LzBgKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvRnVuY3Rpb25JbXBvcnQpO1xufVxuYXN5bmMgZnVuY3Rpb24gX2V4ZWN1dGVGdW5jdGlvbihcblx0c0Z1bmN0aW9uTmFtZTogc3RyaW5nLFxuXHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdG9GdW5jdGlvbjogQ29udGV4dCB8IG51bGwsXG5cdGNvbnRleHQ/OiBDb250ZXh0XG4pOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdGxldCBzR3JvdXBJZDtcblx0aWYgKCFvRnVuY3Rpb24gfHwgIW9GdW5jdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEZ1bmN0aW9uICR7c0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHR9XG5cdGxldCBmdW5jdGlvblRvQ2FsbDogT0RhdGFDb250ZXh0QmluZGluZztcblx0aWYgKGNvbnRleHQpIHtcblx0XHRmdW5jdGlvblRvQ2FsbCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uR3JvdXBcIjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvblRvQ2FsbCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkltcG9ydFwiO1xuXHR9XG5cdGNvbnN0IG9GdW5jdGlvblByb21pc2UgPSBmdW5jdGlvblRvQ2FsbC5leGVjdXRlKHNHcm91cElkKTtcblx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0cmV0dXJuIG9GdW5jdGlvblByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uVG9DYWxsLmdldEJvdW5kQ29udGV4dCgpO1xuXHR9KTtcbn1cbnR5cGUgQ2FsbEFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W107XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0b25TdWJtaXR0ZWQ6IEZ1bmN0aW9uO1xuXHRvblJlc3BvbnNlOiBGdW5jdGlvbjtcblx0cGFyZW50Q29udHJvbDogVmlldztcblx0Y29udHJvbD86IENvbnRyb2w7XG5cdGJJc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjtcblx0Yk9iamVjdFBhZ2U/OiBib29sZWFuO1xuXHRpc0NyaXRpY2FsQWN0aW9uPzogYm9vbGVhbjtcblx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcbn0gJiB7XG5cdGJHZXRCb3VuZENvbnRleHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG59ICYge1xuXHRiR3JvdXBlZD86IGJvb2xlYW47XG5cdGFDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdHNlbGVjdGVkSXRlbXM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0bUJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRncm91cElkPzogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGNhbGxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0b0FjdGlvbjogQ29udGV4dCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnMsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRtUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0cmV0dXJuIG5ldyBQcm9taXNlPEFjdGlvblJlc3BvbnNlPihhc3luYyBmdW5jdGlvbiAoXG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBBY3Rpb25SZXNwb25zZSkgPT4gdm9pZCxcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvciB8IEFjdGlvblJlc3BvbnNlKSA9PiB2b2lkXG5cdCkge1xuXHRcdGxldCBmbkRpYWxvZzpcblx0XHRcdHwgKChcblx0XHRcdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRzQWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRcdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0b0FjdGlvbjogQ29udGV4dCxcblx0XHRcdFx0XHRwYXJlbnRDb250cm9sOiBWaWV3LFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGlnbm9yZUVUYWc/OiBib29sZWFuXG5cdFx0XHQgICkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdPilcblx0XHRcdHwgbnVsbDtcblx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0Ly9sZXQgZmFpbGVkQWN0aW9uUHJvbWlzZTogYW55O1xuXHRcdGNvbnN0IHNBY3Rpb25MYWJlbCA9IG1QYXJhbWV0ZXJzLmxhYmVsO1xuXHRcdGNvbnN0IGJTa2lwUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBzdHJpbmc7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRsZXQgYklzU2FtZUVudGl0eTtcblx0XHRsZXQgb1JldHVyblR5cGU7XG5cdFx0bGV0IGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYWN0aW9uRGVmaW5pdGlvbiA9IG9BY3Rpb24uZ2V0T2JqZWN0KCkgYXMgTWV0YU1vZGVsQWN0aW9uO1xuXHRcdGlmICghb0FjdGlvbiB8fCAhb0FjdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEFjdGlvbiAke3NBY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBhY3Rpb25cblx0XHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGhhcyBwYXJhbWV0ZXJzIGFuZCB3b3VsZCBuZWVkIGEgcGFyYW1ldGVyIGRpYWxvZ1xuXHRcdC8vIFRoZSBwYXJhbWV0ZXIgUmVzdWx0SXNBY3RpdmVFbnRpdHkgaXMgYWx3YXlzIGhpZGRlbiBpbiB0aGUgZGlhbG9nISBIZW5jZSBpZlxuXHRcdC8vIHRoaXMgaXMgdGhlIG9ubHkgcGFyYW1ldGVyLCB0aGlzIGlzIHRyZWF0ZWQgYXMgbm8gcGFyYW1ldGVyIGhlcmUgYmVjYXVzZSB0aGVcblx0XHQvLyBkaWFsb2cgd291bGQgYmUgZW1wdHkhXG5cdFx0Ly8gRklYTUU6IFNob3VsZCBvbmx5IGlnbm9yZSB0aGlzIGlmIHRoaXMgaXMgYSAnY3JlYXRlJyBhY3Rpb24sIG90aGVyd2lzZSBpdCBpcyBqdXN0IHNvbWUgbm9ybWFsIHBhcmFtZXRlciB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGlzIG5hbWVcblx0XHRjb25zdCBiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgPVxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhKGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSAmJiBhQWN0aW9uUGFyYW1ldGVyc1swXS4kTmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKTtcblxuXHRcdC8vIFByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGZyb20gaW52b2tlQWN0aW9uIGNhbGxcblx0XHRjb25zdCBhUGFyYW1ldGVyVmFsdWVzID0gbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHN0YXJ0dXAgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblxuXHRcdC8vIEluIGNhc2UgYW4gYWN0aW9uIHBhcmFtZXRlciBpcyBuZWVkZWQsIGFuZCB3ZSBzaGFsbCBza2lwIHRoZSBkaWFsb2csIGNoZWNrIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyAmJiBiU2tpcFBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0YlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyA9IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMoXG5cdFx0XHRcdCEhYklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIERlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVkIGRhdGEsIGVpdGhlciBzZXQgYSBkaWFsb2cgb3IgbGVhdmUgaXQgZW1wdHkgd2hpY2hcblx0XHQvLyB3aWxsIGxlYWQgdG8gZGlyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYSBkaWFsb2dcblx0XHRmbkRpYWxvZyA9IG51bGw7XG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0aWYgKCEoYlNraXBQYXJhbWV0ZXJEaWFsb2cgJiYgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycykpIHtcblx0XHRcdFx0Zm5EaWFsb2cgPSBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdGZuRGlhbG9nID0gY29uZmlybUNyaXRpY2FsQWN0aW9uO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyA9IHtcblx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdGZuT25TdWJtaXR0ZWQ6IG1QYXJhbWV0ZXJzLm9uU3VibWl0dGVkLFxuXHRcdFx0Zm5PblJlc3BvbnNlOiBtUGFyYW1ldGVycy5vblJlc3BvbnNlLFxuXHRcdFx0YWN0aW9uTmFtZTogc0FjdGlvbk5hbWUsXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0c2VsZWN0ZWRJdGVtczogbVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyFcblx0XHR9O1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q/LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGFDb250ZXh0cyFbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBhQ29udGV4dHMhWzBdLmdldFBhdGgoKSkhO1xuXG5cdFx0XHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRcdFx0aU1lc3NhZ2VTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmZpbmRJbmRleChmdW5jdGlvbiAoZXhwKSB7XG5cdFx0XHRcdFx0XHQvLyAnKicgZWZmZWN0aXZlbHkgaW5jbHVkZXMgdGhlIG1lc3NhZ2VzIHBhdGggaWYgdGhlcmUgaXMgb25lXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIGV4cCA9PT0gXCJzdHJpbmdcIiAmJiAoZXhwID09PSBzTWVzc2FnZXNQYXRoIHx8IGV4cCA9PT0gXCIqXCIpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIFNBUF9NZXNzYWdlcyBieSBkZWZhdWx0IGlmIG5vdCBhbm5vdGF0ZWQgYnkgc2lkZSBlZmZlY3RzLCBhY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgY29sbGVjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyB0aGUgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIHR5cGVcblx0XHRcdFx0XHRvUmV0dXJuVHlwZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFJldHVyblR5cGVcIik7XG5cdFx0XHRcdFx0YklzU2FtZUVudGl0eSA9XG5cdFx0XHRcdFx0XHRvUmV0dXJuVHlwZSAmJiAhb1JldHVyblR5cGUuJGlzQ29sbGVjdGlvbiAmJiBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCkuJFR5cGUgPT09IG9SZXR1cm5UeXBlLiRUeXBlO1xuXG5cdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xIHx8IGJJc1NhbWVFbnRpdHkpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSBtZXNzYWdlIHBhdGggaXMgYW5ub3RhdGVkIGFzIHNpZGUgZWZmZWN0LiBBcyB0aGVyZSdzIG5vIGJpbmRpbmcgZm9yIGl0IGFuZCB0aGUgbW9kZWwgZG9lcyBjdXJyZW50bHkgbm90IGFsbG93XG5cdFx0XHRcdFx0XHQvLyB0byBhZGQgaXQgYXQgYSBsYXRlciBwb2ludCBvZiB0aW1lIHdlIGhhdmUgdG8gdGFrZSBjYXJlIGl0J3MgcGFydCBvZiB0aGUgJHNlbGVjdCBvZiB0aGUgUE9TVCwgdGhlcmVmb3JlIG1vdmluZyBpdC5cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyB8fCB7fTtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldE9iamVjdChgJFJldHVyblR5cGUvJFR5cGUvJHtzTWVzc2FnZXNQYXRofWApICYmXG5cdFx0XHRcdFx0XHRcdCghbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHxcblx0XHRcdFx0XHRcdFx0XHQhbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Quc3BsaXQoXCIsXCIpLmluY2x1ZGVzKHNNZXNzYWdlc1BhdGgpKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHQ/IGAke21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NNZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0XHRcdDogc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHNpZGUgZWZmZWN0cyBhdCBlbnRpdHkgbGV2ZWwgYmVjYXVzZSAkc2VsZWN0IHN0b3BzIHRoZXNlIGJlaW5nIHJldHVybmVkIGJ5IHRoZSBhY3Rpb25cblx0XHRcdFx0XHRcdFx0Ly8gT25seSBpZiBubyBvdGhlciBzaWRlIGVmZmVjdHMgd2VyZSBhZGRlZCBmb3IgTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMucHVzaChcIipcIik7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiBpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIHRyaWdnZXIgYWN0aW9uIHRoZXJlZm9yZSBubyBuZWVkIHRvIHJlcXVlc3QgbWVzc2FnZXMgYWdhaW5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuc3BsaWNlKGlNZXNzYWdlU2lkZUVmZmVjdCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUNvbnRleHRzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZTtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyA9IG1QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmdyb3VwSWQgPSBtUGFyYW1ldGVycy5ncm91cElkO1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbC5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkgYXMgQ29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0aWYgKGJJc0NyZWF0ZUFjdGlvbikge1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdH1cblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gKGFjdGlvbkRlZmluaXRpb24uJFBhcmFtZXRlciB8fCBbXSkuc29tZShcblx0XHRcdChhUGFyYW1ldGVyOiB7XG5cdFx0XHRcdCRUeXBlOiBzdHJpbmc7XG5cdFx0XHRcdCROYW1lOiBzdHJpbmc7XG5cdFx0XHRcdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdFx0XHRcdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdFx0XHRcdCRTY2FsZT86IG51bWJlcjtcblx0XHRcdFx0JGlzQ29sbGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHR9KSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0KChhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoICYmIGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggPT09IGFQYXJhbWV0ZXIuJE5hbWUpIHx8XG5cdFx0XHRcdFx0XHRhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kKSAmJlxuXHRcdFx0XHRcdGFQYXJhbWV0ZXIuJGlzQ29sbGVjdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWMgPSBpc1N0YXRpYztcblx0XHRpZiAoZm5EaWFsb2cpIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZm5EaWFsb2coXG5cdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvT3BlcmF0aW9uUmVzdWx0OiB1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKTogdm9pZCB7XG5cdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogdW5rbm93bikge1xuXHRcdFx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0IGFzIEVycm9yIHwgQWN0aW9uUmVzcG9uc2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXHRcdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBvU3RhcnR1cFBhcmFtZXRlcnNbXG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdF0/LlswXSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgb09wZXJhdGlvblJlc3VsdDogdW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9PcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuaWdub3JlRVRhZ1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQgYXMgRXJyb3IgfCBBY3Rpb25SZXNwb25zZSk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoICYmXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzIS5sZW5ndGggPiAxXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0ZhaWxzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM7XG5cdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiB7IG9BY3Rpb246IE9EYXRhQ29udGV4dEJpbmRpbmc7IGdyb3VwSWQ6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmFpbGVkT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyA9IFtdO1xuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoXG5cdFx0XHRcdFx0XHRcdG9GYWlsZWRPcGVyYXRpb25SZXN1bHQgYXNcblx0XHRcdFx0XHRcdFx0XHR8IEVycm9yXG5cdFx0XHRcdFx0XHRcdFx0fCBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdFx0fCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFyYW1ldGVycz8ubWVzc2FnZUhhbmRsZXI/LnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRjb250cm9sOiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycz8uY29udHJvbCxcblx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzISxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uZmlybUNyaXRpY2FsQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHNBY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSxcblx0YVBhcmFtZXRlclZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB8IHVuZGVmaW5lZCxcblx0b0FjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdG9QYXJlbnRDb250cm9sOiBWaWV3LFxuXHRlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0aWdub3JlRVRhZz86IGJvb2xlYW5cbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLmluY2x1ZGVzKFwiLlwiKVxuXHRcdFx0PyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV1cblx0XHRcdDogYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdFx0Y29uc3Qgc0NvbmZpcm1hdGlvblRleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX0NPTkZJUk1fTUVTU0FHRVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblxuXHRcdE1lc3NhZ2VCb3guY29uZmlybShzQ29uZmlybWF0aW9uVGV4dCwge1xuXHRcdFx0b25DbG9zZTogYXN5bmMgZnVuY3Rpb24gKHNBY3Rpb246IHN0cmluZykge1xuXHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gQWN0aW9uLk9LKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9PcGVyYXRpb24gPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdGlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQVBNQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0b1BhcmVudENvbnRyb2w6IFZpZXcsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRvRGlhbG9nOiBEaWFsb2csXG5cdGFmdGVyNDEyOiBib29sZWFuLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRpZ25vcmVFVGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdPiB7XG5cdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgb1BhcmVudENvbnRyb2wsIG1lc3NhZ2VIYW5kbGVyLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgaWdub3JlRVRhZyk7XG5cdC8vIElmIHNvbWUgZW50cmllcyB3ZXJlIHN1Y2Nlc3NmdWwsIGFuZCBvdGhlcnMgaGF2ZSBmYWlsZWQsIHRoZSBvdmVyYWxsIHByb2Nlc3MgaXMgc3RpbGwgc3VjY2Vzc2Z1bC4gSG93ZXZlciwgdGhpcyB3YXMgdHJlYXRlZCBhcyByZWplY3Rpb25cblx0Ly8gYmVmb3JlLCBhbmQgdGhpcyBjdXJyZW50bHkgaXMgc3RpbGwga2VwdCwgYXMgbG9uZyBhcyBkaWFsb2cgaGFuZGxpbmcgaXMgbWl4ZWQgd2l0aCBiYWNrZW5kIHByb2Nlc3MgaGFuZGxpbmcuXG5cdC8vIFRPRE86IFJlZmFjdG9yIHRvIG9ubHkgcmVqZWN0IGluIGNhc2Ugb2Ygb3ZlcmFsbCBwcm9jZXNzIGVycm9yLlxuXHQvLyBGb3IgdGhlIHRpbWUgYmVpbmc6IG1hcCB0byBvbGQgbG9naWMgdG8gcmVqZWN0IGlmIGF0IGxlYXN0IG9uZSBlbnRyeSBoYXMgZmFpbGVkXG5cdC8vIFRoaXMgY2hlY2sgaXMgb25seSBkb25lIGZvciBib3VuZCBhY3Rpb25zID0+IGFDb250ZXh0cyBub3QgZW1wdHlcblx0aWYgKG1QYXJhbWV0ZXJzLmFDb250ZXh0cyAmJiBtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChcblx0XHRcdChhUmVzdWx0IGFzIFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKT8uc29tZShcblx0XHRcdFx0KG9TaW5nbGVSZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPikgPT4gb1NpbmdsZVJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIlxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgYVJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aCkge1xuXHRcdGlmICghYWZ0ZXI0MTIpIHtcblx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0XHRcdG9EaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2wsXG5cdFx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IG1QYXJhbWV0ZXJzLmxhYmVsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHQvLyBCT1VORCBUUkFOU0lUSU9OIEFTIFBBUlQgT0YgU0FQX01FU1NBR0Vcblx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKSlcblx0XHQpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHR9XG5cdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuOiBtUGFyYW1ldGVycz8ub0RpYWxvZz8uaXNPcGVuKCksXG5cdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IFNob3dNZXNzYWdlUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2wsXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdHNBY3Rpb25OYW1lOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYVJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnMsXG5cdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0YWN0aW9uRGVmaW5pdGlvbjogTWV0YU1vZGVsQWN0aW9uXG4pOiB2b2lkIHtcblx0aWYgKFxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCAmJlxuXHRcdGFjdGlvbkRlZmluaXRpb24uJElzQm91bmRcblx0KSB7XG5cdFx0bGV0IHNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWM7XG5cdFx0aWYgKCFpc1N0YXRpYykge1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSB8fCBbXTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHRpZiAoY29udHJvbC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gY29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvL3VwZGF0ZSBkZWxldGUgYnV0dG9uXG5cdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGFDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0b0RpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkLFxuXHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldDogYm9vbGVhblxuKTogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzIHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXSA9PT0gXCJcIjtcblx0fSk7XG5cdGNvbnN0IEFQRG1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cyAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmNsdWRlcyhtUGFyYW1ldGVycy5hY3Rpb25OYW1lKSAmJlxuXHRcdFx0bVBhcmFtZXRlcnM/LmFBY3Rpb25QYXJhbWV0ZXJzPy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmNsdWRlcyhhY3Rpb25QYXJhbS4kTmFtZSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xuXHRBUERtZXNzYWdlcz8uZm9yRWFjaChmdW5jdGlvbiAoQVBETWVzc2FnZSkge1xuXHRcdChBUERNZXNzYWdlIGFzIHVua25vd24gYXMgeyBpc0FQRFRhcmdldDogYm9vbGVhbiB9KS5pc0FQRFRhcmdldCA9IHRydWU7XG5cdH0pO1xuXG5cdGNvbnN0IGVycm9yVGFyZ2V0c0luQVBEID0gQVBEbWVzc2FnZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuXHRsZXQgaGFzQ2hhbmdlU2V0TW9kaWZpZWRNZXNzYWdlID0gZmFsc2U7XG5cdGlmIChzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCAmJiAhZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UgPSB0cnVlO1xuXHRcdGxldCBzTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9FUlJPUl9NRVNTQUdFU19URVhUXCIpO1xuXHRcdGxldCBzRGVzY3JpcHRpb25UZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX0VSUk9SX01FU1NBR0VTX0RFVEFJTF9URVhUXCIpO1xuXHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGFCb3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUpO1xuXHRcdGxldCBnZW5lcmljTWVzc2FnZTtcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdGNvbnN0IG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nID0gbWVzc2FnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCA9IG1lc3NhZ2VzSW5Nb2RlbC5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblxuXHRcdGlmIChcblx0XHRcdG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nICE9PSAxICYmXG5cdFx0XHRub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdCkge1xuXHRcdFx0aWYgKG1lc3NhZ2VzSW5Nb2RlbC5sZW5ndGggPT09IDEgJiYgYUJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGlmIChpc0VkaXRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VzSW5Nb2RlbFswXS5zZXRNZXNzYWdlKFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRcIikgK1xuXHRcdFx0XHRcdFx0XHRcIlxcblxcblwiICtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZXNJbk1vZGVsWzBdLmdldE1lc3NhZ2UoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c01lc3NhZ2UgPSBpc0VkaXRhYmxlXG5cdFx0XHRcdFx0XHQ/IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUX0VESVRcIilcblx0XHRcdFx0XHRcdDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRcIik7XG5cdFx0XHRcdFx0c0Rlc2NyaXB0aW9uVGV4dCA9IFwiXCI7XG5cdFx0XHRcdFx0Z2VuZXJpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBzTWVzc2FnZSxcblx0XHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzRGVzY3JpcHRpb25UZXh0LFxuXHRcdFx0XHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0bWVzc2FnZXMudW5zaGlmdChnZW5lcmljTWVzc2FnZSk7XG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IHNNZXNzYWdlLFxuXHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzRGVzY3JpcHRpb25UZXh0LFxuXHRcdFx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWVzc2FnZXMudW5zaGlmdChnZW5lcmljTWVzc2FnZSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvRGlhbG9nICYmIG9EaWFsb2cuaXNPcGVuKCkgJiYgYUNvbnRleHRzLmxlbmd0aCAhPT0gMCAmJiAhbVBhcmFtZXRlcnMuaXNTdGF0aWMpIHtcblx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHQvL2lzb2xhdGVkXG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEgfHwgIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdC8vIGRvZXMgbm90IG1hdHRlciBpZiBlcnJvciBpcyBpbiBBUEQgb3Igbm90LCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udGV4dHMgc2VsZWN0ZWQgb3IgaWYgdGhlIGVycm9yIGlzIG5vdCB0aGUgQVBELCB3ZSBjbG9zZSBpdC5cblx0XHRcdFx0Ly8gVE9ETzogRGlsYW9nIGhhbmRsaW5nIHNob3VsZCBub3QgYmUgcGFydCBvZiBtZXNzYWdlIGhhbmRsaW5nLiBSZWZhY3RvciBhY2NvcmRpbmdseSAtIGRpYWxvZyBzaG91bGQgbm90IGJlIG5lZWRlZCBpbnNpZGUgdGhpcyBtZXRob2QgLSBuZWl0aGVyXG5cdFx0XHRcdC8vIHRvIGFzayB3aGV0aGVyIGl0J3Mgb3Blbiwgbm9yIHRvIGNsb3NlL2Rlc3Ryb3kgaXQhXG5cdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdC8vY2hhbmdlc2V0XG5cdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblx0bGV0IGZpbHRlcmVkTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAoIWhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSkge1xuXHRcdGlmIChcblx0XHRcdG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cyAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cygpPy5bMF0gIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cygpPy5bMF0gIT09IFwiXCIgJiZcblx0XHRcdG1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiXG5cdFx0KSB7XG5cdFx0XHRpZiAoKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikhLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB8fCAhb0NvbnRyb2wpIHtcblx0XHRcdFx0Ly8gT1AgZWRpdCBvciBMUlxuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9ICFlcnJvclRhcmdldHNJbkFQRDtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpIS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRpZiAoYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoIWJJc0FQRE9wZW4gJiYgZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0ZmlsdGVyZWRNZXNzYWdlcyA9IHVuYm91bmRNZXNzYWdlcy5jb25jYXQoQVBEbWVzc2FnZXMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFiSXNBUERPcGVuICYmIHVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHQvLyBlcnJvciB0YXJnZXRzIGluIEFQRCA9PiB0aGVyZSBpcyBhdGxlYXN0IG9uZSBib3VuZCBtZXNzYWdlLiBJZiB0aGVyZSBhcmUgdW5ib3VuZCBtZXNzYWdlcywgZGlhbG9nIG11c3QgYmUgc2hvd24uXG5cdFx0XHRcdFx0Ly8gZm9yIGRyYWZ0IGVudGl0eSwgd2UgYWxyZWFkeSBjbG9zZWQgdGhlIEFQRFxuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsZXQgZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCBvQ29udHJvbCwgYUNvbnRleHRzKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNob3dNZXNzYWdlQm94OiBzaG93TWVzc2FnZUJveCxcblx0XHRzaG93TWVzc2FnZURpYWxvZzogc2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0ZmlsdGVyZWRNZXNzYWdlczogZmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPyBmaWx0ZXJlZE1lc3NhZ2VzIDogbWVzc2FnZXMsXG5cdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6IGZuR2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZzogbVBhcmFtZXRlcnMuYkdyb3VwZWRcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuYXN5bmMgZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRhQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10sXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdG9BY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRvUGFyZW50Q29udHJvbDogVmlldyxcblx0ZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+IHtcblx0Y29uc3Qgc1BhdGggPSBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dCwgc0FjdGlvbk5hbWUpLFxuXHRcdG1ldGFNb2RlbCA9IChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKS5vTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0ZW50aXR5U2V0Q29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCksXG5cdFx0c0FjdGlvbk5hbWVQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIilcblx0XHRcdD8gb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0AkdWk1Lm92ZXJsb2FkLzBcIilbMF1cblx0XHRcdDogb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiLzBcIilbMF0sXG5cdFx0YWN0aW9uTmFtZUNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0FjdGlvbk5hbWVQYXRoKSxcblx0XHRiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbixcblx0XHRzRnJhZ21lbnROYW1lID0gXCJzYXAvZmUvY29yZS9jb250cm9scy9BY3Rpb25QYXJhbWV0ZXJEaWFsb2dcIjtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+KGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgYWN0aW9uUGFyYW1ldGVySW5mb3M6IEFjdGlvblBhcmFtZXRlckluZm9bXTsgLy8gdG8gYmUgZmlsbGVkIGFmdGVyIGZyYWdtZW50IChmb3IgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cpIGlzIGxvYWRlZC4gQWN0dWFsbHkgb25seSBuZWVkZWQgZHVyaW5nIGRpYWxvZyBwcm9jZXNzaW5nLCBpLmUuIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNvbnRyb2xsZXIgYW5kIGRpcmVjdGx5IGluaXRpYWxpemVkIHRoZXJlLCBidXQgb25seSBhZnRlciBtb3ZpbmcgYWxsIGhhbmRsZXJzIChlc3AuIHByZXNzIGhhbmRsZXIgZm9yIGFjdGlvbiBidXR0b24pIHRvIGNvbnRyb2xsZXIuXG5cblx0XHRjb25zdCBfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlciA9IChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYWxsTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIuJE5hbWVdKTtcblx0XHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHRcdCk7XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9Db250cm9sbGVyID0ge1xuXHRcdFx0aGFuZGxlQ2hhbmdlOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBFdmVudDx7IHByb21pc2U6IFByb21pc2U8c3RyaW5nPiB9Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkXG5cdFx0XHRcdCkgYXMgQWN0aW9uUGFyYW1ldGVySW5mbztcblx0XHRcdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0Ly8gYWRhcHQgaW5mby4gUHJvbWlzZSBpcyByZXNvbHZlZCB0byB2YWx1ZSBvciByZWplY3RlZCB3aXRoIGV4Y2VwdGlvbiBjb250YWluaW5nIG1lc3NhZ2Vcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRkZWxldGUgYWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dD8uZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dD8uZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogZW50aXR5U2V0Q29udGV4dD8uZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRjb25zdCBhQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBtUGFyYW1ldGVycy5hQ29udGV4dHMgfHwgW107XG5cdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblxuXHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKG9BcHBDb21wb25lbnQsIGFBY3Rpb25QYXJhbWV0ZXJzLCBvUGFyYW1ldGVyTW9kZWwsIHRydWUpO1xuXHRcdFx0Y29uc3Qgb0RpYWxvZ0NvbnRlbnQgPSAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IGNyZWF0ZWRGcmFnbWVudCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXJcblx0XHRcdH0pKSBhcyBDb250cm9sO1xuXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcyA9IGFBY3Rpb25QYXJhbWV0ZXJzLm1hcCgoYWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChnZW5lcmF0ZShbXCJBUERfXCIsIGFjdGlvblBhcmFtZXRlci4kTmFtZV0pKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gZmllbGQuaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIik7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyOiBhY3Rpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0ZmllbGQ6IGZpZWxkLFxuXHRcdFx0XHRcdGlzTXVsdGlWYWx1ZTogaXNNdWx0aVZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRcdFx0bGV0IGFjdGlvblJlc3VsdDoge1xuXHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdHJlc3VsdDogdW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXTtcblx0XHRcdH0gPSB7XG5cdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogdHJ1ZSwgLy8gdG8gYmUgc2V0IHRvIGZhbHNlIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhY3Rpb24gZXhlY3Rpb25cblx0XHRcdFx0cmVzdWx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cblx0XHRcdGxldCBidXR0b25Mb2NrID0gZmFsc2U7XG5cblx0XHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZV0pLCB7XG5cdFx0XHRcdHRpdGxlOiBzQWN0aW9uTGFiZWwgfHwgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCIpLFxuXHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0Ly8gZXNjYXBlIGhhbmRsZXIgaXMgbWVhbnQgdG8gcG9zc2libHkgc3VwcHJlc3Mgb3IgcG9zdHBvbmUgY2xvc2luZyB0aGUgZGlhbG9nIG9uIGVzY2FwZSAoYnkgY2FsbGluZyBcInJlamVjdFwiIG9uIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIFwicmVzb2x2ZVwiIG9ubHkgd2hlblxuXHRcdFx0XHRcdC8vIGRvbmUgd2l0aCBhbGwgdGFza3MgdG8gaGFwcGVuIGJlZm9yZSBkaWFsb2cgY2FuIGJlIGNsb3NlZCkuIEl0J3Mgbm90IGludGVuZGVkIHRvIGV4cGxpY2V0bHkgY2xvc2UgdGhlIGRpYWxvZyBoZXJlICh0aGF0IGhhcHBlbnMgYXV0b21hdGljYWxseSB3aGVuIG5vXG5cdFx0XHRcdFx0Ly8gZXNjYXBlSGFuZGxlciBpcyBwcm92aWRlZCBvciB0aGUgcmVzb2x2ZS1jYWxsYmFjayBpcyBjYWxsZWQpIG9yIGZvciBvd24gd3JhcCB1cCB0YXNrcyAobGlrZSByZW1vdmluZyB2YWxpZGl0aW9uIG1lc3NhZ2VzIC0gdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZVxuXHRcdFx0XHRcdC8vIGFmdGVyQ2xvc2UpLlxuXHRcdFx0XHRcdC8vIFRPRE86IE1vdmUgd3JhcCB1cCB0YXNrcyB0byBhZnRlckNsb3NlLCBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGNvbXBsZXRlbHkuIFRha2UgY2FyZSB0byBhbHNvIGFkYXB0IGVuZCBidXR0b24gcHJlc3MgaGFuZGxlciBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHQvLyBDdXJyZW50bHkgb25seSBzdGlsbCBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBjbG9zaW5nIGRpYWxvZyBhZnRlciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAodXNlcyByZXNvbHZlKSBmcm9tIHVzZXIgY2FuY2VsbGF0aW9uICh1c2luZyByZWplY3QpXG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdC8vXHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IGJJc0NyZWF0ZUFjdGlvblxuXHRcdFx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTlwiKVxuXHRcdFx0XHRcdFx0OiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShyZXNvdXJjZU1vZGVsLCBzQWN0aW9uTGFiZWwsIHNBY3Rpb25OYW1lLCBlbnRpdHlTZXROYW1lKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRcdFx0XHRcdFx0Ly8gYnV0dG9uTG9jayBpcyBzZXQgb25jZSBhbmQgcmVzZXQgaW5cblx0XHRcdFx0XHRcdFx0Ly8gLSBhZnRlciB2YWxpZGF0aW9uIGVycm9yXG5cdFx0XHRcdFx0XHRcdC8vIC0gaW4gY2FzZSBvZiBhY3Rpb24gZXJyb3IgbWVzc2FnZSBpcyBjYW5jZWxlZFxuXHRcdFx0XHRcdFx0XHQvLyAtIGluIGFmdGVyQ2xvc2UgZXZlbnRcblxuXHRcdFx0XHRcdFx0XHRpZiAoYnV0dG9uTG9jayA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIShhd2FpdCBfdmFsaWRhdGVQcm9wZXJ0aWVzKGFjdGlvblBhcmFtZXRlckluZm9zLCByZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci5sb2NrKG9EaWFsb2cpO1xuXG5cdFx0XHRcdFx0XHRcdGxldCBmYWlsZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogZHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIG1vdmUgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIERpYWxvZyAoU2ltcGxlRm9ybSkgdG8gbVBhcmFtZXRlcnMuYWN0aW9uUGFyYW1ldGVycyBzbyB0aGF0IHRoZXkgYXJlIGF2YWlsYWJsZSBpbiB0aGUgb3BlcmF0aW9uIGJpbmRpbmdzIGZvciBhbGwgY29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHRsZXQgdlBhcmFtZXRlclZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdGxldCBhbGxOdWxsUGFyYW1ldGVycyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnNbaV0uJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IChvRGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YC8ke2FBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lfWBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBqIGluIGFNVkZDb250ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcy5wdXNoKGFNVkZDb250ZW50W2pdLktleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gYUtleVZhbHVlcztcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IG9QYXJhbWV0ZXJDb250ZXh0Py5nZXRQcm9wZXJ0eShhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IHZQYXJhbWV0ZXJWYWx1ZTsgLy8gd3JpdGluZyB0aGUgY3VycmVudCB2YWx1ZSAodXNlciBpbnB1dCEpIGludG8gdGhlIG1ldGFtb2RlbCA9PiBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byB1c2UgQWN0aW9uUGFyYW1ldGVySW5mb3MgaW5zdGVhZC4gVXNlZCBpbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1ldGVyVmFsdWUgIT09IG51bGwgJiYgdlBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWxsTnVsbFBhcmFtZXRlcnMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFhbGxOdWxsUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIGF2b2lkIG92ZXJyaWRpbmcgaW5jb21pbmcgcGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlubmVyUGFyYW1ldGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMubGFiZWwgPSBzQWN0aW9uTGFiZWw7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBleGVjdXRlQVBNQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc29sdmUoYVJlc3VsdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZhaWxlZENvbnRleHRzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGZhaWwpID0+IGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlubmVyUGFyYW1ldGVycy5hQ29udGV4dHMgPSBmYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBhUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyByZXNvbHZlKGFSZXN1bHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlczogTWVzc2FnZVtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5uZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiB1bmRlZmluZWQsIC8vIG5vdCB1c2VkIGF0IGFsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvRGlhbG9nKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBmYWlsZWRDb250ZXh0c1swXSwgLy8gb25seSB1c2VkIGluIGNhc2Ugb2YgZmFpbGVkIGNvbnRleHQgdG8gcmVzZXQgaW4gbWVzc2FnZUhhbmRsaW5nIHNob3dVbmJvdW5kTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gV2h5IGlzIHRoaXMgaW1wbGVtZW50ZWQgYXMgY2FsbGJhY2s/IEFwcGFyZW50bHksIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJlZm9yZWhhbmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogcmVmYWN0b3IgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IHVuZGVmaW5lZCwgLy8gbm90IHVzZWQgYXQgYWxsIVxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGlmIHRoZSBhY3Rpb24gZmFpbHMgd2l0aCBhbiBlcnJvciBwb3B1cCBhbmQgdGhpcyBvbmUgaXMgY2FuY2VsZCAoSm91cm5leTogNDEyV2FybmluZ0hhbmRsaW5nKVxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgYmFja2VuZCB2YWxpZGF0aW9uIGVycm9yKHM/KSwgbWVzc2FnZSBzaGFsbCBub3QgYmUgc2hvd24gaW4gbWVzc2FnZSBkaWFsb2cgYnV0IG5leHQgdG8gdGhlIGZpZWxkIG9uIHBhcmFtZXRlciBkaWFsb2csIHdoaWNoIHNob3VsZFxuXHRcdFx0XHRcdFx0XHRcdC8vIHN0YXkgb3BlbiBpbiB0aGlzIGNhc2UgPT4gaW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG5vdCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZy5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBhbGwgb3RoZXIgY2FzZXMgKGUuZy4gb3RoZXIgYmFja2VuZCBlcnJvcnMgb3IgdXNlciBjYW5jZWxsYXRpb24pLCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZyBuZWVkcyB0byBiZSByZWplY3RlZCB0byBhbGxvd1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNhbGxlcnMgdG8gcmVhY3QuIChFeGFtcGxlOiBJZiBjcmVhdGlvbiBpbiBiYWNrZW5kIGFmdGVyIG5hdmlnYXRpb24gdG8gdHJhbnNpZW50IGNvbnRleHQgZmFpbHMsIGJhY2sgbmF2aWdhdGlvbiBuZWVkcyB0byBiZSB0cmlnZ2VyZWQpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gc2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCByZXF1ZXN0IGluc3RlYWQgb2YgdGFraW5nIGRlY2lzaW9uIGJhc2VkIG9uIG1lc3NhZ2UgaGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGRvIG5vdGhpbmcsIGRvIG5vdCByZWplY3QgcHJvbWlzZSBoZXJlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdlIGRvIG5vdCBjbG9zZSB0aGUgQVBNIGRpYWxvZyBpZiB1c2VyIGVudGVycyBhIHdyb25nIHZhbHVlIGluIG9mIHRoZSBmaWVsZHMgdGhhdCByZXN1bHRzIGluIGFuIGVycm9yIGZyb20gdGhlIGJhY2tlbmQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSB1c2VyIGNhbiBjbG9zZSB0aGUgbWVzc2FnZSBkaWFsb2cgYW5kIHRoZSBBUE0gZGlhbG9nIHdvdWxkIHN0aWxsIGJlIG9wZW4gb24gd2hpY2ggaGUgY291bGQgZW50ZXIgYSBuZXcgdmFsdWUgYW5kIHRyaWdnZXIgdGhlIGFjdGlvbiBhZ2Fpbi5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRWFybGllciB3ZSB3ZXJlIHJlamVjdGluZyB0aGUgcHJvbWlzZSBvbiBlcnJvciBoZXJlLCBhbmQgdGhlIGNhbGwgc3RhY2sgd2FzIGRlc3Ryb3llZCBhcyB0aGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgYW5kIHJldHVybmVkIHRvIEVkaXRGbG93IGludm9rZSBhY3Rpb24uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEJ1dCBzaW5jZSB0aGUgQVBNIGRpYWxvZyB3YXMgc3RpbGwgb3BlbiwgYSBuZXcgcHJvbWlzZSB3YXMgcmVzb2x2ZWQgaW4gY2FzZSB0aGUgdXNlciByZXRyaWVkIHRoZSBhY3Rpb24gYW5kIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQsIGJ1dCB0aGUgbmF2aWdhdGlvbiB0byBvYmplY3QgcGFnZSB3YXMgbm90IHRha2luZyBwbGFjZS5cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIiksXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGNhbmNlbCBidXR0b24gc2hvdWxkIGp1c3QgY2xvc2UgdGhlIGRpYWxvZyAoc2ltaWxhciB0byB1c2luZyBlc2NhcGUpLiBBbGwgd3JhcCB1cCB0YXNrcyBzaG91bGQgYmUgbW92ZWQgdG8gYWZ0ZXJDbG9zZS5cblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdC8vIHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQvLyBUT0RPOiBiZWZvcmVPcGVuIGlzIGp1c3QgYW4gZXZlbnQsIGkuZS4gbm90IHdhaXRpbmcgZm9yIHRoZSBQcm9taXNlIHRvIGJlIHJlc29sdmVkLiBDaGVjayBpZiB0YXNrcyBvZiB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nXG5cdFx0XHRcdC8vIC0gaWYgeWVzLCB0aGV5IG5lZWQgdG8gYmUgbW92ZWQgb3V0c2lkZS5cblx0XHRcdFx0Ly8gQXNzdW1wdGlvbjogU29tZXRpbWVzIGRpYWxvZyBjYW4gYmUgc2VlbiB3aXRob3V0IGFueSBmaWVsZHMgZm9yIGEgc2hvcnQgdGltZSAtIG1heWJlIHRoaXMgaXMgY2F1c2VkIGJ5IHRoaXMgYXN5bmNocm9uaXR5XG5cdFx0XHRcdGJlZm9yZU9wZW46IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IERpYWxvZyRCZWZvcmVPcGVuRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHQvLyBjbG9uZSBldmVudCBmb3IgYWN0aW9uV3JhcHBlciBhcyBvRXZlbnQub1NvdXJjZSBnZXRzIGxvc3QgZHVyaW5nIHByb2Nlc3Npbmcgb2YgYmVmb3JlT3BlbiBldmVudCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3Qgb0Nsb25lRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBvRXZlbnQpO1xuXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKG9EaWFsb2cuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgJiYgb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF0sXG5cdFx0XHRcdFx0XHRcdHNEZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRcdFx0XHRgJHtzQWN0aW9uUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlZmF1bHRWYWx1ZXNGdW5jdGlvbmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2cgPSBhc3luYyBmdW5jdGlvbiAoc0JpbmRpbmdQYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNCb3VuZEZ1bmN0aW9uTmFtZSA9IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbigpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyTW9kZWxEYXRhID0gb1BhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHByZWZpbGxQYXJhbWV0ZXIgPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWU6IHN0cmluZyxcblx0XHRcdFx0XHRcdFx0dlBhcmFtRGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgeyAkUGF0aD86IHN0cmluZyB9XG5cdFx0XHRcdFx0XHQpOiBQcm9taXNlPHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBiTGF0ZVByb3BlcnR5RXJyb3I/OiBib29sZWFuOyBiTm9Qb3NzaWJsZVZhbHVlPzogYm9vbGVhbiB9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtRGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZQYXJhbURlZmF1bHRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1WYWx1ZSA9IGF3YWl0IENvbW1vblV0aWxzLnJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1WYWx1ZSA9IGF3YWl0IG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0UGFyYW1ldGVyQ29udGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXRoRm9yQ29udGV4dCA9IHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc1BhdGhGb3JDb250ZXh0LmluZGV4T2YoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2ApID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzUGF0aEZvckNvbnRleHQgPSBzUGF0aEZvckNvbnRleHQucmVwbGFjZShgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCwgXCJcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzW2ldLmdldFByb3BlcnR5KHNQYXRoRm9yQ29udGV4dCkgIT09IHZQYXJhbVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yk5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1WYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsIHNQYXJhbU5hbWUsIG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJMYXRlUHJvcGVydHlFcnJvcjogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtRGVmYXVsdFZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlck1vZGVsRGF0YS5oYXNPd25Qcm9wZXJ0eShzUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMjogVGhlcmUgaXMgbm8gUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb24gKD0+IGxvb2sgaW50byB0aGUgRkxQIFVzZXIgRGVmYXVsdHMpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtzUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB7ICRQYXRoOiBzdHJpbmcgfSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAob0RpYWxvZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLCBzUGFyYW1OYW1lKSArIFwiQFwiLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiYgb1BhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXTsgLy8gZWl0aGVyIHsgJFBhdGg6ICdzb21lUGF0aCcgfSBvciAnc29tZVN0cmluZydcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYXMgc3RyaW5nIHwgeyAkUGF0aDogc3RyaW5nIH07XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gW107XG5cdFx0XHRcdFx0XHRsZXQgc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRzUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoc1BhcmFtTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUucHVzaChwcmVmaWxsUGFyYW1ldGVyKHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgc0JvdW5kRnVuY3Rpb25OYW1lLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHNCb3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtcy5wdXNoKG9wZXJhdGlvbnMuY2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFQcmVmaWxsUGFyYW1Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRcdFx0bGV0IGFFeGVjRnVuY3Rpb25Qcm9taXNlczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dFtdPiA9IFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0XHRcdFx0XHRsZXQgb0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2U7XG5cdFx0XHRcdFx0XHRpZiAoYUZ1bmN0aW9uUGFyYW1zICYmIGFGdW5jdGlvblBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFGdW5jdGlvblBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNNb2R1bGUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlID0gRlBNSGVscGVyLmFjdGlvbldyYXBwZXIob0Nsb25lRXZlbnQsIHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogYUNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0XHRcdFx0YVByZWZpbGxQYXJhbVByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZVxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gYVByb21pc2VzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmdW5jdGlvblBhcmFtcyA9IGFQcm9taXNlc1sxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGFQcm9taXNlc1syXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0bGV0IHNEaWFsb2dQYXJhbU5hbWU6IHN0cmluZztcblxuXHRcdFx0XHRcdFx0XHQvLyBGaWxsIHRoZSBkaWFsb2cgd2l0aCB0aGUgZWFybGllciBkZXRlcm1pbmVkIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZGlmZmVyZW50IHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNEaWFsb2dQYXJhbU5hbWUgPSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFBhcmFtZXRlciB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIGNhbGwgb2YgaW52b2tlQWN0aW9uIG92ZXJydWxlIG90aGVyIHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdC5oYXNPd25Qcm9wZXJ0eShzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3Rbc0RpYWxvZ1BhcmFtTmFtZV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldICYmIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGRlZmF1bHQgdmFsdWUgaGFkIG5vdCBiZWVuIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkdWUgdG8gZGlmZmVyZW50IGNvbnRleHRzLCB3ZSBkbyBub3RoaW5nIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmICFjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2ogKyAxXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSBhQ29udGV4dHMubGVuZ3RoIC0gMSAmJiBmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmdW5jdGlvblBhcmFtc1swXSAmJiBmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vT25seSBvbmUgY29udGV4dCwgdGhlbiB0aGUgZGVmYXVsdCBwYXJhbSB2YWx1ZXMgYXJlIHRvIGJlIHZlcmlmaWVkIGZyb20gdGhlIGZ1bmN0aW9uOlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJFcnJvckZvdW5kID0gY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1ZhbHVlLmJMYXRlUHJvcGVydHlFcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvLyBJZiBhdCBsZWFzdCBvbmUgRGVmYXVsdCBQcm9wZXJ0eSBpcyBhIExhdGUgUHJvcGVydHkgYW5kIGFuIGVUYWcgZXJyb3Igd2FzIHJhaXNlZC5cblx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzVGV4dCwgeyBjb250ZW50V2lkdGg6IFwiMjVlbVwiIH0gYXMgb2JqZWN0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQXN5bmNCZWZvcmVPcGVuID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXJhbWV0ZXIgPSBhUGFyYW1ldGVyc1swXSAmJiBhUGFyYW1ldGVyc1swXS4kTmFtZTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gYXdhaXQgYUNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihzQmluZGluZ1BhcmFtZXRlciwgb0NvbnRleHRPYmplY3QpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyhzQmluZGluZ1BhcmFtZXRlcik7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0YXdhaXQgZm5Bc3luY0JlZm9yZU9wZW4oKTtcblxuXHRcdFx0XHRcdC8vIGFkZGluZyBkZWZhdWx0ZWQgdmFsdWVzIG9ubHkgaGVyZSBhZnRlciB0aGV5IGFyZSBub3Qgc2V0IHRvIHRoZSBmaWVsZHNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlckluZm8gb2YgYWN0aW9uUGFyYW1ldGVySW5mb3MpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWVcblx0XHRcdFx0XHRcdFx0PyAoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCBhcyBNdWx0aVZhbHVlRmllbGQpLmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdFx0OiAoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycy5mb3JFYWNoKF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKTtcblx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3VsdC5kaWFsb2dDYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShhY3Rpb25SZXN1bHQucmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0bVBhcmFtZXRlcnMub0RpYWxvZyA9IG9EaWFsb2c7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKS5vTW9kZWwpO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvUGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHQvKiBFdmVudCBuZWVkZWQgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIG9mIHZhbGlkIGNoYW5nZWQgZmllbGQgKi9cblx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRpZiAoYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvPy5maWVsZD8uZ2V0QmluZGluZyhcIml0ZW1zXCIpPy5hdHRhY2hDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHNBY3Rpb25QYXRoID0gYCR7c0FjdGlvbk5hbWV9KC4uLilgO1xuXHRcdFx0aWYgKCFhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdHNBY3Rpb25QYXRoID0gYC8ke3NBY3Rpb25QYXRofWA7XG5cdFx0XHR9XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogc0FjdGlvblBhdGhcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChhQ29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG9PcGVyYXRpb25CaW5kaW5nID0gb0RpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbjogQ29udGV4dCk6IEFjdGlvblBhcmFtZXRlcltdIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cblxuZnVuY3Rpb24gX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUoXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdHNBY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRzRW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRsZXQgYm91bmRBY3Rpb25OYW1lOiBzdHJpbmcgPSBzQWN0aW9uTmFtZTtcblx0Y29uc3QgYUFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpO1xuXHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5jbHVkZXMoXCIuXCIpID8gYUFjdGlvbk5hbWVbYUFjdGlvbk5hbWUubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHNFbnRpdHlTZXROYW1lID8gYCR7c0VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRjb25zdCBzS2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRjb25zdCBiUmVzb3VyY2VLZXlFeGlzdHMgPSByZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtzS2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApO1xuXHRpZiAoc0FjdGlvbkxhYmVsKSB7XG5cdFx0aWYgKGJSZXNvdXJjZUtleUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChzS2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9fCR7c0VudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSwgdW5kZWZpbmVkLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQWN0aW9uTGFiZWw7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIik7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0b0FjdGlvbjogT0RhdGFDb250ZXh0QmluZGluZyxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRiR2V0Qm91bmRDb250ZXh0OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIgfCB1bmRlZmluZWQsXG5cdGlDb250ZXh0TGVuZ3RoOiBudW1iZXIgfCBudWxsLFxuXHRjdXJyZW50X2NvbnRleHRfaW5kZXg6IG51bWJlciB8IG51bGwsXG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbixcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdDogRnVuY3Rpb24sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0PiB7XG5cdGxldCBvQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dD4sXG5cdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gdHJ1ZTtcblx0aWYgKG1QYXJhbWV0ZXJzKSB7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTtcblx0fVxuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChtUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmICghYkVuYWJsZVN0cmljdEhhbmRsaW5nKSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQsIGlnbm9yZUVUYWcpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRpZ25vcmVFVGFnLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzIGFzIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZShvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpKTtcblx0XHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzIGFzIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCgpO1xuXHRcdFx0XHRcdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0OiBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdGlnbm9yZUVUYWcsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzIGFzIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZTQxMlRyYW5zaXN0aW9uTWVzc2FnZXMoXG5cdFx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyBhcyBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHRcdFx0XHRcdHRocm93IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQ7XG5cdFx0XHRcdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb0FjdGlvblByb21pc2UuY2F0Y2goKCkgPT4ge1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RyaWN0SGFuZGxpbmdVdGlsaXRlcyB3aXRoIHRoZSBmYWlsZWQgYW5kIHN1Y2Nlc3NmdWwgdHJhbnNpc2l0aW9uIG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBleGVjdXRlZFxuICogQHBhcmFtIHNHcm91cElkIEdyb3VwSWQgb2YgdGhlIGJhdGNoXG4gKiBAcGFyYW0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgVXRpbGl0eSBmbGFncyBhbmQgbWVzc2FnZXMgZm9yIHN0cmljdEhhbmRsaW5nXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgU3RyaWN0IEhhbmRsaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBvbmx5U3VjY2Vzc01lc3NhZ2VzIFRvIHVwZGF0ZSBvbmx5IHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiB1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKFxuXHRvQWN0aW9uOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllczogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdG1QYXJhbWV0ZXJzPzogU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzLFxuXHRvbmx5U3VjY2Vzc01lc3NhZ2VzID0gZmFsc2Vcbik6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRjb25zdCB7IHByb2Nlc3NlZE1lc3NhZ2VJZHMsIGRlbGF5U3VjY2Vzc01lc3NhZ2VzLCBzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyB9ID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM7XG5cdGNvbnN0IHRyYW5zaXRpb25NZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdC8vY2hlY2sgaWYgdGhlIHRyYW5zaXN0aW9uIG1lc3NhZ2VzIGlzIGFscmVhZHkgcHJvY2Vzc2VkXG5cdFx0Y29uc3QgaXNEdXBsaWNhdGUgPSBwcm9jZXNzZWRNZXNzYWdlSWRzLmZpbmQoZnVuY3Rpb24gKGlkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCkgPT09IGlkO1xuXHRcdH0pO1xuXHRcdC8vIHVwZGF0ZSB0aGUgc3RyaWN0SGFuZGxpbmcgd2l0aCB0aGUgc3VjY2VzcyBtZXNzYWdlcyB3aGljaCBuZWVkcyB0byBiZSBzaG93biBsYXRlclxuXHRcdGlmICghaXNEdXBsaWNhdGUpIHtcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHMucHVzaChtZXNzYWdlLmdldElkKCkpO1xuXHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhaXNEdXBsaWNhdGU7XG5cdH0pO1xuXHQvL3VwZGF0ZSB0aGUgc3RyaWN0SGFuZGxpbmdVdGlsaXRlcyB3aXRoIHRoZSBmYWlsZWQgdHJhbnNpc3Rpb24gbWVzc2FnZXMgd2hpY2ggbmVlZHMgdG8gYmUgcmV0cmlnZ2VyZWRcblx0aWYgKCFvbmx5U3VjY2Vzc01lc3NhZ2VzICYmIHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRpZiAobVBhcmFtZXRlcnM/LmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5wdXNoKHtcblx0XHRcdFx0b0FjdGlvbjogb0FjdGlvbixcblx0XHRcdFx0Z3JvdXBJZDogc0dyb3VwSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk6IHtcblx0b0xvY2FsQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IEZ1bmN0aW9uO1xuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0OiBGdW5jdGlvbjtcbn0ge1xuXHRsZXQgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0bGV0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblx0Y29uc3Qgb0xvY2FsQWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPHVua25vd24+KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCA9IHJlamVjdDtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBhY3Rpb24gXCIsIG9FcnJvcik7XG5cdH0pO1xuXG5cdHJldHVybiB7IG9Mb2NhbEFjdGlvblByb21pc2UsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgd2FybmluZyBvciBlcnJvciBtZXNzYWdlcyhib3VuZCBhbmQgdW5ib3VuZCkuIFByZXNlbnRseSBvbmx5IHByb3ZpZGVzIHRoZW0gZm9yIGNoYW5nZXNldCBiYXRjaCBjb25maWcuXG4gKlxuICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGV4aXN0YW5jZSBvZiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuIHtcblx0Y29uc3QgdW5Cb3VuZE1zZ3M6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh1bmRlZmluZWQsIHRydWUpO1xuXHRjb25zdCBib3VuZE1zZ3M6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKTtcblx0Y29uc3QgbWVzc2FnZXMgPSBbLi4udW5Cb3VuZE1zZ3MsIC4uLmJvdW5kTXNnc107XG5cblx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZXhlY3V0ZUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdG9QYXJlbnRDb250cm9sOiBWaWV3LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+IHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdGxldCBvQWN0aW9uOiBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRtUGFyYW1ldGVycy5hcHBDb21wb25lbnQgPSBvQXBwQ29tcG9uZW50O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpOiB2b2lkIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIFRPRE86IHJlZmFjdG9yIHRvIGRpcmVjdCB1c2Ugb2YgUHJvbWlzZS5hbGxTZXR0bGVkXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+KGZ1bmN0aW9uIChcblx0XHRcdHJlc29sdmU6ICh2YWx1ZTogT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXSkgPT4gdm9pZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgbUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5iR3JvdXBlZDtcblx0XHRcdGNvbnN0IGJHZXRCb3VuZENvbnRleHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0O1xuXHRcdFx0Y29uc3QgYUFjdGlvblByb21pc2VzOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3Qgb2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QgPSBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk7XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQ6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSAmIHsgY29udGV4dDogT0RhdGFWNENvbnRleHQgfSxcblx0XHRcdFx0aUNvbnRleHRMZW5ndGg6IG51bWJlclxuXHRcdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogdW5rbm93bltdID0gW107XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQ6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IChBY3Rpb25TaWRlRWZmZWN0c1R5cGUgJiB7IGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0IH0pIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHQpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PHVua25vd24+W10+IHtcblx0XHRcdFx0Y29uc3QgaW5kaXZpZHVhbEFjdGlvblByb21pc2U6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gbVBhcmFtZXRlcnMuZ3JvdXBJZCB8fCBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cblx0XHRcdGFzeW5jIGZ1bmN0aW9uIGZuRXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0Y29uc3QgYUNoYW5nZVNldExvY2FsUHJvbWlzZXM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoIDw9IDEgPyBudWxsIDogaSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAoIWhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb3BlcmF0aW9uc0hlbHBlci5yZW5kZXJNZXNzYWdlVmlldyhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPiAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmZvckVhY2goZnVuY3Rpb24gKHNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNoUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU1vZGVsLnNldERhdGEobWVzc2FnZXNJbk1vZGVsLmNvbmNhdChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiUmV0cmlnZ2VyaW5nIG9mIHN0cmljdCBoYW5kbGluZyBhY3Rpb25zIGZhaWxlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFzeW5jIGZ1bmN0aW9uIGZuRXhlY3V0ZVNlcXVlbnRpYWxseShjb250ZXh0c1RvRXhlY3V0ZTogT0RhdGFWNENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oXG5cdFx0XHRcdFx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uSW5kZXg6IG51bWJlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHRcdCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5rbm93bj5bXT4ge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBjb250ZXh0LCBtQmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdC8vIEFjdGlvbiBvbiB0aGUgdGFibGUgbGV2ZWwgaXMgYm91bmQgb24gYSBjb3B5IG9mIHRoZSBvRGF0YUxpc3RCaW5kaW5nLCB0byBleGVjdXRlIHRoZSBTaWRlRWZmZWN0cyB3ZSBuZWVkXG5cdFx0XHRcdFx0Ly8gdG8gZG8gaXQgb24gdGhlIG9yaWdpbmFsIG9EYXRhTGlzdEJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBpbml0aWFsVGFibGVDb250ZXh0ID0gKG1QYXJhbWV0ZXJzLmNvbnRyb2wgYXMgVGFibGUpPy5nZXRSb3dCaW5kaW5nPy4oKT8uZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdFx0XHRcdHJldHVybiBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YWN0aW9uSW5kZXgsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6XG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbFRhYmxlQ29udGV4dCAmJiBpbml0aWFsVGFibGVDb250ZXh0LmdldFBhdGgoKSA9PT0gY29udGV4dC5nZXRQYXRoKCkgPyBpbml0aWFsVGFibGVDb250ZXh0IDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQsIGlkICsgMSwgYUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdH0sIFByb21pc2UucmVzb2x2ZSgpKTtcblxuXHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRhd2FpdCBvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbkV4ZWN1dGVDaGFuZ2VzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5IYW5kbGVSZXN1bHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHQvLyBQcm9taXNlLmFsbFNldHRsZWQgd2lsbCBuZXZlciBiZSByZWplY3RlZC4gSG93ZXZlciwgZXNsaW50IHJlcXVpcmVzIGVpdGhlciBjYXRjaCBvciByZXR1cm4gLSB0aHVzIHdlIHJldHVybiB0aGUgcmVzdWx0aW5nIFByb21pc2UgYWx0aG91Z2ggbm8gb25lIHdpbGwgdXNlIGl0LlxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGFBY3Rpb25Qcm9taXNlcykudGhlbihyZXNvbHZlKTtcblx0XHRcdH1cblx0XHR9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdChcblx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHR9XG5cdFx0XHQpKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3Qgb0FjdGlvblByb21pc2U6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+ID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRjb25zdCBhbGxQcm9taXNlOiBQcm9taXNlPHVua25vd24+W10gPSBbb0FjdGlvblByb21pc2VdO1xuXHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCkge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChcIi91bkJvdW5kQWN0aW9uXCIpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdCA9IHtcblx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0fTtcblx0XHRcdG9wZXJhdGlvbnMuZm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgc2lkZUVmZmVjdCwgbVBhcmFtZXRlcnMsIHNHcm91cElkLCBhbGxQcm9taXNlKTtcblx0XHRcdGNvbnRleHQuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdC8vIHRyaWdnZXIgb25TdWJtaXR0ZWQgXCJldmVudFwiXG5cdFx0KFxuXHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0LyoqL1xuXHRcdFx0fVxuXHRcdCkob0FjdGlvblByb21pc2UpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhbGxQcm9taXNlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGN1cnJlbnRQcm9taXNlVmFsdWVzOiB1bmtub3duW10pIHtcblx0XHRcdFx0Ly8gSGVyZSB3ZSBlbnN1cmUgdGhhdCB3ZSByZXR1cm4gdGhlIHJlc3BvbnNlIHdlIGdvdCBmcm9tIGFuIHVuYm91bmQgYWN0aW9uIHRvIHRoZVxuXHRcdFx0XHQvLyBjYWxsZXIgQkNQIDogMjI3MDEzOTI3OVxuXHRcdFx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlID0gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdFx0XHRcdGlmIChjdXJyZW50UHJvbWlzZVZhbHVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGN1cnJlbnRQcm9taXNlVmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0Py4oKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgYWN0aW9uIFwiICsgc0FjdGlvbk5hbWUsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogQ29udGV4dCwgc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogeyAkTmFtZTogc3RyaW5nIH1bXSxcblx0cGFyYW1ldGVyVmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcblx0c3RhcnR1cFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogYm9vbGVhbiB7XG5cdGlmIChwYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHQvLyBJZiBzaG93RGlhbG9nIGlzIGZhbHNlIGJ1dCB0aGVyZSBhcmUgcGFyYW1ldGVycyBmcm9tIHRoZSBpbnZva2VBY3Rpb24gY2FsbCwgd2UgbmVlZCB0byBjaGVjayB0aGF0IHZhbHVlcyBoYXZlIGJlZW5cblx0XHQvLyBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlci4kTmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiICYmXG5cdFx0XHRcdCFwYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gYWN0aW9uUGFyYW1ldGVyLiROYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChpc0NyZWF0ZUFjdGlvbiAmJiBzdGFydHVwUGFyYW1ldGVycykge1xuXHRcdC8vIElmIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHByb3ZpZGVkIGR1cmluZyBhcHBsaWNhdGlvbiBsYXVuY2gsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNldCBpcyBjb21wbGV0ZVxuXHRcdC8vIElmIG5vdCwgdGhlIHBhcmFtZXRlciBkaWFsb2cgc3RpbGwgbmVlZHMgdG8gYmUgc2hvd24uXG5cdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXIgb2YgYWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKCFzdGFydHVwUGFyYW1ldGVyc1thY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5SZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0b1NpZGVFZmZlY3Q6IChBY3Rpb25TaWRlRWZmZWN0c1R5cGUgJiB7IGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0IH0pIHwgdW5kZWZpbmVkLFxuXHRtUGFyYW1ldGVyczoge1xuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRzZWxlY3RlZEl0ZW1zOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHR9LFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRhTG9jYWxQcm9taXNlPzogdW5rbm93bltdXG4pOiB2b2lkIHtcblx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGxldCBvTG9jYWxQcm9taXNlO1xuXHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNUcmlnZ2VyQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0XHRcdGlmIChhTG9jYWxQcm9taXNlKSB7XG5cdFx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gcmVxdWVzdCBzaWRlIGVmZmVjdHMgZm9yIHRoaXMgYWN0aW9uXG5cdC8vIGFzIHdlIG1vdmUgdGhlIG1lc3NhZ2VzIHJlcXVlc3QgdG8gUE9TVCAkc2VsZWN0IHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGFuIGVtcHR5IGFycmF5XG5cdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcblx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMob1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHR9XG5cdFx0b0xvY2FsUHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmIG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRKU09OLnBhcnNlKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgdG8gY2FsbCBPRGF0YSBhY3Rpb25zIChib3VuZC9pbXBvcnQpIGFuZCBmdW5jdGlvbnMgKGJvdW5kL2ltcG9ydClcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXHRjYWxsQm91bmRBY3Rpb246IGNhbGxCb3VuZEFjdGlvbixcblx0Y2FsbEFjdGlvbkltcG9ydDogY2FsbEFjdGlvbkltcG9ydCxcblx0Y2FsbEJvdW5kRnVuY3Rpb246IGNhbGxCb3VuZEZ1bmN0aW9uLFxuXHRjYWxsRnVuY3Rpb25JbXBvcnQ6IGNhbGxGdW5jdGlvbkltcG9ydCxcblx0ZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0czogZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyxcblx0Y3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbjogY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbixcblx0dmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzOiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzLFxuXHRnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lOiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZSxcblx0YWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjazogYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayxcblx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uOiBhZnRlckFjdGlvblJlc29sdXRpb24sXG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzOiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyxcblx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHM6IGZuUmVxdWVzdFNpZGVFZmZlY3RzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcGVyYXRpb25zO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7RUFpREEsTUFBTUEsU0FBUyxHQUFHQyxTQUFTLENBQUNELFNBQVM7SUFDcENFLGtCQUFrQixHQUFHRCxTQUFTLENBQUNDLGtCQUFrQjtFQUNsRCxNQUFNQyxNQUFNLEdBQUdDLFVBQVUsQ0FBQ0QsTUFBTTtFQUloQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVFLGVBQWUsQ0FDN0JDLFdBQW1CLEVBQ25CQyxRQUEwQixFQUMxQkMsTUFBa0IsRUFDbEJDLGFBQTJCLEVBQzNCQyxXQUFpQyxFQUNqQ0MsdUJBQWlELEVBQ3ZCO0lBQzFCLElBQUksQ0FBQ0EsdUJBQXVCLEVBQUU7TUFDN0JBLHVCQUF1QixHQUFHO1FBQ3pCQyxhQUFhLEVBQUUsS0FBSztRQUNwQkMsNkJBQTZCLEVBQUUsRUFBRTtRQUNqQ0Msc0JBQXNCLEVBQUUsRUFBRTtRQUMxQkMsNkJBQTZCLEVBQUUsRUFBRTtRQUNqQ0Msb0JBQW9CLEVBQUUsRUFBRTtRQUN4QkMsbUJBQW1CLEVBQUU7TUFDdEIsQ0FBQztJQUNGO0lBQ0EsSUFBSSxDQUFDVixRQUFRLElBQUlBLFFBQVEsQ0FBQ1csTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN2QztNQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLG9EQUFvRCxDQUFDO0lBQzVF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
1592
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zdGFudHMiLCJGRUxpYnJhcnkiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJBY3Rpb24iLCJNZXNzYWdlQm94IiwiY2FsbEJvdW5kQWN0aW9uIiwic0FjdGlvbk5hbWUiLCJjb250ZXh0cyIsIm9Nb2RlbCIsIm9BcHBDb21wb25lbnQiLCJtUGFyYW1ldGVycyIsInN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIiwiaXM0MTJFeGVjdXRlZCIsInN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzIiwic3RyaWN0SGFuZGxpbmdQcm9taXNlcyIsInN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzIiwiZGVsYXlTdWNjZXNzTWVzc2FnZXMiLCJwcm9jZXNzZWRNZXNzYWdlSWRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlamVjdCIsImlzQ2FsbGVkV2l0aEFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiYUNvbnRleHRzIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNBY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwib0JvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc0NyaXRpY2FsQWN0aW9uIiwiQWN0aW9uUnVudGltZSIsImdldElzQWN0aW9uQ3JpdGljYWwiLCJleHRyYWN0U2luZ2xlUmVzdWx0IiwicmVzdWx0Iiwic3RhdHVzIiwidmFsdWUiLCJyZWFzb24iLCJjYWxsQWN0aW9uIiwidGhlbiIsImNhbGxBY3Rpb25JbXBvcnQiLCJhY3Rpb25OYW1lIiwibW9kZWwiLCJhcHBDb21wb25lbnQiLCJwYXJhbWV0ZXJzIiwibWV0YU1vZGVsIiwiYWN0aW9uUGF0aCIsImJpbmRDb250ZXh0IiwiYWN0aW9uTmFtZUZyb21Nb2RlbCIsImdldE9iamVjdCIsIiRBY3Rpb24iLCJ1bmJvdW5kQWN0aW9uSW5kZXgiLCJmaW5kSW5kZXgiLCJhY3Rpb24iLCIkSXNCb3VuZCIsImFjdGlvbkltcG9ydCIsImNhbGxCb3VuZEZ1bmN0aW9uIiwic0Z1bmN0aW9uTmFtZSIsImNvbnRleHQiLCJzRnVuY3Rpb25QYXRoIiwib0JvdW5kRnVuY3Rpb24iLCJfZXhlY3V0ZUZ1bmN0aW9uIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwicmVzb2x2ZSIsIm9GdW5jdGlvbkltcG9ydCIsIm9GdW5jdGlvbiIsInNHcm91cElkIiwiRXJyb3IiLCJmdW5jdGlvblRvQ2FsbCIsIm9GdW5jdGlvblByb21pc2UiLCJleGVjdXRlIiwic3VibWl0QmF0Y2giLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwiYkdyb3VwZWQiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJDaGFuZ2VTZXQiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2tpcFBhcmFtZXRlckRpYWxvZyIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJiSXNTYW1lRW50aXR5Iiwib1JldHVyblR5cGUiLCJiVmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzIiwiYWN0aW9uRGVmaW5pdGlvbiIsImFBY3Rpb25QYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsImJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyIsIiROYW1lIiwiYVBhcmFtZXRlclZhbHVlcyIsInBhcmFtZXRlclZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwiX3ZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJjb25maXJtQ3JpdGljYWxBY3Rpb24iLCJtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyIsImZuT25TdWJtaXR0ZWQiLCJvblN1Ym1pdHRlZCIsImZuT25SZXNwb25zZSIsIm9uUmVzcG9uc2UiLCJiR2V0Qm91bmRDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwic2VsZWN0ZWRJdGVtcyIsImFkZGl0aW9uYWxTaWRlRWZmZWN0IiwicGF0aEV4cHJlc3Npb25zIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXNzYWdlc1BhdGgiLCJleHAiLCIkaXNDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCIkVHlwZSIsIm1CaW5kaW5nUGFyYW1ldGVycyIsIiRzZWxlY3QiLCJzcGxpdCIsImluY2x1ZGVzIiwicHVzaCIsInRyaWdnZXJBY3Rpb25zIiwic3BsaWNlIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc0NyZWF0ZUFjdGlvbiIsImJPYmplY3RQYWdlIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwiZ3JvdXBJZCIsImNvbnRyb2xJZCIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwiYnlJZCIsImlzU3RhdGljIiwiJFBhcmFtZXRlciIsInNvbWUiLCJhUGFyYW1ldGVyIiwiJEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXROYW1lIiwibWVzc2FnZUhhbmRsZXIiLCJpZ25vcmVFVGFnIiwib09wZXJhdGlvblJlc3VsdCIsImFmdGVyQWN0aW9uUmVzb2x1dGlvbiIsImNhdGNoIiwiaSIsImZpbmQiLCJlbGVtZW50IiwibmFtZSIsIl9leGVjdXRlQWN0aW9uIiwibWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiY29uY2F0Iiwic3RyaWN0SGFuZGxpbmdGYWlscyIsImFGYWlsZWRDb250ZXh0cyIsImZvckVhY2giLCJmYWlsIiwiZ2V0Q29udGV4dCIsIm9GYWlsZWRPcGVyYXRpb25SZXN1bHQiLCJhZGRNZXNzYWdlcyIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0IiwiaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJhTWVzc2FnZXMiLCJzaG93TWVzc2FnZVBhcmFtZXRlcnNJbiIsImFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2siLCJ1bmRlZmluZWQiLCJhU2VsZWN0ZWRDb250ZXh0cyIsIm9BY3Rpb25Db250ZXh0Iiwib1BhcmVudENvbnRyb2wiLCJib3VuZEFjdGlvbk5hbWUiLCJzdWZmaXhSZXNvdXJjZUtleSIsInJlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwic0NvbmZpcm1hdGlvblRleHQiLCJnZXRUZXh0IiwiY29uZmlybSIsIm9uQ2xvc2UiLCJzQWN0aW9uIiwiT0siLCJvT3BlcmF0aW9uIiwib0Vycm9yIiwiZSIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsImV4ZWN1dGVBUE1BY3Rpb24iLCJvRGlhbG9nIiwiYWZ0ZXI0MTIiLCJhUmVzdWx0Iiwib1NpbmdsZVJlc3VsdCIsImF0dGFjaEV2ZW50T25jZSIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsImlzT3BlbiIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRQcm9wZXJ0eSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJpc0EiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiRGVsZXRlSGVscGVyIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJzaG93TWVzc2FnZUJveCIsIm9Db250cm9sIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwidW5ib3VuZE1lc3NhZ2VzIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJBUERtZXNzYWdlcyIsImFjdGlvblBhcmFtIiwiQVBETWVzc2FnZSIsImlzQVBEVGFyZ2V0IiwiZXJyb3JUYXJnZXRzSW5BUEQiLCJoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UiLCJzTWVzc2FnZSIsInNEZXNjcmlwdGlvblRleHQiLCJtZXNzYWdlTW9kZWwiLCJtZXNzYWdlc0luTW9kZWwiLCJhQm91bmRNZXNzYWdlcyIsIm1lc3NhZ2VIYW5kbGluZyIsImdldE1lc3NhZ2VzIiwiZ2VuZXJpY01lc3NhZ2UiLCJpc0VkaXRhYmxlIiwibm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5EaWFsb2ciLCJnZXRUeXBlIiwibm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCIsInNldE1lc3NhZ2UiLCJnZXRNZXNzYWdlIiwiTWVzc2FnZSIsInR5cGUiLCJNZXNzYWdlVHlwZSIsInRhcmdldCIsInBlcnNpc3RlbnQiLCJkZXNjcmlwdGlvbiIsImNvZGUiLCJ1bnNoaWZ0IiwiY2xvc2UiLCJkZXN0cm95IiwiZmlsdGVyZWRNZXNzYWdlcyIsImJJc0FQRE9wZW4iLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsImJpbmQiLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJzUGF0aCIsIl9nZXRQYXRoIiwiZW50aXR5U2V0Q29udGV4dCIsInNBY3Rpb25OYW1lUGF0aCIsImFjdGlvbk5hbWVDb250ZXh0Iiwic0ZyYWdtZW50TmFtZSIsImFjdGlvblBhcmFtZXRlckluZm9zIiwiX3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIiLCJwYXJhbWV0ZXIiLCJhbGxNZXNzYWdlcyIsImdlbmVyYXRlIiwicmVsZXZhbnRNZXNzYWdlcyIsIm1zZyIsImdldENvbnRyb2xJZHMiLCJpZCIsInJlbW92ZU1lc3NhZ2VzIiwib0NvbnRyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJvRXZlbnQiLCJmaWVsZCIsImdldFNvdXJjZSIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsImdldFBhcmFtZXRlciIsImhhc0Vycm9yIiwiZXJyb3IiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiY3JlYXRlZEZyYWdtZW50IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImVudGl0eVNldCIsIm1vZGVscyIsImFGdW5jdGlvblBhcmFtcyIsIkNvbW1vblV0aWxzIiwic2V0VXNlckRlZmF1bHRzIiwib0RpYWxvZ0NvbnRlbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIm1hcCIsImFjdGlvblBhcmFtZXRlciIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlzTXVsdGlWYWx1ZSIsImFjdGlvblJlc3VsdCIsImRpYWxvZ0NhbmNlbGxlZCIsImJ1dHRvbkxvY2siLCJEaWFsb2ciLCJ0aXRsZSIsImNvbnRlbnQiLCJlc2NhcGVIYW5kbGVyIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0ZXh0IiwiX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiLCJwcmVzcyIsIl92YWxpZGF0ZVByb3BlcnRpZXMiLCJCdXN5TG9ja2VyIiwibG9jayIsImZhaWxlZENvbnRleHRzIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwidlBhcmFtZXRlclZhbHVlIiwiYWxsTnVsbFBhcmFtZXRlcnMiLCJvUGFyYW1ldGVyQ29udGV4dCIsIm9PcGVyYXRpb25CaW5kaW5nIiwiZ2V0UGFyYW1ldGVyQ29udGV4dCIsImFNVkZDb250ZW50IiwiYUtleVZhbHVlcyIsImoiLCJLZXkiLCJzZXRQcm9wZXJ0eSIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwiaW5uZXJQYXJhbWV0ZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlUGFnZU5hdmlnYXRpb25DYWxsYmFjayIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImVuZEJ1dHRvbiIsImJlZm9yZU9wZW4iLCJvQ2xvbmVFdmVudCIsImdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInNEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0JvdW5kRnVuY3Rpb25OYW1lIiwicGFyYW1ldGVyTW9kZWxEYXRhIiwicHJlZmlsbFBhcmFtZXRlciIsInNQYXJhbU5hbWUiLCJ2UGFyYW1EZWZhdWx0VmFsdWUiLCIkUGF0aCIsInZQYXJhbVZhbHVlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwicmVxdWVzdFByb3BlcnR5Iiwic1BhdGhGb3JDb250ZXh0IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwiTG9nIiwiYkxhdGVQcm9wZXJ0eUVycm9yIiwiaGFzT3duUHJvcGVydHkiLCJnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblBhdGgiLCJnZXRQYXJhbWV0ZXJQYXRoIiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwib3BlcmF0aW9ucyIsImFQcmVmaWxsUGFyYW1Qcm9taXNlcyIsImFsbCIsImFFeGVjRnVuY3Rpb25Qcm9taXNlcyIsIm9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlIiwic01vZHVsZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiRlBNSGVscGVyIiwiYWN0aW9uV3JhcHBlciIsImFQcm9taXNlcyIsImN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSIsImZ1bmN0aW9uUGFyYW1zIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsInZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwic2V0UGFyYW1ldGVyIiwiYkVycm9yRm91bmQiLCJvVmFsdWUiLCJzVGV4dCIsIndhcm5pbmciLCJjb250ZW50V2lkdGgiLCJmbkFzeW5jQmVmb3JlT3BlbiIsImFQYXJhbWV0ZXJzIiwib0NvbnRleHRPYmplY3QiLCJyZXF1ZXN0T2JqZWN0IiwiZ2V0SXRlbXMiLCJnZXRWYWx1ZSIsImFmdGVyQ2xvc2UiLCJzZXRNb2RlbCIsImJpbmRFbGVtZW50IiwicGF0aCIsIm9NVkZNb2RlbCIsImdldEJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJhZGREZXBlbmRlbnQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdEJpbmRpbmciLCJvcGVuIiwic2xpY2UiLCJzRW50aXR5U2V0TmFtZSIsImFBY3Rpb25OYW1lIiwic0tleSIsImJSZXNvdXJjZUtleUV4aXN0cyIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImV4ZWN1dGVEZXBlbmRpbmdPblNlbGVjdGVkQ29udGV4dHMiLCJpQ29udGV4dExlbmd0aCIsImN1cnJlbnRfY29udGV4dF9pbmRleCIsImludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlIiwiaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCIsImJFbmFibGVTdHJpY3RIYW5kbGluZyIsIm9Qcm9wZXJ0eSIsIiRraW5kIiwib3BlcmF0aW9uc0hlbHBlciIsImZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZCIsInVwZGF0ZTQxMlRyYW5zaXN0aW9uTWVzc2FnZXMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJvbmx5U3VjY2Vzc01lc3NhZ2VzIiwidHJhbnNpdGlvbk1lc3NhZ2VzIiwiaXNEdXBsaWNhdGUiLCJnZXRJZCIsIlN1Y2Nlc3MiLCJnZXRQZXJzaXN0ZW50IiwiY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbiIsIm9Mb2NhbEFjdGlvblByb21pc2UiLCJ1bkJvdW5kTXNncyIsImJvdW5kTXNncyIsInNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFBY3Rpb25Qcm9taXNlcyIsIm9pbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlT2JqZWN0IiwiZm5FeGVjdXRlQWN0aW9uIiwiYWN0aW9uQ29udGV4dCIsIm9TaWRlRWZmZWN0IiwiaW5kaXZpZHVhbEFjdGlvblByb21pc2UiLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZm5SZXF1ZXN0U2lkZUVmZmVjdHMiLCJhbGxTZXR0bGVkIiwiZm5FeGVjdXRlU2luZ2xlQWN0aW9uIiwiZm5FeGVjdXRlQ2hhbmdlc2V0IiwiYUNoYW5nZVNldExvY2FsUHJvbWlzZXMiLCJub29wIiwicmVuZGVyTWVzc2FnZVZpZXciLCJzaFByb21pc2UiLCJzZXREYXRhIiwiZm5IYW5kbGVSZXN1bHRzIiwiZm5FeGVjdXRlU2VxdWVudGlhbGx5IiwiY29udGV4dHNUb0V4ZWN1dGUiLCJwcm9jZXNzT25lQWN0aW9uIiwiYWN0aW9uSW5kZXgiLCJpbml0aWFsVGFibGVDb250ZXh0IiwiZ2V0Um93QmluZGluZyIsImdldEhlYWRlckNvbnRleHQiLCJyZWR1Y2UiLCJwcm9taXNlIiwiZmluYWxseSIsImFsbFByb21pc2UiLCJzaWRlRWZmZWN0IiwiY3VycmVudFByb21pc2VWYWx1ZXMiLCJjdXJyZW50UHJvbWlzZVZhbHVlIiwiYWN0aW9uUGFyYW1ldGVycyIsImFMb2NhbFByb21pc2UiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib0xvY2FsUHJvbWlzZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyIsImdldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImZhY2FkZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IHR5cGUgeyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgRGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25TaWRlRWZmZWN0c1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7IERpYWxvZyRCZWZvcmVPcGVuRXZlbnQgfSBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uLy4uLy4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IG9wZXJhdGlvbnNIZWxwZXIsIHsgdHlwZSBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnMsIHR5cGUgU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uLy4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgQWN0aW9uUGFyYW1ldGVySW5mbyB9IGZyb20gXCIuL19pbnRlcm5hbFwiO1xuaW1wb3J0IHsgX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIsIF92YWxpZGF0ZVByb3BlcnRpZXMgfSBmcm9tIFwiLi9faW50ZXJuYWxcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IE1lc3NhZ2VCb3guQWN0aW9uO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25SZXNwb25zZSA9IHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQ+W107XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBjb250ZXh0cyBFaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyB0byBiZSBiZSBjYWxsZWRcbiAqIEBwYXJhbSBvTW9kZWwgT0RhdGEgTW9kZWxcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVyc10gQSBtYXAgb2YgYmluZGluZyBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgcGFydCBvZiAkc2VsZWN0IGFuZCAkZXhwYW5kIGNvbWluZyBmcm9tIHNpZGUgZWZmZWN0cyBmb3IgYm91bmQgYWN0aW9uc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdF0gQXJyYXkgb2YgcHJvcGVydHkgcGF0aHMgdG8gYmUgcmVxdWVzdGVkIGluIGFkZGl0aW9uIHRvIGFjdHVhbCB0YXJnZXQgcHJvcGVydGllcyBvZiB0aGUgc2lkZSBlZmZlY3RcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogQ2hhbmdlc2V0IHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgSXNvbGF0ZWQgdG8gcHV0IHRoZW0gaW50byBzZXBhcmF0ZSBjaGFuZ2VzZXRzLCBkZWZhdWx0cyB0byBJc29sYXRlZFxuICogQHBhcmFtIFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5wYXJlbnRDb250cm9sXSBJZiBzcGVjaWZpZWQsIHRoZSBkaWFsb2dzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbnQgb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaWdub3JlRVRhZ10gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IEVUYWcgaGFuZGxpbmdcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQm91bmRBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IENhbGxBY3Rpb25QYXJhbWV0ZXJzLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG4pOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdGlmICghc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMpIHtcblx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyA9IHtcblx0XHRcdGlzNDEyRXhlY3V0ZWQ6IGZhbHNlLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM6IFtdLFxuXHRcdFx0c3RyaWN0SGFuZGxpbmdQcm9taXNlczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlczogW10sXG5cdFx0XHRkZWxheVN1Y2Nlc3NNZXNzYWdlczogW10sXG5cdFx0XHRwcm9jZXNzZWRNZXNzYWdlSWRzOiBbXVxuXHRcdH07XG5cdH1cblx0aWYgKCFjb250ZXh0cyB8fCBjb250ZXh0cy5sZW5ndGggPT09IDApIHtcblx0XHQvL0luIEZyZWVzdHlsZSBhcHBzIGJvdW5kIGFjdGlvbnMgY2FuIGhhdmUgbm8gY29udGV4dFxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGFjdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb250ZXh0XCIpO1xuXHR9XG5cdC8vIHRoaXMgbWV0aG9kIGVpdGhlciBhY2NlcHRzIHNpbmdsZSBjb250ZXh0IG9yIGFuIGFycmF5IG9mIGNvbnRleHRzXG5cdC8vIFRPRE86IFJlZmFjdG9yIHRvIGFuIHVuYW1iaWd1b3MgQVBJXG5cdGNvbnN0IGlzQ2FsbGVkV2l0aEFycmF5ID0gQXJyYXkuaXNBcnJheShjb250ZXh0cyk7XG5cblx0Ly8gaW4gY2FzZSBvZiBzaW5nbGUgY29udGV4dCB3cmFwIGludG8gYW4gYXJyYXkgZm9yIGNhbGxlZCBtZXRob2RzIChlc3AuIGNhbGxBY3Rpb24pXG5cdG1QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGlzQ2FsbGVkV2l0aEFycmF5ID8gY29udGV4dHMgOiBbY29udGV4dHNdO1xuXG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0Ly8gQW5hbHl6aW5nIG1ldGFNb2RlbFBhdGggZm9yIGFjdGlvbiBvbmx5IGZyb20gZmlyc3QgY29udGV4dCBzZWVtcyB3ZWlyZCwgYnV0IHByb2JhYmx5IHdvcmtzIGluIGFsbCBleGlzdGluZyBzemVuYXJpb3MgLSBpZiBzZXZlcmFsIGNvbnRleHRzIGFyZSBwYXNzZWQsIHRoZXkgcHJvYmFibHlcblx0XHQvLyBiZWxvbmcgdG8gdGhlIHNhbWUgbWV0YW1vZGVscGF0aC4gVE9ETzogQ2hlY2ssIHdoZXRoZXIgdGhpcyBjYW4gYmUgaW1wcm92ZWQgLyBzemVuYXJpb3Mgd2l0aCBkaWZmZXJlbnQgbWV0YU1vZGVsUGF0aHMgbWlnaHQgZXhpc3Rcblx0XHRzQWN0aW9uUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgobVBhcmFtZXRlcnMuYUNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7c0FjdGlvbk5hbWV9YCxcblx0XHRvQm91bmRBY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NBY3Rpb25QYXRofS9AJHVpNS5vdmVybG9hZC8wYCkhO1xuXHRtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gYXdhaXQgQWN0aW9uUnVudGltZS5nZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIHNBY3Rpb25QYXRoLCBtUGFyYW1ldGVycy5hQ29udGV4dHMpO1xuXG5cdC8vIFByb21pc2UgcmV0dXJuZWQgYnkgY2FsbEFjdGlvbiBjdXJyZW50bHkgaXMgcmVqZWN0ZWQgaW4gY2FzZSBvZiBleGVjdXRpb24gZm9yIG11bHRpcGxlIGNvbnRleHRzIHBhcnRseSBmYWlsaW5nLiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIChzb21lIGZhaWxpbmcgY29udGV4dHMgZG8gbm90IG1lYW5cblx0Ly8gdGhhdCBmdW5jdGlvbiBkaWQgbm90IGZ1bGZpbGwgaXRzIHRhc2spLCBidXQgYXMgdGhpcyBpcyBhIGJpZ2dlciByZWZhY3RvcmluZywgZm9yIHRoZSB0aW1lIGJlaW5nIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXQgYXQgdGhlIGNhbGxpbmcgcGxhY2UgKGkuZS4gaGVyZSlcblx0Ly8gPT4gcHJvdmlkZSB0aGUgc2FtZSBoYW5kbGVyIChtYXBwaW5nIGJhY2sgZnJvbSBhcnJheSB0byBzaW5nbGUgcmVzdWx0L2Vycm9yIGlmIG5lZWRlZCkgZm9yIHJlc29sdmVkL3JlamVjdGVkIGNhc2Vcblx0Y29uc3QgZXh0cmFjdFNpbmdsZVJlc3VsdCA9IGZ1bmN0aW9uIChyZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKTogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdC8vIHNpbmdsZSBhY3Rpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgcmVqZWN0ZWRcblx0XHRpZiAocmVzdWx0WzBdLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikge1xuXHRcdFx0cmV0dXJuIHJlc3VsdFswXS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBkaWFsb2cgY2FuY2VsbGF0aW9uLCBubyBhcnJheSBpcyByZXR1cm5lZCA9PiB0aHJvdyB0aGUgcmVzdWx0LlxuXHRcdFx0Ly8gSWRlYWxseSwgZGlmZmVyZW50aWF0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkIGhlcmUgPT4gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gd2hlbiBzZXBhcmF0aW5nIGRpYWxvZyBoYW5kbGluZyAoc2luZ2xlIG9iamVjdCB3aXRoIHNpbmdsZSByZXN1bHQpIGZyb20gYmFja2VuZFxuXHRcdFx0Ly8gZXhlY3V0aW9uIChwb3RlbnRpYWxseSBtdWx0aXBsZSBvYmplY3RzKVxuXHRcdFx0dGhyb3cgcmVzdWx0WzBdLnJlYXNvbiB8fCByZXN1bHQ7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lLCBvTW9kZWwsIG9Cb3VuZEFjdGlvbiwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMsIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKS50aGVuKFxuXHRcdChyZXN1bHQpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGV4dHJhY3RTaW5nbGVSZXN1bHQocmVzdWx0IGFzIFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0PltdKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdChyZXN1bHQpID0+IHtcblx0XHRcdGlmIChpc0NhbGxlZFdpdGhBcnJheSkge1xuXHRcdFx0XHR0aHJvdyByZXN1bHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZXh0cmFjdFNpbmdsZVJlc3VsdChyZXN1bHQgYXMgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQ+W10pO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn1cbi8qKlxuICogQ2FsbHMgYW4gYWN0aW9uIGltcG9ydC5cbiAqXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGltcG9ydCB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSBtb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzXSBBIG1hcCBvZiBhY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBwcm92aWRlZCB2YWx1ZXNcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIFtwYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSBbcGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0gW3BhcmFtZXRlcnMuaWdub3JlRVRhZ10gSWYgc3BlY2lmaWVkLCB0aGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRob3V0IEVUYWcgaGFuZGxpbmdcbiAqIEBwYXJhbSBbc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNdIE9wdGlvbmFsLCB1dGlsaXR5IGZsYWdzIGFuZCBtZXNzYWdlcyBmb3Igc3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQWN0aW9uSW1wb3J0KFxuXHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG1vZGVsOiBPRGF0YU1vZGVsLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFyYW1ldGVyczoge1xuXHRcdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W107XG5cdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0YmluZGluZ1BhcmFtZXRlcnM/OiBCaW5kQ29udGV4dFBhcmFtZXRlcnM7XG5cdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0XHRvblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdFx0b25SZXNwb25zZTogRnVuY3Rpb247XG5cdFx0cGFyZW50Q29udHJvbDogVmlldztcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyO1xuXHRcdGJPYmplY3RQYWdlPzogYm9vbGVhbjtcblx0XHRzZWxlY3RlZEl0ZW1zPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcblx0fSAmIHtcblx0XHRpc0NyaXRpY2FsQWN0aW9uPzogYm9vbGVhbjtcblx0fSxcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllc1xuKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRpZiAoIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQWN0aW9uIGV4cGVjdHMgYSBtb2RlbC9jb250ZXh0IGZvciBleGVjdXRpb25cIik7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0YWN0aW9uUGF0aCA9IG1vZGVsLmJpbmRDb250ZXh0KGAvJHthY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRhY3Rpb25OYW1lRnJvbU1vZGVsID0gbWV0YU1vZGVsLmdldE9iamVjdChhY3Rpb25QYXRoKS4kQWN0aW9uLFxuXHRcdHVuYm91bmRBY3Rpb25JbmRleCA9IChtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHthY3Rpb25OYW1lRnJvbU1vZGVsfWApIGFzIE1ldGFNb2RlbEFjdGlvbltdKS5maW5kSW5kZXgoKGFjdGlvbikgPT4gIWFjdGlvbi4kSXNCb3VuZCksXG5cdFx0YWN0aW9uSW1wb3J0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHthY3Rpb25OYW1lRnJvbU1vZGVsfS8ke3VuYm91bmRBY3Rpb25JbmRleH1gKTtcblx0cGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uID0gYXdhaXQgQWN0aW9uUnVudGltZS5nZXRJc0FjdGlvbkNyaXRpY2FsKG1ldGFNb2RlbCwgYCR7YWN0aW9uUGF0aH0vQCR1aTUub3ZlcmxvYWRgKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oYWN0aW9uTmFtZSwgbW9kZWwsIGFjdGlvbkltcG9ydCwgYXBwQ29tcG9uZW50LCBwYXJhbWV0ZXJzLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBjYWxsQm91bmRGdW5jdGlvbihzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHQ6IENvbnRleHQsIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0aWYgKCFjb250ZXh0KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgZnVuY3Rpb25zIGFsd2F5cyByZXF1aXJlcyBhIGNvbnRleHRcIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSl9LyR7c0Z1bmN0aW9uTmFtZX1gLFxuXHRcdG9Cb3VuZEZ1bmN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRGdW5jdGlvbiwgY29udGV4dCk7XG59XG50eXBlIFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzID0ge1xuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0Zm5PblN1Ym1pdHRlZDogRnVuY3Rpb247XG5cdGZuT25SZXNwb25zZTogRnVuY3Rpb247XG5cdGFjdGlvbk5hbWU6IHN0cmluZztcblx0bW9kZWw6IE9EYXRhTW9kZWw7XG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXTtcblx0YkdldEJvdW5kQ29udGV4dD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHNlbGVjdGVkSXRlbXM6IE9EYXRhVjRDb250ZXh0W107XG5cdGFDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdG1CaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0YWRkaXRpb25hbFNpZGVFZmZlY3Q/OiBBY3Rpb25TaWRlRWZmZWN0c1R5cGU7XG5cdGJHcm91cGVkPzogYm9vbGVhbjtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0aXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRiT2JqZWN0UGFnZT86IGJvb2xlYW47XG5cdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdGJJc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdGdyb3VwSWQ/OiBzdHJpbmc7XG5cdGlzU3RhdGljPzogYm9vbGVhbjtcblx0Y29udHJvbD86IENvbnRyb2w7XG5cdG9EaWFsb2c/OiBEaWFsb2c7XG5cdHJlcXVlc3RTaWRlRWZmZWN0cz86IEZ1bmN0aW9uO1xuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZT86IEZ1bmN0aW9uO1xufTtcbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBpbXBvcnQuXG4gKlxuICogQHBhcmFtIHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsRnVuY3Rpb25JbXBvcnQoc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPHZvaWQgfCBPRGF0YVY0Q29udGV4dD4ge1xuXHRpZiAoIXNGdW5jdGlvbk5hbWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRnVuY3Rpb25QYXRoID0gb01vZGVsLmJpbmRDb250ZXh0KGAvJHtzRnVuY3Rpb25OYW1lfWApLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAvJHtvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpIS5nZXRPYmplY3QoXCIkRnVuY3Rpb25cIil9LzBgKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvRnVuY3Rpb25JbXBvcnQpO1xufVxuYXN5bmMgZnVuY3Rpb24gX2V4ZWN1dGVGdW5jdGlvbihcblx0c0Z1bmN0aW9uTmFtZTogc3RyaW5nLFxuXHRvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdG9GdW5jdGlvbjogQ29udGV4dCB8IG51bGwsXG5cdGNvbnRleHQ/OiBDb250ZXh0XG4pOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdGxldCBzR3JvdXBJZDtcblx0aWYgKCFvRnVuY3Rpb24gfHwgIW9GdW5jdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYEZ1bmN0aW9uICR7c0Z1bmN0aW9uTmFtZX0gbm90IGZvdW5kYCkpO1xuXHR9XG5cdGxldCBmdW5jdGlvblRvQ2FsbDogT0RhdGFDb250ZXh0QmluZGluZztcblx0aWYgKGNvbnRleHQpIHtcblx0XHRmdW5jdGlvblRvQ2FsbCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtjb250ZXh0LmdldFBhdGgoKX0vJHtzRnVuY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uR3JvdXBcIjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvblRvQ2FsbCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0Z1bmN0aW9uTmFtZX0oLi4uKWApO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkltcG9ydFwiO1xuXHR9XG5cdGNvbnN0IG9GdW5jdGlvblByb21pc2UgPSBmdW5jdGlvblRvQ2FsbC5leGVjdXRlKHNHcm91cElkKTtcblx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0cmV0dXJuIG9GdW5jdGlvblByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uVG9DYWxsLmdldEJvdW5kQ29udGV4dCgpO1xuXHR9KTtcbn1cbnR5cGUgQ2FsbEFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+W107XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0b25TdWJtaXR0ZWQ6IEZ1bmN0aW9uO1xuXHRvblJlc3BvbnNlOiBGdW5jdGlvbjtcblx0cGFyZW50Q29udHJvbDogVmlldztcblx0Y29udHJvbD86IENvbnRyb2w7XG5cdGJJc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjtcblx0Yk9iamVjdFBhZ2U/OiBib29sZWFuO1xuXHRpc0NyaXRpY2FsQWN0aW9uPzogYm9vbGVhbjtcblx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRpZ25vcmVFVGFnPzogYm9vbGVhbjtcbn0gJiB7XG5cdGJHZXRCb3VuZENvbnRleHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG59ICYge1xuXHRiR3JvdXBlZD86IGJvb2xlYW47XG5cdGFDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdHNlbGVjdGVkSXRlbXM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRhZGRpdGlvbmFsU2lkZUVmZmVjdD86IEFjdGlvblNpZGVFZmZlY3RzVHlwZTtcblx0bUJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuO1xuXHRncm91cElkPzogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGNhbGxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0b0FjdGlvbjogQ29udGV4dCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnMsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0aWYgKCFzdHJpY3RIYW5kbGluZ1V0aWxpdGllcykge1xuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzID0ge1xuXHRcdFx0aXM0MTJFeGVjdXRlZDogZmFsc2UsXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlsczogW10sXG5cdFx0XHRzdHJpY3RIYW5kbGluZ1Byb21pc2VzOiBbXSxcblx0XHRcdHN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzOiBbXSxcblx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzOiBbXSxcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHM6IFtdXG5cdFx0fTtcblx0fVxuXHRtUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0cmV0dXJuIG5ldyBQcm9taXNlPEFjdGlvblJlc3BvbnNlPihhc3luYyBmdW5jdGlvbiAoXG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBBY3Rpb25SZXNwb25zZSkgPT4gdm9pZCxcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvciB8IEFjdGlvblJlc3BvbnNlKSA9PiB2b2lkXG5cdCkge1xuXHRcdGxldCBmbkRpYWxvZzpcblx0XHRcdHwgKChcblx0XHRcdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRzQWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdLFxuXHRcdFx0XHRcdGFQYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0b0FjdGlvbjogQ29udGV4dCxcblx0XHRcdFx0XHRwYXJlbnRDb250cm9sOiBWaWV3LFxuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGlnbm9yZUVUYWc/OiBib29sZWFuXG5cdFx0XHQgICkgPT4gUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdPilcblx0XHRcdHwgbnVsbDtcblx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0Ly9sZXQgZmFpbGVkQWN0aW9uUHJvbWlzZTogYW55O1xuXHRcdGNvbnN0IHNBY3Rpb25MYWJlbCA9IG1QYXJhbWV0ZXJzLmxhYmVsO1xuXHRcdGNvbnN0IGJTa2lwUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBzdHJpbmc7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRsZXQgYklzU2FtZUVudGl0eTtcblx0XHRsZXQgb1JldHVyblR5cGU7XG5cdFx0bGV0IGJWYWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnM7XG5cdFx0Y29uc3QgYWN0aW9uRGVmaW5pdGlvbiA9IG9BY3Rpb24uZ2V0T2JqZWN0KCkgYXMgTWV0YU1vZGVsQWN0aW9uO1xuXHRcdGlmICghb0FjdGlvbiB8fCAhb0FjdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEFjdGlvbiAke3NBY3Rpb25OYW1lfSBub3QgZm91bmRgKSk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBhY3Rpb25cblx0XHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgYWN0aW9uIGhhcyBwYXJhbWV0ZXJzIGFuZCB3b3VsZCBuZWVkIGEgcGFyYW1ldGVyIGRpYWxvZ1xuXHRcdC8vIFRoZSBwYXJhbWV0ZXIgUmVzdWx0SXNBY3RpdmVFbnRpdHkgaXMgYWx3YXlzIGhpZGRlbiBpbiB0aGUgZGlhbG9nISBIZW5jZSBpZlxuXHRcdC8vIHRoaXMgaXMgdGhlIG9ubHkgcGFyYW1ldGVyLCB0aGlzIGlzIHRyZWF0ZWQgYXMgbm8gcGFyYW1ldGVyIGhlcmUgYmVjYXVzZSB0aGVcblx0XHQvLyBkaWFsb2cgd291bGQgYmUgZW1wdHkhXG5cdFx0Ly8gRklYTUU6IFNob3VsZCBvbmx5IGlnbm9yZSB0aGlzIGlmIHRoaXMgaXMgYSAnY3JlYXRlJyBhY3Rpb24sIG90aGVyd2lzZSBpdCBpcyBqdXN0IHNvbWUgbm9ybWFsIHBhcmFtZXRlciB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGlzIG5hbWVcblx0XHRjb25zdCBiQWN0aW9uTmVlZHNQYXJhbWV0ZXJEaWFsb2cgPVxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiAhKGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSAmJiBhQWN0aW9uUGFyYW1ldGVyc1swXS4kTmFtZSA9PT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKTtcblxuXHRcdC8vIFByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGZyb20gaW52b2tlQWN0aW9uIGNhbGxcblx0XHRjb25zdCBhUGFyYW1ldGVyVmFsdWVzID0gbVBhcmFtZXRlcnMucGFyYW1ldGVyVmFsdWVzO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHN0YXJ0dXAgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblxuXHRcdC8vIEluIGNhc2UgYW4gYWN0aW9uIHBhcmFtZXRlciBpcyBuZWVkZWQsIGFuZCB3ZSBzaGFsbCBza2lwIHRoZSBkaWFsb2csIGNoZWNrIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCBwYXJhbWV0ZXJzXG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZyAmJiBiU2tpcFBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0YlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycyA9IF92YWx1ZXNQcm92aWRlZEZvckFsbFBhcmFtZXRlcnMoXG5cdFx0XHRcdCEhYklzQ3JlYXRlQWN0aW9uLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIERlcGVuZGluZyBvbiB0aGUgcHJldmlvdXNseSBkZXRlcm1pbmVkIGRhdGEsIGVpdGhlciBzZXQgYSBkaWFsb2cgb3IgbGVhdmUgaXQgZW1wdHkgd2hpY2hcblx0XHQvLyB3aWxsIGxlYWQgdG8gZGlyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgYWN0aW9uIHdpdGhvdXQgYSBkaWFsb2dcblx0XHRmbkRpYWxvZyA9IG51bGw7XG5cdFx0aWYgKGJBY3Rpb25OZWVkc1BhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0aWYgKCEoYlNraXBQYXJhbWV0ZXJEaWFsb2cgJiYgYlZhbHVlc1Byb3ZpZGVkRm9yQWxsUGFyYW1ldGVycykpIHtcblx0XHRcdFx0Zm5EaWFsb2cgPSBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdGZuRGlhbG9nID0gY29uZmlybUNyaXRpY2FsQWN0aW9uO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyA9IHtcblx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdGZuT25TdWJtaXR0ZWQ6IG1QYXJhbWV0ZXJzLm9uU3VibWl0dGVkLFxuXHRcdFx0Zm5PblJlc3BvbnNlOiBtUGFyYW1ldGVycy5vblJlc3BvbnNlLFxuXHRcdFx0YWN0aW9uTmFtZTogc0FjdGlvbk5hbWUsXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0bGFiZWw6IG1QYXJhbWV0ZXJzLmxhYmVsLFxuXHRcdFx0c2VsZWN0ZWRJdGVtczogbVBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyFcblx0XHR9O1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q/LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGFDb250ZXh0cyFbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChvTWV0YU1vZGVsLCBhQ29udGV4dHMhWzBdLmdldFBhdGgoKSkhO1xuXG5cdFx0XHRcdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRcdFx0aU1lc3NhZ2VTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmZpbmRJbmRleChmdW5jdGlvbiAoZXhwKSB7XG5cdFx0XHRcdFx0XHQvLyAnKicgZWZmZWN0aXZlbHkgaW5jbHVkZXMgdGhlIG1lc3NhZ2VzIHBhdGggaWYgdGhlcmUgaXMgb25lXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHlwZW9mIGV4cCA9PT0gXCJzdHJpbmdcIiAmJiAoZXhwID09PSBzTWVzc2FnZXNQYXRoIHx8IGV4cCA9PT0gXCIqXCIpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gQWRkIFNBUF9NZXNzYWdlcyBieSBkZWZhdWx0IGlmIG5vdCBhbm5vdGF0ZWQgYnkgc2lkZSBlZmZlY3RzLCBhY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgY29sbGVjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyB0aGUgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIHR5cGVcblx0XHRcdFx0XHRvUmV0dXJuVHlwZSA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFJldHVyblR5cGVcIik7XG5cdFx0XHRcdFx0YklzU2FtZUVudGl0eSA9XG5cdFx0XHRcdFx0XHRvUmV0dXJuVHlwZSAmJiAhb1JldHVyblR5cGUuJGlzQ29sbGVjdGlvbiAmJiBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCkuJFR5cGUgPT09IG9SZXR1cm5UeXBlLiRUeXBlO1xuXG5cdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA+IC0xIHx8IGJJc1NhbWVFbnRpdHkpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSBtZXNzYWdlIHBhdGggaXMgYW5ub3RhdGVkIGFzIHNpZGUgZWZmZWN0LiBBcyB0aGVyZSdzIG5vIGJpbmRpbmcgZm9yIGl0IGFuZCB0aGUgbW9kZWwgZG9lcyBjdXJyZW50bHkgbm90IGFsbG93XG5cdFx0XHRcdFx0XHQvLyB0byBhZGQgaXQgYXQgYSBsYXRlciBwb2ludCBvZiB0aW1lIHdlIGhhdmUgdG8gdGFrZSBjYXJlIGl0J3MgcGFydCBvZiB0aGUgJHNlbGVjdCBvZiB0aGUgUE9TVCwgdGhlcmVmb3JlIG1vdmluZyBpdC5cblx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyB8fCB7fTtcblxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLmdldE9iamVjdChgJFJldHVyblR5cGUvJFR5cGUvJHtzTWVzc2FnZXNQYXRofWApICYmXG5cdFx0XHRcdFx0XHRcdCghbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHxcblx0XHRcdFx0XHRcdFx0XHQhbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Quc3BsaXQoXCIsXCIpLmluY2x1ZGVzKHNNZXNzYWdlc1BhdGgpKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHQ/IGAke21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0fSwke3NNZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0XHRcdDogc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHNpZGUgZWZmZWN0cyBhdCBlbnRpdHkgbGV2ZWwgYmVjYXVzZSAkc2VsZWN0IHN0b3BzIHRoZXNlIGJlaW5nIHJldHVybmVkIGJ5IHRoZSBhY3Rpb25cblx0XHRcdFx0XHRcdFx0Ly8gT25seSBpZiBubyBvdGhlciBzaWRlIGVmZmVjdHMgd2VyZSBhZGRlZCBmb3IgTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0aWYgKGlNZXNzYWdlU2lkZUVmZmVjdCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMucHVzaChcIipcIik7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJiBpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIHRyaWdnZXIgYWN0aW9uIHRoZXJlZm9yZSBubyBuZWVkIHRvIHJlcXVlc3QgbWVzc2FnZXMgYWdhaW5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuc3BsaWNlKGlNZXNzYWdlU2lkZUVmZmVjdCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUNvbnRleHRzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQgPSBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZTtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyA9IG1QYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmdyb3VwSWQgPSBtUGFyYW1ldGVycy5ncm91cElkO1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbC5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkgYXMgQ29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5jb250cm9sID0gbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbDtcblx0XHRcdFx0bVBhcmFtZXRlcnMuY29udHJvbCA9IG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2w7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0aWYgKGJJc0NyZWF0ZUFjdGlvbikge1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdH1cblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gKGFjdGlvbkRlZmluaXRpb24uJFBhcmFtZXRlciB8fCBbXSkuc29tZShcblx0XHRcdChhUGFyYW1ldGVyOiB7XG5cdFx0XHRcdCRUeXBlOiBzdHJpbmc7XG5cdFx0XHRcdCROYW1lOiBzdHJpbmc7XG5cdFx0XHRcdCROdWxsYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdFx0XHRcdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdFx0XHRcdCRTY2FsZT86IG51bWJlcjtcblx0XHRcdFx0JGlzQ29sbGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHR9KSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0KChhY3Rpb25EZWZpbml0aW9uLiRFbnRpdHlTZXRQYXRoICYmIGFjdGlvbkRlZmluaXRpb24uJEVudGl0eVNldFBhdGggPT09IGFQYXJhbWV0ZXIuJE5hbWUpIHx8XG5cdFx0XHRcdFx0XHRhY3Rpb25EZWZpbml0aW9uLiRJc0JvdW5kKSAmJlxuXHRcdFx0XHRcdGFQYXJhbWV0ZXIuJGlzQ29sbGVjdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWMgPSBpc1N0YXRpYztcblx0XHRpZiAoZm5EaWFsb2cpIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZm5EaWFsb2coXG5cdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0YVBhcmFtZXRlclZhbHVlcyxcblx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIG9BY3Rpb25Qcm9taXNlXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvT3BlcmF0aW9uUmVzdWx0OiB1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKTogdm9pZCB7XG5cdFx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob09wZXJhdGlvblJlc3VsdDogdW5rbm93bikge1xuXHRcdFx0XHRcdHJlamVjdChvT3BlcmF0aW9uUmVzdWx0IGFzIEVycm9yIHwgQWN0aW9uUmVzcG9uc2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVGFrZSBvdmVyIGFsbCBwcm92aWRlZCBwYXJhbWV0ZXIgdmFsdWVzIGFuZCBjYWxsIHRoZSBhY3Rpb24uXG5cdFx0XHQvLyBUaGlzIHNoYWxsIG9ubHkgaGFwcGVuIGlmIHZhbHVlcyBhcmUgcHJvdmlkZWQgZm9yIGFsbCB0aGUgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHRoZSBwYXJhbWV0ZXIgZGlhbG9nIHNoYWxsIGJlIHNob3duIHdoaWNoIGlzIGVuc3VyZWQgZWFybGllclxuXHRcdFx0aWYgKGFQYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBhUGFyYW1ldGVyVmFsdWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHQpPy52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpIGluIG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSBvU3RhcnR1cFBhcmFtZXRlcnNbXG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZVxuXHRcdFx0XHRcdF0/LlswXSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgb09wZXJhdGlvblJlc3VsdDogdW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9PcGVyYXRpb25SZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuaWdub3JlRVRhZ1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyA9IHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKG1QYXJhbWV0ZXJzLCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycywgYWN0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQgYXMgRXJyb3IgfCBBY3Rpb25SZXNwb25zZSk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoICYmXG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzIS5sZW5ndGggPiAxXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0ZhaWxzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHM7XG5cdFx0XHRcdFx0XHRjb25zdCBhRmFpbGVkQ29udGV4dHMgPSBbXSBhcyBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdGYWlscy5mb3JFYWNoKGZ1bmN0aW9uIChmYWlsOiB7IG9BY3Rpb246IE9EYXRhQ29udGV4dEJpbmRpbmc7IGdyb3VwSWQ6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGFGYWlsZWRDb250ZXh0cy5wdXNoKGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5hQ29udGV4dHMgPSBhRmFpbGVkQ29udGV4dHM7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmFpbGVkT3BlcmF0aW9uUmVzdWx0ID0gYXdhaXQgX2V4ZWN1dGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyA9IFtdO1xuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdFx0XHRcdGFmdGVyQWN0aW9uUmVzb2x1dGlvbihtUGFyYW1ldGVycywgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsIGFjdGlvbkRlZmluaXRpb24pO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRmFpbGVkT3BlcmF0aW9uUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoXG5cdFx0XHRcdFx0XHRcdG9GYWlsZWRPcGVyYXRpb25SZXN1bHQgYXNcblx0XHRcdFx0XHRcdFx0XHR8IEVycm9yXG5cdFx0XHRcdFx0XHRcdFx0fCBPRGF0YVY0Q29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdFx0fCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFyYW1ldGVycz8ubWVzc2FnZUhhbmRsZXI/LnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRjb250cm9sOiBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycz8uY29udHJvbCxcblx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzISxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdHNob3dNZXNzYWdlUGFyYW1ldGVyc0luLFxuXHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uZmlybUNyaXRpY2FsQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHNBY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSxcblx0YVBhcmFtZXRlclZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSB8IHVuZGVmaW5lZCxcblx0b0FjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdG9QYXJlbnRDb250cm9sOiBWaWV3LFxuXHRlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM/OiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0aWdub3JlRVRhZz86IGJvb2xlYW5cbik6IFByb21pc2U8QWN0aW9uUmVzcG9uc2U+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gc0FjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLmluY2x1ZGVzKFwiLlwiKVxuXHRcdFx0PyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV1cblx0XHRcdDogYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIGVudGl0eVNldE5hbWUgPyBgJHtlbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdFx0Y29uc3Qgc0NvbmZpcm1hdGlvblRleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QRVJBVElPTlNfQUNUSU9OX0NPTkZJUk1fTUVTU0FHRVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblxuXHRcdE1lc3NhZ2VCb3guY29uZmlybShzQ29uZmlybWF0aW9uVGV4dCwge1xuXHRcdFx0b25DbG9zZTogYXN5bmMgZnVuY3Rpb24gKHNBY3Rpb246IHN0cmluZykge1xuXHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gQWN0aW9uLk9LKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9PcGVyYXRpb24gPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihcblx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdGlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coKTtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQVBNQWN0aW9uKFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0b1BhcmVudENvbnRyb2w6IFZpZXcsXG5cdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0YUNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRvRGlhbG9nOiBEaWFsb2csXG5cdGFmdGVyNDEyOiBib29sZWFuLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcz86IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRpZ25vcmVFVGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dCB8IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdPiB7XG5cdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycywgb1BhcmVudENvbnRyb2wsIG1lc3NhZ2VIYW5kbGVyLCBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcywgaWdub3JlRVRhZyk7XG5cdC8vIElmIHNvbWUgZW50cmllcyB3ZXJlIHN1Y2Nlc3NmdWwsIGFuZCBvdGhlcnMgaGF2ZSBmYWlsZWQsIHRoZSBvdmVyYWxsIHByb2Nlc3MgaXMgc3RpbGwgc3VjY2Vzc2Z1bC4gSG93ZXZlciwgdGhpcyB3YXMgdHJlYXRlZCBhcyByZWplY3Rpb25cblx0Ly8gYmVmb3JlLCBhbmQgdGhpcyBjdXJyZW50bHkgaXMgc3RpbGwga2VwdCwgYXMgbG9uZyBhcyBkaWFsb2cgaGFuZGxpbmcgaXMgbWl4ZWQgd2l0aCBiYWNrZW5kIHByb2Nlc3MgaGFuZGxpbmcuXG5cdC8vIFRPRE86IFJlZmFjdG9yIHRvIG9ubHkgcmVqZWN0IGluIGNhc2Ugb2Ygb3ZlcmFsbCBwcm9jZXNzIGVycm9yLlxuXHQvLyBGb3IgdGhlIHRpbWUgYmVpbmc6IG1hcCB0byBvbGQgbG9naWMgdG8gcmVqZWN0IGlmIGF0IGxlYXN0IG9uZSBlbnRyeSBoYXMgZmFpbGVkXG5cdC8vIFRoaXMgY2hlY2sgaXMgb25seSBkb25lIGZvciBib3VuZCBhY3Rpb25zID0+IGFDb250ZXh0cyBub3QgZW1wdHlcblx0aWYgKG1QYXJhbWV0ZXJzLmFDb250ZXh0cyAmJiBtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChcblx0XHRcdChhUmVzdWx0IGFzIFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdKT8uc29tZShcblx0XHRcdFx0KG9TaW5nbGVSZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPikgPT4gb1NpbmdsZVJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIlxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgYVJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmIHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzLmxlbmd0aCkge1xuXHRcdGlmICghYWZ0ZXI0MTIpIHtcblx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzKTtcblx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gQk9VTkQgVFJBTlNJVElPTiBBUyBQQVJUIE9GIFNBUF9NRVNTQUdFXG5cdFx0XHRcdG9EaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKGFNZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2wsXG5cdFx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0czogbVBhcmFtZXRlcnMuYUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IG1QYXJhbWV0ZXJzLmxhYmVsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHQvLyBCT1VORCBUUkFOU0lUSU9OIEFTIFBBUlQgT0YgU0FQX01FU1NBR0Vcblx0XHRsZXQgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHx8XG5cdFx0XHQobVBhcmFtZXRlcnMuYkdyb3VwZWQgJiYgaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKSlcblx0XHQpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gdHJ1ZTtcblx0XHR9XG5cdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0aXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2dPcGVuOiBtUGFyYW1ldGVycz8ub0RpYWxvZz8uaXNPcGVuKCksXG5cdFx0XHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U6IGZ1bmN0aW9uIChhTWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IFNob3dNZXNzYWdlUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0YU1lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2wsXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiBtUGFyYW1ldGVycy5hQ29udGV4dHMsXG5cdFx0XHRcdHNBY3Rpb25OYW1lOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYVJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJBY3Rpb25SZXNvbHV0aW9uKFxuXHRtUGFyYW1ldGVyczogQ2FsbEFjdGlvblBhcmFtZXRlcnMsXG5cdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0YWN0aW9uRGVmaW5pdGlvbjogTWV0YU1vZGVsQWN0aW9uXG4pOiB2b2lkIHtcblx0aWYgKFxuXHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzLmxlbmd0aCAmJlxuXHRcdGFjdGlvbkRlZmluaXRpb24uJElzQm91bmRcblx0KSB7XG5cdFx0bGV0IHNlbGVjdGVkQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHQvL2NoZWNrIGZvciBza2lwcGluZyBzdGF0aWMgYWN0aW9uc1xuXHRcdGNvbnN0IGlzU3RhdGljID0gbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaXNTdGF0aWM7XG5cdFx0aWYgKCFpc1N0YXRpYykge1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiKSB8fCBbXTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmNvbnRyb2w7XG5cdFx0XHRpZiAoY29udHJvbC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gY29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UobUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvL3VwZGF0ZSBkZWxldGUgYnV0dG9uXG5cdFx0RGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LCBzZWxlY3RlZENvbnRleHRzKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhY3Rpb25QYXJhbWV0ZXJTaG93TWVzc2FnZUNhbGxiYWNrKFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdGFDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0b0RpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkLFxuXHRtZXNzYWdlczogTWVzc2FnZVtdLFxuXHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzLFxuXHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldDogYm9vbGVhblxuKTogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzIHtcblx0bGV0IHNob3dNZXNzYWdlQm94ID0gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4uc2hvd01lc3NhZ2VCb3gsXG5cdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnNJbi5zaG93TWVzc2FnZURpYWxvZztcblx0Y29uc3Qgb0NvbnRyb2wgPSBtUGFyYW1ldGVycy5jb250cm9sO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRjb25zdCB1bmJvdW5kTWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXSA9PT0gXCJcIjtcblx0fSk7XG5cdGNvbnN0IEFQRG1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKGZ1bmN0aW9uIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cyAmJlxuXHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmNsdWRlcyhtUGFyYW1ldGVycy5hY3Rpb25OYW1lKSAmJlxuXHRcdFx0bVBhcmFtZXRlcnM/LmFBY3Rpb25QYXJhbWV0ZXJzPy5zb21lKGZ1bmN0aW9uIChhY3Rpb25QYXJhbSkge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKCk/LlswXS5pbmNsdWRlcyhhY3Rpb25QYXJhbS4kTmFtZSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0pO1xuXHRBUERtZXNzYWdlcz8uZm9yRWFjaChmdW5jdGlvbiAoQVBETWVzc2FnZSkge1xuXHRcdChBUERNZXNzYWdlIGFzIHVua25vd24gYXMgeyBpc0FQRFRhcmdldDogYm9vbGVhbiB9KS5pc0FQRFRhcmdldCA9IHRydWU7XG5cdH0pO1xuXG5cdGNvbnN0IGVycm9yVGFyZ2V0c0luQVBEID0gQVBEbWVzc2FnZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuXHRsZXQgaGFzQ2hhbmdlU2V0TW9kaWZpZWRNZXNzYWdlID0gZmFsc2U7XG5cdGlmIChzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCAmJiAhZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRoYXNDaGFuZ2VTZXRNb2RpZmllZE1lc3NhZ2UgPSB0cnVlO1xuXHRcdGxldCBzTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9FUlJPUl9NRVNTQUdFU19URVhUXCIpO1xuXHRcdGxldCBzRGVzY3JpcHRpb25UZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX0VSUk9SX01FU1NBR0VTX0RFVEFJTF9URVhUXCIpO1xuXHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRjb25zdCBtZXNzYWdlc0luTW9kZWwgPSBtZXNzYWdlTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGFCb3VuZE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUpO1xuXHRcdGxldCBnZW5lcmljTWVzc2FnZTtcblx0XHRjb25zdCBpc0VkaXRhYmxlID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdGNvbnN0IG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nID0gbWVzc2FnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgbm9uRXJyb3JNZXNzYWdlRXhpc3RzSW5Nb2RlbCA9IG1lc3NhZ2VzSW5Nb2RlbC5maW5kSW5kZXgoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0XHR9KTtcblxuXHRcdGlmIChcblx0XHRcdG5vbkVycm9yTWVzc2FnZUV4aXN0c0luRGlhbG9nICE9PSAxICYmXG5cdFx0XHRub25FcnJvck1lc3NhZ2VFeGlzdHNJbk1vZGVsICE9PSAtMSAmJlxuXHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzICYmXG5cdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHMubGVuZ3RoID4gMVxuXHRcdCkge1xuXHRcdFx0aWYgKG1lc3NhZ2VzSW5Nb2RlbC5sZW5ndGggPT09IDEgJiYgYUJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGlmIChpc0VkaXRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VzSW5Nb2RlbFswXS5zZXRNZXNzYWdlKFxuXHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRcIikgK1xuXHRcdFx0XHRcdFx0XHRcIlxcblxcblwiICtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZXNJbk1vZGVsWzBdLmdldE1lc3NhZ2UoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c01lc3NhZ2UgPSBpc0VkaXRhYmxlXG5cdFx0XHRcdFx0XHQ/IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTF9TSU5HTEVfRVJST1JfTUVTU0FHRV9URVhUX0VESVRcIilcblx0XHRcdFx0XHRcdDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfQ0FOQ0VMX1NJTkdMRV9FUlJPUl9NRVNTQUdFX1RFWFRcIik7XG5cdFx0XHRcdFx0c0Rlc2NyaXB0aW9uVGV4dCA9IFwiXCI7XG5cdFx0XHRcdFx0Z2VuZXJpY01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHRtZXNzYWdlOiBzTWVzc2FnZSxcblx0XHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdFx0dGFyZ2V0OiBcIlwiLFxuXHRcdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzRGVzY3JpcHRpb25UZXh0LFxuXHRcdFx0XHRcdFx0Y29kZTogXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0bWVzc2FnZXMudW5zaGlmdChnZW5lcmljTWVzc2FnZSk7XG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdlbmVyaWNNZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IHNNZXNzYWdlLFxuXHRcdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRcdHRhcmdldDogXCJcIixcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBzRGVzY3JpcHRpb25UZXh0LFxuXHRcdFx0XHRcdGNvZGU6IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bWVzc2FnZXMudW5zaGlmdChnZW5lcmljTWVzc2FnZSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvRGlhbG9nICYmIG9EaWFsb2cuaXNPcGVuKCkgJiYgYUNvbnRleHRzLmxlbmd0aCAhPT0gMCAmJiAhbVBhcmFtZXRlcnMuaXNTdGF0aWMpIHtcblx0XHRpZiAoIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHQvL2lzb2xhdGVkXG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEgfHwgIWVycm9yVGFyZ2V0c0luQVBEKSB7XG5cdFx0XHRcdC8vIGRvZXMgbm90IG1hdHRlciBpZiBlcnJvciBpcyBpbiBBUEQgb3Igbm90LCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udGV4dHMgc2VsZWN0ZWQgb3IgaWYgdGhlIGVycm9yIGlzIG5vdCB0aGUgQVBELCB3ZSBjbG9zZSBpdC5cblx0XHRcdFx0Ly8gVE9ETzogRGlsYW9nIGhhbmRsaW5nIHNob3VsZCBub3QgYmUgcGFydCBvZiBtZXNzYWdlIGhhbmRsaW5nLiBSZWZhY3RvciBhY2NvcmRpbmdseSAtIGRpYWxvZyBzaG91bGQgbm90IGJlIG5lZWRlZCBpbnNpZGUgdGhpcyBtZXRob2QgLSBuZWl0aGVyXG5cdFx0XHRcdC8vIHRvIGFzayB3aGV0aGVyIGl0J3Mgb3Blbiwgbm9yIHRvIGNsb3NlL2Rlc3Ryb3kgaXQhXG5cdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICghZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdC8vY2hhbmdlc2V0XG5cdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblx0bGV0IGZpbHRlcmVkTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRjb25zdCBiSXNBUERPcGVuID0gb0RpYWxvZyAmJiBvRGlhbG9nLmlzT3BlbigpO1xuXHRpZiAoIWhhc0NoYW5nZVNldE1vZGlmaWVkTWVzc2FnZSkge1xuXHRcdGlmIChcblx0XHRcdG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cyAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cygpPy5bMF0gIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0bWVzc2FnZXNbMF0uZ2V0VGFyZ2V0cygpPy5bMF0gIT09IFwiXCIgJiZcblx0XHRcdG1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiXG5cdFx0KSB7XG5cdFx0XHRpZiAoKG9Db250cm9sICYmIG9Db250cm9sLmdldE1vZGVsKFwidWlcIikhLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgPT09IGZhbHNlKSB8fCAhb0NvbnRyb2wpIHtcblx0XHRcdFx0Ly8gT1AgZWRpdCBvciBMUlxuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9ICFlcnJvclRhcmdldHNJbkFQRDtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzaG93TWVzc2FnZUJveCA9IGZhbHNlO1xuXHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAob0NvbnRyb2wpIHtcblx0XHRcdGlmIChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpIS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpID09PSBmYWxzZSkge1xuXHRcdFx0XHRpZiAoYklzQVBET3BlbiAmJiBlcnJvclRhcmdldHNJbkFQRCkge1xuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAob0NvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSEuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRpZiAoIWJJc0FQRE9wZW4gJiYgZXJyb3JUYXJnZXRzSW5BUEQpIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9IHRydWU7XG5cdFx0XHRcdFx0ZmlsdGVyZWRNZXNzYWdlcyA9IHVuYm91bmRNZXNzYWdlcy5jb25jYXQoQVBEbWVzc2FnZXMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFiSXNBUERPcGVuICYmIHVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHQvLyBlcnJvciB0YXJnZXRzIGluIEFQRCA9PiB0aGVyZSBpcyBhdGxlYXN0IG9uZSBib3VuZCBtZXNzYWdlLiBJZiB0aGVyZSBhcmUgdW5ib3VuZCBtZXNzYWdlcywgZGlhbG9nIG11c3QgYmUgc2hvd24uXG5cdFx0XHRcdFx0Ly8gZm9yIGRyYWZ0IGVudGl0eSwgd2UgYWxyZWFkeSBjbG9zZWQgdGhlIEFQRFxuXHRcdFx0XHRcdHNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsZXQgZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCBvQ29udHJvbCwgYUNvbnRleHRzKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHNob3dNZXNzYWdlQm94OiBzaG93TWVzc2FnZUJveCxcblx0XHRzaG93TWVzc2FnZURpYWxvZzogc2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0ZmlsdGVyZWRNZXNzYWdlczogZmlsdGVyZWRNZXNzYWdlcy5sZW5ndGggPyBmaWx0ZXJlZE1lc3NhZ2VzIDogbWVzc2FnZXMsXG5cdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGU6IGZuR2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRcdHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZzogbVBhcmFtZXRlcnMuYkdyb3VwZWRcblx0fTtcbn1cblxuLypcbiAqIEN1cnJlbnRseSwgdGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGRpYWxvZyBhbmQgZXhlY3V0aW5nIHRoZSBhY3Rpb24uIFRoZSBwcm9taXNlIHJldHVybmVkIGlzIHBlbmRpbmcgd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dCwgYXMgd2VsbCBhcyB3aGlsZSB0aGVcbiAqIGJhY2stZW5kIHJlcXVlc3QgaXMgcnVubmluZy4gVGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIHRoZSBkaWFsb2cgYW5kIGFsc28gd2hlbiB0aGUgYmFjay1lbmQgcmVxdWVzdCBmYWlscy5cbiAqIFRPRE86IFJlZmFjdG9yaW5nOiBTZXBhcmF0ZSBkaWFsb2cgaGFuZGxpbmcgZnJvbSBiYWNrZW5kIHByb2Nlc3NpbmcuIERpYWxvZyBoYW5kbGluZyBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZSByZXNvbHZpbmcgdG8gcGFyYW1ldGVycyB0byBiZSBwcm92aWRlZCB0byBiYWNrZW5kLiBJZiBkaWFsb2cgaXNcbiAqIGNhbmNlbGxlZCwgdGhhdCBwcm9taXNlIGNhbiBiZSByZWplY3RlZC4gTWV0aG9kIHJlc3BvbnNpYmxlIGZvciBiYWNrZW5kIHByb2Nlc3NpbmcgbmVlZCB0byBkZWFsIHdpdGggbXVsdGlwbGUgY29udGV4dHMgLSBpLmUuIGl0IHNob3VsZCBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IG9mIFByb21pc2VzIG9yXG4gKiBhIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoYXQgUHJvbWlzZSBzaG91bGQgYmUgcmVzb2x2ZWQgYWxzbyB3aGVuIHNvbWUgb3IgZXZlbiBhbGwgY29udGV4dHMgZmFpbGVkIGluIGJhY2tlbmQgLSB0aGUgb3ZlcmFsbCBwcm9jZXNzIHN0aWxsIHdhc1xuICogc3VjY2Vzc2Z1bC5cbiAqXG4gKi9cblxuYXN5bmMgZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRzQWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRhQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10sXG5cdGFQYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdG9BY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRvUGFyZW50Q29udHJvbDogVmlldyxcblx0ZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+IHtcblx0Y29uc3Qgc1BhdGggPSBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dCwgc0FjdGlvbk5hbWUpLFxuXHRcdG1ldGFNb2RlbCA9IChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKS5vTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0ZW50aXR5U2V0Q29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzUGF0aCksXG5cdFx0c0FjdGlvbk5hbWVQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIilcblx0XHRcdD8gb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0AkdWk1Lm92ZXJsb2FkLzBcIilbMF1cblx0XHRcdDogb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiLzBcIilbMF0sXG5cdFx0YWN0aW9uTmFtZUNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0FjdGlvbk5hbWVQYXRoKSxcblx0XHRiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbixcblx0XHRzRnJhZ21lbnROYW1lID0gXCJzYXAvZmUvY29yZS9jb250cm9scy9BY3Rpb25QYXJhbWV0ZXJEaWFsb2dcIjtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+KGFzeW5jIGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRsZXQgYWN0aW9uUGFyYW1ldGVySW5mb3M6IEFjdGlvblBhcmFtZXRlckluZm9bXTsgLy8gdG8gYmUgZmlsbGVkIGFmdGVyIGZyYWdtZW50IChmb3IgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cpIGlzIGxvYWRlZC4gQWN0dWFsbHkgb25seSBuZWVkZWQgZHVyaW5nIGRpYWxvZyBwcm9jZXNzaW5nLCBpLmUuIGNvdWxkIGJlIG1vdmVkIGludG8gdGhlIGNvbnRyb2xsZXIgYW5kIGRpcmVjdGx5IGluaXRpYWxpemVkIHRoZXJlLCBidXQgb25seSBhZnRlciBtb3ZpbmcgYWxsIGhhbmRsZXJzIChlc3AuIHByZXNzIGhhbmRsZXIgZm9yIGFjdGlvbiBidXR0b24pIHRvIGNvbnRyb2xsZXIuXG5cblx0XHRjb25zdCBfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlciA9IChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYWxsTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIuJE5hbWVdKTtcblx0XHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHRcdCk7XG5cdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IG9Db250cm9sbGVyID0ge1xuXHRcdFx0aGFuZGxlQ2hhbmdlOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBFdmVudDx7IHByb21pc2U6IFByb21pc2U8c3RyaW5nPiB9Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkXG5cdFx0XHRcdCkgYXMgQWN0aW9uUGFyYW1ldGVySW5mbztcblx0XHRcdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0XHRcdF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKTtcblx0XHRcdFx0Ly8gYWRhcHQgaW5mby4gUHJvbWlzZSBpcyByZXNvbHZlZCB0byB2YWx1ZSBvciByZWplY3RlZCB3aXRoIGV4Y2VwdGlvbiBjb250YWluaW5nIG1lc3NhZ2Vcblx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBhY3Rpb25QYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRkZWxldGUgYWN0aW9uUGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dD8uZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dD8uZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogZW50aXR5U2V0Q29udGV4dD8uZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRjb25zdCBhQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBtUGFyYW1ldGVycy5hQ29udGV4dHMgfHwgW107XG5cdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblxuXHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKG9BcHBDb21wb25lbnQsIGFBY3Rpb25QYXJhbWV0ZXJzLCBvUGFyYW1ldGVyTW9kZWwsIHRydWUpO1xuXHRcdFx0Y29uc3Qgb0RpYWxvZ0NvbnRlbnQgPSAoYXdhaXQgRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGRlZmluaXRpb246IGNyZWF0ZWRGcmFnbWVudCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udHJvbGxlcjogb0NvbnRyb2xsZXJcblx0XHRcdH0pKSBhcyBDb250cm9sO1xuXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcyA9IGFBY3Rpb25QYXJhbWV0ZXJzLm1hcCgoYWN0aW9uUGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChnZW5lcmF0ZShbXCJBUERfXCIsIGFjdGlvblBhcmFtZXRlci4kTmFtZV0pKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRcdFx0Y29uc3QgaXNNdWx0aVZhbHVlID0gZmllbGQuaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIik7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyOiBhY3Rpb25QYXJhbWV0ZXIsXG5cdFx0XHRcdFx0ZmllbGQ6IGZpZWxkLFxuXHRcdFx0XHRcdGlzTXVsdGlWYWx1ZTogaXNNdWx0aVZhbHVlXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1BhcmVudENvbnRyb2wpO1xuXHRcdFx0bGV0IGFjdGlvblJlc3VsdDoge1xuXHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdHJlc3VsdDogdW5kZWZpbmVkIHwgT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXTtcblx0XHRcdH0gPSB7XG5cdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogdHJ1ZSwgLy8gdG8gYmUgc2V0IHRvIGZhbHNlIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhY3Rpb24gZXhlY3Rpb25cblx0XHRcdFx0cmVzdWx0OiB1bmRlZmluZWRcblx0XHRcdH07XG5cblx0XHRcdGxldCBidXR0b25Mb2NrID0gZmFsc2U7XG5cblx0XHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZV0pLCB7XG5cdFx0XHRcdHRpdGxlOiBzQWN0aW9uTGFiZWwgfHwgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCIpLFxuXHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0Ly8gZXNjYXBlIGhhbmRsZXIgaXMgbWVhbnQgdG8gcG9zc2libHkgc3VwcHJlc3Mgb3IgcG9zdHBvbmUgY2xvc2luZyB0aGUgZGlhbG9nIG9uIGVzY2FwZSAoYnkgY2FsbGluZyBcInJlamVjdFwiIG9uIHRoZSBwcm92aWRlZCBvYmplY3QsIG9yIFwicmVzb2x2ZVwiIG9ubHkgd2hlblxuXHRcdFx0XHRcdC8vIGRvbmUgd2l0aCBhbGwgdGFza3MgdG8gaGFwcGVuIGJlZm9yZSBkaWFsb2cgY2FuIGJlIGNsb3NlZCkuIEl0J3Mgbm90IGludGVuZGVkIHRvIGV4cGxpY2V0bHkgY2xvc2UgdGhlIGRpYWxvZyBoZXJlICh0aGF0IGhhcHBlbnMgYXV0b21hdGljYWxseSB3aGVuIG5vXG5cdFx0XHRcdFx0Ly8gZXNjYXBlSGFuZGxlciBpcyBwcm92aWRlZCBvciB0aGUgcmVzb2x2ZS1jYWxsYmFjayBpcyBjYWxsZWQpIG9yIGZvciBvd24gd3JhcCB1cCB0YXNrcyAobGlrZSByZW1vdmluZyB2YWxpZGl0aW9uIG1lc3NhZ2VzIC0gdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZVxuXHRcdFx0XHRcdC8vIGFmdGVyQ2xvc2UpLlxuXHRcdFx0XHRcdC8vIFRPRE86IE1vdmUgd3JhcCB1cCB0YXNrcyB0byBhZnRlckNsb3NlLCBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGNvbXBsZXRlbHkuIFRha2UgY2FyZSB0byBhbHNvIGFkYXB0IGVuZCBidXR0b24gcHJlc3MgaGFuZGxlciBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHQvLyBDdXJyZW50bHkgb25seSBzdGlsbCBuZWVkZWQgdG8gZGlmZmVyZW50aWF0ZSBjbG9zaW5nIGRpYWxvZyBhZnRlciBzdWNjZXNzZnVsIGV4ZWN1dGlvbiAodXNlcyByZXNvbHZlKSBmcm9tIHVzZXIgY2FuY2VsbGF0aW9uICh1c2luZyByZWplY3QpXG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdC8vXHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKSwge1xuXHRcdFx0XHRcdHRleHQ6IGJJc0NyZWF0ZUFjdGlvblxuXHRcdFx0XHRcdFx0PyByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTlwiKVxuXHRcdFx0XHRcdFx0OiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZShyZXNvdXJjZU1vZGVsLCBzQWN0aW9uTGFiZWwsIHNBY3Rpb25OYW1lLCBlbnRpdHlTZXROYW1lKSxcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRcdFx0XHRcdFx0Ly8gYnV0dG9uTG9jayBpcyBzZXQgb25jZSBhbmQgcmVzZXQgaW5cblx0XHRcdFx0XHRcdFx0Ly8gLSBhZnRlciB2YWxpZGF0aW9uIGVycm9yXG5cdFx0XHRcdFx0XHRcdC8vIC0gaW4gY2FzZSBvZiBhY3Rpb24gZXJyb3IgbWVzc2FnZSBpcyBjYW5jZWxlZFxuXHRcdFx0XHRcdFx0XHQvLyAtIGluIGFmdGVyQ2xvc2UgZXZlbnRcblxuXHRcdFx0XHRcdFx0XHRpZiAoYnV0dG9uTG9jayA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIShhd2FpdCBfdmFsaWRhdGVQcm9wZXJ0aWVzKGFjdGlvblBhcmFtZXRlckluZm9zLCByZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci5sb2NrKG9EaWFsb2cpO1xuXG5cdFx0XHRcdFx0XHRcdGxldCBmYWlsZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogZHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIG1vdmUgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIERpYWxvZyAoU2ltcGxlRm9ybSkgdG8gbVBhcmFtZXRlcnMuYWN0aW9uUGFyYW1ldGVycyBzbyB0aGF0IHRoZXkgYXJlIGF2YWlsYWJsZSBpbiB0aGUgb3BlcmF0aW9uIGJpbmRpbmdzIGZvciBhbGwgY29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHRsZXQgdlBhcmFtZXRlclZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdGxldCBhbGxOdWxsUGFyYW1ldGVycyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnNbaV0uJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IChvRGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YC8ke2FBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lfWBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBqIGluIGFNVkZDb250ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcy5wdXNoKGFNVkZDb250ZW50W2pdLktleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gYUtleVZhbHVlcztcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IG9QYXJhbWV0ZXJDb250ZXh0Py5nZXRQcm9wZXJ0eShhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS52YWx1ZSA9IHZQYXJhbWV0ZXJWYWx1ZTsgLy8gd3JpdGluZyB0aGUgY3VycmVudCB2YWx1ZSAodXNlciBpbnB1dCEpIGludG8gdGhlIG1ldGFtb2RlbCA9PiBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byB1c2UgQWN0aW9uUGFyYW1ldGVySW5mb3MgaW5zdGVhZC4gVXNlZCBpbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh2UGFyYW1ldGVyVmFsdWUgIT09IG51bGwgJiYgdlBhcmFtZXRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWxsTnVsbFBhcmFtZXRlcnMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFhbGxOdWxsUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIGF2b2lkIG92ZXJyaWRpbmcgaW5jb21pbmcgcGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlubmVyUGFyYW1ldGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMubGFiZWwgPSBzQWN0aW9uTGFiZWw7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHQgPSBhd2FpdCBleGVjdXRlQVBNQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJlbnRDb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpYWxvZ0NhbmNlbGxlZDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdDogYVJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc29sdmUoYVJlc3VsdCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmlzNDEyRXhlY3V0ZWQgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuZGVsYXlTdWNjZXNzTWVzc2FnZXMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLmRlbGF5U3VjY2Vzc01lc3NhZ2VzLmNvbmNhdChtZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuaXM0MTJFeGVjdXRlZCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZhaWxlZENvbnRleHRzID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGZhaWwpID0+IGZhaWwub0FjdGlvbi5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlubmVyUGFyYW1ldGVycy5hQ29udGV4dHMgPSBmYWlsZWRDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUFQTUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZUVUYWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdUcmFuc2l0aW9uRmFpbHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb25SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDYW5jZWxsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0OiBhUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyByZXNvbHZlKGFSZXN1bHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5pczQxMkV4ZWN1dGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5kZWxheVN1Y2Nlc3NNZXNzYWdlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5iR3JvdXBlZCAmJiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IG9EaWFsb2cuaXNPcGVuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlczogTWVzc2FnZVtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbjogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjdGlvblBhcmFtZXRlclNob3dNZXNzYWdlQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW5uZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFNZXNzYWdlcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnNJbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzOiB1bmRlZmluZWQsIC8vIG5vdCB1c2VkIGF0IGFsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvRGlhbG9nKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRcdGxldCBzaG93TWVzc2FnZURpYWxvZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNob3dHZW5lcmljRXJyb3JNZXNzYWdlRm9yQ2hhbmdlU2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nUHJvbWlzZXMubGVuZ3RoKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG1QYXJhbWV0ZXJzLmJHcm91cGVkICYmIGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZUZvckNoYW5nZVNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0OiBmYWlsZWRDb250ZXh0c1swXSwgLy8gb25seSB1c2VkIGluIGNhc2Ugb2YgZmFpbGVkIGNvbnRleHQgdG8gcmVzZXQgaW4gbWVzc2FnZUhhbmRsaW5nIHNob3dVbmJvdW5kTWVzc2FnZXNcblx0XHRcdFx0XHRcdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3Blbjogb0RpYWxvZy5pc09wZW4oKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAoYU1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyc0luOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gV2h5IGlzIHRoaXMgaW1wbGVtZW50ZWQgYXMgY2FsbGJhY2s/IEFwcGFyZW50bHksIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGJlZm9yZWhhbmRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogcmVmYWN0b3IgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0gYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhTWVzc2FnZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSBzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2c7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaG93TWVzc2FnZVBhcmFtZXRlcnM7XG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHM6IHVuZGVmaW5lZCwgLy8gbm90IHVzZWQgYXQgYWxsIVxuXHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvbk5hbWU6IHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRyb2w6IG1QYXJhbWV0ZXJzLmNvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGlmIHRoZSBhY3Rpb24gZmFpbHMgd2l0aCBhbiBlcnJvciBwb3B1cCBhbmQgdGhpcyBvbmUgaXMgY2FuY2VsZCAoSm91cm5leTogNDEyV2FybmluZ0hhbmRsaW5nKVxuXHRcdFx0XHRcdFx0XHRcdC8vIEluIGNhc2Ugb2YgYmFja2VuZCB2YWxpZGF0aW9uIGVycm9yKHM/KSwgbWVzc2FnZSBzaGFsbCBub3QgYmUgc2hvd24gaW4gbWVzc2FnZSBkaWFsb2cgYnV0IG5leHQgdG8gdGhlIGZpZWxkIG9uIHBhcmFtZXRlciBkaWFsb2csIHdoaWNoIHNob3VsZFxuXHRcdFx0XHRcdFx0XHRcdC8vIHN0YXkgb3BlbiBpbiB0aGlzIGNhc2UgPT4gaW4gdGhpcyBjYXNlLCB3ZSBtdXN0IG5vdCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZy5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbiBhbGwgb3RoZXIgY2FzZXMgKGUuZy4gb3RoZXIgYmFja2VuZCBlcnJvcnMgb3IgdXNlciBjYW5jZWxsYXRpb24pLCB0aGUgcHJvbWlzZSBjb250cm9sbGluZyB0aGUgcGFyYW1ldGVyIGRpYWxvZyBuZWVkcyB0byBiZSByZWplY3RlZCB0byBhbGxvd1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNhbGxlcnMgdG8gcmVhY3QuIChFeGFtcGxlOiBJZiBjcmVhdGlvbiBpbiBiYWNrZW5kIGFmdGVyIG5hdmlnYXRpb24gdG8gdHJhbnNpZW50IGNvbnRleHQgZmFpbHMsIGJhY2sgbmF2aWdhdGlvbiBuZWVkcyB0byBiZSB0cmlnZ2VyZWQpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogUmVmYWN0b3IgdG8gc2VwYXJhdGUgZGlhbG9nIGhhbmRsaW5nIGZyb20gYmFja2VuZCByZXF1ZXN0IGluc3RlYWQgb2YgdGFraW5nIGRlY2lzaW9uIGJhc2VkIG9uIG1lc3NhZ2UgaGFuZGxpbmdcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2hvd01lc3NhZ2VEaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nLmlzT3BlbigpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGRvIG5vdGhpbmcsIGRvIG5vdCByZWplY3QgcHJvbWlzZSBoZXJlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFdlIGRvIG5vdCBjbG9zZSB0aGUgQVBNIGRpYWxvZyBpZiB1c2VyIGVudGVycyBhIHdyb25nIHZhbHVlIGluIG9mIHRoZSBmaWVsZHMgdGhhdCByZXN1bHRzIGluIGFuIGVycm9yIGZyb20gdGhlIGJhY2tlbmQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSB1c2VyIGNhbiBjbG9zZSB0aGUgbWVzc2FnZSBkaWFsb2cgYW5kIHRoZSBBUE0gZGlhbG9nIHdvdWxkIHN0aWxsIGJlIG9wZW4gb24gd2hpY2ggaGUgY291bGQgZW50ZXIgYSBuZXcgdmFsdWUgYW5kIHRyaWdnZXIgdGhlIGFjdGlvbiBhZ2Fpbi5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRWFybGllciB3ZSB3ZXJlIHJlamVjdGluZyB0aGUgcHJvbWlzZSBvbiBlcnJvciBoZXJlLCBhbmQgdGhlIGNhbGwgc3RhY2sgd2FzIGRlc3Ryb3llZCBhcyB0aGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgYW5kIHJldHVybmVkIHRvIEVkaXRGbG93IGludm9rZSBhY3Rpb24uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEJ1dCBzaW5jZSB0aGUgQVBNIGRpYWxvZyB3YXMgc3RpbGwgb3BlbiwgYSBuZXcgcHJvbWlzZSB3YXMgcmVzb2x2ZWQgaW4gY2FzZSB0aGUgdXNlciByZXRyaWVkIHRoZSBhY3Rpb24gYW5kIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQsIGJ1dCB0aGUgbmF2aWdhdGlvbiB0byBvYmplY3QgcGFnZSB3YXMgbm90IHRha2luZyBwbGFjZS5cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpczQxMkV4ZWN1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVHJhbnNpdGlvbkZhaWxzOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nUHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdXYXJuaW5nTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXlTdWNjZXNzTWVzc2FnZXM6IFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzc2VkTWVzc2FnZUlkczogW11cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9EaWFsb2cpKSB7XG5cdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIiksXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIFRPRE86IGNhbmNlbCBidXR0b24gc2hvdWxkIGp1c3QgY2xvc2UgdGhlIGRpYWxvZyAoc2ltaWxhciB0byB1c2luZyBlc2NhcGUpLiBBbGwgd3JhcCB1cCB0YXNrcyBzaG91bGQgYmUgbW92ZWQgdG8gYWZ0ZXJDbG9zZS5cblx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdC8vIHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQvLyBUT0RPOiBiZWZvcmVPcGVuIGlzIGp1c3QgYW4gZXZlbnQsIGkuZS4gbm90IHdhaXRpbmcgZm9yIHRoZSBQcm9taXNlIHRvIGJlIHJlc29sdmVkLiBDaGVjayBpZiB0YXNrcyBvZiB0aGlzIGZ1bmN0aW9uIG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nXG5cdFx0XHRcdC8vIC0gaWYgeWVzLCB0aGV5IG5lZWQgdG8gYmUgbW92ZWQgb3V0c2lkZS5cblx0XHRcdFx0Ly8gQXNzdW1wdGlvbjogU29tZXRpbWVzIGRpYWxvZyBjYW4gYmUgc2VlbiB3aXRob3V0IGFueSBmaWVsZHMgZm9yIGEgc2hvcnQgdGltZSAtIG1heWJlIHRoaXMgaXMgY2F1c2VkIGJ5IHRoaXMgYXN5bmNocm9uaXR5XG5cdFx0XHRcdGJlZm9yZU9wZW46IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IERpYWxvZyRCZWZvcmVPcGVuRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHQvLyBjbG9uZSBldmVudCBmb3IgYWN0aW9uV3JhcHBlciBhcyBvRXZlbnQub1NvdXJjZSBnZXRzIGxvc3QgZHVyaW5nIHByb2Nlc3Npbmcgb2YgYmVmb3JlT3BlbiBldmVudCBoYW5kbGVyXG5cdFx0XHRcdFx0Y29uc3Qgb0Nsb25lRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBvRXZlbnQpO1xuXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gKG9EaWFsb2cuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgJiYgb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF0sXG5cdFx0XHRcdFx0XHRcdHNEZWZhdWx0VmFsdWVzRnVuY3Rpb24gPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRcdFx0XHRgJHtzQWN0aW9uUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRlZmF1bHRWYWx1ZXNGdW5jdGlvbmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2cgPSBhc3luYyBmdW5jdGlvbiAoc0JpbmRpbmdQYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNCb3VuZEZ1bmN0aW9uTmFtZSA9IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbigpO1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyTW9kZWxEYXRhID0gb1BhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHByZWZpbGxQYXJhbWV0ZXIgPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWU6IHN0cmluZyxcblx0XHRcdFx0XHRcdFx0dlBhcmFtRGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgeyAkUGF0aD86IHN0cmluZyB9XG5cdFx0XHRcdFx0XHQpOiBQcm9taXNlPHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBiTGF0ZVByb3BlcnR5RXJyb3I/OiBib29sZWFuOyBiTm9Qb3NzaWJsZVZhbHVlPzogYm9vbGVhbiB9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtRGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZQYXJhbURlZmF1bHRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCB2UGFyYW1WYWx1ZSA9IGF3YWl0IENvbW1vblV0aWxzLnJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAodlBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1WYWx1ZSA9IGF3YWl0IG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0UGFyYW1ldGVyQ29udGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucmVxdWVzdFByb3BlcnR5KHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXRoRm9yQ29udGV4dCA9IHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc1BhdGhGb3JDb250ZXh0LmluZGV4T2YoYCR7c0JpbmRpbmdQYXJhbWV0ZXJ9L2ApID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzUGF0aEZvckNvbnRleHQgPSBzUGF0aEZvckNvbnRleHQucmVwbGFjZShgJHtzQmluZGluZ1BhcmFtZXRlcn0vYCwgXCJcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzW2ldLmdldFByb3BlcnR5KHNQYXRoRm9yQ29udGV4dCkgIT09IHZQYXJhbVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Yk5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWU6IHNQYXJhbU5hbWUsIHZhbHVlOiB2UGFyYW1WYWx1ZSB9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsIHNQYXJhbU5hbWUsIG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJMYXRlUHJvcGVydHlFcnJvcjogdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdlBhcmFtRGVmYXVsdFZhbHVlIH07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlck1vZGVsRGF0YS5oYXNPd25Qcm9wZXJ0eShzUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgMjogVGhlcmUgaXMgbm8gUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb24gKD0+IGxvb2sgaW50byB0aGUgRkxQIFVzZXIgRGVmYXVsdHMpXG5cblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtzUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lOiBzUGFyYW1OYW1lLCB2YWx1ZTogdW5kZWZpbmVkIH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGNvbnN0IGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIChzUGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB7ICRQYXRoOiBzdHJpbmcgfSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAob0RpYWxvZy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCA9IENvbW1vblV0aWxzLmdldFBhcmFtZXRlclBhdGgob0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLCBzUGFyYW1OYW1lKSArIFwiQFwiLFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiYgb1BhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXTsgLy8gZWl0aGVyIHsgJFBhdGg6ICdzb21lUGF0aCcgfSBvciAnc29tZVN0cmluZydcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYXMgc3RyaW5nIHwgeyAkUGF0aDogc3RyaW5nIH07XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gW107XG5cdFx0XHRcdFx0XHRsZXQgc1BhcmFtTmFtZSwgdlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRzUGFyYW1OYW1lID0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWU7XG5cdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoc1BhcmFtTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUucHVzaChwcmVmaWxsUGFyYW1ldGVyKHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWUpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgc0JvdW5kRnVuY3Rpb25OYW1lLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHNCb3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtcy5wdXNoKG9wZXJhdGlvbnMuY2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGFQcmVmaWxsUGFyYW1Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRcdFx0bGV0IGFFeGVjRnVuY3Rpb25Qcm9taXNlczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dFtdPiA9IFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0XHRcdFx0XHRsZXQgb0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2U7XG5cdFx0XHRcdFx0XHRpZiAoYUZ1bmN0aW9uUGFyYW1zICYmIGFGdW5jdGlvblBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFGdW5jdGlvblBhcmFtcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNNb2R1bGUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlID0gRlBNSGVscGVyLmFjdGlvbldyYXBwZXIob0Nsb25lRXZlbnQsIHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogYUNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhUHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFx0XHRcdFx0YVByZWZpbGxQYXJhbVByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyxcblx0XHRcdFx0XHRcdFx0XHRvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZVxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlID0gYVByb21pc2VzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBmdW5jdGlvblBhcmFtcyA9IGFQcm9taXNlc1sxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGFQcm9taXNlc1syXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0bGV0IHNEaWFsb2dQYXJhbU5hbWU6IHN0cmluZztcblxuXHRcdFx0XHRcdFx0XHQvLyBGaWxsIHRoZSBkaWFsb2cgd2l0aCB0aGUgZWFybGllciBkZXRlcm1pbmVkIHBhcmFtZXRlciB2YWx1ZXMgZnJvbSB0aGUgZGlmZmVyZW50IHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lICE9PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNEaWFsb2dQYXJhbU5hbWUgPSBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFBhcmFtZXRlciB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIGNhbGwgb2YgaW52b2tlQWN0aW9uIG92ZXJydWxlIG90aGVyIHNvdXJjZXNcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gYVBhcmFtZXRlclZhbHVlcz8uZmluZChcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdCk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgdlBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdC5oYXNPd25Qcm9wZXJ0eShzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3Rbc0RpYWxvZ1BhcmFtTmFtZV1cblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldICYmIGN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSwgY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIGRlZmF1bHQgdmFsdWUgaGFkIG5vdCBiZWVuIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBkdWUgdG8gZGlmZmVyZW50IGNvbnRleHRzLCB3ZSBkbyBub3RoaW5nIGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmICFjdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2pdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zW2ogKyAxXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbaiArIDFdLmdldE9iamVjdChzRGlhbG9nUGFyYW1OYW1lKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGorKztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSBhQ29udGV4dHMubGVuZ3RoIC0gMSAmJiBmdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb25QYXJhbXNbal0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmdW5jdGlvblBhcmFtc1swXSAmJiBmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vT25seSBvbmUgY29udGV4dCwgdGhlbiB0aGUgZGVmYXVsdCBwYXJhbSB2YWx1ZXMgYXJlIHRvIGJlIHZlcmlmaWVkIGZyb20gdGhlIGZ1bmN0aW9uOlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvblBhcmFtc1swXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJFcnJvckZvdW5kID0gY3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKG9WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUuYkxhdGVQcm9wZXJ0eUVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1ZhbHVlLmJMYXRlUHJvcGVydHlFcnJvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvLyBJZiBhdCBsZWFzdCBvbmUgRGVmYXVsdCBQcm9wZXJ0eSBpcyBhIExhdGUgUHJvcGVydHkgYW5kIGFuIGVUYWcgZXJyb3Igd2FzIHJhaXNlZC5cblx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc1RleHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzVGV4dCwgeyBjb250ZW50V2lkdGg6IFwiMjVlbVwiIH0gYXMgb2JqZWN0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuQXN5bmNCZWZvcmVPcGVuID0gYXN5bmMgZnVuY3Rpb24gKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRcdFx0aWYgKG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpICYmIGFDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXJhbWV0ZXIgPSBhUGFyYW1ldGVyc1swXSAmJiBhUGFyYW1ldGVyc1swXS4kTmFtZTtcblxuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gYXdhaXQgYUNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAob0NvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihzQmluZGluZ1BhcmFtZXRlciwgb0NvbnRleHRPYmplY3QpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRhd2FpdCBmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyhzQmluZGluZ1BhcmFtZXRlcik7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2coKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0YXdhaXQgZm5Bc3luY0JlZm9yZU9wZW4oKTtcblxuXHRcdFx0XHRcdC8vIGFkZGluZyBkZWZhdWx0ZWQgdmFsdWVzIG9ubHkgaGVyZSBhZnRlciB0aGV5IGFyZSBub3Qgc2V0IHRvIHRoZSBmaWVsZHNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlckluZm8gb2YgYWN0aW9uUGFyYW1ldGVySW5mb3MpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWVcblx0XHRcdFx0XHRcdFx0PyAoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCBhcyBNdWx0aVZhbHVlRmllbGQpLmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdFx0OiAoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycy5mb3JFYWNoKF9yZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtdGVyKTtcblx0XHRcdFx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRidXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3VsdC5kaWFsb2dDYW5jZWxsZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdChDb25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShhY3Rpb25SZXN1bHQucmVzdWx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0bVBhcmFtZXRlcnMub0RpYWxvZyA9IG9EaWFsb2c7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKS5vTW9kZWwpO1xuXHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvUGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogXCIvXCIsXG5cdFx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHQvKiBFdmVudCBuZWVkZWQgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIG9mIHZhbGlkIGNoYW5nZWQgZmllbGQgKi9cblx0XHRcdGZvciAoY29uc3QgYWN0aW9uUGFyYW1ldGVySW5mbyBvZiBhY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHRpZiAoYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvPy5maWVsZD8uZ2V0QmluZGluZyhcIml0ZW1zXCIpPy5hdHRhY2hDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdFx0X3JlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW10ZXIoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm8/LmZpZWxkPy5nZXRCaW5kaW5nKFwidmFsdWVcIik/LmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRfcmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbXRlcihhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bGV0IHNBY3Rpb25QYXRoID0gYCR7c0FjdGlvbk5hbWV9KC4uLilgO1xuXHRcdFx0aWYgKCFhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdHNBY3Rpb25QYXRoID0gYC8ke3NBY3Rpb25QYXRofWA7XG5cdFx0XHR9XG5cdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0cGF0aDogc0FjdGlvblBhdGhcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChhQ29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG9PcGVyYXRpb25CaW5kaW5nID0gb0RpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbjogQ29udGV4dCk6IEFjdGlvblBhcmFtZXRlcltdIHtcblx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uLmdldE9iamVjdChcIiRQYXJhbWV0ZXJcIikgfHwgW107XG5cdGlmIChhUGFyYW1ldGVycyAmJiBhUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0Ly9pbiBjYXNlIG9mIGJvdW5kIGFjdGlvbnMsIGlnbm9yZSB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBjb25zaWRlciB0aGUgcmVzdFxuXHRcdFx0cmV0dXJuIGFQYXJhbWV0ZXJzLnNsaWNlKDEsIGFQYXJhbWV0ZXJzLmxlbmd0aCkgfHwgW107XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhUGFyYW1ldGVycztcbn1cblxuZnVuY3Rpb24gX2dldEFjdGlvblBhcmFtZXRlckFjdGlvbk5hbWUoXG5cdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdHNBY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRzRW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuXHRsZXQgYm91bmRBY3Rpb25OYW1lOiBzdHJpbmcgPSBzQWN0aW9uTmFtZTtcblx0Y29uc3QgYUFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpO1xuXHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuaW5jbHVkZXMoXCIuXCIpID8gYUFjdGlvbk5hbWVbYUFjdGlvbk5hbWUubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHNFbnRpdHlTZXROYW1lID8gYCR7c0VudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRjb25zdCBzS2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRjb25zdCBiUmVzb3VyY2VLZXlFeGlzdHMgPSByZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtzS2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApO1xuXHRpZiAoc0FjdGlvbkxhYmVsKSB7XG5cdFx0aWYgKGJSZXNvdXJjZUtleUV4aXN0cykge1xuXHRcdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChzS2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9fCR7c0VudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSwgdW5kZWZpbmVkLCBgJHtzRW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke3NLZXl9YCkpIHtcblx0XHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoc0tleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzQWN0aW9uTGFiZWw7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIik7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0b0FjdGlvbjogT0RhdGFDb250ZXh0QmluZGluZyxcblx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRiR2V0Qm91bmRDb250ZXh0OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIgfCB1bmRlZmluZWQsXG5cdGlDb250ZXh0TGVuZ3RoOiBudW1iZXIgfCBudWxsLFxuXHRjdXJyZW50X2NvbnRleHRfaW5kZXg6IG51bWJlciB8IG51bGwsXG5cdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlOiBGdW5jdGlvbixcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdDogRnVuY3Rpb24sXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPHVuZGVmaW5lZCB8IE9EYXRhVjRDb250ZXh0PiB7XG5cdGxldCBvQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmRlZmluZWQgfCBPRGF0YVY0Q29udGV4dD4sXG5cdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gdHJ1ZTtcblx0aWYgKG1QYXJhbWV0ZXJzKSB7XG5cdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUgPSBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZTtcblx0fVxuXHRpZiAoYkdldEJvdW5kQ29udGV4dCkge1xuXHRcdGNvbnN0IHNQYXRoID0gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoID0gb0FjdGlvbi5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBvUHJvcGVydHkgPSBvQWN0aW9uLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHlbMF0/LiRraW5kICE9PSBcIkFjdGlvblwiKSB7XG5cdFx0XHQvL2RvIG5vdCBlbmFibGUgdGhlIHN0cmljdCBoYW5kbGluZyBpZiBpdHMgbm90IGFuIGFjdGlvblxuXHRcdFx0YkVuYWJsZVN0cmljdEhhbmRsaW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChtUGFyYW1ldGVycy5kaXNhYmxlU3RyaWN0SGFuZGxpbmcpIHtcblx0XHRcdGJFbmFibGVTdHJpY3RIYW5kbGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmICghYkVuYWJsZVN0cmljdEhhbmRsaW5nKSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQsIGlnbm9yZUVUYWcpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUob0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKSk7XG5cdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRpZ25vcmVFVGFnLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uc0hlbHBlci5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzIGFzIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZShvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpKTtcblx0XHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzIGFzIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCgpO1xuXHRcdFx0XHRcdFx0dGhyb3cgQ29uc3RhbnRzLkFjdGlvbkV4ZWN1dGlvbkZhaWxlZDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0OiBvQWN0aW9uXG5cdFx0XHRcdFx0LmV4ZWN1dGUoXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdGlnbm9yZUVUYWcsXG5cdFx0XHRcdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleCxcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoLFxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiAhbVBhcmFtZXRlcnMuYkdyb3VwZWQpIHtcblx0XHRcdFx0XHRcdFx0dXBkYXRlNDEyVHJhbnNpc3Rpb25NZXNzYWdlcyhcblx0XHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzIGFzIFN0cmljdEhhbmRsaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgIW1QYXJhbWV0ZXJzLmJHcm91cGVkKSB7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZTQxMlRyYW5zaXN0aW9uTWVzc2FnZXMoXG5cdFx0XHRcdFx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyBhcyBTdHJpY3RIYW5kbGluZ1BhcmFtZXRlcnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHRcdFx0XHRcdHRocm93IENvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQ7XG5cdFx0XHRcdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb0FjdGlvblByb21pc2UuY2F0Y2goKCkgPT4ge1xuXHRcdGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QoKTtcblx0XHR0aHJvdyBDb25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkO1xuXHR9KTtcbn1cbi8qKlxuICogVXBkYXRlcyB0aGUgc3RyaWN0SGFuZGxpbmdVdGlsaXRlcyB3aXRoIHRoZSBmYWlsZWQgYW5kIHN1Y2Nlc3NmdWwgdHJhbnNpc2l0aW9uIG1lc3NhZ2VzLlxuICpcbiAqIEBwYXJhbSBvQWN0aW9uIEFjdGlvbiBleGVjdXRlZFxuICogQHBhcmFtIHNHcm91cElkIEdyb3VwSWQgb2YgdGhlIGJhdGNoXG4gKiBAcGFyYW0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgVXRpbGl0eSBmbGFncyBhbmQgbWVzc2FnZXMgZm9yIHN0cmljdEhhbmRsaW5nXG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgU3RyaWN0IEhhbmRsaW5nIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBvbmx5U3VjY2Vzc01lc3NhZ2VzIFRvIHVwZGF0ZSBvbmx5IHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiB1cGRhdGU0MTJUcmFuc2lzdGlvbk1lc3NhZ2VzKFxuXHRvQWN0aW9uOiBPRGF0YUNvbnRleHRCaW5kaW5nLFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllczogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdG1QYXJhbWV0ZXJzPzogU3RyaWN0SGFuZGxpbmdQYXJhbWV0ZXJzLFxuXHRvbmx5U3VjY2Vzc01lc3NhZ2VzID0gZmFsc2Vcbik6IHZvaWQge1xuXHRjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRjb25zdCB7IHByb2Nlc3NlZE1lc3NhZ2VJZHMsIGRlbGF5U3VjY2Vzc01lc3NhZ2VzLCBzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscyB9ID0gc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM7XG5cdGNvbnN0IHRyYW5zaXRpb25NZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdC8vY2hlY2sgaWYgdGhlIHRyYW5zaXN0aW9uIG1lc3NhZ2VzIGlzIGFscmVhZHkgcHJvY2Vzc2VkXG5cdFx0Y29uc3QgaXNEdXBsaWNhdGUgPSBwcm9jZXNzZWRNZXNzYWdlSWRzLmZpbmQoZnVuY3Rpb24gKGlkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlLmdldElkKCkgPT09IGlkO1xuXHRcdH0pO1xuXHRcdC8vIHVwZGF0ZSB0aGUgc3RyaWN0SGFuZGxpbmcgd2l0aCB0aGUgc3VjY2VzcyBtZXNzYWdlcyB3aGljaCBuZWVkcyB0byBiZSBzaG93biBsYXRlclxuXHRcdGlmICghaXNEdXBsaWNhdGUpIHtcblx0XHRcdHByb2Nlc3NlZE1lc3NhZ2VJZHMucHVzaChtZXNzYWdlLmdldElkKCkpO1xuXHRcdFx0aWYgKG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzKSB7XG5cdFx0XHRcdGRlbGF5U3VjY2Vzc01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSAmJiBtZXNzYWdlLmdldFR5cGUoKSAhPT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhaXNEdXBsaWNhdGU7XG5cdH0pO1xuXHQvL3VwZGF0ZSB0aGUgc3RyaWN0SGFuZGxpbmdVdGlsaXRlcyB3aXRoIHRoZSBmYWlsZWQgdHJhbnNpc3Rpb24gbWVzc2FnZXMgd2hpY2ggbmVlZHMgdG8gYmUgcmV0cmlnZ2VyZWRcblx0aWYgKCFvbmx5U3VjY2Vzc01lc3NhZ2VzICYmIHRyYW5zaXRpb25NZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRpZiAobVBhcmFtZXRlcnM/LmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRzdHJpY3RIYW5kbGluZ1RyYW5zaXRpb25GYWlscy5wdXNoKHtcblx0XHRcdFx0b0FjdGlvbjogb0FjdGlvbixcblx0XHRcdFx0Z3JvdXBJZDogc0dyb3VwSWRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk6IHtcblx0b0xvY2FsQWN0aW9uUHJvbWlzZTogUHJvbWlzZTx1bmtub3duPjtcblx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmU6IEZ1bmN0aW9uO1xuXHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0OiBGdW5jdGlvbjtcbn0ge1xuXHRsZXQgaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblx0bGV0IGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblx0Y29uc3Qgb0xvY2FsQWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPHVua25vd24+KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0aW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCA9IHJlamVjdDtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBhY3Rpb24gXCIsIG9FcnJvcik7XG5cdH0pO1xuXG5cdHJldHVybiB7IG9Mb2NhbEFjdGlvblByb21pc2UsIGludGVybmFsT3BlcmF0aW9uc1Byb21pc2VSZXNvbHZlLCBpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlUmVqZWN0IH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgd2FybmluZyBvciBlcnJvciBtZXNzYWdlcyhib3VuZCBhbmQgdW5ib3VuZCkuIFByZXNlbnRseSBvbmx5IHByb3ZpZGVzIHRoZW0gZm9yIGNoYW5nZXNldCBiYXRjaCBjb25maWcuXG4gKlxuICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGV4aXN0YW5jZSBvZiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuIHtcblx0Y29uc3QgdW5Cb3VuZE1zZ3M6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh1bmRlZmluZWQsIHRydWUpO1xuXHRjb25zdCBib3VuZE1zZ3M6IE1lc3NhZ2VbXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKTtcblx0Y29uc3QgbWVzc2FnZXMgPSBbLi4udW5Cb3VuZE1zZ3MsIC4uLmJvdW5kTXNnc107XG5cblx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIiB8fCBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJXYXJuaW5nXCI7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZXhlY3V0ZUFjdGlvbihcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRtUGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdG9QYXJlbnRDb250cm9sOiBWaWV3LFxuXHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzPzogU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMsXG5cdGlnbm9yZUVUYWc/OiBib29sZWFuXG4pOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+IHtcblx0Y29uc3QgYUNvbnRleHRzID0gbVBhcmFtZXRlcnMuYUNvbnRleHRzIHx8IFtdO1xuXHRjb25zdCBvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0Y29uc3QgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hQWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0Y29uc3Qgc0FjdGlvbk5hbWUgPSBtUGFyYW1ldGVycy5hY3Rpb25OYW1lO1xuXHRjb25zdCBmbk9uU3VibWl0dGVkID0gbVBhcmFtZXRlcnMuZm5PblN1Ym1pdHRlZDtcblx0Y29uc3QgZm5PblJlc3BvbnNlID0gbVBhcmFtZXRlcnMuZm5PblJlc3BvbnNlO1xuXHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChvUGFyZW50Q29udHJvbCk7XG5cdGxldCBvQWN0aW9uOiBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRtUGFyYW1ldGVycy5hcHBDb21wb25lbnQgPSBvQXBwQ29tcG9uZW50O1xuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpOiB2b2lkIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiRUeXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDE2XCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHQvLyB0YmNcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvQWN0aW9uLnNldFBhcmFtZXRlcihhQWN0aW9uUGFyYW1ldGVyc1tqXS4kTmFtZSwgYUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdC8vIFRPRE86IHJlZmFjdG9yIHRvIGRpcmVjdCB1c2Ugb2YgUHJvbWlzZS5hbGxTZXR0bGVkXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+KGZ1bmN0aW9uIChcblx0XHRcdHJlc29sdmU6ICh2YWx1ZTogT0RhdGFWNENvbnRleHQgfCBQcm9taXNlU2V0dGxlZFJlc3VsdDxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD5bXSkgPT4gdm9pZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgbUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5iR3JvdXBlZDtcblx0XHRcdGNvbnN0IGJHZXRCb3VuZENvbnRleHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0O1xuXHRcdFx0Y29uc3QgYUFjdGlvblByb21pc2VzOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkPltdID0gW107XG5cdFx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0XHRsZXQgaTtcblx0XHRcdGxldCBzR3JvdXBJZDogc3RyaW5nO1xuXHRcdFx0Y29uc3Qgb2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QgPSBjcmVhdGVpbnRlcm5hbE9wZXJhdGlvbnNQcm9taXNlRm9yQWN0aW9uRXhlY3V0aW9uKCk7XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQ6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IEFjdGlvblNpZGVFZmZlY3RzVHlwZSAmIHsgY29udGV4dDogT0RhdGFWNENvbnRleHQgfSxcblx0XHRcdFx0aUNvbnRleHRMZW5ndGg6IG51bWJlclxuXHRcdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpbmRpdmlkdWFsQWN0aW9uUHJvbWlzZTogdW5rbm93bltdID0gW107XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IGAkYXV0by4ke2N1cnJlbnRfY29udGV4dF9pbmRleH1gIDogYWN0aW9uQ29udGV4dC5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQ6IE9EYXRhQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdGN1cnJlbnRfY29udGV4dF9pbmRleDogbnVtYmVyIHwgbnVsbCxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IChBY3Rpb25TaWRlRWZmZWN0c1R5cGUgJiB7IGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0IH0pIHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHQpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PHVua25vd24+W10+IHtcblx0XHRcdFx0Y29uc3QgaW5kaXZpZHVhbEFjdGlvblByb21pc2U6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gbVBhcmFtZXRlcnMuZ3JvdXBJZCB8fCBgYXBpTW9kZSR7Y3VycmVudF9jb250ZXh0X2luZGV4fWA7XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGZuUmVxdWVzdFNpZGVFZmZlY3RzLmJpbmQoXG5cdFx0XHRcdFx0b3BlcmF0aW9ucyxcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aCxcblx0XHRcdFx0XHRjdXJyZW50X2NvbnRleHRfaW5kZXgsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlc29sdmUsXG5cdFx0XHRcdFx0b2ludGVybmFsT3BlcmF0aW9uc1Byb21pc2VPYmplY3QuaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZVJlamVjdCxcblx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRcdFx0XHRpZ25vcmVFVGFnXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFBY3Rpb25Qcm9taXNlcy5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0aW5kaXZpZHVhbEFjdGlvblByb21pc2UucHVzaChvaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZU9iamVjdC5vTG9jYWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgb1NpZGVFZmZlY3QsIG1QYXJhbWV0ZXJzLCBzR3JvdXBJZCwgaW5kaXZpZHVhbEFjdGlvblByb21pc2UpO1xuXHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGluZGl2aWR1YWxBY3Rpb25Qcm9taXNlKTtcblx0XHRcdH07XG5cblx0XHRcdGFzeW5jIGZ1bmN0aW9uIGZuRXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0Y29uc3QgYUNoYW5nZVNldExvY2FsUHJvbWlzZXM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtzQWN0aW9uTmFtZX0oLi4uKWAsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKFxuXHRcdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhQ29udGV4dHMubGVuZ3RoIDwgMSA/IG51bGwgOiBpICsgMSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhQ2hhbmdlU2V0TG9jYWxQcm9taXNlcyk7XG5cdFx0XHRcdGlmIChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcyAmJiBzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRpZiAoIWhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzKCkpIHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb3BlcmF0aW9uc0hlbHBlci5yZW5kZXJNZXNzYWdlVmlldyhcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLnN0cmljdEhhbmRsaW5nV2FybmluZ01lc3NhZ2VzLFxuXHRcdFx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5sZW5ndGggPiAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1Byb21pc2VzLmZvckVhY2goZnVuY3Rpb24gKHNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdFx0XHRcdHNoUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VNb2RlbCA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gbWVzc2FnZU1vZGVsLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZU1vZGVsLnNldERhdGEobWVzc2FnZXNJbk1vZGVsLmNvbmNhdChzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiUmV0cmlnZ2VyaW5nIG9mIHN0cmljdCBoYW5kbGluZyBhY3Rpb25zIGZhaWxlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGFzeW5jIGZ1bmN0aW9uIGZuRXhlY3V0ZVNlcXVlbnRpYWxseShjb250ZXh0c1RvRXhlY3V0ZTogT0RhdGFWNENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHQvLyBPbmUgYWN0aW9uIGFuZCBpdHMgc2lkZSBlZmZlY3RzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IGFjdGlvbiBpcyBleGVjdXRlZFxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpKGFBY3Rpb25Qcm9taXNlcyk7XG5cdFx0XHRcdGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NPbmVBY3Rpb24oXG5cdFx0XHRcdFx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uSW5kZXg6IG51bWJlcixcblx0XHRcdFx0XHRpQ29udGV4dExlbmd0aDogbnVtYmVyXG5cdFx0XHRcdCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8dW5rbm93bj5bXT4ge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoYCR7c0FjdGlvbk5hbWV9KC4uLilgLCBjb250ZXh0LCBtQmluZGluZ1BhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdC8vIEFjdGlvbiBvbiB0aGUgdGFibGUgbGV2ZWwgaXMgYm91bmQgb24gYSBjb3B5IG9mIHRoZSBvRGF0YUxpc3RCaW5kaW5nLCB0byBleGVjdXRlIHRoZSBTaWRlRWZmZWN0cyB3ZSBuZWVkXG5cdFx0XHRcdFx0Ly8gdG8gZG8gaXQgb24gdGhlIG9yaWdpbmFsIG9EYXRhTGlzdEJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBpbml0aWFsVGFibGVDb250ZXh0ID0gKG1QYXJhbWV0ZXJzLmNvbnRyb2wgYXMgVGFibGUpPy5nZXRSb3dCaW5kaW5nPy4oKT8uZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdFx0XHRcdHJldHVybiBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24oXG5cdFx0XHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRcdFx0YWN0aW9uSW5kZXgsXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQ6XG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbFRhYmxlQ29udGV4dCAmJiBpbml0aWFsVGFibGVDb250ZXh0LmdldFBhdGgoKSA9PT0gY29udGV4dC5nZXRQYXRoKCkgPyBpbml0aWFsVGFibGVDb250ZXh0IDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGlDb250ZXh0TGVuZ3RoXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHNlcmlhbGl6YXRpb246IHByb2Nlc3NPbmVBY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIGNvbnRleHRzVG9FeGVjdXRlIG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdFx0XHRhd2FpdCBjb250ZXh0c1RvRXhlY3V0ZS5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0YXdhaXQgcHJvbWlzZTtcblx0XHRcdFx0XHRhd2FpdCBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQsIGlkICsgMSwgYUNvbnRleHRzLmxlbmd0aCk7XG5cdFx0XHRcdH0sIFByb21pc2UucmVzb2x2ZSgpKTtcblxuXHRcdFx0XHRpZiAoc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgJiYgc3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMuc3RyaWN0SGFuZGxpbmdQcm9taXNlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRhd2FpdCBvcGVyYXRpb25zSGVscGVyLnJlbmRlck1lc3NhZ2VWaWV3KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0XHRzdHJpY3RIYW5kbGluZ1V0aWxpdGllcy5zdHJpY3RIYW5kbGluZ1dhcm5pbmdNZXNzYWdlcyxcblx0XHRcdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLmxlbmd0aCA+IDFcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZuSGFuZGxlUmVzdWx0cygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHQvLyBBbGxvdyBhbHNvIGZvciBMaXN0IFJlcG9ydC5cblx0XHRcdFx0Zm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmbkV4ZWN1dGVDaGFuZ2VzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0YXN5bmMgZnVuY3Rpb24gZm5IYW5kbGVSZXN1bHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHQvLyBQcm9taXNlLmFsbFNldHRsZWQgd2lsbCBuZXZlciBiZSByZWplY3RlZC4gSG93ZXZlciwgZXNsaW50IHJlcXVpcmVzIGVpdGhlciBjYXRjaCBvciByZXR1cm4gLSB0aHVzIHdlIHJldHVybiB0aGUgcmVzdWx0aW5nIFByb21pc2UgYWx0aG91Z2ggbm8gb25lIHdpbGwgdXNlIGl0LlxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGFBY3Rpb25Qcm9taXNlcykudGhlbihyZXNvbHZlKTtcblx0XHRcdH1cblx0XHR9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdChcblx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG5cdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHR9XG5cdFx0XHQpKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChgLyR7c0FjdGlvbk5hbWV9KC4uLilgKTtcblx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3Qgb0FjdGlvblByb21pc2U6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+ID0gb0FjdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvcGVyYXRpb25zSGVscGVyLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRvcGVyYXRpb25zLFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0eyBsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsIG1vZGVsOiBvTW9kZWwgfSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRjb25zdCBhbGxQcm9taXNlOiBQcm9taXNlPHVua25vd24+W10gPSBbb0FjdGlvblByb21pc2VdO1xuXHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCkge1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChcIi91bkJvdW5kQWN0aW9uXCIpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdCA9IHtcblx0XHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0fTtcblx0XHRcdG9wZXJhdGlvbnMuZm5SZXF1ZXN0U2lkZUVmZmVjdHMob0FwcENvbXBvbmVudCwgc2lkZUVmZmVjdCwgbVBhcmFtZXRlcnMsIHNHcm91cElkLCBhbGxQcm9taXNlKTtcblx0XHRcdGNvbnRleHQuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdC8vIHRyaWdnZXIgb25TdWJtaXR0ZWQgXCJldmVudFwiXG5cdFx0KFxuXHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0LyoqL1xuXHRcdFx0fVxuXHRcdCkob0FjdGlvblByb21pc2UpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhbGxQcm9taXNlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGN1cnJlbnRQcm9taXNlVmFsdWVzOiB1bmtub3duW10pIHtcblx0XHRcdFx0Ly8gSGVyZSB3ZSBlbnN1cmUgdGhhdCB3ZSByZXR1cm4gdGhlIHJlc3BvbnNlIHdlIGdvdCBmcm9tIGFuIHVuYm91bmQgYWN0aW9uIHRvIHRoZVxuXHRcdFx0XHQvLyBjYWxsZXIgQkNQIDogMjI3MDEzOTI3OVxuXHRcdFx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlID0gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdFx0XHRcdGlmIChjdXJyZW50UHJvbWlzZVZhbHVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGN1cnJlbnRQcm9taXNlVmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0Py4oKT8uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgYWN0aW9uIFwiICsgc0FjdGlvbk5hbWUsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dDogQ29udGV4dCwgc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKTtcblx0c1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSA/IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF0gOiBzUGF0aC5zcGxpdChcIi8wXCIpWzBdO1xuXHRyZXR1cm4gc1BhdGguc3BsaXQoYC8ke3NBY3Rpb25OYW1lfWApWzBdO1xufVxuXG5mdW5jdGlvbiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzKFxuXHRpc0NyZWF0ZUFjdGlvbjogYm9vbGVhbixcblx0YWN0aW9uUGFyYW1ldGVyczogeyAkTmFtZTogc3RyaW5nIH1bXSxcblx0cGFyYW1ldGVyVmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcblx0c3RhcnR1cFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogYm9vbGVhbiB7XG5cdGlmIChwYXJhbWV0ZXJWYWx1ZXMpIHtcblx0XHQvLyBJZiBzaG93RGlhbG9nIGlzIGZhbHNlIGJ1dCB0aGVyZSBhcmUgcGFyYW1ldGVycyBmcm9tIHRoZSBpbnZva2VBY3Rpb24gY2FsbCwgd2UgbmVlZCB0byBjaGVjayB0aGF0IHZhbHVlcyBoYXZlIGJlZW5cblx0XHQvLyBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0XHRmb3IgKGNvbnN0IGFjdGlvblBhcmFtZXRlciBvZiBhY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGFjdGlvblBhcmFtZXRlci4kTmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiICYmXG5cdFx0XHRcdCFwYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gYWN0aW9uUGFyYW1ldGVyLiROYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmIChpc0NyZWF0ZUFjdGlvbiAmJiBzdGFydHVwUGFyYW1ldGVycykge1xuXHRcdC8vIElmIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHByb3ZpZGVkIGR1cmluZyBhcHBsaWNhdGlvbiBsYXVuY2gsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHNldCBpcyBjb21wbGV0ZVxuXHRcdC8vIElmIG5vdCwgdGhlIHBhcmFtZXRlciBkaWFsb2cgc3RpbGwgbmVlZHMgdG8gYmUgc2hvd24uXG5cdFx0Zm9yIChjb25zdCBhY3Rpb25QYXJhbWV0ZXIgb2YgYWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0aWYgKCFzdGFydHVwUGFyYW1ldGVyc1thY3Rpb25QYXJhbWV0ZXIuJE5hbWVdKSB7XG5cdFx0XHRcdC8vIEF0IGxlYXN0IGZvciBvbmUgcGFyYW1ldGVyIG5vIHZhbHVlIGhhcyBiZWVuIHByb3ZpZGVkLCBzbyB3ZSBjYW4ndCBza2lwIHRoZSBkaWFsb2dcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5SZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0b1NpZGVFZmZlY3Q6IChBY3Rpb25TaWRlRWZmZWN0c1R5cGUgJiB7IGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0IH0pIHwgdW5kZWZpbmVkLFxuXHRtUGFyYW1ldGVyczoge1xuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRzZWxlY3RlZEl0ZW1zOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHR9LFxuXHRzR3JvdXBJZDogc3RyaW5nLFxuXHRhTG9jYWxQcm9taXNlPzogdW5rbm93bltdXG4pOiB2b2lkIHtcblx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdGxldCBvTG9jYWxQcm9taXNlO1xuXHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNUcmlnZ2VyQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0XHRcdGlmIChhTG9jYWxQcm9taXNlKSB7XG5cdFx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gcmVxdWVzdCBzaWRlIGVmZmVjdHMgZm9yIHRoaXMgYWN0aW9uXG5cdC8vIGFzIHdlIG1vdmUgdGhlIG1lc3NhZ2VzIHJlcXVlc3QgdG8gUE9TVCAkc2VsZWN0IHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGFuIGVtcHR5IGFycmF5XG5cdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcblx0XHRvTG9jYWxQcm9taXNlID0gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMob1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0aWYgKGFMb2NhbFByb21pc2UpIHtcblx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHR9XG5cdFx0b0xvY2FsUHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmIG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRKU09OLnBhcnNlKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgdG8gY2FsbCBPRGF0YSBhY3Rpb25zIChib3VuZC9pbXBvcnQpIGFuZCBmdW5jdGlvbnMgKGJvdW5kL2ltcG9ydClcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXHRjYWxsQm91bmRBY3Rpb246IGNhbGxCb3VuZEFjdGlvbixcblx0Y2FsbEFjdGlvbkltcG9ydDogY2FsbEFjdGlvbkltcG9ydCxcblx0Y2FsbEJvdW5kRnVuY3Rpb246IGNhbGxCb3VuZEZ1bmN0aW9uLFxuXHRjYWxsRnVuY3Rpb25JbXBvcnQ6IGNhbGxGdW5jdGlvbkltcG9ydCxcblx0ZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0czogZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyxcblx0Y3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbjogY3JlYXRlaW50ZXJuYWxPcGVyYXRpb25zUHJvbWlzZUZvckFjdGlvbkV4ZWN1dGlvbixcblx0dmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzOiBfdmFsdWVzUHJvdmlkZWRGb3JBbGxQYXJhbWV0ZXJzLFxuXHRnZXRBY3Rpb25QYXJhbWV0ZXJBY3Rpb25OYW1lOiBfZ2V0QWN0aW9uUGFyYW1ldGVyQWN0aW9uTmFtZSxcblx0YWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjazogYWN0aW9uUGFyYW1ldGVyU2hvd01lc3NhZ2VDYWxsYmFjayxcblx0YWZ0ZXJBY3Rpb25SZXNvbHV0aW9uOiBhZnRlckFjdGlvblJlc29sdXRpb24sXG5cdGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzOiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyxcblx0Zm5SZXF1ZXN0U2lkZUVmZmVjdHM6IGZuUmVxdWVzdFNpZGVFZmZlY3RzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcGVyYXRpb25zO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7RUFpREEsTUFBTUEsU0FBUyxHQUFHQyxTQUFTLENBQUNELFNBQVM7SUFDcENFLGtCQUFrQixHQUFHRCxTQUFTLENBQUNDLGtCQUFrQjtFQUNsRCxNQUFNQyxNQUFNLEdBQUdDLFVBQVUsQ0FBQ0QsTUFBTTtFQUloQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVFLGVBQWUsQ0FDN0JDLFdBQW1CLEVBQ25CQyxRQUEwQixFQUMxQkMsTUFBa0IsRUFDbEJDLGFBQTJCLEVBQzNCQyxXQUFpQyxFQUNqQ0MsdUJBQWlELEVBQ3ZCO0lBQzFCLElBQUksQ0FBQ0EsdUJBQXVCLEVBQUU7TUFDN0JBLHVCQUF1QixHQUFHO1FBQ3pCQyxhQUFhLEVBQUUsS0FBSztRQUNwQkMsNkJBQTZCLEVBQUUsRUFBRTtRQUNqQ0Msc0JBQXNCLEVBQUUsRUFBRTtRQUMxQkMsNkJBQTZCLEVBQUUsRUFBRTtRQUNqQ0Msb0JBQW9CLEVBQUUsRUFBRTtRQUN4QkMsbUJBQW1CLEVBQUU7TUFDdEIsQ0FBQztJQUNGO0lBQ0EsSUFBSSxDQUFDVixRQUFRLElBQUlBLFFBQVEsQ0FBQ1csTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN2QztNQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLG9EQUFvRCxDQUFDO0lB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