parse-server 8.6.33 → 8.6.35

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/Config.js CHANGED
@@ -178,7 +178,8 @@ class Config {
178
178
  publicServerURL,
179
179
  _publicServerURL,
180
180
  emailVerifyTokenValidityDuration,
181
- emailVerifyTokenReuseIfValid
181
+ emailVerifyTokenReuseIfValid,
182
+ emailVerifySuccessOnInvalidEmail
182
183
  }) {
183
184
  const emailAdapter = userController.adapter;
184
185
  if (verifyUserEmails) {
@@ -187,7 +188,8 @@ class Config {
187
188
  appName,
188
189
  publicServerURL: publicServerURL || _publicServerURL,
189
190
  emailVerifyTokenValidityDuration,
190
- emailVerifyTokenReuseIfValid
191
+ emailVerifyTokenReuseIfValid,
192
+ emailVerifySuccessOnInvalidEmail
191
193
  });
192
194
  }
193
195
  }
@@ -388,7 +390,7 @@ class Config {
388
390
  if (passwordPolicy.resetTokenReuseIfValid && !passwordPolicy.resetTokenValidityDuration) {
389
391
  throw 'You cannot use resetTokenReuseIfValid without resetTokenValidityDuration';
390
392
  }
391
- if (passwordPolicy.resetPasswordSuccessOnInvalidEmail && typeof passwordPolicy.resetPasswordSuccessOnInvalidEmail !== 'boolean') {
393
+ if (passwordPolicy.resetPasswordSuccessOnInvalidEmail !== undefined && typeof passwordPolicy.resetPasswordSuccessOnInvalidEmail !== 'boolean') {
392
394
  throw 'resetPasswordSuccessOnInvalidEmail must be a boolean value';
393
395
  }
394
396
  }
@@ -429,7 +431,8 @@ class Config {
429
431
  appName,
430
432
  publicServerURL,
431
433
  emailVerifyTokenValidityDuration,
432
- emailVerifyTokenReuseIfValid
434
+ emailVerifyTokenReuseIfValid,
435
+ emailVerifySuccessOnInvalidEmail
433
436
  }) {
434
437
  if (!emailAdapter) {
435
438
  throw 'An emailAdapter is required for e-mail verification and password resets.';
@@ -454,6 +457,9 @@ class Config {
454
457
  if (emailVerifyTokenReuseIfValid && !emailVerifyTokenValidityDuration) {
455
458
  throw 'You cannot use emailVerifyTokenReuseIfValid without emailVerifyTokenValidityDuration';
456
459
  }
460
+ if (emailVerifySuccessOnInvalidEmail !== undefined && typeof emailVerifySuccessOnInvalidEmail !== 'boolean') {
461
+ throw 'emailVerifySuccessOnInvalidEmail must be a boolean value';
462
+ }
457
463
  }
458
464
  static validateFileUploadOptions(fileUpload) {
459
465
  try {
@@ -759,4 +765,4 @@ class Config {
759
765
  exports.Config = Config;
760
766
  var _default = exports.default = Config;
761
767
  module.exports = Config;
762
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9uZXQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NhY2hlIiwiX0RhdGFiYXNlQ29udHJvbGxlciIsIl9Mb2dnZXJDb250cm9sbGVyIiwiX3BhY2thZ2UiLCJfRGVmaW5pdGlvbnMiLCJfUGFyc2UiLCJfRGVwcmVjYXRvciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJzdHIiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsImFzeW5jS2V5cyIsIkNvbmZpZyIsImdldCIsImFwcGxpY2F0aW9uSWQiLCJtb3VudCIsImNhY2hlSW5mbyIsIkFwcENhY2hlIiwiY29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJkYXRhYmFzZSIsIkRhdGFiYXNlQ29udHJvbGxlciIsImRhdGFiYXNlQ29udHJvbGxlciIsImFkYXB0ZXIiLCJnZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQiLCJiaW5kIiwiZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0IiwidmVyc2lvbiIsImxvYWRLZXlzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiY2FjaGVkQ29uZmlnIiwiYXBwSWQiLCJ1cGRhdGVkQ29uZmlnIiwicHV0IiwidHJhbnNmb3JtQ29uZmlndXJhdGlvbiIsInNlcnZlckNvbmZpZ3VyYXRpb24iLCJpbmNsdWRlcyIsInZhbGlkYXRlT3B0aW9ucyIsInZhbGlkYXRlQ29udHJvbGxlcnMiLCJzZXR1cFBhc3N3b3JkVmFsaWRhdG9yIiwicGFzc3dvcmRQb2xpY3kiLCJjdXN0b21QYWdlcyIsInB1YmxpY1NlcnZlclVSTCIsInJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQiLCJleHBpcmVJbmFjdGl2ZVNlc3Npb25zIiwic2Vzc2lvbkxlbmd0aCIsImRlZmF1bHRMaW1pdCIsIm1heExpbWl0IiwiYWNjb3VudExvY2tvdXQiLCJtYXN0ZXJLZXlJcHMiLCJtYXN0ZXJLZXkiLCJtYWludGVuYW5jZUtleSIsIm1haW50ZW5hbmNlS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJhbGxvd0hlYWRlcnMiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJmaWxlVXBsb2FkIiwicGFnZXMiLCJzZWN1cml0eSIsImVuZm9yY2VQcml2YXRlVXNlcnMiLCJlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyIsInNjaGVtYSIsInJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIiwibG9nTGV2ZWxzIiwicmF0ZUxpbWl0IiwicmVxdWVzdENvbXBsZXhpdHkiLCJkYXRhYmFzZU9wdGlvbnMiLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJsaXZlUXVlcnkiLCJ2YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5IiwidmFsaWRhdGVQYXNzd29yZFBvbGljeSIsInZhbGlkYXRlRmlsZVVwbG9hZE9wdGlvbnMiLCJ2YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCIsInZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24iLCJ2YWxpZGF0ZUlwcyIsInZhbGlkYXRlRGVmYXVsdExpbWl0IiwidmFsaWRhdGVNYXhMaW1pdCIsInZhbGlkYXRlQWxsb3dIZWFkZXJzIiwidmFsaWRhdGVJZGVtcG90ZW5jeU9wdGlvbnMiLCJ2YWxpZGF0ZVBhZ2VzT3B0aW9ucyIsInZhbGlkYXRlU2VjdXJpdHlPcHRpb25zIiwidmFsaWRhdGVTY2hlbWFPcHRpb25zIiwidmFsaWRhdGVFbmZvcmNlUHJpdmF0ZVVzZXJzIiwidmFsaWRhdGVFbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyIsInZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiIsInZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdCIsInZhbGlkYXRlUmF0ZUxpbWl0IiwidmFsaWRhdGVSZXF1ZXN0Q29tcGxleGl0eSIsInZhbGlkYXRlTG9nTGV2ZWxzIiwidmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMiLCJ2YWxpZGF0ZUN1c3RvbVBhZ2VzIiwidmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJ2YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJ2ZXJpZnlVc2VyRW1haWxzIiwidXNlckNvbnRyb2xsZXIiLCJhcHBOYW1lIiwiX3B1YmxpY1NlcnZlclVSTCIsImVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsImVtYWlsQWRhcHRlciIsInZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwiZW5hYmxlQ2hlY2siLCJTZWN1cml0eU9wdGlvbnMiLCJpc0Jvb2xlYW4iLCJlbmFibGVDaGVja0xvZyIsImRlZmluaXRpb25zIiwiU2NoZW1hT3B0aW9ucyIsInN0cmljdCIsImRlbGV0ZUV4dHJhRmllbGRzIiwicmVjcmVhdGVNb2RpZmllZEZpZWxkcyIsImxvY2tTY2hlbWFzIiwiYmVmb3JlTWlncmF0aW9uIiwiYWZ0ZXJNaWdyYXRpb24iLCJlbmFibGVSb3V0ZXIiLCJQYWdlc09wdGlvbnMiLCJlbmFibGVMb2NhbGl6YXRpb24iLCJsb2NhbGl6YXRpb25Kc29uUGF0aCIsImlzU3RyaW5nIiwibG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUiLCJwbGFjZWhvbGRlcnMiLCJmb3JjZVJlZGlyZWN0IiwicGFnZXNQYXRoIiwicGFnZXNFbmRwb2ludCIsImN1c3RvbVVybHMiLCJjdXN0b21Sb3V0ZXMiLCJ0dGwiLCJJZGVtcG90ZW5jeU9wdGlvbnMiLCJpc05hTiIsInBhdGhzIiwiZHVyYXRpb24iLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJ0aHJlc2hvbGQiLCJ1bmxvY2tPblBhc3N3b3JkUmVzZXQiLCJBY2NvdW50TG9ja291dE9wdGlvbnMiLCJtYXhQYXNzd29yZEFnZSIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwidmFsaWRhdG9yUGF0dGVybiIsIlJlZ0V4cCIsInZhbGlkYXRvckNhbGxiYWNrIiwiZG9Ob3RBbGxvd1VzZXJuYW1lIiwibWF4UGFzc3dvcmRIaXN0b3J5IiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWwiLCJwYXR0ZXJuVmFsaWRhdG9yIiwidmFsdWUiLCJ0ZXN0IiwicmVxdWlyZWQiLCJ0eXBlIiwic3RhcnRzV2l0aCIsIlJlZmVyZW5jZUVycm9yIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIkZpbGVVcGxvYWRPcHRpb25zIiwiZW5hYmxlRm9yUHVibGljIiwiZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIiLCJmaWxlRXh0ZW5zaW9ucyIsImZpZWxkIiwiaXAiLCJzcGxpdCIsIm5ldCIsImlzSVAiLCJEZXByZWNhdG9yIiwibG9nUnVudGltZURlcHJlY2F0aW9uIiwidXNhZ2UiLCJfbW91bnQiLCJuZXdWYWx1ZSIsIlBhcnNlU2VydmVyT3B0aW9ucyIsImhlYWRlciIsInRyaW0iLCJMb2dMZXZlbHMiLCJ2YWxpZExvZ0xldmVscyIsImluZGV4T2YiLCJKU09OIiwic3RyaW5naWZ5IiwiZW5hYmxlU2NoZW1hSG9va3MiLCJEYXRhYmFzZU9wdGlvbnMiLCJzY2hlbWFDYWNoZVR0bCIsImFsbG93UHVibGljRXhwbGFpbiIsInJlZ2V4VGltZW91dCIsIkxpdmVRdWVyeU9wdGlvbnMiLCJvcHRpb25zIiwib3B0aW9uIiwicmVxdWVzdFBhdGgiLCJyZXF1ZXN0VGltZVdpbmRvdyIsImluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIiwicmVxdWVzdENvdW50IiwiZXJyb3JSZXNwb25zZU1lc3NhZ2UiLCJQYXJzZVNlcnZlciIsIlJhdGVMaW1pdFpvbmUiLCJ6b25lIiwiZm9ybWF0dGVyIiwiSW50bCIsIkxpc3RGb3JtYXQiLCJzdHlsZSIsImZvcm1hdCIsInZhbGlkS2V5cyIsIlJlcXVlc3RDb21wbGV4aXR5T3B0aW9ucyIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQiLCJ1bnJlZ2lzdGVyUmF0ZUxpbWl0ZXJzIiwiaSIsInJhdGVMaW1pdHMiLCJsaW1pdCIsImNsb3VkIiwic3BsaWNlIiwiaW52YWxpZExpbmtVUkwiLCJpbnZhbGlkTGluayIsImludmFsaWRWZXJpZmljYXRpb25MaW5rVVJMIiwiaW52YWxpZFZlcmlmaWNhdGlvbkxpbmsiLCJsaW5rU2VuZFN1Y2Nlc3NVUkwiLCJsaW5rU2VuZFN1Y2Nlc3MiLCJsaW5rU2VuZEZhaWxVUkwiLCJsaW5rU2VuZEZhaWwiLCJ2ZXJpZnlFbWFpbFN1Y2Nlc3NVUkwiLCJ2ZXJpZnlFbWFpbFN1Y2Nlc3MiLCJjaG9vc2VQYXNzd29yZFVSTCIsImNob29zZVBhc3N3b3JkIiwicmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwiLCJwYXNzd29yZFJlc2V0U3VjY2Vzc1VSTCIsInBhc3N3b3JkUmVzZXRTdWNjZXNzIiwicGFyc2VGcmFtZVVSTCIsInZlcmlmeUVtYWlsVVJMIiwibG9hZE1hc3RlcktleSIsInR0bElzRW1wdHkiLCJtYXN0ZXJLZXlUdGwiLCJpc0V4cGlyZWQiLCJtYXN0ZXJLZXlDYWNoZSIsImV4cGlyZXNBdCIsImV4cG9ydHMiLCJfZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9Db25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQSBDb25maWcgb2JqZWN0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGhvdyBhIHNwZWNpZmljIGFwcCBpc1xuLy8gY29uZmlndXJlZC5cbi8vIG1vdW50IGlzIHRoZSBVUkwgZm9yIHRoZSByb290IG9mIHRoZSBBUEk7IGluY2x1ZGVzIGh0dHAsIGRvbWFpbiwgZXRjLlxuXG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBuZXQgZnJvbSAnbmV0JztcbmltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBEYXRhYmFzZUNvbnRyb2xsZXIgZnJvbSAnLi9Db250cm9sbGVycy9EYXRhYmFzZUNvbnRyb2xsZXInO1xuaW1wb3J0IHsgbG9nTGV2ZWxzIGFzIHZhbGlkTG9nTGV2ZWxzIH0gZnJvbSAnLi9Db250cm9sbGVycy9Mb2dnZXJDb250cm9sbGVyJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHtcbiAgQWNjb3VudExvY2tvdXRPcHRpb25zLFxuICBEYXRhYmFzZU9wdGlvbnMsXG4gIEZpbGVVcGxvYWRPcHRpb25zLFxuICBJZGVtcG90ZW5jeU9wdGlvbnMsXG4gIExpdmVRdWVyeU9wdGlvbnMsXG4gIExvZ0xldmVscyxcbiAgUGFnZXNPcHRpb25zLFxuICBQYXJzZVNlcnZlck9wdGlvbnMsXG4gIFJlcXVlc3RDb21wbGV4aXR5T3B0aW9ucyxcbiAgU2NoZW1hT3B0aW9ucyxcbiAgU2VjdXJpdHlPcHRpb25zLFxufSBmcm9tICcuL09wdGlvbnMvRGVmaW5pdGlvbnMnO1xuaW1wb3J0IFBhcnNlU2VydmVyIGZyb20gJy4vY2xvdWQtY29kZS9QYXJzZS5TZXJ2ZXInO1xuaW1wb3J0IERlcHJlY2F0b3IgZnJvbSAnLi9EZXByZWNhdG9yL0RlcHJlY2F0b3InO1xuXG5mdW5jdGlvbiByZW1vdmVUcmFpbGluZ1NsYXNoKHN0cikge1xuICBpZiAoIXN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgaWYgKHN0ci5lbmRzV2l0aCgnLycpKSB7XG4gICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBDb25maWcga2V5cyB0aGF0IG5lZWQgdG8gYmUgbG9hZGVkIGFzeW5jaHJvbm91c2x5LlxuICovXG5jb25zdCBhc3luY0tleXMgPSBbJ3B1YmxpY1NlcnZlclVSTCddO1xuXG5leHBvcnQgY2xhc3MgQ29uZmlnIHtcbiAgc3RhdGljIGdldChhcHBsaWNhdGlvbklkOiBzdHJpbmcsIG1vdW50OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjYWNoZUluZm8gPSBBcHBDYWNoZS5nZXQoYXBwbGljYXRpb25JZCk7XG4gICAgaWYgKCFjYWNoZUluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gbmV3IENvbmZpZygpO1xuICAgIGNvbmZpZy5hcHBsaWNhdGlvbklkID0gYXBwbGljYXRpb25JZDtcbiAgICBPYmplY3Qua2V5cyhjYWNoZUluZm8pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkgPT0gJ2RhdGFiYXNlQ29udHJvbGxlcicpIHtcbiAgICAgICAgY29uZmlnLmRhdGFiYXNlID0gbmV3IERhdGFiYXNlQ29udHJvbGxlcihjYWNoZUluZm8uZGF0YWJhc2VDb250cm9sbGVyLmFkYXB0ZXIsIGNvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25maWdba2V5XSA9IGNhY2hlSW5mb1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbmZpZy5tb3VudCA9IHJlbW92ZVRyYWlsaW5nU2xhc2gobW91bnQpO1xuICAgIGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQgPSBjb25maWcuZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0LmJpbmQoY29uZmlnKTtcbiAgICBjb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0ID0gY29uZmlnLmdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdC5iaW5kKFxuICAgICAgY29uZmlnXG4gICAgKTtcbiAgICBjb25maWcudmVyc2lvbiA9IHZlcnNpb247XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGxvYWRLZXlzKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYXN5bmNLZXlzLm1hcChhc3luYyBrZXkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXNbYF8ke2tleX1gXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzW2tleV0gPSBhd2FpdCB0aGlzW2BfJHtrZXl9YF0oKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb25maWcga2V5ICcke2tleX0nOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBjYWNoZWRDb25maWcgPSBBcHBDYWNoZS5nZXQodGhpcy5hcHBJZCk7XG4gICAgaWYgKGNhY2hlZENvbmZpZykge1xuICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHsgLi4uY2FjaGVkQ29uZmlnIH07XG4gICAgICBhc3luY0tleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICB1cGRhdGVkQ29uZmlnW2tleV0gPSB0aGlzW2tleV07XG4gICAgICB9KTtcbiAgICAgIEFwcENhY2hlLnB1dCh0aGlzLmFwcElkLCB1cGRhdGVkQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdHJhbnNmb3JtQ29uZmlndXJhdGlvbihzZXJ2ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2VydmVyQ29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmIChhc3luY0tleXMuaW5jbHVkZXMoa2V5KSAmJiB0eXBlb2Ygc2VydmVyQ29uZmlndXJhdGlvbltrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNlcnZlckNvbmZpZ3VyYXRpb25bYF8ke2tleX1gXSA9IHNlcnZlckNvbmZpZ3VyYXRpb25ba2V5XTtcbiAgICAgICAgZGVsZXRlIHNlcnZlckNvbmZpZ3VyYXRpb25ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcHV0KHNlcnZlckNvbmZpZ3VyYXRpb24pIHtcbiAgICBDb25maWcudmFsaWRhdGVPcHRpb25zKHNlcnZlckNvbmZpZ3VyYXRpb24pO1xuICAgIENvbmZpZy52YWxpZGF0ZUNvbnRyb2xsZXJzKHNlcnZlckNvbmZpZ3VyYXRpb24pO1xuICAgIENvbmZpZy50cmFuc2Zvcm1Db25maWd1cmF0aW9uKHNlcnZlckNvbmZpZ3VyYXRpb24pO1xuICAgIEFwcENhY2hlLnB1dChzZXJ2ZXJDb25maWd1cmF0aW9uLmFwcElkLCBzZXJ2ZXJDb25maWd1cmF0aW9uKTtcbiAgICBDb25maWcuc2V0dXBQYXNzd29yZFZhbGlkYXRvcihzZXJ2ZXJDb25maWd1cmF0aW9uLnBhc3N3b3JkUG9saWN5KTtcbiAgICByZXR1cm4gc2VydmVyQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZU9wdGlvbnMoe1xuICAgIGN1c3RvbVBhZ2VzLFxuICAgIHB1YmxpY1NlcnZlclVSTCxcbiAgICByZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0LFxuICAgIGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMsXG4gICAgc2Vzc2lvbkxlbmd0aCxcbiAgICBkZWZhdWx0TGltaXQsXG4gICAgbWF4TGltaXQsXG4gICAgYWNjb3VudExvY2tvdXQsXG4gICAgcGFzc3dvcmRQb2xpY3ksXG4gICAgbWFzdGVyS2V5SXBzLFxuICAgIG1hc3RlcktleSxcbiAgICBtYWludGVuYW5jZUtleSxcbiAgICBtYWludGVuYW5jZUtleUlwcyxcbiAgICByZWFkT25seU1hc3RlcktleSxcbiAgICBhbGxvd0hlYWRlcnMsXG4gICAgaWRlbXBvdGVuY3lPcHRpb25zLFxuICAgIGZpbGVVcGxvYWQsXG4gICAgcGFnZXMsXG4gICAgc2VjdXJpdHksXG4gICAgZW5mb3JjZVByaXZhdGVVc2VycyxcbiAgICBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyxcbiAgICBzY2hlbWEsXG4gICAgcmVxdWVzdEtleXdvcmREZW55bGlzdCxcbiAgICBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuLFxuICAgIGxvZ0xldmVscyxcbiAgICByYXRlTGltaXQsXG4gICAgcmVxdWVzdENvbXBsZXhpdHksXG4gICAgZGF0YWJhc2VPcHRpb25zLFxuICAgIGV4dGVuZFNlc3Npb25PblVzZSxcbiAgICBhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24sXG4gICAgbGl2ZVF1ZXJ5LFxuICB9KSB7XG4gICAgaWYgKG1hc3RlcktleSA9PT0gcmVhZE9ubHlNYXN0ZXJLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWFzdGVyS2V5IGFuZCByZWFkT25seU1hc3RlcktleSBzaG91bGQgYmUgZGlmZmVyZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKG1hc3RlcktleSA9PT0gbWFpbnRlbmFuY2VLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWFzdGVyS2V5IGFuZCBtYWludGVuYW5jZUtleSBzaG91bGQgYmUgZGlmZmVyZW50Jyk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5KGFjY291bnRMb2Nrb3V0KTtcbiAgICB0aGlzLnZhbGlkYXRlUGFzc3dvcmRQb2xpY3kocGFzc3dvcmRQb2xpY3kpO1xuICAgIHRoaXMudmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyhmaWxlVXBsb2FkKTtcblxuICAgIGlmICh0eXBlb2YgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAncmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbmRTZXNzaW9uT25Vc2UgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2V4dGVuZFNlc3Npb25PblVzZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCh7IHB1YmxpY1NlcnZlclVSTCB9KTtcbiAgICB0aGlzLnZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24oc2Vzc2lvbkxlbmd0aCwgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZUlwcygnbWFzdGVyS2V5SXBzJywgbWFzdGVyS2V5SXBzKTtcbiAgICB0aGlzLnZhbGlkYXRlSXBzKCdtYWludGVuYW5jZUtleUlwcycsIG1haW50ZW5hbmNlS2V5SXBzKTtcbiAgICB0aGlzLnZhbGlkYXRlRGVmYXVsdExpbWl0KGRlZmF1bHRMaW1pdCk7XG4gICAgdGhpcy52YWxpZGF0ZU1heExpbWl0KG1heExpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlQWxsb3dIZWFkZXJzKGFsbG93SGVhZGVycyk7XG4gICAgdGhpcy52YWxpZGF0ZUlkZW1wb3RlbmN5T3B0aW9ucyhpZGVtcG90ZW5jeU9wdGlvbnMpO1xuICAgIHRoaXMudmFsaWRhdGVQYWdlc09wdGlvbnMocGFnZXMpO1xuICAgIHRoaXMudmFsaWRhdGVTZWN1cml0eU9wdGlvbnMoc2VjdXJpdHkpO1xuICAgIHRoaXMudmFsaWRhdGVTY2hlbWFPcHRpb25zKHNjaGVtYSk7XG4gICAgdGhpcy52YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMoZW5mb3JjZVByaXZhdGVVc2Vycyk7XG4gICAgdGhpcy52YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbihhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdChyZXF1ZXN0S2V5d29yZERlbnlsaXN0KTtcbiAgICB0aGlzLnZhbGlkYXRlUmF0ZUxpbWl0KHJhdGVMaW1pdCk7XG4gICAgdGhpcy52YWxpZGF0ZVJlcXVlc3RDb21wbGV4aXR5KHJlcXVlc3RDb21wbGV4aXR5KTtcbiAgICB0aGlzLnZhbGlkYXRlTG9nTGV2ZWxzKGxvZ0xldmVscyk7XG4gICAgdGhpcy52YWxpZGF0ZURhdGFiYXNlT3B0aW9ucyhkYXRhYmFzZU9wdGlvbnMpO1xuICAgIHRoaXMudmFsaWRhdGVDdXN0b21QYWdlcyhjdXN0b21QYWdlcyk7XG4gICAgdGhpcy52YWxpZGF0ZUFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbihhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24pO1xuICAgIHRoaXMudmFsaWRhdGVMaXZlUXVlcnlPcHRpb25zKGxpdmVRdWVyeSk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVDdXN0b21QYWdlcyhjdXN0b21QYWdlcykge1xuICAgIGlmICghY3VzdG9tUGFnZXMpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN1c3RvbVBhZ2VzKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93IEVycm9yKCdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGN1c3RvbVBhZ2VzIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUNvbnRyb2xsZXJzKHtcbiAgICB2ZXJpZnlVc2VyRW1haWxzLFxuICAgIHVzZXJDb250cm9sbGVyLFxuICAgIGFwcE5hbWUsXG4gICAgcHVibGljU2VydmVyVVJMLFxuICAgIF9wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24sXG4gICAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCxcbiAgfSkge1xuICAgIGNvbnN0IGVtYWlsQWRhcHRlciA9IHVzZXJDb250cm9sbGVyLmFkYXB0ZXI7XG4gICAgaWYgKHZlcmlmeVVzZXJFbWFpbHMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24oe1xuICAgICAgICBlbWFpbEFkYXB0ZXIsXG4gICAgICAgIGFwcE5hbWUsXG4gICAgICAgIHB1YmxpY1NlcnZlclVSTDogcHVibGljU2VydmVyVVJMIHx8IF9wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdChyZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgaWYgKHJlcXVlc3RLZXl3b3JkRGVueWxpc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdEtleXdvcmREZW55bGlzdCA9IHJlcXVlc3RLZXl3b3JkRGVueWxpc3QuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiByZXF1ZXN0S2V5d29yZERlbnlsaXN0IG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVFbmZvcmNlUHJpdmF0ZVVzZXJzKGVuZm9yY2VQcml2YXRlVXNlcnMpIHtcbiAgICBpZiAodHlwZW9mIGVuZm9yY2VQcml2YXRlVXNlcnMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gZW5mb3JjZVByaXZhdGVVc2VycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4oYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbikge1xuICAgIGlmICh0eXBlb2YgYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbikge1xuICAgIGlmICh0eXBlb2YgYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyhzZWN1cml0eSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2VjdXJpdHkpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHNlY3VyaXR5LmVuYWJsZUNoZWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlY3VyaXR5LmVuYWJsZUNoZWNrID0gU2VjdXJpdHlPcHRpb25zLmVuYWJsZUNoZWNrLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNlY3VyaXR5LmVuYWJsZUNoZWNrKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkuZW5hYmxlQ2hlY2sgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nID0gU2VjdXJpdHlPcHRpb25zLmVuYWJsZUNoZWNrTG9nLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTY2hlbWFPcHRpb25zKHNjaGVtYTogU2NoZW1hT3B0aW9ucykge1xuICAgIGlmICghc2NoZW1hKSB7IHJldHVybjsgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2NoZW1hKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYSBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlZmluaXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5kZWZpbml0aW9ucyA9IFNjaGVtYU9wdGlvbnMuZGVmaW5pdGlvbnMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYS5kZWZpbml0aW9ucykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5kZWZpbml0aW9ucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuc3RyaWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5zdHJpY3QgPSBTY2hlbWFPcHRpb25zLnN0cmljdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEuc3RyaWN0KSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLnN0cmljdCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5kZWxldGVFeHRyYUZpZWxkcyA9IFNjaGVtYU9wdGlvbnMuZGVsZXRlRXh0cmFGaWVsZHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcyA9IFNjaGVtYU9wdGlvbnMucmVjcmVhdGVNb2RpZmllZEZpZWxkcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEubG9ja1NjaGVtYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmxvY2tTY2hlbWFzID0gU2NoZW1hT3B0aW9ucy5sb2NrU2NoZW1hcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEubG9ja1NjaGVtYXMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEubG9ja1NjaGVtYXMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmJlZm9yZU1pZ3JhdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEuYmVmb3JlTWlncmF0aW9uICE9PSBudWxsICYmIHR5cGVvZiBzY2hlbWEuYmVmb3JlTWlncmF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuYmVmb3JlTWlncmF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmFmdGVyTWlncmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5hZnRlck1pZ3JhdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIHNjaGVtYS5hZnRlck1pZ3JhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmFmdGVyTWlncmF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBhZ2VzT3B0aW9ucyhwYWdlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmVuYWJsZVJvdXRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5lbmFibGVSb3V0ZXIgPSBQYWdlc09wdGlvbnMuZW5hYmxlUm91dGVyLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmVuYWJsZVJvdXRlcikpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmVuYWJsZVJvdXRlciBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiA9IFBhZ2VzT3B0aW9ucy5lbmFibGVMb2NhbGl6YXRpb24uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9IFBhZ2VzT3B0aW9ucy5sb2NhbGl6YXRpb25Kc29uUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPSBQYWdlc09wdGlvbnMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhwYWdlcy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBsYWNlaG9sZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5wbGFjZWhvbGRlcnMgPSBQYWdlc09wdGlvbnMucGxhY2Vob2xkZXJzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5wbGFjZWhvbGRlcnMpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgdHlwZW9mIHBhZ2VzLnBsYWNlaG9sZGVycyAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGxhY2Vob2xkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmZvcmNlUmVkaXJlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuZm9yY2VSZWRpcmVjdCA9IFBhZ2VzT3B0aW9ucy5mb3JjZVJlZGlyZWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmZvcmNlUmVkaXJlY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5mb3JjZVJlZGlyZWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc1BhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMucGFnZXNQYXRoID0gUGFnZXNPcHRpb25zLnBhZ2VzUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLnBhZ2VzUGF0aCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBhZ2VzUGF0aCBtdXN0IGJlIGEgc3RyaW5nLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc0VuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLnBhZ2VzRW5kcG9pbnQgPSBQYWdlc09wdGlvbnMucGFnZXNFbmRwb2ludC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLnBhZ2VzRW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5wYWdlc0VuZHBvaW50IG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmN1c3RvbVVybHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuY3VzdG9tVXJscyA9IFBhZ2VzT3B0aW9ucy5jdXN0b21VcmxzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMuY3VzdG9tVXJscykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5jdXN0b21VcmxzIG11c3QgYmUgYW4gb2JqZWN0Lic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5jdXN0b21Sb3V0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuY3VzdG9tUm91dGVzID0gUGFnZXNPcHRpb25zLmN1c3RvbVJvdXRlcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIShwYWdlcy5jdXN0b21Sb3V0ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmN1c3RvbVJvdXRlcyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zKGlkZW1wb3RlbmN5T3B0aW9ucykge1xuICAgIGlmICghaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpZGVtcG90ZW5jeU9wdGlvbnMudHRsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW1wb3RlbmN5T3B0aW9ucy50dGwgPSBJZGVtcG90ZW5jeU9wdGlvbnMudHRsLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaWRlbXBvdGVuY3lPcHRpb25zLnR0bCkgJiYgaWRlbXBvdGVuY3lPcHRpb25zLnR0bCA8PSAwKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgVFRMIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgc2Vjb25kcyc7XG4gICAgfSBlbHNlIGlmIChpc05hTihpZGVtcG90ZW5jeU9wdGlvbnMudHRsKSkge1xuICAgICAgdGhyb3cgJ2lkZW1wb3RlbmN5IFRUTCB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKCFpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMpIHtcbiAgICAgIGlkZW1wb3RlbmN5T3B0aW9ucy5wYXRocyA9IElkZW1wb3RlbmN5T3B0aW9ucy5wYXRocy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIShpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93ICdpZGVtcG90ZW5jeSBwYXRocyBtdXN0IGJlIG9mIGFuIGFycmF5IG9mIHN0cmluZ3MnO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5KGFjY291bnRMb2Nrb3V0KSB7XG4gICAgaWYgKGFjY291bnRMb2Nrb3V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBhY2NvdW50TG9ja291dC5kdXJhdGlvbiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gPD0gMCB8fFxuICAgICAgICBhY2NvdW50TG9ja291dC5kdXJhdGlvbiA+IDk5OTk5XG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ0FjY291bnQgbG9ja291dCBkdXJhdGlvbiBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxMDAwMDAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKGFjY291bnRMb2Nrb3V0LnRocmVzaG9sZCkgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQudGhyZXNob2xkIDwgMSB8fFxuICAgICAgICBhY2NvdW50TG9ja291dC50aHJlc2hvbGQgPiA5OTlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAnQWNjb3VudCBsb2Nrb3V0IHRocmVzaG9sZCBzaG91bGQgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEwMDAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0ID0gQWNjb3VudExvY2tvdXRPcHRpb25zLnVubG9ja09uUGFzc3dvcmRSZXNldC5kZWZhdWx0O1xuICAgICAgfSBlbHNlIGlmICghaXNCb29sZWFuKGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCkpIHtcbiAgICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUGFzc3dvcmRQb2xpY3kocGFzc3dvcmRQb2xpY3kpIHtcbiAgICBpZiAocGFzc3dvcmRQb2xpY3kpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHlwZW9mIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlICE9PSAnbnVtYmVyJyB8fCBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSA8IDApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR5cGVvZiBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiA8PSAwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pO1xuICAgICAgICB9IGVsc2UgaWYgKCEocGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBtdXN0IGJlIGEgcmVnZXggc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QuJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvckNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSAmJlxuICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5KSB8fFxuICAgICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSA8PSAwIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5ID4gMjApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSBtdXN0IGJlIGFuIGludGVnZXIgcmFuZ2luZyAwIC0gMjAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFRva2VuUmV1c2VJZlZhbGlkIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmICFwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICB0aHJvdyAnWW91IGNhbm5vdCB1c2UgcmVzZXRUb2tlblJldXNlSWZWYWxpZCB3aXRob3V0IHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSAnYm9vbGVhbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gaXMgY29uZmlndXJlZCB0aGVuIHNldHVwIGEgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgcGF0dGVyblxuICBzdGF0aWMgc2V0dXBQYXNzd29yZFZhbGlkYXRvcihwYXNzd29yZFBvbGljeSkge1xuICAgIGlmIChwYXNzd29yZFBvbGljeSAmJiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKSB7XG4gICAgICBwYXNzd29yZFBvbGljeS5wYXR0ZXJuVmFsaWRhdG9yID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybi50ZXN0KHZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMLCByZXF1aXJlZCA9IGZhbHNlIH0pIHtcbiAgICBpZiAoIXB1YmxpY1NlcnZlclVSTCkge1xuICAgICAgaWYgKCFyZXF1aXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyAnVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgaXMgcmVxdWlyZWQuJztcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHB1YmxpY1NlcnZlclVSTDtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFwdWJsaWNTZXJ2ZXJVUkwuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFwdWJsaWNTZXJ2ZXJVUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICB0aHJvdyAnVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgbXVzdCBiZSBhIHZhbGlkIFVSTCBzdGFydGluZyB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uJztcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IGBUaGUgb3B0aW9uIHB1YmxpY1NlcnZlclVSTCBtdXN0IGJlIGEgc3RyaW5nIG9yIGZ1bmN0aW9uLCBidXQgZ290ICR7dHlwZX0uYDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbih7XG4gICAgZW1haWxBZGFwdGVyLFxuICAgIGFwcE5hbWUsXG4gICAgcHVibGljU2VydmVyVVJMLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gIH0pIHtcbiAgICBpZiAoIWVtYWlsQWRhcHRlcikge1xuICAgICAgdGhyb3cgJ0FuIGVtYWlsQWRhcHRlciBpcyByZXF1aXJlZCBmb3IgZS1tYWlsIHZlcmlmaWNhdGlvbiBhbmQgcGFzc3dvcmQgcmVzZXRzLic7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYXBwTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93ICdBbiBhcHAgbmFtZSBpcyByZXF1aXJlZCBmb3IgZS1tYWlsIHZlcmlmaWNhdGlvbiBhbmQgcGFzc3dvcmQgcmVzZXRzLic7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVQdWJsaWNTZXJ2ZXJVUkwoeyBwdWJsaWNTZXJ2ZXJVUkwsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIGlmIChlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgaWYgKGlzTmFOKGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSkge1xuICAgICAgICB0aHJvdyAnRW1haWwgdmVyaWZ5IHRva2VuIHZhbGlkaXR5IGR1cmF0aW9uIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuJztcbiAgICAgIH0gZWxzZSBpZiAoZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24gPD0gMCkge1xuICAgICAgICB0aHJvdyAnRW1haWwgdmVyaWZ5IHRva2VuIHZhbGlkaXR5IGR1cmF0aW9uIG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAmJiB0eXBlb2YgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuICAgIGlmIChlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICYmICFlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgdGhyb3cgJ1lvdSBjYW5ub3QgdXNlIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgd2l0aG91dCBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRmlsZVVwbG9hZE9wdGlvbnMoZmlsZVVwbG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlsZVVwbG9hZCA9PSBudWxsIHx8IHR5cGVvZiBmaWxlVXBsb2FkICE9PSAnb2JqZWN0JyB8fCBmaWxlVXBsb2FkIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvclB1YmxpYy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuZmlsZUV4dGVuc2lvbnMgPSBGaWxlVXBsb2FkT3B0aW9ucy5maWxlRXh0ZW5zaW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVJcHMoZmllbGQsIG1hc3RlcktleUlwcykge1xuICAgIGZvciAobGV0IGlwIG9mIG1hc3RlcktleUlwcykge1xuICAgICAgaWYgKGlwLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgaXAgPSBpcC5zcGxpdCgnLycpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXQuaXNJUChpcCkpIHtcbiAgICAgICAgdGhyb3cgYFRoZSBQYXJzZSBTZXJ2ZXIgb3B0aW9uIFwiJHtmaWVsZH1cIiBjb250YWlucyBhbiBpbnZhbGlkIElQIGFkZHJlc3MgXCIke2lwfVwiLmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpIHtcbiAgICBpZiAoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMgJiYgdHlwZW9mIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycykge1xuICAgICAgRGVwcmVjYXRvci5sb2dSdW50aW1lRGVwcmVjYXRpb24oeyB1c2FnZTogJ2luc2VjdXJlIGFkYXB0ZXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtb3VudCgpIHtcbiAgICB2YXIgbW91bnQgPSB0aGlzLl9tb3VudDtcbiAgICBpZiAodGhpcy5wdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgICAgIG1vdW50ID0gdGhpcy5wdWJsaWNTZXJ2ZXJVUkw7XG4gICAgfVxuICAgIHJldHVybiBtb3VudDtcbiAgfVxuXG4gIHNldCBtb3VudChuZXdWYWx1ZSkge1xuICAgIHRoaXMuX21vdW50ID0gbmV3VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbihzZXNzaW9uTGVuZ3RoLCBleHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgaWYgKGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMpIHtcbiAgICAgIGlmIChpc05hTihzZXNzaW9uTGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyAnU2Vzc2lvbiBsZW5ndGggbXVzdCBiZSBhIHZhbGlkIG51bWJlci4nO1xuICAgICAgfSBlbHNlIGlmIChzZXNzaW9uTGVuZ3RoIDw9IDApIHtcbiAgICAgICAgdGhyb3cgJ1Nlc3Npb24gbGVuZ3RoIG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRMaW1pdChkZWZhdWx0TGltaXQpIHtcbiAgICBpZiAoZGVmYXVsdExpbWl0ID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRMaW1pdCA9IFBhcnNlU2VydmVyT3B0aW9ucy5kZWZhdWx0TGltaXQuZGVmYXVsdDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0TGltaXQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyAnRGVmYXVsdCBsaW1pdCBtdXN0IGJlIGEgbnVtYmVyLic7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0TGltaXQgPD0gMCkge1xuICAgICAgdGhyb3cgJ0RlZmF1bHQgbGltaXQgbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTWF4TGltaXQobWF4TGltaXQpIHtcbiAgICBpZiAobWF4TGltaXQgPD0gMCkge1xuICAgICAgdGhyb3cgJ01heCBsaW1pdCBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBbGxvd0hlYWRlcnMoYWxsb3dIZWFkZXJzKSB7XG4gICAgaWYgKCFbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyhhbGxvd0hlYWRlcnMpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhbGxvd0hlYWRlcnMpKSB7XG4gICAgICAgIGFsbG93SGVhZGVycy5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IG9ubHkgY29udGFpbiBzdHJpbmdzJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoZWFkZXIudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBub3QgY29udGFpbiBlbXB0eSBzdHJpbmdzJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBiZSBhbiBhcnJheSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTG9nTGV2ZWxzKGxvZ0xldmVscykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKExvZ0xldmVscykpIHtcbiAgICAgIGlmIChsb2dMZXZlbHNba2V5XSkge1xuICAgICAgICBpZiAodmFsaWRMb2dMZXZlbHMuaW5kZXhPZihsb2dMZXZlbHNba2V5XSkgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgYCcke2tleX0nIG11c3QgYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkodmFsaWRMb2dMZXZlbHMpfWA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ0xldmVsc1trZXldID0gTG9nTGV2ZWxzW2tleV0uZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMoZGF0YWJhc2VPcHRpb25zKSB7XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucyA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhYmFzZU9wdGlvbnMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdGA7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgPSBEYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyBtdXN0IGJlIGEgYm9vbGVhbmA7XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsID0gRGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICB9XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbiA9IERhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IGBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluJyBtdXN0IGJlIGEgYm9vbGVhbi5gO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMobGl2ZVF1ZXJ5KSB7XG4gICAgaWYgKGxpdmVRdWVyeSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGxpdmVRdWVyeS5yZWdleFRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGl2ZVF1ZXJ5LnJlZ2V4VGltZW91dCA9IExpdmVRdWVyeU9wdGlvbnMucmVnZXhUaW1lb3V0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGl2ZVF1ZXJ5LnJlZ2V4VGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IGBsaXZlUXVlcnkucmVnZXhUaW1lb3V0IG11c3QgYmUgYSBudW1iZXJgO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVJhdGVMaW1pdChyYXRlTGltaXQpIHtcbiAgICBpZiAoIXJhdGVMaW1pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmF0ZUxpbWl0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHJhdGVMaW1pdClcbiAgICApIHtcbiAgICAgIHRocm93IGByYXRlTGltaXQgbXVzdCBiZSBhbiBhcnJheSBvciBvYmplY3RgO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gQXJyYXkuaXNBcnJheShyYXRlTGltaXQpID8gcmF0ZUxpbWl0IDogW3JhdGVMaW1pdF07XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0IG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0c2A7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RQYXRoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFBhdGggbXVzdCBiZSBhIHN0cmluZ2A7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RUaW1lV2luZG93ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0VGltZVdpbmRvdyBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdFRpbWVXaW5kb3cgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFRpbWVXaW5kb3cgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzICYmIHR5cGVvZiBvcHRpb24uaW5jbHVkZUludGVybmFsUmVxdWVzdHMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIG11c3QgYmUgYSBib29sZWFuYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdENvdW50ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0Q291bnQgbXVzdCBiZSBkZWZpbmVkYDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnJlcXVlc3RDb3VudCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0Q291bnQgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLmVycm9yUmVzcG9uc2VNZXNzYWdlICYmIHR5cGVvZiBvcHRpb24uZXJyb3JSZXNwb25zZU1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQuZXJyb3JSZXNwb25zZU1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZ2A7XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmtleXMoUGFyc2VTZXJ2ZXIuUmF0ZUxpbWl0Wm9uZSk7XG4gICAgICBpZiAob3B0aW9uLnpvbmUgJiYgIW9wdGlvbnMuaW5jbHVkZXMob3B0aW9uLnpvbmUpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2VuJywgeyBzdHlsZTogJ3Nob3J0JywgdHlwZTogJ2Rpc2p1bmN0aW9uJyB9KTtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC56b25lIG11c3QgYmUgb25lIG9mICR7Zm9ybWF0dGVyLmZvcm1hdChvcHRpb25zKX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVJlcXVlc3RDb21wbGV4aXR5KHJlcXVlc3RDb21wbGV4aXR5KSB7XG4gICAgaWYgKHJlcXVlc3RDb21wbGV4aXR5ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0Q29tcGxleGl0eSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0Q29tcGxleGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVxdWVzdENvbXBsZXhpdHkgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKFJlcXVlc3RDb21wbGV4aXR5T3B0aW9ucyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWVzdENvbXBsZXhpdHkpKSB7XG4gICAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdENvbXBsZXhpdHkgY29udGFpbnMgdW5rbm93biBwcm9wZXJ0eSAnJHtrZXl9Jy5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdmFsaWRLZXlzKSB7XG4gICAgICBpZiAocmVxdWVzdENvbXBsZXhpdHlba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdENvbXBsZXhpdHlba2V5XTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCAodmFsdWUgPCAxICYmIHZhbHVlICE9PSAtMSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3RDb21wbGV4aXR5LiR7a2V5fSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciAtMSB0byBkaXNhYmxlLmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0Q29tcGxleGl0eVtrZXldID0gUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zW2tleV0uZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVVzZXJFbWFpbHMgfHwgIXRoaXMuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiAqIDEwMDApO1xuICB9XG5cbiAgZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLnBhc3N3b3JkUG9saWN5IHx8ICF0aGlzLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAqIDEwMDApO1xuICB9XG5cbiAgZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy5leHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMuc2Vzc2lvbkxlbmd0aCAqIDEwMDApO1xuICB9XG5cbiAgdW5yZWdpc3RlclJhdGVMaW1pdGVycygpIHtcbiAgICBsZXQgaSA9IHRoaXMucmF0ZUxpbWl0cz8ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5yYXRlTGltaXRzW2ldO1xuICAgICAgaWYgKGxpbWl0LmNsb3VkKSB7XG4gICAgICAgIHRoaXMucmF0ZUxpbWl0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGludmFsaWRMaW5rVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmludmFsaWRMaW5rIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2ludmFsaWRfbGluay5odG1sYDtcbiAgfVxuXG4gIGdldCBpbnZhbGlkVmVyaWZpY2F0aW9uTGlua1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy5pbnZhbGlkVmVyaWZpY2F0aW9uTGluayB8fFxuICAgICAgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvaW52YWxpZF92ZXJpZmljYXRpb25fbGluay5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgbGlua1NlbmRTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLmxpbmtTZW5kU3VjY2VzcyB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9saW5rX3NlbmRfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgbGlua1NlbmRGYWlsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmxpbmtTZW5kRmFpbCB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9saW5rX3NlbmRfZmFpbC5odG1sYDtcbiAgfVxuXG4gIGdldCB2ZXJpZnlFbWFpbFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMudmVyaWZ5RW1haWxTdWNjZXNzIHx8XG4gICAgICBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy92ZXJpZnlfZW1haWxfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgY2hvb3NlUGFzc3dvcmRVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMuY2hvb3NlUGFzc3dvcmQgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvY2hvb3NlX3Bhc3N3b3JkYDtcbiAgfVxuXG4gIGdldCByZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9LyR7dGhpcy5wYWdlc0VuZHBvaW50fS8ke3RoaXMuYXBwbGljYXRpb25JZH0vcmVxdWVzdF9wYXNzd29yZF9yZXNldGA7XG4gIH1cblxuICBnZXQgcGFzc3dvcmRSZXNldFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMucGFzc3dvcmRSZXNldFN1Y2Nlc3MgfHxcbiAgICAgIGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL3Bhc3N3b3JkX3Jlc2V0X3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IHBhcnNlRnJhbWVVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMucGFyc2VGcmFtZVVSTDtcbiAgfVxuXG4gIGdldCB2ZXJpZnlFbWFpbFVSTCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9LyR7dGhpcy5wYWdlc0VuZHBvaW50fS8ke3RoaXMuYXBwbGljYXRpb25JZH0vdmVyaWZ5X2VtYWlsYDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRNYXN0ZXJLZXkoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm1hc3RlcktleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHRsSXNFbXB0eSA9ICF0aGlzLm1hc3RlcktleVR0bDtcbiAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IHRoaXMubWFzdGVyS2V5Q2FjaGU/LmV4cGlyZXNBdCAmJiB0aGlzLm1hc3RlcktleUNhY2hlLmV4cGlyZXNBdCA8IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICgoIWlzRXhwaXJlZCB8fCB0dGxJc0VtcHR5KSAmJiB0aGlzLm1hc3RlcktleUNhY2hlPy5tYXN0ZXJLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyS2V5Q2FjaGUubWFzdGVyS2V5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLm1hc3RlcktleSgpO1xuXG4gICAgICBjb25zdCBleHBpcmVzQXQgPSB0aGlzLm1hc3RlcktleVR0bCA/IG5ldyBEYXRlKERhdGUubm93KCkgKyAxMDAwICogdGhpcy5tYXN0ZXJLZXlUdGwpIDogbnVsbFxuICAgICAgdGhpcy5tYXN0ZXJLZXlDYWNoZSA9IHsgbWFzdGVyS2V5LCBleHBpcmVzQXQgfTtcbiAgICAgIENvbmZpZy5wdXQodGhpcyk7XG5cbiAgICAgIHJldHVybiB0aGlzLm1hc3RlcktleUNhY2hlLm1hc3RlcktleTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXk7XG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIFBhZ2VzUm91dGVyIHJlcGxhY2VzIHRoZSBQdWJsaWNBUElSb3V0ZXI7XG4gIC8vIHRoZSAoZGVmYXVsdCkgZW5kcG9pbnQgaGFzIHRvIGJlIGRlZmluZWQgaW4gUGFnZXNSb3V0ZXIgb25seS5cbiAgZ2V0IHBhZ2VzRW5kcG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMgJiYgdGhpcy5wYWdlcy5lbmFibGVSb3V0ZXIgJiYgdGhpcy5wYWdlcy5wYWdlc0VuZHBvaW50XG4gICAgICA/IHRoaXMucGFnZXMucGFnZXNFbmRwb2ludFxuICAgICAgOiAnYXBwcyc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xubW9kdWxlLmV4cG9ydHMgPSBDb25maWc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElB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
768
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9uZXQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NhY2hlIiwiX0RhdGFiYXNlQ29udHJvbGxlciIsIl9Mb2dnZXJDb250cm9sbGVyIiwiX3BhY2thZ2UiLCJfRGVmaW5pdGlvbnMiLCJfUGFyc2UiLCJfRGVwcmVjYXRvciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJzdHIiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsImFzeW5jS2V5cyIsIkNvbmZpZyIsImdldCIsImFwcGxpY2F0aW9uSWQiLCJtb3VudCIsImNhY2hlSW5mbyIsIkFwcENhY2hlIiwiY29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJkYXRhYmFzZSIsIkRhdGFiYXNlQ29udHJvbGxlciIsImRhdGFiYXNlQ29udHJvbGxlciIsImFkYXB0ZXIiLCJnZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQiLCJiaW5kIiwiZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0IiwidmVyc2lvbiIsImxvYWRLZXlzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiY2FjaGVkQ29uZmlnIiwiYXBwSWQiLCJ1cGRhdGVkQ29uZmlnIiwicHV0IiwidHJhbnNmb3JtQ29uZmlndXJhdGlvbiIsInNlcnZlckNvbmZpZ3VyYXRpb24iLCJpbmNsdWRlcyIsInZhbGlkYXRlT3B0aW9ucyIsInZhbGlkYXRlQ29udHJvbGxlcnMiLCJzZXR1cFBhc3N3b3JkVmFsaWRhdG9yIiwicGFzc3dvcmRQb2xpY3kiLCJjdXN0b21QYWdlcyIsInB1YmxpY1NlcnZlclVSTCIsInJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQiLCJleHBpcmVJbmFjdGl2ZVNlc3Npb25zIiwic2Vzc2lvbkxlbmd0aCIsImRlZmF1bHRMaW1pdCIsIm1heExpbWl0IiwiYWNjb3VudExvY2tvdXQiLCJtYXN0ZXJLZXlJcHMiLCJtYXN0ZXJLZXkiLCJtYWludGVuYW5jZUtleSIsIm1haW50ZW5hbmNlS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJhbGxvd0hlYWRlcnMiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJmaWxlVXBsb2FkIiwicGFnZXMiLCJzZWN1cml0eSIsImVuZm9yY2VQcml2YXRlVXNlcnMiLCJlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyIsInNjaGVtYSIsInJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIiwibG9nTGV2ZWxzIiwicmF0ZUxpbWl0IiwicmVxdWVzdENvbXBsZXhpdHkiLCJkYXRhYmFzZU9wdGlvbnMiLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJsaXZlUXVlcnkiLCJ2YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5IiwidmFsaWRhdGVQYXNzd29yZFBvbGljeSIsInZhbGlkYXRlRmlsZVVwbG9hZE9wdGlvbnMiLCJ2YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCIsInZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24iLCJ2YWxpZGF0ZUlwcyIsInZhbGlkYXRlRGVmYXVsdExpbWl0IiwidmFsaWRhdGVNYXhMaW1pdCIsInZhbGlkYXRlQWxsb3dIZWFkZXJzIiwidmFsaWRhdGVJZGVtcG90ZW5jeU9wdGlvbnMiLCJ2YWxpZGF0ZVBhZ2VzT3B0aW9ucyIsInZhbGlkYXRlU2VjdXJpdHlPcHRpb25zIiwidmFsaWRhdGVTY2hlbWFPcHRpb25zIiwidmFsaWRhdGVFbmZvcmNlUHJpdmF0ZVVzZXJzIiwidmFsaWRhdGVFbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyIsInZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiIsInZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdCIsInZhbGlkYXRlUmF0ZUxpbWl0IiwidmFsaWRhdGVSZXF1ZXN0Q29tcGxleGl0eSIsInZhbGlkYXRlTG9nTGV2ZWxzIiwidmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMiLCJ2YWxpZGF0ZUN1c3RvbVBhZ2VzIiwidmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJ2YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJ2ZXJpZnlVc2VyRW1haWxzIiwidXNlckNvbnRyb2xsZXIiLCJhcHBOYW1lIiwiX3B1YmxpY1NlcnZlclVSTCIsImVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsImVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsIiwiZW1haWxBZGFwdGVyIiwidmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJlbmFibGVDaGVjayIsIlNlY3VyaXR5T3B0aW9ucyIsImlzQm9vbGVhbiIsImVuYWJsZUNoZWNrTG9nIiwiZGVmaW5pdGlvbnMiLCJTY2hlbWFPcHRpb25zIiwic3RyaWN0IiwiZGVsZXRlRXh0cmFGaWVsZHMiLCJyZWNyZWF0ZU1vZGlmaWVkRmllbGRzIiwibG9ja1NjaGVtYXMiLCJiZWZvcmVNaWdyYXRpb24iLCJhZnRlck1pZ3JhdGlvbiIsImVuYWJsZVJvdXRlciIsIlBhZ2VzT3B0aW9ucyIsImVuYWJsZUxvY2FsaXphdGlvbiIsImxvY2FsaXphdGlvbkpzb25QYXRoIiwiaXNTdHJpbmciLCJsb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSIsInBsYWNlaG9sZGVycyIsImZvcmNlUmVkaXJlY3QiLCJwYWdlc1BhdGgiLCJwYWdlc0VuZHBvaW50IiwiY3VzdG9tVXJscyIsImN1c3RvbVJvdXRlcyIsInR0bCIsIklkZW1wb3RlbmN5T3B0aW9ucyIsImlzTmFOIiwicGF0aHMiLCJkdXJhdGlvbiIsIk51bWJlciIsImlzSW50ZWdlciIsInRocmVzaG9sZCIsInVubG9ja09uUGFzc3dvcmRSZXNldCIsIkFjY291bnRMb2Nrb3V0T3B0aW9ucyIsIm1heFBhc3N3b3JkQWdlIiwicmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJ2YWxpZGF0b3JQYXR0ZXJuIiwiUmVnRXhwIiwidmFsaWRhdG9yQ2FsbGJhY2siLCJkb05vdEFsbG93VXNlcm5hbWUiLCJtYXhQYXNzd29yZEhpc3RvcnkiLCJyZXNldFRva2VuUmV1c2VJZlZhbGlkIiwicmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCIsInBhdHRlcm5WYWxpZGF0b3IiLCJ2YWx1ZSIsInRlc3QiLCJyZXF1aXJlZCIsInR5cGUiLCJzdGFydHNXaXRoIiwiUmVmZXJlbmNlRXJyb3IiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiRmlsZVVwbG9hZE9wdGlvbnMiLCJlbmFibGVGb3JQdWJsaWMiLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImZpbGVFeHRlbnNpb25zIiwiZmllbGQiLCJpcCIsInNwbGl0IiwibmV0IiwiaXNJUCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsIl9tb3VudCIsIm5ld1ZhbHVlIiwiUGFyc2VTZXJ2ZXJPcHRpb25zIiwiaGVhZGVyIiwidHJpbSIsIkxvZ0xldmVscyIsInZhbGlkTG9nTGV2ZWxzIiwiaW5kZXhPZiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbmFibGVTY2hlbWFIb29rcyIsIkRhdGFiYXNlT3B0aW9ucyIsInNjaGVtYUNhY2hlVHRsIiwiYWxsb3dQdWJsaWNFeHBsYWluIiwicmVnZXhUaW1lb3V0IiwiTGl2ZVF1ZXJ5T3B0aW9ucyIsIm9wdGlvbnMiLCJvcHRpb24iLCJyZXF1ZXN0UGF0aCIsInJlcXVlc3RUaW1lV2luZG93IiwiaW5jbHVkZUludGVybmFsUmVxdWVzdHMiLCJyZXF1ZXN0Q291bnQiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsIlBhcnNlU2VydmVyIiwiUmF0ZUxpbWl0Wm9uZSIsInpvbmUiLCJmb3JtYXR0ZXIiLCJJbnRsIiwiTGlzdEZvcm1hdCIsInN0eWxlIiwiZm9ybWF0IiwidmFsaWRLZXlzIiwiUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zIiwibm93IiwiRGF0ZSIsImdldFRpbWUiLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsInVucmVnaXN0ZXJSYXRlTGltaXRlcnMiLCJpIiwicmF0ZUxpbWl0cyIsImxpbWl0IiwiY2xvdWQiLCJzcGxpY2UiLCJpbnZhbGlkTGlua1VSTCIsImludmFsaWRMaW5rIiwiaW52YWxpZFZlcmlmaWNhdGlvbkxpbmtVUkwiLCJpbnZhbGlkVmVyaWZpY2F0aW9uTGluayIsImxpbmtTZW5kU3VjY2Vzc1VSTCIsImxpbmtTZW5kU3VjY2VzcyIsImxpbmtTZW5kRmFpbFVSTCIsImxpbmtTZW5kRmFpbCIsInZlcmlmeUVtYWlsU3VjY2Vzc1VSTCIsInZlcmlmeUVtYWlsU3VjY2VzcyIsImNob29zZVBhc3N3b3JkVVJMIiwiY2hvb3NlUGFzc3dvcmQiLCJyZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCIsInBhc3N3b3JkUmVzZXRTdWNjZXNzVVJMIiwicGFzc3dvcmRSZXNldFN1Y2Nlc3MiLCJwYXJzZUZyYW1lVVJMIiwidmVyaWZ5RW1haWxVUkwiLCJsb2FkTWFzdGVyS2V5IiwidHRsSXNFbXB0eSIsIm1hc3RlcktleVR0bCIsImlzRXhwaXJlZCIsIm1hc3RlcktleUNhY2hlIiwiZXhwaXJlc0F0IiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL0NvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBIENvbmZpZyBvYmplY3QgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgaG93IGEgc3BlY2lmaWMgYXBwIGlzXG4vLyBjb25maWd1cmVkLlxuLy8gbW91bnQgaXMgdGhlIFVSTCBmb3IgdGhlIHJvb3Qgb2YgdGhlIEFQSTsgaW5jbHVkZXMgaHR0cCwgZG9tYWluLCBldGMuXG5cbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG5ldCBmcm9tICduZXQnO1xuaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBsb2dMZXZlbHMgYXMgdmFsaWRMb2dMZXZlbHMgfSBmcm9tICcuL0NvbnRyb2xsZXJzL0xvZ2dlckNvbnRyb2xsZXInO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQge1xuICBBY2NvdW50TG9ja291dE9wdGlvbnMsXG4gIERhdGFiYXNlT3B0aW9ucyxcbiAgRmlsZVVwbG9hZE9wdGlvbnMsXG4gIElkZW1wb3RlbmN5T3B0aW9ucyxcbiAgTGl2ZVF1ZXJ5T3B0aW9ucyxcbiAgTG9nTGV2ZWxzLFxuICBQYWdlc09wdGlvbnMsXG4gIFBhcnNlU2VydmVyT3B0aW9ucyxcbiAgUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zLFxuICBTY2hlbWFPcHRpb25zLFxuICBTZWN1cml0eU9wdGlvbnMsXG59IGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgUGFyc2VTZXJ2ZXIgZnJvbSAnLi9jbG91ZC1jb2RlL1BhcnNlLlNlcnZlcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2goc3RyKSB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBpZiAoc3RyLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIENvbmZpZyBrZXlzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmNvbnN0IGFzeW5jS2V5cyA9IFsncHVibGljU2VydmVyVVJMJ107XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBzdGF0aWMgZ2V0KGFwcGxpY2F0aW9uSWQ6IHN0cmluZywgbW91bnQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNhY2hlSW5mbyA9IEFwcENhY2hlLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBpZiAoIWNhY2hlSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ29uZmlnKCk7XG4gICAgY29uZmlnLmFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuICAgIE9iamVjdC5rZXlzKGNhY2hlSW5mbykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSA9PSAnZGF0YWJhc2VDb250cm9sbGVyJykge1xuICAgICAgICBjb25maWcuZGF0YWJhc2UgPSBuZXcgRGF0YWJhc2VDb250cm9sbGVyKGNhY2hlSW5mby5kYXRhYmFzZUNvbnRyb2xsZXIuYWRhcHRlciwgY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gY2FjaGVJbmZvW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uZmlnLm1vdW50ID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChtb3VudCk7XG4gICAgY29uZmlnLmdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQuYmluZChjb25maWcpO1xuICAgIGNvbmZpZy5nZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQgPSBjb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0LmJpbmQoXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgYXN5bmMgbG9hZEtleXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhc3luY0tleXMubWFwKGFzeW5jIGtleSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tgXyR7a2V5fWBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGF3YWl0IHRoaXNbYF8ke2tleX1gXSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbmZpZyBrZXkgJyR7a2V5fSc6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGNhY2hlZENvbmZpZyA9IEFwcENhY2hlLmdldCh0aGlzLmFwcElkKTtcbiAgICBpZiAoY2FjaGVkQ29uZmlnKSB7XG4gICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0geyAuLi5jYWNoZWRDb25maWcgfTtcbiAgICAgIGFzeW5jS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHVwZGF0ZWRDb25maWdba2V5XSA9IHRoaXNba2V5XTtcbiAgICAgIH0pO1xuICAgICAgQXBwQ2FjaGUucHV0KHRoaXMuYXBwSWQsIHVwZGF0ZWRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1Db25maWd1cmF0aW9uKHNlcnZlckNvbmZpZ3VyYXRpb24pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJ2ZXJDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKGFzeW5jS2V5cy5pbmNsdWRlcyhrZXkpICYmIHR5cGVvZiBzZXJ2ZXJDb25maWd1cmF0aW9uW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2VydmVyQ29uZmlndXJhdGlvbltgXyR7a2V5fWBdID0gc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgICBkZWxldGUgc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBwdXQoc2VydmVyQ29uZmlndXJhdGlvbikge1xuICAgIENvbmZpZy52YWxpZGF0ZU9wdGlvbnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnZhbGlkYXRlQ29udHJvbGxlcnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnRyYW5zZm9ybUNvbmZpZ3VyYXRpb24oc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQXBwQ2FjaGUucHV0KHNlcnZlckNvbmZpZ3VyYXRpb24uYXBwSWQsIHNlcnZlckNvbmZpZ3VyYXRpb24pO1xuICAgIENvbmZpZy5zZXR1cFBhc3N3b3JkVmFsaWRhdG9yKHNlcnZlckNvbmZpZ3VyYXRpb24ucGFzc3dvcmRQb2xpY3kpO1xuICAgIHJldHVybiBzZXJ2ZXJDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlT3B0aW9ucyh7XG4gICAgY3VzdG9tUGFnZXMsXG4gICAgcHVibGljU2VydmVyVVJMLFxuICAgIHJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQsXG4gICAgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucyxcbiAgICBzZXNzaW9uTGVuZ3RoLFxuICAgIGRlZmF1bHRMaW1pdCxcbiAgICBtYXhMaW1pdCxcbiAgICBhY2NvdW50TG9ja291dCxcbiAgICBwYXNzd29yZFBvbGljeSxcbiAgICBtYXN0ZXJLZXlJcHMsXG4gICAgbWFzdGVyS2V5LFxuICAgIG1haW50ZW5hbmNlS2V5LFxuICAgIG1haW50ZW5hbmNlS2V5SXBzLFxuICAgIHJlYWRPbmx5TWFzdGVyS2V5LFxuICAgIGFsbG93SGVhZGVycyxcbiAgICBpZGVtcG90ZW5jeU9wdGlvbnMsXG4gICAgZmlsZVVwbG9hZCxcbiAgICBwYWdlcyxcbiAgICBzZWN1cml0eSxcbiAgICBlbmZvcmNlUHJpdmF0ZVVzZXJzLFxuICAgIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzLFxuICAgIHNjaGVtYSxcbiAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0LFxuICAgIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4sXG4gICAgbG9nTGV2ZWxzLFxuICAgIHJhdGVMaW1pdCxcbiAgICByZXF1ZXN0Q29tcGxleGl0eSxcbiAgICBkYXRhYmFzZU9wdGlvbnMsXG4gICAgZXh0ZW5kU2Vzc2lvbk9uVXNlLFxuICAgIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbixcbiAgICBsaXZlUXVlcnksXG4gIH0pIHtcbiAgICBpZiAobWFzdGVyS2V5ID09PSByZWFkT25seU1hc3RlcktleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJLZXkgYW5kIHJlYWRPbmx5TWFzdGVyS2V5IHNob3VsZCBiZSBkaWZmZXJlbnQnKTtcbiAgICB9XG5cbiAgICBpZiAobWFzdGVyS2V5ID09PSBtYWludGVuYW5jZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJLZXkgYW5kIG1haW50ZW5hbmNlS2V5IHNob3VsZCBiZSBkaWZmZXJlbnQnKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlQWNjb3VudExvY2tvdXRQb2xpY3koYWNjb3VudExvY2tvdXQpO1xuICAgIHRoaXMudmFsaWRhdGVQYXNzd29yZFBvbGljeShwYXNzd29yZFBvbGljeSk7XG4gICAgdGhpcy52YWxpZGF0ZUZpbGVVcGxvYWRPcHRpb25zKGZpbGVVcGxvYWQpO1xuXG4gICAgaWYgKHR5cGVvZiByZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4dGVuZFNlc3Npb25PblVzZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZXh0ZW5kU2Vzc2lvbk9uVXNlIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMIH0pO1xuICAgIHRoaXMudmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbihzZXNzaW9uTGVuZ3RoLCBleHBpcmVJbmFjdGl2ZVNlc3Npb25zKTtcbiAgICB0aGlzLnZhbGlkYXRlSXBzKCdtYXN0ZXJLZXlJcHMnLCBtYXN0ZXJLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVJcHMoJ21haW50ZW5hbmNlS2V5SXBzJywgbWFpbnRlbmFuY2VLZXlJcHMpO1xuICAgIHRoaXMudmFsaWRhdGVEZWZhdWx0TGltaXQoZGVmYXVsdExpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlTWF4TGltaXQobWF4TGltaXQpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0hlYWRlcnMoYWxsb3dIZWFkZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zKGlkZW1wb3RlbmN5T3B0aW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZVBhZ2VzT3B0aW9ucyhwYWdlcyk7XG4gICAgdGhpcy52YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyhzZWN1cml0eSk7XG4gICAgdGhpcy52YWxpZGF0ZVNjaGVtYU9wdGlvbnMoc2NoZW1hKTtcbiAgICB0aGlzLnZhbGlkYXRlRW5mb3JjZVByaXZhdGVVc2VycyhlbmZvcmNlUHJpdmF0ZVVzZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4pO1xuICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpO1xuICAgIHRoaXMudmFsaWRhdGVSYXRlTGltaXQocmF0ZUxpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbXBsZXhpdHkocmVxdWVzdENvbXBsZXhpdHkpO1xuICAgIHRoaXMudmFsaWRhdGVMb2dMZXZlbHMobG9nTGV2ZWxzKTtcbiAgICB0aGlzLnZhbGlkYXRlRGF0YWJhc2VPcHRpb25zKGRhdGFiYXNlT3B0aW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZUN1c3RvbVBhZ2VzKGN1c3RvbVBhZ2VzKTtcbiAgICB0aGlzLnZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbik7XG4gICAgdGhpcy52YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMobGl2ZVF1ZXJ5KTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUN1c3RvbVBhZ2VzKGN1c3RvbVBhZ2VzKSB7XG4gICAgaWYgKCFjdXN0b21QYWdlcykgeyByZXR1cm47IH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY3VzdG9tUGFnZXMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BhcnNlIFNlcnZlciBvcHRpb24gY3VzdG9tUGFnZXMgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQ29udHJvbGxlcnMoe1xuICAgIHZlcmlmeVVzZXJFbWFpbHMsXG4gICAgdXNlckNvbnRyb2xsZXIsXG4gICAgYXBwTmFtZSxcbiAgICBwdWJsaWNTZXJ2ZXJVUkwsXG4gICAgX3B1YmxpY1NlcnZlclVSTCxcbiAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICAgIGVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsLFxuICB9KSB7XG4gICAgY29uc3QgZW1haWxBZGFwdGVyID0gdXNlckNvbnRyb2xsZXIuYWRhcHRlcjtcbiAgICBpZiAodmVyaWZ5VXNlckVtYWlscykge1xuICAgICAgdGhpcy52YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbih7XG4gICAgICAgIGVtYWlsQWRhcHRlcixcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgcHVibGljU2VydmVyVVJMOiBwdWJsaWNTZXJ2ZXJVUkwgfHwgX3B1YmxpY1NlcnZlclVSTCxcbiAgICAgICAgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24sXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gICAgICAgIGVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdChyZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgaWYgKHJlcXVlc3RLZXl3b3JkRGVueWxpc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdEtleXdvcmREZW55bGlzdCA9IHJlcXVlc3RLZXl3b3JkRGVueWxpc3QuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiByZXF1ZXN0S2V5d29yZERlbnlsaXN0IG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVFbmZvcmNlUHJpdmF0ZVVzZXJzKGVuZm9yY2VQcml2YXRlVXNlcnMpIHtcbiAgICBpZiAodHlwZW9mIGVuZm9yY2VQcml2YXRlVXNlcnMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gZW5mb3JjZVByaXZhdGVVc2VycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4oYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbikge1xuICAgIGlmICh0eXBlb2YgYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbikge1xuICAgIGlmICh0eXBlb2YgYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyhzZWN1cml0eSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2VjdXJpdHkpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHNlY3VyaXR5LmVuYWJsZUNoZWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlY3VyaXR5LmVuYWJsZUNoZWNrID0gU2VjdXJpdHlPcHRpb25zLmVuYWJsZUNoZWNrLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNlY3VyaXR5LmVuYWJsZUNoZWNrKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkuZW5hYmxlQ2hlY2sgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nID0gU2VjdXJpdHlPcHRpb25zLmVuYWJsZUNoZWNrTG9nLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTY2hlbWFPcHRpb25zKHNjaGVtYTogU2NoZW1hT3B0aW9ucykge1xuICAgIGlmICghc2NoZW1hKSB7IHJldHVybjsgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2NoZW1hKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYSBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlZmluaXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5kZWZpbml0aW9ucyA9IFNjaGVtYU9wdGlvbnMuZGVmaW5pdGlvbnMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYS5kZWZpbml0aW9ucykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5kZWZpbml0aW9ucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuc3RyaWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5zdHJpY3QgPSBTY2hlbWFPcHRpb25zLnN0cmljdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEuc3RyaWN0KSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLnN0cmljdCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5kZWxldGVFeHRyYUZpZWxkcyA9IFNjaGVtYU9wdGlvbnMuZGVsZXRlRXh0cmFGaWVsZHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcyA9IFNjaGVtYU9wdGlvbnMucmVjcmVhdGVNb2RpZmllZEZpZWxkcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEubG9ja1NjaGVtYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmxvY2tTY2hlbWFzID0gU2NoZW1hT3B0aW9ucy5sb2NrU2NoZW1hcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEubG9ja1NjaGVtYXMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEubG9ja1NjaGVtYXMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmJlZm9yZU1pZ3JhdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEuYmVmb3JlTWlncmF0aW9uICE9PSBudWxsICYmIHR5cGVvZiBzY2hlbWEuYmVmb3JlTWlncmF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuYmVmb3JlTWlncmF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmFmdGVyTWlncmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5hZnRlck1pZ3JhdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIHNjaGVtYS5hZnRlck1pZ3JhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmFmdGVyTWlncmF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBhZ2VzT3B0aW9ucyhwYWdlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmVuYWJsZVJvdXRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5lbmFibGVSb3V0ZXIgPSBQYWdlc09wdGlvbnMuZW5hYmxlUm91dGVyLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmVuYWJsZVJvdXRlcikpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmVuYWJsZVJvdXRlciBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiA9IFBhZ2VzT3B0aW9ucy5lbmFibGVMb2NhbGl6YXRpb24uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9IFBhZ2VzT3B0aW9ucy5sb2NhbGl6YXRpb25Kc29uUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPSBQYWdlc09wdGlvbnMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhwYWdlcy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBsYWNlaG9sZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5wbGFjZWhvbGRlcnMgPSBQYWdlc09wdGlvbnMucGxhY2Vob2xkZXJzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5wbGFjZWhvbGRlcnMpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgdHlwZW9mIHBhZ2VzLnBsYWNlaG9sZGVycyAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGxhY2Vob2xkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmZvcmNlUmVkaXJlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuZm9yY2VSZWRpcmVjdCA9IFBhZ2VzT3B0aW9ucy5mb3JjZVJlZGlyZWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmZvcmNlUmVkaXJlY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5mb3JjZVJlZGlyZWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc1BhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMucGFnZXNQYXRoID0gUGFnZXNPcHRpb25zLnBhZ2VzUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLnBhZ2VzUGF0aCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBhZ2VzUGF0aCBtdXN0IGJlIGEgc3RyaW5nLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc0VuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLnBhZ2VzRW5kcG9pbnQgPSBQYWdlc09wdGlvbnMucGFnZXNFbmRwb2ludC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLnBhZ2VzRW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5wYWdlc0VuZHBvaW50IG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmN1c3RvbVVybHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuY3VzdG9tVXJscyA9IFBhZ2VzT3B0aW9ucy5jdXN0b21VcmxzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMuY3VzdG9tVXJscykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5jdXN0b21VcmxzIG11c3QgYmUgYW4gb2JqZWN0Lic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5jdXN0b21Sb3V0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuY3VzdG9tUm91dGVzID0gUGFnZXNPcHRpb25zLmN1c3RvbVJvdXRlcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIShwYWdlcy5jdXN0b21Sb3V0ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmN1c3RvbVJvdXRlcyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zKGlkZW1wb3RlbmN5T3B0aW9ucykge1xuICAgIGlmICghaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpZGVtcG90ZW5jeU9wdGlvbnMudHRsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW1wb3RlbmN5T3B0aW9ucy50dGwgPSBJZGVtcG90ZW5jeU9wdGlvbnMudHRsLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaWRlbXBvdGVuY3lPcHRpb25zLnR0bCkgJiYgaWRlbXBvdGVuY3lPcHRpb25zLnR0bCA8PSAwKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgVFRMIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgc2Vjb25kcyc7XG4gICAgfSBlbHNlIGlmIChpc05hTihpZGVtcG90ZW5jeU9wdGlvbnMudHRsKSkge1xuICAgICAgdGhyb3cgJ2lkZW1wb3RlbmN5IFRUTCB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKCFpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMpIHtcbiAgICAgIGlkZW1wb3RlbmN5T3B0aW9ucy5wYXRocyA9IElkZW1wb3RlbmN5T3B0aW9ucy5wYXRocy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIShpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93ICdpZGVtcG90ZW5jeSBwYXRocyBtdXN0IGJlIG9mIGFuIGFycmF5IG9mIHN0cmluZ3MnO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5KGFjY291bnRMb2Nrb3V0KSB7XG4gICAgaWYgKGFjY291bnRMb2Nrb3V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBhY2NvdW50TG9ja291dC5kdXJhdGlvbiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gPD0gMCB8fFxuICAgICAgICBhY2NvdW50TG9ja291dC5kdXJhdGlvbiA+IDk5OTk5XG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ0FjY291bnQgbG9ja291dCBkdXJhdGlvbiBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxMDAwMDAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKGFjY291bnRMb2Nrb3V0LnRocmVzaG9sZCkgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQudGhyZXNob2xkIDwgMSB8fFxuICAgICAgICBhY2NvdW50TG9ja291dC50aHJlc2hvbGQgPiA5OTlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAnQWNjb3VudCBsb2Nrb3V0IHRocmVzaG9sZCBzaG91bGQgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEwMDAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0ID0gQWNjb3VudExvY2tvdXRPcHRpb25zLnVubG9ja09uUGFzc3dvcmRSZXNldC5kZWZhdWx0O1xuICAgICAgfSBlbHNlIGlmICghaXNCb29sZWFuKGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCkpIHtcbiAgICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUGFzc3dvcmRQb2xpY3kocGFzc3dvcmRQb2xpY3kpIHtcbiAgICBpZiAocGFzc3dvcmRQb2xpY3kpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHlwZW9mIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlICE9PSAnbnVtYmVyJyB8fCBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSA8IDApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR5cGVvZiBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiA8PSAwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pO1xuICAgICAgICB9IGVsc2UgaWYgKCEocGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBtdXN0IGJlIGEgcmVnZXggc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QuJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvckNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSAmJlxuICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5KSB8fFxuICAgICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSA8PSAwIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5ID4gMjApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSBtdXN0IGJlIGFuIGludGVnZXIgcmFuZ2luZyAwIC0gMjAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFRva2VuUmV1c2VJZlZhbGlkIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmICFwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICB0aHJvdyAnWW91IGNhbm5vdCB1c2UgcmVzZXRUb2tlblJldXNlSWZWYWxpZCB3aXRob3V0IHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWwgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBpcyBjb25maWd1cmVkIHRoZW4gc2V0dXAgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZSBwYXR0ZXJuXG4gIHN0YXRpYyBzZXR1cFBhc3N3b3JkVmFsaWRhdG9yKHBhc3N3b3JkUG9saWN5KSB7XG4gICAgaWYgKHBhc3N3b3JkUG9saWN5ICYmIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pIHtcbiAgICAgIHBhc3N3b3JkUG9saWN5LnBhdHRlcm5WYWxpZGF0b3IgPSB2YWx1ZSA9PiB7XG4gICAgICAgIHJldHVybiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuLnRlc3QodmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQdWJsaWNTZXJ2ZXJVUkwoeyBwdWJsaWNTZXJ2ZXJVUkwsIHJlcXVpcmVkID0gZmFsc2UgfSkge1xuICAgIGlmICghcHVibGljU2VydmVyVVJMKSB7XG4gICAgICBpZiAoIXJlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93ICdUaGUgb3B0aW9uIHB1YmxpY1NlcnZlclVSTCBpcyByZXF1aXJlZC4nO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgcHVibGljU2VydmVyVVJMO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIXB1YmxpY1NlcnZlclVSTC5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIXB1YmxpY1NlcnZlclVSTC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgIHRocm93ICdUaGUgb3B0aW9uIHB1YmxpY1NlcnZlclVSTCBtdXN0IGJlIGEgdmFsaWQgVVJMIHN0YXJ0aW5nIHdpdGggaHR0cDovLyBvciBodHRwczovLy4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyb3cgYFRoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIG11c3QgYmUgYSBzdHJpbmcgb3IgZnVuY3Rpb24sIGJ1dCBnb3QgJHt0eXBlfS5gO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uKHtcbiAgICBlbWFpbEFkYXB0ZXIsXG4gICAgYXBwTmFtZSxcbiAgICBwdWJsaWNTZXJ2ZXJVUkwsXG4gICAgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24sXG4gICAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCxcbiAgICBlbWFpbFZlcmlmeVN1Y2Nlc3NPbkludmFsaWRFbWFpbCxcbiAgfSkge1xuICAgIGlmICghZW1haWxBZGFwdGVyKSB7XG4gICAgICB0aHJvdyAnQW4gZW1haWxBZGFwdGVyIGlzIHJlcXVpcmVkIGZvciBlLW1haWwgdmVyaWZpY2F0aW9uIGFuZCBwYXNzd29yZCByZXNldHMuJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcHBOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgJ0FuIGFwcCBuYW1lIGlzIHJlcXVpcmVkIGZvciBlLW1haWwgdmVyaWZpY2F0aW9uIGFuZCBwYXNzd29yZCByZXNldHMuJztcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCh7IHB1YmxpY1NlcnZlclVSTCwgcmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgaWYgKGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICBpZiAoaXNOYU4oZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pKSB7XG4gICAgICAgIHRocm93ICdFbWFpbCB2ZXJpZnkgdG9rZW4gdmFsaWRpdHkgZHVyYXRpb24gbXVzdCBiZSBhIHZhbGlkIG51bWJlci4nO1xuICAgICAgfSBlbHNlIGlmIChlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiA8PSAwKSB7XG4gICAgICAgIHRocm93ICdFbWFpbCB2ZXJpZnkgdG9rZW4gdmFsaWRpdHkgZHVyYXRpb24gbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICYmIHR5cGVvZiBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICB9XG4gICAgaWYgKGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiYgIWVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICB0aHJvdyAnWW91IGNhbm5vdCB1c2UgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCB3aXRob3V0IGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uJztcbiAgICB9XG4gICAgaWYgKGVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdlbWFpbFZlcmlmeVN1Y2Nlc3NPbkludmFsaWRFbWFpbCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRmlsZVVwbG9hZE9wdGlvbnMoZmlsZVVwbG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlsZVVwbG9hZCA9PSBudWxsIHx8IHR5cGVvZiBmaWxlVXBsb2FkICE9PSAnb2JqZWN0JyB8fCBmaWxlVXBsb2FkIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvclB1YmxpYy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuZmlsZUV4dGVuc2lvbnMgPSBGaWxlVXBsb2FkT3B0aW9ucy5maWxlRXh0ZW5zaW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVJcHMoZmllbGQsIG1hc3RlcktleUlwcykge1xuICAgIGZvciAobGV0IGlwIG9mIG1hc3RlcktleUlwcykge1xuICAgICAgaWYgKGlwLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgaXAgPSBpcC5zcGxpdCgnLycpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXQuaXNJUChpcCkpIHtcbiAgICAgICAgdGhyb3cgYFRoZSBQYXJzZSBTZXJ2ZXIgb3B0aW9uIFwiJHtmaWVsZH1cIiBjb250YWlucyBhbiBpbnZhbGlkIElQIGFkZHJlc3MgXCIke2lwfVwiLmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpIHtcbiAgICBpZiAoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMgJiYgdHlwZW9mIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycykge1xuICAgICAgRGVwcmVjYXRvci5sb2dSdW50aW1lRGVwcmVjYXRpb24oeyB1c2FnZTogJ2luc2VjdXJlIGFkYXB0ZXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtb3VudCgpIHtcbiAgICB2YXIgbW91bnQgPSB0aGlzLl9tb3VudDtcbiAgICBpZiAodGhpcy5wdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgICAgIG1vdW50ID0gdGhpcy5wdWJsaWNTZXJ2ZXJVUkw7XG4gICAgfVxuICAgIHJldHVybiBtb3VudDtcbiAgfVxuXG4gIHNldCBtb3VudChuZXdWYWx1ZSkge1xuICAgIHRoaXMuX21vdW50ID0gbmV3VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbihzZXNzaW9uTGVuZ3RoLCBleHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgaWYgKGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMpIHtcbiAgICAgIGlmIChpc05hTihzZXNzaW9uTGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyAnU2Vzc2lvbiBsZW5ndGggbXVzdCBiZSBhIHZhbGlkIG51bWJlci4nO1xuICAgICAgfSBlbHNlIGlmIChzZXNzaW9uTGVuZ3RoIDw9IDApIHtcbiAgICAgICAgdGhyb3cgJ1Nlc3Npb24gbGVuZ3RoIG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRMaW1pdChkZWZhdWx0TGltaXQpIHtcbiAgICBpZiAoZGVmYXVsdExpbWl0ID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRMaW1pdCA9IFBhcnNlU2VydmVyT3B0aW9ucy5kZWZhdWx0TGltaXQuZGVmYXVsdDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0TGltaXQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyAnRGVmYXVsdCBsaW1pdCBtdXN0IGJlIGEgbnVtYmVyLic7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0TGltaXQgPD0gMCkge1xuICAgICAgdGhyb3cgJ0RlZmF1bHQgbGltaXQgbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTWF4TGltaXQobWF4TGltaXQpIHtcbiAgICBpZiAobWF4TGltaXQgPD0gMCkge1xuICAgICAgdGhyb3cgJ01heCBsaW1pdCBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBbGxvd0hlYWRlcnMoYWxsb3dIZWFkZXJzKSB7XG4gICAgaWYgKCFbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyhhbGxvd0hlYWRlcnMpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhbGxvd0hlYWRlcnMpKSB7XG4gICAgICAgIGFsbG93SGVhZGVycy5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IG9ubHkgY29udGFpbiBzdHJpbmdzJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoZWFkZXIudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBub3QgY29udGFpbiBlbXB0eSBzdHJpbmdzJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBiZSBhbiBhcnJheSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTG9nTGV2ZWxzKGxvZ0xldmVscykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKExvZ0xldmVscykpIHtcbiAgICAgIGlmIChsb2dMZXZlbHNba2V5XSkge1xuICAgICAgICBpZiAodmFsaWRMb2dMZXZlbHMuaW5kZXhPZihsb2dMZXZlbHNba2V5XSkgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgYCcke2tleX0nIG11c3QgYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkodmFsaWRMb2dMZXZlbHMpfWA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ0xldmVsc1trZXldID0gTG9nTGV2ZWxzW2tleV0uZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMoZGF0YWJhc2VPcHRpb25zKSB7XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucyA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhYmFzZU9wdGlvbnMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdGA7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgPSBEYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyBtdXN0IGJlIGEgYm9vbGVhbmA7XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsID0gRGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICB9XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbiA9IERhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IGBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluJyBtdXN0IGJlIGEgYm9vbGVhbi5gO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUxpdmVRdWVyeU9wdGlvbnMobGl2ZVF1ZXJ5KSB7XG4gICAgaWYgKGxpdmVRdWVyeSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGxpdmVRdWVyeS5yZWdleFRpbWVvdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbGl2ZVF1ZXJ5LnJlZ2V4VGltZW91dCA9IExpdmVRdWVyeU9wdGlvbnMucmVnZXhUaW1lb3V0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbGl2ZVF1ZXJ5LnJlZ2V4VGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IGBsaXZlUXVlcnkucmVnZXhUaW1lb3V0IG11c3QgYmUgYSBudW1iZXJgO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVJhdGVMaW1pdChyYXRlTGltaXQpIHtcbiAgICBpZiAoIXJhdGVMaW1pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmF0ZUxpbWl0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHJhdGVMaW1pdClcbiAgICApIHtcbiAgICAgIHRocm93IGByYXRlTGltaXQgbXVzdCBiZSBhbiBhcnJheSBvciBvYmplY3RgO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gQXJyYXkuaXNBcnJheShyYXRlTGltaXQpID8gcmF0ZUxpbWl0IDogW3JhdGVMaW1pdF07XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0IG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0c2A7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RQYXRoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFBhdGggbXVzdCBiZSBhIHN0cmluZ2A7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RUaW1lV2luZG93ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0VGltZVdpbmRvdyBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdFRpbWVXaW5kb3cgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFRpbWVXaW5kb3cgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzICYmIHR5cGVvZiBvcHRpb24uaW5jbHVkZUludGVybmFsUmVxdWVzdHMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIG11c3QgYmUgYSBib29sZWFuYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdENvdW50ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0Q291bnQgbXVzdCBiZSBkZWZpbmVkYDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnJlcXVlc3RDb3VudCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0Q291bnQgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLmVycm9yUmVzcG9uc2VNZXNzYWdlICYmIHR5cGVvZiBvcHRpb24uZXJyb3JSZXNwb25zZU1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQuZXJyb3JSZXNwb25zZU1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZ2A7XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmtleXMoUGFyc2VTZXJ2ZXIuUmF0ZUxpbWl0Wm9uZSk7XG4gICAgICBpZiAob3B0aW9uLnpvbmUgJiYgIW9wdGlvbnMuaW5jbHVkZXMob3B0aW9uLnpvbmUpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2VuJywgeyBzdHlsZTogJ3Nob3J0JywgdHlwZTogJ2Rpc2p1bmN0aW9uJyB9KTtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC56b25lIG11c3QgYmUgb25lIG9mICR7Zm9ybWF0dGVyLmZvcm1hdChvcHRpb25zKX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVJlcXVlc3RDb21wbGV4aXR5KHJlcXVlc3RDb21wbGV4aXR5KSB7XG4gICAgaWYgKHJlcXVlc3RDb21wbGV4aXR5ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0Q29tcGxleGl0eSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0Q29tcGxleGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVxdWVzdENvbXBsZXhpdHkgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKFJlcXVlc3RDb21wbGV4aXR5T3B0aW9ucyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWVzdENvbXBsZXhpdHkpKSB7XG4gICAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdENvbXBsZXhpdHkgY29udGFpbnMgdW5rbm93biBwcm9wZXJ0eSAnJHtrZXl9Jy5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdmFsaWRLZXlzKSB7XG4gICAgICBpZiAocmVxdWVzdENvbXBsZXhpdHlba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVxdWVzdENvbXBsZXhpdHlba2V5XTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCAodmFsdWUgPCAxICYmIHZhbHVlICE9PSAtMSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3RDb21wbGV4aXR5LiR7a2V5fSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciAtMSB0byBkaXNhYmxlLmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0Q29tcGxleGl0eVtrZXldID0gUmVxdWVzdENvbXBsZXhpdHlPcHRpb25zW2tleV0uZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVVzZXJFbWFpbHMgfHwgIXRoaXMuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiAqIDEwMDApO1xuICB9XG5cbiAgZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLnBhc3N3b3JkUG9saWN5IHx8ICF0aGlzLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAqIDEwMDApO1xuICB9XG5cbiAgZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy5leHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMuc2Vzc2lvbkxlbmd0aCAqIDEwMDApO1xuICB9XG5cbiAgdW5yZWdpc3RlclJhdGVMaW1pdGVycygpIHtcbiAgICBsZXQgaSA9IHRoaXMucmF0ZUxpbWl0cz8ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5yYXRlTGltaXRzW2ldO1xuICAgICAgaWYgKGxpbWl0LmNsb3VkKSB7XG4gICAgICAgIHRoaXMucmF0ZUxpbWl0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGludmFsaWRMaW5rVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmludmFsaWRMaW5rIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2ludmFsaWRfbGluay5odG1sYDtcbiAgfVxuXG4gIGdldCBpbnZhbGlkVmVyaWZpY2F0aW9uTGlua1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy5pbnZhbGlkVmVyaWZpY2F0aW9uTGluayB8fFxuICAgICAgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvaW52YWxpZF92ZXJpZmljYXRpb25fbGluay5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgbGlua1NlbmRTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLmxpbmtTZW5kU3VjY2VzcyB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9saW5rX3NlbmRfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgbGlua1NlbmRGYWlsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmxpbmtTZW5kRmFpbCB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9saW5rX3NlbmRfZmFpbC5odG1sYDtcbiAgfVxuXG4gIGdldCB2ZXJpZnlFbWFpbFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMudmVyaWZ5RW1haWxTdWNjZXNzIHx8XG4gICAgICBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy92ZXJpZnlfZW1haWxfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgY2hvb3NlUGFzc3dvcmRVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMuY2hvb3NlUGFzc3dvcmQgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvY2hvb3NlX3Bhc3N3b3JkYDtcbiAgfVxuXG4gIGdldCByZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9LyR7dGhpcy5wYWdlc0VuZHBvaW50fS8ke3RoaXMuYXBwbGljYXRpb25JZH0vcmVxdWVzdF9wYXNzd29yZF9yZXNldGA7XG4gIH1cblxuICBnZXQgcGFzc3dvcmRSZXNldFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMucGFzc3dvcmRSZXNldFN1Y2Nlc3MgfHxcbiAgICAgIGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL3Bhc3N3b3JkX3Jlc2V0X3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IHBhcnNlRnJhbWVVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMucGFyc2VGcmFtZVVSTDtcbiAgfVxuXG4gIGdldCB2ZXJpZnlFbWFpbFVSTCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9LyR7dGhpcy5wYWdlc0VuZHBvaW50fS8ke3RoaXMuYXBwbGljYXRpb25JZH0vdmVyaWZ5X2VtYWlsYDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRNYXN0ZXJLZXkoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm1hc3RlcktleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHRsSXNFbXB0eSA9ICF0aGlzLm1hc3RlcktleVR0bDtcbiAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IHRoaXMubWFzdGVyS2V5Q2FjaGU/LmV4cGlyZXNBdCAmJiB0aGlzLm1hc3RlcktleUNhY2hlLmV4cGlyZXNBdCA8IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICgoIWlzRXhwaXJlZCB8fCB0dGxJc0VtcHR5KSAmJiB0aGlzLm1hc3RlcktleUNhY2hlPy5tYXN0ZXJLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyS2V5Q2FjaGUubWFzdGVyS2V5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLm1hc3RlcktleSgpO1xuXG4gICAgICBjb25zdCBleHBpcmVzQXQgPSB0aGlzLm1hc3RlcktleVR0bCA/IG5ldyBEYXRlKERhdGUubm93KCkgKyAxMDAwICogdGhpcy5tYXN0ZXJLZXlUdGwpIDogbnVsbFxuICAgICAgdGhpcy5tYXN0ZXJLZXlDYWNoZSA9IHsgbWFzdGVyS2V5LCBleHBpcmVzQXQgfTtcbiAgICAgIENvbmZpZy5wdXQodGhpcyk7XG5cbiAgICAgIHJldHVybiB0aGlzLm1hc3RlcktleUNhY2hlLm1hc3RlcktleTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXk7XG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIFBhZ2VzUm91dGVyIHJlcGxhY2VzIHRoZSBQdWJsaWNBUElSb3V0ZXI7XG4gIC8vIHRoZSAoZGVmYXVsdCkgZW5kcG9pbnQgaGFzIHRvIGJlIGRlZmluZWQgaW4gUGFnZXNSb3V0ZXIgb25seS5cbiAgZ2V0IHBhZ2VzRW5kcG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMgJiYgdGhpcy5wYWdlcy5lbmFibGVSb3V0ZXIgJiYgdGhpcy5wYWdlcy5wYWdlc0VuZHBvaW50XG4gICAgICA/IHRoaXMucGFnZXMucGFnZXNFbmRwb2ludFxuICAgICAgOiAnYXBwcyc7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xubW9kdWxlLmV4cG9ydHMgPSBDb25maWc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLG1CQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxpQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sWUFBQSxHQUFBUCxPQUFBO0FBYUEsSUFBQVEsTUFBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsV0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQWlELFNBQUFFLHVCQUFBUSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBeEJqRDtBQUNBO0FBQ0E7O0FBd0JBLFNBQVNHLG1CQUFtQkEsQ0FBQ0MsR0FBRyxFQUFFO0VBQ2hDLElBQUksQ0FBQ0EsR0FBRyxFQUFFO0lBQ1IsT0FBT0EsR0FBRztFQUNaO0VBQ0EsSUFBSUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDckJELEdBQUcsR0FBR0EsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUFFRixHQUFHLENBQUNHLE1B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