@microsoft/ocsdk 0.3.4 → 0.3.5-main.f8897d4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/SDK.js CHANGED
@@ -381,6 +381,7 @@ var SDK = /*#__PURE__*/function () {
381
381
  reconnectId,
382
382
  authenticatedUserToken,
383
383
  currentLiveChatVersion,
384
+ refreshToken,
384
385
  headers,
385
386
  endpoint,
386
387
  requestPath,
@@ -398,7 +399,7 @@ var SDK = /*#__PURE__*/function () {
398
399
  currentRetryCount = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : 0;
399
400
  // eslint-disable-line @typescript-eslint/no-inferrable-types
400
401
  timer = _Timer.Timer.TIMER();
401
- reconnectId = getChatTokenOptionalParams.reconnectId, authenticatedUserToken = getChatTokenOptionalParams.authenticatedUserToken, currentLiveChatVersion = getChatTokenOptionalParams.currentLiveChatVersion;
402
+ reconnectId = getChatTokenOptionalParams.reconnectId, authenticatedUserToken = getChatTokenOptionalParams.authenticatedUserToken, currentLiveChatVersion = getChatTokenOptionalParams.currentLiveChatVersion, refreshToken = getChatTokenOptionalParams.refreshToken;
402
403
  this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATTOKENSTARTED, "Get Chat Token Started", requestId);
403
404
 
404
405
  if (!(currentRetryCount < 0)) {
@@ -428,6 +429,11 @@ var SDK = /*#__PURE__*/function () {
428
429
  }
429
430
 
430
431
  queryParams = "channelId=".concat(this.omnichannelConfiguration.channelId);
432
+
433
+ if (refreshToken) {
434
+ queryParams += "&refreshToken=true";
435
+ }
436
+
431
437
  requestPath += "?".concat(queryParams);
432
438
  url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
433
439
  method = "GET";
@@ -544,7 +550,7 @@ var SDK = /*#__PURE__*/function () {
544
550
  };
545
551
  }()));
546
552
 
547
- case 21:
553
+ case 22:
548
554
  case "end":
549
555
  return _context5.stop();
550
556
  }
@@ -2319,4 +2325,4 @@ exports["default"] = SDK;
2319
2325
  defaultRequestTimeout: undefined,
2320
2326
  requestTimeoutConfig: SDK.defaultRequestTimeoutConfig
2321
2327
  });
2322
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwibmFtZXMiOlsiU0RLIiwib21uaWNoYW5uZWxDb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiaGVhZGVycyIsImF1dGhjb2Rlbm9uY2UiLCJhdXRoQ29kZU5vbmNlIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImtleSIsImhhc093blByb3BlcnR5IiwiY2hhbm5lbElkIiwidmFsdWVzIiwiQ2hhbm5lbElkIiwiaW5jbHVkZXMiLCJFcnJvciIsImN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwiQ29uc3RhbnRzIiwicmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJyZXF1ZXN0SWQiLCJieXBhc3NDYWNoZSIsInRpbWVyIiwiVGltZXIiLCJUSU1FUiIsImxvZ1dpdGhMb2dnZXIiLCJMb2dMZXZlbCIsIklORk8iLCJPQ1NES1RlbGVtZXRyeUV2ZW50IiwiR0VUQ0hBVENPTkZJRyIsInJlcXVlc3RQYXRoIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMaXZlQ2hhdENvbmZpZ1BhdGgiLCJvcmdJZCIsIndpZGdldElkIiwibWV0aG9kIiwidXJsIiwib3JnVXJsIiwiYXhpb3NJbnN0YW5jZSIsImF4aW9zIiwiY3JlYXRlIiwicmV0cmllcyIsIm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiZ2V0IiwidGltZW91dCIsImRlZmF1bHRSZXF1ZXN0VGltZW91dCIsInJlcXVlc3RUaW1lb3V0Q29uZmlnIiwiZ2V0Q2hhdENvbmZpZyIsInJlc3BvbnNlIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIm1pbGxpU2Vjb25kc0VsYXBzZWQiLCJkYXRhIiwiR0VUQ0hBVENPTkZJR1NVQ0NFU1MiLCJnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImhlYWRlck92ZXJ3cml0ZXMiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwiZGVmYXVsdEhlYWRlcnMiLCJMaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsIm9wdGlvbnMiLCJnZXRMV0lEZXRhaWxzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJ1bmRlZmluZWQiLCJjb2RlIiwiYXhpb3NUaW1lb3V0RXJyb3JDb2RlIiwiZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMiLCJjdXJyZW50UmV0cnlDb3VudCIsImN1cnJlbnRMaXZlQ2hhdFZlcnNpb24iLCJHRVRDSEFUVE9LRU5TVEFSVEVEIiwiZW5kcG9pbnQiLCJxdWVyeVBhcmFtcyIsImdldENoYXRUb2tlbiIsInJldHJ5T240MjkiLCJnZXRDaGF0VG9rZW5SZXRyeU9uNDI5IiwiZ2V0Q2hhdFRva2VuRXJyb3IiLCJHRVRDSEFUVE9LRU5TVUNDRUVERUQiLCJzdGF0dXMiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwiR0VUQ0hBVFRPS0VORkFJTEVEIiwidG9vTWFueVJlcXVlc3RzU3RhdHVzQ29kZSIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJzZXRUaW1lb3V0IiwidGhlbiIsImVycm9yIiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTIiwiTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZIiwiTGl2ZUNoYXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5IiwiV0FSTiIsInF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQiLCJHZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGgiLCJpbml0Q29udGV4dCIsImdldENvbnRleHQiLCJjYWNoT2JqIiwiY3VzdG9tQ29udGV4dERhdGEiLCJ0ZW1wQXJyIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ0b1N0cmluZyIsIndpbmRvdyIsImRvY3VtZW50IiwiYnJvd3NlciIsIkJyb3dzZXJJbmZvIiwiZ2V0QnJvd3Nlck5hbWUiLCJkZXZpY2UiLCJEZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVHlwZSIsIm9yaWdpbnVybCIsImxvY2F0aW9uIiwiaHJlZiIsIm9zIiwiT1NJbmZvIiwiZ2V0T3NUeXBlIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIkdFVEFHRU5UQVZBSUxBQklMSVRZRkFJTEVEIiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsIlNFU1NJT05JTklUU1RBUlRFRCIsInNob3VsZFJldHJ5Iiwic2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsIkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCIsInNlc3Npb25Jbml0IiwiU0VTU0lPTklOSVRTVUNDRUVERUQiLCJTRVNTSU9OSU5JVEZBSUxFRCIsInNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsIkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aCIsImlzUmVjb25uZWN0Q2hhdCIsImlzUGVyc2lzdGVudENoYXQiLCJjaGF0SWQiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRoIiwic2Vzc2lvbkNsb3NlIiwiU0VTU0lPTkNMT1NFU1VDQ0VFREVEIiwiU0VTU0lPTkNMT1NFRkFJTEVEIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQiLCJhdXRoQ2hhdEV4aXN0IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQiLCJwb3N0Q2hhdFJlc3BvbnNlIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiU1VCTUlUUE9TVENIQVRTVEFSVEVEIiwiTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGgiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsImdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyIsImxvZyIsIkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVEIiwiU3VydmV5T3duZXJJZCIsIkxpdmVDaGF0R2V0U3VydmV5SW52aXRlTGlua1BhdGgiLCJMaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIndpZGdldEFwcElkIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVEIiwidG9rZW4iLCJnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyIsIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwib3JnYW5pemF0aW9uSWQiLCJhdXRob3JpemF0aW9uIiwiTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzIiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsImVtYWlsUmVxdWVzdEJvZHkiLCJlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyIsIkVNQUlMVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJlbWFpbFRyYW5zY3JpcHQiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsInNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCIsIkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwibWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJTZW5kVHlwaW5nSW5kaWNhdG9yUGF0aCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJTRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVEIiwiU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIkxvZ2dpbmdTYW5pdGl6ZXIiLCJzdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyIsInNhbml0aXplZFJlcXVlc3RQYXlsb2FkIiwic3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyIsInByZUNoYXRSZXNwb25zZSIsInN0cmlwUHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBHZW9sb2NhdGlvbiIsImN1c3RvbURhdGEiLCJSZXF1ZXN0SWQiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiVHJhbnNhY3Rpb25JZCIsInRyYW5zYWN0aW9uaWQiLCJSZXF1ZXN0UGF0aCIsIlJlcXVlc3RNZXRob2QiLCJSZXNwb25zZVN0YXR1c0NvZGUiLCJFeGNlcHRpb25EZXRhaWxzIiwiUmVxdWVzdFBheWxvYWQiLCJzdWJzdHJpbmciLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBb0JBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztB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QW5CLEVBQXNCLENBQXRCLENBRHdDO0FBRXZEbEssRUFBQUEsc0JBQXNCLEVBQUUsRUFGK0I7QUFHdkRJLEVBQUFBLHVDQUF1QyxFQUFFLEtBSGM7QUFJdkRYLEVBQUFBLHNCQUFzQixFQUFFLEtBSitCO0FBS3ZEekMsRUFBQUEsMEJBQTBCLEVBQUUsQ0FMMkI7QUFNdkRJLEVBQUFBLHFCQUFxQixFQUFFMEIsU0FOZ0M7QUFPdkR6QixFQUFBQSxvQkFBb0IsRUFBRW5ELEdBQUcsQ0FBQ2lRO0FBUDZCLEMiLCJzb3VyY2VSb290Ijoib2NzZGs6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbm5lbElkLCBMaXZlQ2hhdFZlcnNpb24gfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQgfSBmcm9tIFwiLi9VdGlscy9lbmRwb2ludHNDcmVhdG9yc1wiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBJRGF0YU1hc2tpbmdJbmZvIGZyb20gXCIuL0ludGVyZmFjZXMvSURhdGFNYXNraW5nSW5mb1wiO1xuaW1wb3J0IElFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSU9tbmljaGFubmVsQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtc1wiO1xuaW1wb3J0IElTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zXCJcbmltcG9ydCBJU0RLIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES1wiO1xuaW1wb3J0IElTREtDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES0NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IEluaXRDb250ZXh0IGZyb20gXCIuL01vZGVsL0luaXRDb250ZXh0XCI7XG5pbXBvcnQgTG9jYWxlcyBmcm9tIFwiLi9Db21tb24vTG9jYWxlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZ1Nhbml0aXplciB9IGZyb20gXCIuL1V0aWxzL0xvZ2dpbmdTYW5pdGl6ZXJcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIi4vTW9kZWwvTG9nTGV2ZWxcIjtcbmltcG9ydCBPQ1NES0xvZ2dlciBmcm9tIFwiLi9Db21tb24vT0NTREtMb2dnZXJcIjtcbmltcG9ydCB7IE9DU0RLVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCB7IE9TSW5mbyB9IGZyb20gXCIuL1V0aWxzL09TSW5mb1wiO1xuaW1wb3J0IE9tbmljaGFubmVsRW5kcG9pbnRzIGZyb20gXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEVuZHBvaW50c1wiO1xuaW1wb3J0IE9tbmljaGFubmVsSFRUUEhlYWRlcnMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsSFRUUEhlYWRlcnNcIjtcbmltcG9ydCBRdWV1ZUF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9RdWV1ZUF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdEF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIGZyb20gXCIuL01vZGVsL1JlY29ubmVjdE1hcHBpbmdSZWNvcmRcIjtcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gXCIuL0NvbW1vbi9NYXBwaW5nc1wiO1xuaW1wb3J0IHsgVGltZXIgfSBmcm9tIFwiLi9VdGlscy9UaW1lclwiO1xuaW1wb3J0IGF4aW9zUmV0cnkgZnJvbSBcIi4vVXRpbHMvYXhpb3NSZXRyeVwiO1xuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4vVXRpbHMvdXVpZFwiO1xuaW1wb3J0ICogYXMgaGFzaCBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBDdXN0b21Db250ZXh0RGF0YSB9IGZyb20gXCIuL1V0aWxzL0N1c3RvbUNvbnRleHREYXRhXCI7XG5pbXBvcnQgeyBSZXF1ZXN0VGltZW91dENvbmZpZyB9IGZyb20gXCIuL0NvbW1vbi9SZXF1ZXN0VGltZW91dENvbmZpZ1wiO1xuaW1wb3J0IHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvciBmcm9tIFwiLi9VdGlscy90aHJvd0NsaWVudEhUVFBFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDMwMDAwLFxuICAgIGdldExXSURldGFpbHM6IDE1MDAwLFxuICAgIGdldENoYXRUb2tlbjogMTUwMDAsXG4gICAgc2Vzc2lvbkluaXQ6IDE1MDAwLFxuICAgIHNlc3Npb25DbG9zZTogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0YWJsZUNoYXRzOiAxNTAwMCxcbiAgICBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2U6IDE1MDAwLFxuICAgIGdldFN1cnZleUludml0ZUxpbms6IDE1MDAwLFxuICAgIGdldENoYXRUcmFuc2NyaXB0czogMzAwMDAsXG4gICAgZW1haWxUcmFuc2NyaXB0OiA1MDAwLFxuICAgIGZldGNoRGF0YU1hc2tpbmdJbmZvOiA1MDAwLFxuICAgIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0OiAxNTAwMCxcbiAgICBnZXRBZ2VudEF2YWlsYWJpbGl0eTogMTUwMDAsXG4gICAgc2VuZFR5cGluZ0luZGljYXRvcjogNTAwMCxcbiAgICB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dDogMTUwMDBcbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0Q29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgYXV0aENvZGVOb25jZTogdXVpZHY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIGdldENoYXRUb2tlblJldHJ5Q291bnQ6IDEwLFxuICAgIGdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZTogMTAwMDAsXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOTogZmFsc2UsXG4gICAgbWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmU6IDMsXG4gICAgZGVmYXVsdFJlcXVlc3RUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgcmVxdWVzdFRpbWVvdXRDb25maWc6IFNESy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWdcbiAgfTtcblxuICBsaXZlQ2hhdFZlcnNpb246IG51bWJlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb246IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24sIHByaXZhdGUgbG9nZ2VyPzogT0NTREtMb2dnZXIpIHtcbiAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLmxlbmd0aCB8fCB0eXBlb2YgKGNvbmZpZ3VyYXRpb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgU0RLIGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kaXZpZHVhbCBlbmRwb2ludFRpbWVvdXQgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNoYW5uZWxJZFxuICAgIGNvbnN0IHsgY2hhbm5lbElkIH0gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKENoYW5uZWxJZCkuaW5jbHVkZXMoY2hhbm5lbElkIGFzIENoYW5uZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFubmVsSWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBPQyBjb25maWdcbiAgICBjb25zdCBjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9tbmljaGFubmVsQ29uZmlndXJhdGlvbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycykge1xuICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAnJHtrZXl9JyBpbiBPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IExpdmVDaGF0VmVyc2lvbi5WMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNoYXQgY29uZmlnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRDb25maWcocmVxdWVzdElkOiBzdHJpbmcsIGJ5cGFzc0NhY2hlID0gZmFsc2UpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHLCBcIkdldCBDaGF0IGNvbmZpZyBzdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29uZmlnUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0/cmVxdWVzdElkPSR7cmVxdWVzdElkfSZjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgIGlmIChieXBhc3NDYWNoZSkge1xuICAgICAgaGVhZGVycyA9IHsgLi4uQ29uc3RhbnRzLmJ5cGFzc0NhY2hlSGVhZGVycywgLi4uaGVhZGVycyB9O1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcbiAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuXG4gICAgaWYgKGRhdGEuTGl2ZUNoYXRWZXJzaW9uKSB7XG4gICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgIH1cblxuICAgIGRhdGEuaGVhZGVycyA9IHt9O1xuICAgIGlmIChyZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdKSB7XG4gICAgICBkYXRhLmhlYWRlcnNbXCJkYXRlXCJdID0gcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl07XG4gICAgfVxuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRVNTLCBcIkdldCBDaGF0IGNvbmZpZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyxcbiAgICAgIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBMV0kgZGV0YWlscy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IExXSSBEZXRhaWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExXSURldGFpbHMocmVxdWVzdElkOiBzdHJpbmcsIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1RBUlRFRCwgXCJHZXQgTFdJIERldGFpbHMgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCBhIGVuZHBvaW50IGZvciBhbm9ueW1vdXMgY2hhdHMgdG8gZ2V0IExXSSBEZXRhaWxzXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSwgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuXG4gICAgLy8gRXh0cmFjdCBhdXRoIHRva2VuIGFuZCByZWNvbm5lY3QgaWQgZnJvbSBvcHRpb25hbCBwYXJhbVxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVjb25uZWN0SWQgfSA9IGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAvLyB1cGRhdGVkIGF1dGggZW5kcG9pbnQgZm9yIGF1dGhlbnRpY2F0ZWQgY2hhdHMgYW5kIGFkZCBhdXRoIHRva2VuIGluIGhlYWRlclxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICAvLyBBcHBlbmQgcmVjb25uZWN0IGlkIG9uIHRoZSBlbmRwb2ludCBpZiB2YWlsYWJsZVxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgfVxuICAgIHJlcXVlc3RQYXRoICs9IGA/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldExXSURldGFpbHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVUNDRUVERUQsIFwiR2V0IExXSSBEZXRhaWxzIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTRkFJTEVELCBcIkdldCBMV0kgRGV0YWlscyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGNoYXQgdG9rZW4gZnJvbSBPbW5pY2hhbm5lbCB0byBqb2luIFQxIHRocmVhZC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3IgZ2V0Y2hhdHRva2VuIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZDogc3RyaW5nLCBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zID0ge30sIGN1cnJlbnRSZXRyeUNvdW50OiBudW1iZXIgPSAwKTogUHJvbWlzZTxGZXRjaENoYXRUb2tlblJlc3BvbnNlPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWluZmVycmFibGUtdHlwZXNcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiB9ID0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1RBUlRFRCwgXCJHZXQgQ2hhdCBUb2tlbiBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoY3VycmVudFJldHJ5Q291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3VycmVudFJldHJ5Q291bnRgKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIGFzIExpdmVDaGF0VmVyc2lvbiB8fCB0aGlzLmxpdmVDaGF0VmVyc2lvbiwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA/IHRydWUgOiBmYWxzZSk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtlbmRwb2ludH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBgY2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgcmVxdWVzdFBhdGggKz0gYD8ke3F1ZXJ5UGFyYW1zfWA7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUb2tlblxuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeU9uNDI5IH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBnZXRDaGF0VG9rZW5FcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIGNoYXQgdG9rZW4gcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcblxuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUb2tlbiBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmIChyZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5GQUlMRUQsIFwiR2V0IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGdldENoYXRUb2tlbkVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgLy8gU3RvcCByZXRyeSBvbiA0MjlcbiAgICAgICAgaWYgKChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5zdGF0dXMgPT09IENvbnN0YW50cy50b29NYW55UmVxdWVzdHNTdGF0dXNDb2RlICYmICF0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIHJldHVybi9yZWplY3QgdG8gcmVjdXJzaXZlbHkgcmV0cnkgb24gZmFpbHVyZXMgdXAgdG8gY2hhdCB0b2tlbiByZXRyeSBjb3VudCBsaW1pdFxuICAgICAgfVxuXG4gICAgICAvLyBCYXNlIGNhc2VcbiAgICAgIGlmIChjdXJyZW50UmV0cnlDb3VudCArIDEgPj0gdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5Q291bnQpIHtcbiAgICAgICAgaWYgKGdldENoYXRUb2tlbkVycm9yICYmIGdldENoYXRUb2tlbkVycm9yLmNvZGUgPT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChnZXRDaGF0VG9rZW5FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXRyaWVzIHVudGlsIGl0IHJlYWNoZXMgaXRzIGxpbWl0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5nZXRDaGF0VG9rZW4ocmVxdWVzdElkLCBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcywgY3VycmVudFJldHJ5Q291bnQgKyAxKS50aGVuKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSk7XG4gICAgICB9LCB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAgICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdGFibGVDaGF0cyhyZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM6IElSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMpOiBQcm9taXNlPFJlY29ubmVjdE1hcHBpbmdSZWNvcmQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTLCBcIkdldCBSZWNvbm5lY3RhYmxlIGNoYXQgU3RhcnRlZFwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFJlY29ubmVjdGFibGVDaGF0c1xuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyByZWNvbm5lY3RhYmxlIGNoYXRzIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTLCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIFN1Y2NlZWRlZCBhbmQgb2xkIHNlc3Npb24gcmV0dXJuZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIGluIHRoZSBvbGQgc2Vzc2lvbnMgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUUywgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkocmVjb25uZWN0SWQ6IHN0cmluZyk6IFByb21pc2U8UmVjb25uZWN0QXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWSwgXCJHZXQgUmVjb25uZWN0YWJsZSBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZWNvbm5lY3RJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFJlY29ubmVjdEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZLCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCB1bmRlZmluZWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLldBUk4sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZLCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IGRpZG4ndCBzZW5kIGFueSB2YWxpZCBkYXRhXCIsIHVuZGVmaW5lZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIFwiR2V0IFJlY29ubmVjdCBBdmFpbGFiaWxpdHkgZmFpbGVkXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICogQHBhcmFtIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gaW5pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBZ2VudEF2YWlsYWJpbGl0eShyZXF1ZXN0SWQ6IHN0cmluZywgcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtczogSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UXVldWVBdmFpbGFiaWxpdHk+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlTVEFSVEVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuR2V0QWdlbnRBdmFpbGFiaWxpdHlQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPWxjd2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSwgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcblxuICAgIGNvbnN0IGNhY2hPYmogPSB7XG4gICAgICBcIm9yZ0lkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkLFxuICAgICAgXCJ3aWRnZXRJZFwiOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZFxuICAgIH1cblxuICAgIGlmIChkYXRhICYmIGRhdGEuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgIGNvbnN0IHRlbXBBcnIgPSBDdXN0b21Db250ZXh0RGF0YS5zb3J0KGRhdGEuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoT2JqLCB7IFwiY3VzdG9tQ29udGV4dFwiOiB0ZW1wQXJyIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnBvcnRhbGNvbnRhY3RpZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoT2JqLCB7IFwicG9ydGFsY29udGFjdGlkXCI6IGRhdGEucG9ydGFsY29udGFjdGlkIH0pO1xuICAgIH1cblxuICAgIGRhdGEuY2FjaGVLZXkgPSBoYXNoLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShjYWNoT2JqKSkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZRkFJTEVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgYSBzZXNzaW9uIHRvIG9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkluaXQocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVEFSVEVELCBcIlNlc3Npb24gSW5pdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICBzaG91bGRSZXRyeTogc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIsXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25Jbml0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkluaXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSBgY2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgcmVxdWVzdFBhdGggKz0gYD8ke3F1ZXJ5UGFyYW1zfWA7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkluaXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVFNVQ0NFRURFRCwgXCJTZXNzaW9uIEluaXQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgZGF0YSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRGQUlMRUQsIFwiU2Vzc2lvbiBJbml0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGNsb3NlIChzYW1lIHJlcXVlc3QgaWQgZm9yIHNlc3Npb24gaW5pdCkuXG4gICAqIEBwYXJhbSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBjbG9zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXNzaW9uQ2xvc2UocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VTVEFSVEVELCBcIlNlc3Npb24gQ2xvc2UgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaXNSZWNvbm5lY3RDaGF0LCBpc1BlcnNpc3RlbnRDaGF0LCBjaGF0SWQgfSA9IHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhLmNoYXRJZCA9IGNoYXRJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVjb25uZWN0Q2hhdCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYCZpc1JlY29ubmVjdENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUGVyc2lzdGVudENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNQZXJzaXN0ZW50Q2hhdD10cnVlYDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkNsb3NlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1VDQ0VFREVELCBcIlNlc3Npb24gQ2xvc2Ugc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFRkFJTEVELCBcIlNlc3Npb24gY2xvc2UgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgYXV0aCBjaGF0IHJlY29yZCBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQocmVxdWVzdElkOiBzdHJpbmcsIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgfSA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LmF1dGhDaGF0RXhpc3QgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1VDQ0VFREVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG5cbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci50b1N0cmluZygpID09PSBcIkVycm9yOiBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIDQwNFwiKSB7IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICByZXNvbHZlKHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcG9zdENoYXRSZXNwb25zZSBQb3N0IGNoYXQgcmVzcG9uc2UgdG8gc3VibWl0LlxuICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UocmVxdWVzdElkOiBzdHJpbmcsIHBvc3RDaGF0UmVzcG9uc2U6IG9iamVjdCwgc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRTVEFSVEVELCBcIlN1Ym1pdCBQb3N0IENoYXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSwgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0Q2hhdFJlc3BvbnNlKSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRTVUNDRUVERUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVEZBSUxFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcG9zdENoYXRSZXNwb25zZSBQb3N0IGNoYXQgcmVzcG9uc2UgdG8gc3VibWl0LlxuICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFN1cnZleUludml0ZUxpbmsoc3VydmV5T3duZXJJZDogc3RyaW5nLCBzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keTogb2JqZWN0LCBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM6IElHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsLklORk8sXG4gICAgICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQsXG4gICAgICAgIHsgU3VydmV5T3duZXJJZDogc3VydmV5T3duZXJJZCB9LFxuICAgICAgICBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3RhcnRlZFwiKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0U3VydmV5SW52aXRlTGlua1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7c3VydmV5T3duZXJJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkIH0gPSBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0U3VydmV5SW52aXRlTGlua1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7c3VydmV5T3duZXJJZH1gO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjaGF0IHRyYW5zY3JpcHRzIGZvciBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBjaGF0SWQgQ2hhdCB0aHJlYWQgSWQuXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRyYW5zY3JpcHRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRUcmFuc2NyaXB0cyhyZXF1ZXN0SWQ6IHN0cmluZywgY2hhdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfSA9IGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAodGhpcy5saXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMiB8fCAoY3VycmVudExpdmVDaGF0VmVyc2lvbiAmJiBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uID09PSBMaXZlQ2hhdFZlcnNpb24uVjIpKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW1haWwgdHJhbnNjcmlwdCB0byBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGVtYWlsUmVxdWVzdEJvZHkgRW1haWwgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZW1haWwgdHJhbnNjcmlwdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbWFpbFRyYW5zY3JpcHQocmVxdWVzdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGVtYWlsUmVxdWVzdEJvZHk6IG9iamVjdCwgZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM6IElFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNUQVJURUQsIFwiRW1haWwgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZW1haWxSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVELCBcIkVtYWlsIFRyYW5zY3JpcHQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBURkFJTEVELCBcIkVtYWlsIFRyYW5zY3JpcHQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIG1hc2tpbmcgaW5mbyBvZiB0aGUgb3JnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YU1hc2tpbmdJbmZvKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxJRGF0YU1hc2tpbmdJbmZvPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVEFSVEVELCBcIkZldGNoIERhdGEgTWFza2luZyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBzZWNvbmRhcnkgY2hhbm5lbCBldmVudCBuZXR3b3JrIGNhbGwgdG8gT21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QocmVxdWVzdElkOiBzdHJpbmcsIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5OiBvYmplY3QsIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zOiBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSwgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICByZXF1ZXN0UGF0aCArPSBcIj9jaGFubmVsSWQ9XCIgKyBDb25zdGFudHMuZGVmYXVsdENoYW5uZWxJZDtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNURkFJTEVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBTZW5kIHR5cGluZyBpbmRpY2F0b3JcbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFR5cGluZ0luZGljYXRvcihyZXF1ZXN0SWQ6IHN0cmluZywgY3VycmVudExpdmVDaGF0VmVyc2lvbjogbnVtYmVyLCBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM6IElTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGF2b2lkaW5nIGxvZ2dpbmcgSW5mbyBmb3IgdHlwaW5naW5kaWNhdG9yIHRvIHJlZHVjZSBsb2cgdHJhZmZpY1xuICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBMaXZlQ2hhdFZlcnNpb24uVjIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgY3VzdG9tZXJEaXNwbGF5TmFtZSB9ID0gc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zO1xuICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBMaXZlQ2hhdFZlcnNpb24uVjIpIHsgdGhyb3cgbmV3IEVycm9yKCdUeXBpbmcgaW5kaWNhdG9yIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHYyJykgfVxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRofS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgaWYgKGN1c3RvbWVyRGlzcGxheU5hbWUpIHtcbiAgICAgIGhlYWRlcnNbQ29uc3RhbnRzLmN1c3RvbWVyRGlzcGxheU5hbWVdID0gY3VzdG9tZXJEaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZW5kVHlwaW5nSW5kaWNhdG9yXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQsIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuXG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGxvZ2dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dMZXZlbCBMb2cgbGV2ZWwgZm9yIGxvZ2dpbmcuXG4gICAqIEBwYXJhbSB0ZWxlbWV0cnlFdmVudFR5cGUgVGVsZW1ldHJ5IGV2ZW50IHR5cGUgaW4gd2hpY2ggZXZlbnQgd2lsbCBiZSBsb2dnZWQuXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdCBJRFxuICAgKiBAcGFyYW0gcmVzcG9uc2UgUmVzcG9uc2VcbiAgICogQHBhcmFtIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgRWxhcHNlZCB0aW1lIGluIG1zXG4gICAqIEBwYXJhbSByZXF1ZXN0UGF0aCBSZXF1ZXN0IHBhdGhcbiAgICogQHBhcmFtIG1ldGhvZCBNZXRob2RcbiAgICogQHBhcmFtIGVycm9yIEVycm9yXG4gICAqIEBwYXJhbSBkYXRhIERhdGFcbiAgICovXG4gIHByaXZhdGUgbG9nV2l0aExvZ2dlcihsb2dMZXZlbDogTG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZTogT0NTREtUZWxlbWV0cnlFdmVudCwgZGVzY3JpcHRpb246IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nLCByZXNwb25zZT86IEF4aW9zUmVzcG9uc2U8YW55PiwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcz86IG51bWJlciwgcmVxdWVzdFBhdGg/OiBzdHJpbmcsIG1ldGhvZD86IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCByZXF1ZXN0UGF5bG9hZD86IGFueSk6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcik7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0UGF5bG9hZCkge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB7IC4uLnJlcXVlc3RQYXlsb2FkIH07XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFByZUNoYXRSZXNwb25zZShzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEdlb2xvY2F0aW9uKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b21EYXRhID0ge1xuICAgICAgUmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICBSZWdpb246IHJlc3BvbnNlPy5kYXRhLlJlZ2lvbixcbiAgICAgIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsXG4gICAgICBUcmFuc2FjdGlvbklkOiByZXNwb25zZT8uaGVhZGVyc1tDb25zdGFudHMudHJhbnNhY3Rpb25pZF0sXG4gICAgICBSZXF1ZXN0UGF0aDogcmVxdWVzdFBhdGgsXG4gICAgICBSZXF1ZXN0TWV0aG9kOiBtZXRob2QsXG4gICAgICBSZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogZXJyb3IgPyAoZXJyb3IgYXMgYW55KS5yZXNwb25zZT8uc3RhdHVzIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yLFxuICAgICAgUmVxdWVzdFBheWxvYWQ6IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkXG4gICAgfTtcbiAgICB0aGlzLmxvZ2dlci5sb2cobG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZSwgY3VzdG9tRGF0YSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBzZXRBdXRoQ29kZU5vbmNlID0gKGhlYWRlcnM6IGFueSkgPT4ge1xuICAgIGlmIChoZWFkZXJzPy5hdXRoY29kZW5vbmNlKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSA9IGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2U7XG4gICAgfVxuICB9XG59XG4iXX0=
2328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwibmFtZXMiOlsiU0RLIiwib21uaWNoYW5uZWxDb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiaGVhZGVycyIsImF1dGhjb2Rlbm9uY2UiLCJhdXRoQ29kZU5vbmNlIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImtleSIsImhhc093blByb3BlcnR5IiwiY2hhbm5lbElkIiwidmFsdWVzIiwiQ2hhbm5lbElkIiwiaW5jbHVkZXMiLCJFcnJvciIsImN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwiQ29uc3RhbnRzIiwicmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJyZXF1ZXN0SWQiLCJieXBhc3NDYWNoZSIsInRpbWVyIiwiVGltZXIiLCJUSU1FUiIsImxvZ1dpdGhMb2dnZXIiLCJMb2dMZXZlbCIsIklORk8iLCJPQ1NES1RlbGVtZXRyeUV2ZW50IiwiR0VUQ0hBVENPTkZJRyIsInJlcXVlc3RQYXRoIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMaXZlQ2hhdENvbmZpZ1BhdGgiLCJvcmdJZCIsIndpZGdldElkIiwibWV0aG9kIiwidXJsIiwib3JnVXJsIiwiYXhpb3NJbnN0YW5jZSIsImF4aW9zIiwiY3JlYXRlIiwicmV0cmllcyIsIm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiZ2V0IiwidGltZW91dCIsImRlZmF1bHRSZXF1ZXN0VGltZW91dCIsInJlcXVlc3RUaW1lb3V0Q29uZmlnIiwiZ2V0Q2hhdENvbmZpZyIsInJlc3BvbnNlIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIm1pbGxpU2Vjb25kc0VsYXBzZWQiLCJkYXRhIiwiR0VUQ0hBVENPTkZJR1NVQ0NFU1MiLCJnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImhlYWRlck92ZXJ3cml0ZXMiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwiZGVmYXVsdEhlYWRlcnMiLCJMaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsIm9wdGlvbnMiLCJnZXRMV0lEZXRhaWxzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJ1bmRlZmluZWQiLCJjb2RlIiwiYXhpb3NUaW1lb3V0RXJyb3JDb2RlIiwiZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMiLCJjdXJyZW50UmV0cnlDb3VudCIsImN1cnJlbnRMaXZlQ2hhdFZlcnNpb24iLCJyZWZyZXNoVG9rZW4iLCJHRVRDSEFUVE9LRU5TVEFSVEVEIiwiZW5kcG9pbnQiLCJxdWVyeVBhcmFtcyIsImdldENoYXRUb2tlbiIsInJldHJ5T240MjkiLCJnZXRDaGF0VG9rZW5SZXRyeU9uNDI5IiwiZ2V0Q2hhdFRva2VuRXJyb3IiLCJHRVRDSEFUVE9LRU5TVUNDRUVERUQiLCJzdGF0dXMiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwiR0VUQ0hBVFRPS0VORkFJTEVEIiwidG9vTWFueVJlcXVlc3RzU3RhdHVzQ29kZSIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJzZXRUaW1lb3V0IiwidGhlbiIsImVycm9yIiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTIiwiTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZIiwiTGl2ZUNoYXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5IiwiV0FSTiIsInF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQiLCJHZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGgiLCJpbml0Q29udGV4dCIsImdldENvbnRleHQiLCJjYWNoT2JqIiwiY3VzdG9tQ29udGV4dERhdGEiLCJ0ZW1wQXJyIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ0b1N0cmluZyIsIndpbmRvdyIsImRvY3VtZW50IiwiYnJvd3NlciIsIkJyb3dzZXJJbmZvIiwiZ2V0QnJvd3Nlck5hbWUiLCJkZXZpY2UiLCJEZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVHlwZSIsIm9yaWdpbnVybCIsImxvY2F0aW9uIiwiaHJlZiIsIm9zIiwiT1NJbmZvIiwiZ2V0T3NUeXBlIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIkdFVEFHRU5UQVZBSUxBQklMSVRZRkFJTEVEIiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsIlNFU1NJT05JTklUU1RBUlRFRCIsInNob3VsZFJldHJ5Iiwic2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsIkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCIsInNlc3Npb25Jbml0IiwiU0VTU0lPTklOSVRTVUNDRUVERUQiLCJTRVNTSU9OSU5JVEZBSUxFRCIsInNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsIkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aCIsImlzUmVjb25uZWN0Q2hhdCIsImlzUGVyc2lzdGVudENoYXQiLCJjaGF0SWQiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRoIiwic2Vzc2lvbkNsb3NlIiwiU0VTU0lPTkNMT1NFU1VDQ0VFREVEIiwiU0VTU0lPTkNMT1NFRkFJTEVEIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQiLCJhdXRoQ2hhdEV4aXN0IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQiLCJwb3N0Q2hhdFJlc3BvbnNlIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiU1VCTUlUUE9TVENIQVRTVEFSVEVEIiwiTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGgiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsImdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyIsImxvZyIsIkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVEIiwiU3VydmV5T3duZXJJZCIsIkxpdmVDaGF0R2V0U3VydmV5SW52aXRlTGlua1BhdGgiLCJMaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIndpZGdldEFwcElkIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVEIiwidG9rZW4iLCJnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyIsIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwib3JnYW5pemF0aW9uSWQiLCJhdXRob3JpemF0aW9uIiwiTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzIiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsImVtYWlsUmVxdWVzdEJvZHkiLCJlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyIsIkVNQUlMVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJlbWFpbFRyYW5zY3JpcHQiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsInNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCIsIkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwibWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJTZW5kVHlwaW5nSW5kaWNhdG9yUGF0aCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJTRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVEIiwiU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIkxvZ2dpbmdTYW5pdGl6ZXIiLCJzdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyIsInNhbml0aXplZFJlcXVlc3RQYXlsb2FkIiwic3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyIsInByZUNoYXRSZXNwb25zZSIsInN0cmlwUHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBHZW9sb2NhdGlvbiIsImN1c3RvbURhdGEiLCJSZXF1ZXN0SWQiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiVHJhbnNhY3Rpb25JZCIsInRyYW5zYWN0aW9uaWQiLCJSZXF1ZXN0UGF0aCIsIlJlcXVlc3RNZXRob2QiLCJSZXNwb25zZVN0YXR1c0NvZGUiLCJFeGNlcHRpb25EZXRhaWxzIiwiUmVxdWVzdFBheWxvYWQiLCJzdWJzdHJpbmciLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBb0JBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUtBOztBQUNBOztBQUNBOztBQUNB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QkFBbUIsRUFBRSxJQWY0QztBQWdCakU3RCxFQUFBQSw2QkFBNkIsRUFBRTtBQWhCa0MsQztpQ0FEaEQzSyxHLDBCQW9Cc0M7QUFDdkRPLEVBQUFBLGFBQWEsRUFBRSxvQkFBUzBQLFNBQVQsQ0FBbUIsQ0FBbkIsRUFBc0IsQ0FBdEIsQ0FEd0M7QUFFdkRsSyxFQUFBQSxzQkFBc0IsRUFBRSxFQUYrQjtBQUd2REksRUFBQUEsdUNBQXVDLEVBQUUsS0FIYztBQUl2RFgsRUFBQUEsc0JBQXNCLEVBQUUsS0FKK0I7QUFLdkQxQyxFQUFBQSwwQkFBMEIsRUFBRSxDQUwyQjtBQU12REksRUFBQUEscUJBQXFCLEVBQUUwQixTQU5nQztBQU92RHpCLEVBQUFBLG9CQUFvQixFQUFFbkQsR0FBRyxDQUFDa1E7QUFQNkIsQyIsInNvdXJjZVJvb3QiOiJvY3NkazovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFubmVsSWQsIExpdmVDaGF0VmVyc2lvbiB9IGZyb20gXCIuL0NvbW1vbi9FbnVtc1wiO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHsgQnJvd3NlckluZm8gfSBmcm9tIFwiLi9VdGlscy9Ccm93c2VySW5mb1wiO1xuaW1wb3J0IENvbnN0YW50cyBmcm9tIFwiLi9Db21tb24vQ29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCB9IGZyb20gXCIuL1V0aWxzL2VuZHBvaW50c0NyZWF0b3JzXCI7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSBcIi4vVXRpbHMvRGV2aWNlSW5mb1wiO1xuaW1wb3J0IEZldGNoQ2hhdFRva2VuUmVzcG9uc2UgZnJvbSBcIi4vTW9kZWwvRmV0Y2hDaGF0VG9rZW5SZXNwb25zZVwiO1xuaW1wb3J0IElEYXRhTWFza2luZ0luZm8gZnJvbSBcIi4vSW50ZXJmYWNlcy9JRGF0YU1hc2tpbmdJbmZvXCI7XG5pbXBvcnQgSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJT21uaWNoYW5uZWxDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSU9tbmljaGFubmVsQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IElSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zXCI7XG5pbXBvcnQgSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXNcIlxuaW1wb3J0IElTREsgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU0RLXCI7XG5pbXBvcnQgSVNES0NvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JU0RLQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IElTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSW5pdENvbnRleHQgZnJvbSBcIi4vTW9kZWwvSW5pdENvbnRleHRcIjtcbmltcG9ydCBMb2NhbGVzIGZyb20gXCIuL0NvbW1vbi9Mb2NhbGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2FuaXRpemVyIH0gZnJvbSBcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi9Nb2RlbC9Mb2dMZXZlbFwiO1xuaW1wb3J0IE9DU0RLTG9nZ2VyIGZyb20gXCIuL0NvbW1vbi9PQ1NES0xvZ2dlclwiO1xuaW1wb3J0IHsgT0NTREtUZWxlbWV0cnlFdmVudCB9IGZyb20gXCIuL0NvbW1vbi9FbnVtc1wiO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSBcIi4vVXRpbHMvT1NJbmZvXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxFbmRwb2ludHMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxIVFRQSGVhZGVycyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVyc1wiO1xuaW1wb3J0IFF1ZXVlQXZhaWxhYmlsaXR5IGZyb20gXCIuL01vZGVsL1F1ZXVlQXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0QXZhaWxhYmlsaXR5IGZyb20gXCIuL01vZGVsL1JlY29ubmVjdEF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdE1hcHBpbmdSZWNvcmQgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0TWFwcGluZ1JlY29yZFwiO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSBcIi4vQ29tbW9uL01hcHBpbmdzXCI7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gXCIuL1V0aWxzL1RpbWVyXCI7XG5pbXBvcnQgYXhpb3NSZXRyeSBmcm9tIFwiLi9VdGlscy9heGlvc1JldHJ5XCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgKiBhcyBoYXNoIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRleHREYXRhIH0gZnJvbSBcIi4vVXRpbHMvQ3VzdG9tQ29udGV4dERhdGFcIjtcbmltcG9ydCB7IFJlcXVlc3RUaW1lb3V0Q29uZmlnIH0gZnJvbSBcIi4vQ29tbW9uL1JlcXVlc3RUaW1lb3V0Q29uZmlnXCI7XG5pbXBvcnQgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yIGZyb20gXCIuL1V0aWxzL3Rocm93Q2xpZW50SFRUUEVycm9yXCI7XG5pbXBvcnQgc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIgZnJvbSBcIi4vVXRpbHMvU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIGltcGxlbWVudHMgSVNESyB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZzogUmVxdWVzdFRpbWVvdXRDb25maWcgPSB7XG4gICAgZ2V0Q2hhdENvbmZpZzogMzAwMDAsXG4gICAgZ2V0TFdJRGV0YWlsczogMTUwMDAsXG4gICAgZ2V0Q2hhdFRva2VuOiAxNTAwMCxcbiAgICBzZXNzaW9uSW5pdDogMTUwMDAsXG4gICAgc2Vzc2lvbkNsb3NlOiAxNTAwMCxcbiAgICBnZXRSZWNvbm5lY3RhYmxlQ2hhdHM6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdEF2YWlsYWJpbGl0eTogMTUwMDAsXG4gICAgc3VibWl0UG9zdENoYXRSZXNwb25zZTogMTUwMDAsXG4gICAgZ2V0U3VydmV5SW52aXRlTGluazogMTUwMDAsXG4gICAgZ2V0Q2hhdFRyYW5zY3JpcHRzOiAzMDAwMCxcbiAgICBlbWFpbFRyYW5zY3JpcHQ6IDUwMDAsXG4gICAgZmV0Y2hEYXRhTWFza2luZ0luZm86IDUwMDAsXG4gICAgbWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3Q6IDE1MDAwLFxuICAgIGdldEFnZW50QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzZW5kVHlwaW5nSW5kaWNhdG9yOiA1MDAwLFxuICAgIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0OiAxNTAwMFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRDb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IHtcbiAgICBhdXRoQ29kZU5vbmNlOiB1dWlkdjQoKS5zdWJzdHJpbmcoMCwgOCksXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlDb3VudDogMTAsXG4gICAgZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlOiAxMDAwMCxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeU9uNDI5OiBmYWxzZSxcbiAgICBtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZTogMyxcbiAgICBkZWZhdWx0UmVxdWVzdFRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICByZXF1ZXN0VGltZW91dENvbmZpZzogU0RLLmRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZ1xuICB9O1xuXG4gIGxpdmVDaGF0VmVyc2lvbjogbnVtYmVyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjogSU9tbmljaGFubmVsQ29uZmlndXJhdGlvbiwgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgcHJpdmF0ZSBsb2dnZXI/OiBPQ1NES0xvZ2dlcikge1xuICAgIC8vIFNldHMgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uIGlmIHBhc3NlZCBjb25maWd1cmF0aW9uIGlzIGVtcHR5IG9yIGlzIG5vdCBhbiBvYmplY3RcbiAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuY29uZmlndXJhdGlvbikubGVuZ3RoIHx8IHR5cGVvZiAoY29uZmlndXJhdGlvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBTREsgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW2Ake2tleX1gXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBpbmRpdmlkdWFsIGVuZHBvaW50VGltZW91dCBjb25maWdcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXSkpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF0gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2hhbm5lbElkXG4gICAgY29uc3QgeyBjaGFubmVsSWQgfSA9IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQ2hhbm5lbElkKS5pbmNsdWRlcyhjaGFubmVsSWQgYXMgQ2hhbm5lbElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYW5uZWxJZGApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIE9DIGNvbmZpZ1xuICAgIGNvbnN0IGN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob21uaWNoYW5uZWxDb25maWd1cmF0aW9uKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBDb25zdGFudHMucmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIWN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICcke2tleX0nIGluIE9tbmljaGFubmVsQ29uZmlndXJhdGlvbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gTGl2ZUNoYXRWZXJzaW9uLlYyO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgY2hhdCBjb25maWcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdENvbmZpZyhyZXF1ZXN0SWQ6IHN0cmluZywgYnlwYXNzQ2FjaGUgPSBmYWxzZSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUcsIFwiR2V0IENoYXQgY29uZmlnIHN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25maWdQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfT9yZXF1ZXN0SWQ9JHtyZXF1ZXN0SWR9JmNoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGxldCBoZWFkZXJzID0ge307XG4gICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICBoZWFkZXJzID0geyAuLi5Db25zdGFudHMuYnlwYXNzQ2FjaGVIZWFkZXJzLCAuLi5oZWFkZXJzIH07XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgIH0pO1xuICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG5cbiAgICBpZiAoZGF0YS5MaXZlQ2hhdFZlcnNpb24pIHtcbiAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gZGF0YS5MaXZlQ2hhdFZlcnNpb247XG4gICAgfVxuXG4gICAgZGF0YS5oZWFkZXJzID0ge307XG4gICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMgJiYgcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl0pIHtcbiAgICAgIGRhdGEuaGVhZGVyc1tcImRhdGVcIl0gPSByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXTtcbiAgICB9XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR1NVQ0NFU1MsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLFxuICAgICAgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgTFdJIERldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TFdJRGV0YWlscyhyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVEFSVEVELCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGEgZW5kcG9pbnQgZm9yIGFub255bW91cyBjaGF0cyB0byBnZXQgTFdJIERldGFpbHNcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICAvLyBFeHRyYWN0IGF1dGggdG9rZW4gYW5kIHJlY29ubmVjdCBpZCBmcm9tIG9wdGlvbmFsIHBhcmFtXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZWNvbm5lY3RJZCB9ID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIC8vIHVwZGF0ZWQgYXV0aCBlbmRwb2ludCBmb3IgYXV0aGVudGljYXRlZCBjaGF0cyBhbmQgYWRkIGF1dGggdG9rZW4gaW4gaGVhZGVyXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIC8vIEFwcGVuZCByZWNvbm5lY3QgaWQgb24gdGhlIGVuZHBvaW50IGlmIHZhaWxhYmxlXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICB9XG4gICAgcmVxdWVzdFBhdGggKz0gYD9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0TFdJRGV0YWlsc1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU1NVQ0NFRURFRCwgXCJHZXQgTFdJIERldGFpbHMgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNGQUlMRUQsIFwiR2V0IExXSSBEZXRhaWxzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2hhdCB0b2tlbiBmcm9tIE9tbmljaGFubmVsIHRvIGpvaW4gVDEgdGhyZWFkLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VG9rZW4ocmVxdWVzdElkOiBzdHJpbmcsIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSwgY3VycmVudFJldHJ5Q291bnQ6IG51bWJlciA9IDApOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlc1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCByZWZyZXNoVG9rZW4gfSA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNUQVJURUQsIFwiR2V0IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGN1cnJlbnRSZXRyeUNvdW50YCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQoY3VycmVudExpdmVDaGF0VmVyc2lvbiBhcyBMaXZlQ2hhdFZlcnNpb24gfHwgdGhpcy5saXZlQ2hhdFZlcnNpb24sIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyB0cnVlIDogZmFsc2UpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgIH1cblxuICAgIGxldCBxdWVyeVBhcmFtcyA9IGBjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcblxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHF1ZXJ5UGFyYW1zICs9IGAmcmVmcmVzaFRva2VuPXRydWVgO1xuICAgIH1cblxuICAgIHJlcXVlc3RQYXRoICs9IGA/JHtxdWVyeVBhcmFtc31gO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSwgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLCByZXRyeU9uNDI5OiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOSB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgZ2V0Q2hhdFRva2VuRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyBjaGF0IHRva2VuIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG5cbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVUNDRUVERUQsIFwiR2V0IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBObyBjb250ZW50IGZvciByZWNvbm5lY3QgY2hhdCBjYXNlIHNob3VsZG4ndCBiZSByZXRyaWVkLlxuICAgICAgICBpZiAocmVjb25uZWN0SWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBDb25zdGFudHMubm9Db250ZW50U3RhdHVzQ29kZSkge1xuICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VORkFJTEVELCBcIkdldCBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBnZXRDaGF0VG9rZW5FcnJvciA9IGVycm9yO1xuXG4gICAgICAgIC8vIFN0b3AgcmV0cnkgb24gNDI5XG4gICAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5yZXNwb25zZT8uc3RhdHVzID09PSBDb25zdGFudHMudG9vTWFueVJlcXVlc3RzU3RhdHVzQ29kZSAmJiAhdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5T240MjkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBObyByZXR1cm4vcmVqZWN0IHRvIHJlY3Vyc2l2ZWx5IHJldHJ5IG9uIGZhaWx1cmVzIHVwIHRvIGNoYXQgdG9rZW4gcmV0cnkgY291bnQgbGltaXRcbiAgICAgIH1cblxuICAgICAgLy8gQmFzZSBjYXNlXG4gICAgICBpZiAoY3VycmVudFJldHJ5Q291bnQgKyAxID49IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeUNvdW50KSB7XG4gICAgICAgIGlmIChnZXRDaGF0VG9rZW5FcnJvciAmJiBnZXRDaGF0VG9rZW5FcnJvci5jb2RlID09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoZ2V0Q2hhdFRva2VuRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUmV0cmllcyB1bnRpbCBpdCByZWFjaGVzIGl0cyBsaW1pdFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZCwgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMsIGN1cnJlbnRSZXRyeUNvdW50ICsgMSkudGhlbigocmVzcG9uc2UpID0+IHJlc29sdmUocmVzcG9uc2UpKS5jYXRjaCgoZXJyb3IpID0+IHJlamVjdChlcnJvcikpO1xuICAgICAgfSwgdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RhYmxlQ2hhdHMocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zOiBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKTogUHJvbWlzZTxSZWNvbm5lY3RNYXBwaW5nUmVjb3JkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUUywgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RhYmxlQ2hhdHNcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgcmVjb25uZWN0YWJsZSBjaGF0cyByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUUywgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBTdWNjZWVkZWQgYW5kIG9sZCBzZXNzaW9uIHJldHVybmVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBpbiB0aGUgb2xkIHNlc3Npb25zIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFMsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5KHJlY29ubmVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFJlY29ubmVjdEF2YWlsYWJpbGl0eT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIFwiR2V0IFJlY29ubmVjdGFibGUgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVjb25uZWN0SWR9YDtcbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWSwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgdW5kZWZpbmVkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5XQVJOLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWSwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBkaWRuJ3Qgc2VuZCBhbnkgdmFsaWQgZGF0YVwiLCB1bmRlZmluZWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZLCBcIkdldCBSZWNvbm5lY3QgQXZhaWxhYmlsaXR5IGZhaWxlZFwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkocmVxdWVzdElkOiBzdHJpbmcsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFF1ZXVlQXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD1sY3dgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG5cbiAgICBjb25zdCBjYWNoT2JqID0ge1xuICAgICAgXCJvcmdJZFwiOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCxcbiAgICAgIFwid2lkZ2V0SWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWRcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLmN1c3RvbUNvbnRleHREYXRhKSB7XG4gICAgICBjb25zdCB0ZW1wQXJyID0gQ3VzdG9tQ29udGV4dERhdGEuc29ydChkYXRhLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2FjaE9iaiwgeyBcImN1c3RvbUNvbnRleHRcIjogdGVtcEFyciB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5wb3J0YWxjb250YWN0aWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2FjaE9iaiwgeyBcInBvcnRhbGNvbnRhY3RpZFwiOiBkYXRhLnBvcnRhbGNvbnRhY3RpZCB9KTtcbiAgICB9XG5cbiAgICBkYXRhLmNhY2hlS2V5ID0gaGFzaC5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLmRpZ2VzdCgnaGV4JykudG9TdHJpbmcoKTtcblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0KSB7XG4gICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mby5nZXRCcm93c2VyTmFtZSgpO1xuICAgICAgZGF0YS5kZXZpY2UgPSBEZXZpY2VJbmZvLmdldERldmljZVR5cGUoKTtcbiAgICAgIGRhdGEub3JpZ2ludXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBkYXRhLm9zID0gT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgIH1cblxuICAgIGlmICghZGF0YS5sb2NhbGUpIHtcbiAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzLmRlZmF1bHRMb2NhbGU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzLnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2NhbGU6ICcke2RhdGEubG9jYWxlfSdgKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcblxuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGEgc2Vzc2lvbiB0byBvbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25Jbml0KHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1RBUlRFRCwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgc2hvdWxkUmV0cnk6IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gYGNoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIHJlcXVlc3RQYXRoICs9IGA/JHtxdWVyeVBhcmFtc31gO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGRlZmF1bHQgbG9jYWxlIGlmIGxvY2FsZSBpcyBlbXB0eVxuICAgIGlmICghZGF0YS5sb2NhbGUpIHtcbiAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzLmRlZmF1bHRMb2NhbGU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzLnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2NhbGU6ICcke2RhdGEubG9jYWxlfSdgKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVUNDRUVERUQsIFwiU2Vzc2lvbiBJbml0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIGRhdGEpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCBcIlNlc3Npb24gSW5pdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBjbG9zZSAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gY2xvc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkNsb3NlKHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtczogSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1RBUlRFRCwgXCJTZXNzaW9uIENsb3NlIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGlzUmVjb25uZWN0Q2hhdCwgaXNQZXJzaXN0ZW50Q2hhdCwgY2hhdElkIH0gPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YS5jaGF0SWQgPSBjaGF0SWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGlmIChpc1JlY29ubmVjdENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNSZWNvbm5lY3RDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNVQ0NFRURFRCwgXCJTZXNzaW9uIENsb3NlIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRUZBSUxFRCwgXCJTZXNzaW9uIGNsb3NlIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkKHJlcXVlc3RJZDogc3RyaW5nLCB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY2hhdElkIH0gPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRWYWxpZGF0ZUF1dGhDaGF0TWFwUmVjb3JkUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5hdXRoQ2hhdEV4aXN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIikpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuXG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IudG9TdHJpbmcoKSA9PT0gXCJFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDRcIikgeyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBwb3N0Q2hhdFJlc3BvbnNlOiBvYmplY3QsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1RBUlRFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocG9zdENoYXRSZXNwb25zZSksXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVELCBcIlN1Ym1pdCBQb3N0IENoYXQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTdXJ2ZXlJbnZpdGVMaW5rKHN1cnZleU93bmVySWQ6IHN0cmluZywgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHk6IG9iamVjdCwgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zOiBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbC5JTkZPLFxuICAgICAgICBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELFxuICAgICAgICB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSxcbiAgICAgICAgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgfVxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlcXVlc3RJZCB9ID0gZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRTdXJ2ZXlJbnZpdGVMaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS1NVQ0NFRURFRCwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvcik7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgdGhyb3dDbGllbnRIVFRQVGltZW91dEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hhdCB0cmFuc2NyaXB0cyBmb3IgY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0cmFuc2NyaXB0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VHJhbnNjcmlwdHMocmVxdWVzdElkOiBzdHJpbmcsIGNoYXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtczogSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNUQVJURUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnkoYXhpb3NJbnN0YW5jZSwgeyBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSwgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIH0gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IGhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKHRoaXMubGl2ZUNoYXRWZXJzaW9uID09PSBMaXZlQ2hhdFZlcnNpb24uVjIgfHwgKGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gJiYgY3VycmVudExpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSkge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRyYW5zY3JpcHRzXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG5cbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRyYW5zY3JpcHQgdG8gY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBlbWFpbFJlcXVlc3RCb2R5IEVtYWlsIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGVtYWlsIHRyYW5zY3JpcHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW1haWxUcmFuc2NyaXB0KHJlcXVlc3RJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlbWFpbFJlcXVlc3RCb2R5OiBvYmplY3QsIGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zOiBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRTVEFSVEVELCBcIkVtYWlsIFRyYW5zY3JpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeShheGlvc0luc3RhbmNlLCB7IGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLCByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGVtYWlsUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVEZBSUxFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZGF0YSBtYXNraW5nIGluZm8gb2YgdGhlIG9yZy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24gKE9wdGlvbmFsKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBmZXRjaERhdGFNYXNraW5nSW5mbyhyZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8SURhdGFNYXNraW5nSW5mbz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1RBUlRFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlIH0pO1xuXG4gICAgY29uc3QgaGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZmV0Y2hEYXRhTWFza2luZ0luZm9cbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kKTtcblxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HRkFJTEVELCBcIkZldGNoIERhdGEgTWFza2luZyBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICB0aHJvd0NsaWVudEhUVFBUaW1lb3V0RXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnQgbmV0d29yayBjYWxsIHRvIE9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSBzZWNvbmRhcnlDaGFubmVsIGV2ZW50IHJlcXVlc3QgYm9keVxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nLCBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keTogb2JqZWN0LCBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtczogSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5KGF4aW9zSW5zdGFuY2UsIHsgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgfVxuXG4gICAgcmVxdWVzdFBhdGggKz0gXCI/Y2hhbm5lbElkPVwiICsgQ29uc3RhbnRzLmRlZmF1bHRDaGFubmVsSWQ7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVUNDRUVERUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2VuZCB0eXBpbmcgaW5kaWNhdG9yXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbmRUeXBpbmdJbmRpY2F0b3IocmVxdWVzdElkOiBzdHJpbmcsIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb246IG51bWJlciwgc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zOiBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBhdm9pZGluZyBsb2dnaW5nIEluZm8gZm9yIHR5cGluZ2luZGljYXRvciB0byByZWR1Y2UgbG9nIHRyYWZmaWNcbiAgICBpZiAoIWN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfHwgY3VycmVudExpdmVDaGF0VmVyc2lvbiAhPT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGN1c3RvbWVyRGlzcGxheU5hbWUgfSA9IHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcztcbiAgICBpZiAoIWN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfHwgY3VycmVudExpdmVDaGF0VmVyc2lvbiAhPT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSB7IHRocm93IG5ldyBFcnJvcignVHlwaW5nIGluZGljYXRvciBpcyBvbmx5IHN1cHBvcnRlZCBvbiB2MicpIH1cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5TZW5kVHlwaW5nSW5kaWNhdG9yUGF0aH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICBoZWFkZXJzW0NvbnN0YW50cy5jdXN0b21lckRpc3BsYXlOYW1lXSA9IGN1c3RvbWVyRGlzcGxheU5hbWU7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2VuZFR5cGluZ0luZGljYXRvclxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yKTtcblxuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHRocm93Q2xpZW50SFRUUFRpbWVvdXRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnkpOiB2b2lkIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKCF0aGlzLmxvZ2dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3IpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocmVxdWVzdFBheWxvYWQpIHtcbiAgICAgIHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0geyAuLi5yZXF1ZXN0UGF5bG9hZCB9O1xuICAgICAgaWYgKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKSB7XG4gICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQucHJlQ2hhdFJlc3BvbnNlKSB7XG4gICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBQcmVDaGF0UmVzcG9uc2Uoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQucHJlQ2hhdFJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBHZW9sb2NhdGlvbihzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tRGF0YSA9IHtcbiAgICAgIFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgUmVnaW9uOiByZXNwb25zZT8uZGF0YS5SZWdpb24sXG4gICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLFxuICAgICAgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2U/LmhlYWRlcnNbQ29uc3RhbnRzLnRyYW5zYWN0aW9uaWRdLFxuICAgICAgUmVxdWVzdFBhdGg6IHJlcXVlc3RQYXRoLFxuICAgICAgUmVxdWVzdE1ldGhvZDogbWV0aG9kLFxuICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LnN0YXR1cyA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcixcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZFxuICAgIH07XG4gICAgdGhpcy5sb2dnZXIubG9nKGxvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGUsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0QXV0aENvZGVOb25jZSA9IChoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoaGVhZGVycz8uYXV0aGNvZGVub25jZSkge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UgPSBoZWFkZXJzPy5hdXRoY29kZW5vbmNlO1xuICAgIH1cbiAgfVxufVxuIl19