parse-server 9.6.0-alpha.9 → 9.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/lib/AccountLockout.js +14 -42
  2. package/lib/Adapters/Auth/index.js +2 -2
  3. package/lib/Adapters/Auth/oauth2.js +2 -2
  4. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +3 -3
  5. package/lib/Adapters/Storage/Mongo/MongoTransform.js +30 -30
  6. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +53 -16
  7. package/lib/Auth.js +35 -9
  8. package/lib/Config.js +6 -5
  9. package/lib/Controllers/DatabaseController.js +134 -27
  10. package/lib/Controllers/FilesController.js +2 -2
  11. package/lib/Controllers/LiveQueryController.js +2 -2
  12. package/lib/Controllers/ParseGraphQLController.js +3 -2
  13. package/lib/Controllers/SchemaController.js +3 -7
  14. package/lib/Controllers/UserController.js +12 -3
  15. package/lib/Deprecator/Deprecations.js +41 -1
  16. package/lib/GraphQL/ParseGraphQLServer.js +1 -12
  17. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +6 -5
  18. package/lib/GraphQL/loaders/functionsMutations.js +3 -4
  19. package/lib/GraphQL/loaders/parseClassMutations.js +4 -5
  20. package/lib/GraphQL/loaders/parseClassQueries.js +3 -4
  21. package/lib/GraphQL/loaders/schemaMutations.js +4 -5
  22. package/lib/GraphQL/loaders/schemaQueries.js +2 -3
  23. package/lib/GraphQL/loaders/usersMutations.js +5 -5
  24. package/lib/GraphQL/parseGraphQLUtils.js +9 -1
  25. package/lib/GraphQL/transformers/query.js +2 -2
  26. package/lib/LiveQuery/ParseLiveQueryServer.js +165 -14
  27. package/lib/LiveQuery/QueryTools.js +28 -19
  28. package/lib/Options/Definitions.js +40 -16
  29. package/lib/Options/docs.js +14 -10
  30. package/lib/Options/index.js +1 -1
  31. package/lib/ParseServer.js +9 -4
  32. package/lib/Push/PushWorker.js +2 -4
  33. package/lib/Push/utils.js +3 -4
  34. package/lib/RestQuery.js +32 -4
  35. package/lib/RestWrite.js +50 -24
  36. package/lib/Routers/AggregateRouter.js +9 -2
  37. package/lib/Routers/ClassesRouter.js +6 -2
  38. package/lib/Routers/FilesRouter.js +4 -3
  39. package/lib/Routers/PagesRouter.js +44 -20
  40. package/lib/Routers/UsersRouter.js +60 -26
  41. package/lib/Security/Check.js +2 -2
  42. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +2 -2
  43. package/lib/StatusHandler.js +3 -2
  44. package/lib/Utils.js +74 -8
  45. package/lib/batch.js +39 -36
  46. package/lib/cloud-code/Parse.Cloud.js +2 -2
  47. package/lib/middlewares.js +36 -11
  48. package/lib/triggers.js +9 -2
  49. package/package.json +1 -3
@@ -344,7 +344,8 @@ class ParseServer {
344
344
  api.use(middlewares.handleParseSession);
345
345
  this.applyRequestContextMiddleware(api, options);
346
346
  const appRouter = ParseServer.promiseRouter({
347
- appId
347
+ appId,
348
+ options
348
349
  });
349
350
  api.use(appRouter.expressRouter());
350
351
  api.use(middlewares.handleParseErrors);
@@ -377,9 +378,13 @@ class ParseServer {
377
378
  return api;
378
379
  }
379
380
  static promiseRouter({
380
- appId
381
+ appId,
382
+ options
381
383
  }) {
382
- const routers = [new _ClassesRouter.ClassesRouter(), new _UsersRouter.UsersRouter(), new _SessionsRouter.SessionsRouter(), new _RolesRouter.RolesRouter(), new _AnalyticsRouter.AnalyticsRouter(), new _InstallationsRouter.InstallationsRouter(), new _FunctionsRouter.FunctionsRouter(), new _SchemasRouter.SchemasRouter(), new _PushRouter.PushRouter(), new _LogsRouter.LogsRouter(), new _IAPValidationRouter.IAPValidationRouter(), new _FeaturesRouter.FeaturesRouter(), new _GlobalConfigRouter.GlobalConfigRouter(), new _GraphQLRouter.GraphQLRouter(), new _PurgeRouter.PurgeRouter(), new _HooksRouter.HooksRouter(), new _CloudCodeRouter.CloudCodeRouter(), new _AudiencesRouter.AudiencesRouter(), new _AggregateRouter.AggregateRouter(), new _SecurityRouter.SecurityRouter()];
384
+ const routers = [new _ClassesRouter.ClassesRouter(), new _UsersRouter.UsersRouter(), new _SessionsRouter.SessionsRouter(), new _RolesRouter.RolesRouter(), new _AnalyticsRouter.AnalyticsRouter(), new _InstallationsRouter.InstallationsRouter(), new _FunctionsRouter.FunctionsRouter(), new _SchemasRouter.SchemasRouter(), new _PushRouter.PushRouter(), new _LogsRouter.LogsRouter(), new _FeaturesRouter.FeaturesRouter(), new _GlobalConfigRouter.GlobalConfigRouter(), new _GraphQLRouter.GraphQLRouter(), new _PurgeRouter.PurgeRouter(), new _HooksRouter.HooksRouter(), new _CloudCodeRouter.CloudCodeRouter(), new _AudiencesRouter.AudiencesRouter(), new _AggregateRouter.AggregateRouter(), new _SecurityRouter.SecurityRouter()];
385
+ if (options?.enableProductPurchaseLegacyApi !== false) {
386
+ routers.push(new _IAPValidationRouter.IAPValidationRouter());
387
+ }
383
388
  const routes = routers.reduce((memo, router) => {
384
389
  return memo.concat(router.routes);
385
390
  }, []);
@@ -626,4 +631,4 @@ function configureListeners(parseServer) {
626
631
  process.on('SIGINT', handleShutdown);
627
632
  }
628
633
  var _default = exports.default = ParseServer;
629
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUXVlcnlUb29scyIsInJlcXVpcmUiLCJfZGVmYXVsdHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImxvZ2dpbmciLCJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9Qcm9taXNlUm91dGVyIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX0FuYWx5dGljc1JvdXRlciIsIl9DbGFzc2VzUm91dGVyIiwiX0ZlYXR1cmVzUm91dGVyIiwiX0ZpbGVzUm91dGVyIiwiX0Z1bmN0aW9uc1JvdXRlciIsIl9HbG9iYWxDb25maWdSb3V0ZXIiLCJfR3JhcGhRTFJvdXRlciIsIl9Ib29rc1JvdXRlciIsIl9JQVBWYWxpZGF0aW9uUm91dGVyIiwiX0luc3RhbGxhdGlvbnNSb3V0ZXIiLCJfTG9nc1JvdXRlciIsIl9QYXJzZUxpdmVRdWVyeVNlcnZlciIsIl9QYWdlc1JvdXRlciIsIl9QdXNoUm91dGVyIiwiX0Nsb3VkQ29kZVJvdXRlciIsIl9Sb2xlc1JvdXRlciIsIl9TY2hlbWFzUm91dGVyIiwiX1Nlc3Npb25zUm91dGVyIiwiX1VzZXJzUm91dGVyIiwiX1B1cmdlUm91dGVyIiwiX0F1ZGllbmNlc1JvdXRlciIsIl9BZ2dyZWdhdGVSb3V0ZXIiLCJfUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlciIsImNvbnRyb2xsZXJzIiwiX1BhcnNlR3JhcGhRTFNlcnZlciIsIl9TZWN1cml0eVJvdXRlciIsIl9DaGVja1J1bm5lciIsIl9EZXByZWNhdG9yIiwiX0RlZmluZWRTY2hlbWFzIiwiX0RlZmluaXRpb25zIiwiX1Rlc3RVdGlscyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImJhdGNoIiwiZXhwcmVzcyIsIm1pZGRsZXdhcmVzIiwiUGFyc2UiLCJwYXJzZSIsInBhdGgiLCJmcyIsImFkZFBhcnNlQ2xvdWQiLCJjb25uZWN0aW9ucyIsIkNvbm5lY3Rpb25zIiwiUGFyc2VTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJEZXByZWNhdG9yIiwic2NhblBhcnNlU2VydmVyT3B0aW9ucyIsImludGVyZmFjZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiT3B0aW9uc0RlZmluaXRpb25zIiwiZ2V0VmFsaWRPYmplY3QiLCJyb290IiwicmVzdWx0Iiwia2V5IiwicHJvdG90eXBlIiwidHlwZSIsImVuZHNXaXRoIiwic2xpY2UiLCJvcHRpb25zQmx1ZXByaW50IiwidmFsaWRhdGVLZXlOYW1lcyIsIm9yaWdpbmFsIiwicmVmIiwibmFtZSIsInByZWZpeCIsInB1c2giLCJyZXMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaXRlbSIsImlkeCIsImNvbmNhdCIsImRpZmYiLCJsZW5ndGgiLCJsb2dnZXIiLCJlcnJvciIsImpvaW4iLCJpbmplY3REZWZhdWx0cyIsImFwcElkIiwicmVxdWlyZWRQYXJhbWV0ZXIiLCJtYXN0ZXJLZXkiLCJqYXZhc2NyaXB0S2V5Iiwic2VydmVyVVJMIiwiaW5pdGlhbGl6ZSIsIkNvbmZpZyIsInZhbGlkYXRlT3B0aW9ucyIsImFsbENvbnRyb2xsZXJzIiwiZ2V0Q29udHJvbGxlcnMiLCJzdGF0ZSIsImNvbmZpZyIsInB1dCIsImFzc2lnbiIsIm1hc3RlcktleUlwc1N0b3JlIiwiTWFwIiwibWFpbnRlbmFuY2VLZXlJcHNTdG9yZSIsInJlYWRPbmx5TWFzdGVyS2V5SXBzU3RvcmUiLCJzZXRSZWdleFRpbWVvdXQiLCJsaXZlUXVlcnkiLCJyZWdleFRpbWVvdXQiLCJzZXRMb2dnZXIiLCJsb2dnZXJDb250cm9sbGVyIiwic3RhcnQiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJob29rc0NvbnRyb2xsZXIiLCJjYWNoZUNvbnRyb2xsZXIiLCJjbG91ZCIsInNlY3VyaXR5Iiwic2NoZW1hIiwibGl2ZVF1ZXJ5Q29udHJvbGxlciIsInBlcmZvcm1Jbml0aWFsaXphdGlvbiIsImNvZGUiLCJFcnJvciIsIkRVUExJQ0FURV9WQUxVRSIsInB1c2hDb250cm9sbGVyIiwiZ2V0UHVzaENvbnRyb2xsZXIiLCJsb2FkIiwic3RhcnR1cFByb21pc2VzIiwibG9hZE1hc3RlcktleSIsIkRlZmluZWRTY2hlbWFzIiwiZXhlY3V0ZSIsImFkYXB0ZXIiLCJjb25uZWN0IiwiUHJvbWlzZSIsImFsbCIsInJlc29sdmUiLCJqc29uIiwicHJvY2VzcyIsImVudiIsIm5wbV9wYWNrYWdlX2pzb24iLCJucG1fcGFja2FnZV90eXBlIiwiY3dkIiwic2V0VGltZW91dCIsImVuYWJsZUNoZWNrIiwiZW5hYmxlQ2hlY2tMb2ciLCJDaGVja1J1bm5lciIsInJ1biIsImNvbnNvbGUiLCJhcHAiLCJfYXBwIiwiaGFuZGxlU2h1dGRvd24iLCJzZXJ2ZXJDbG9zZVByb21pc2UiLCJyZXNvbHZpbmdQcm9taXNlIiwibGl2ZVF1ZXJ5U2VydmVyQ2xvc2VQcm9taXNlIiwicHJvbWlzZXMiLCJzZXJ2ZXIiLCJjbG9zZSIsImxpdmVRdWVyeVNlcnZlciIsImRhdGFiYXNlQWRhcHRlciIsImZpbGVBZGFwdGVyIiwiZmlsZXNDb250cm9sbGVyIiwiY2FjaGVBZGFwdGVyIiwic2h1dGRvd24iLCJkZXN0cm95QWxsIiwic2VydmVyQ2xvc2VDb21wbGV0ZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwicmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwidXNlIiwibWF4VXBsb2FkU2l6ZSIsImRpcmVjdEFjY2VzcyIsInBhZ2VzIiwicmF0ZUxpbWl0IiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93RG91YmxlRm9yd2FyZFNsYXNoIiwiRmlsZXNSb3V0ZXIiLCJleHByZXNzUm91dGVyIiwicmVxIiwic3RhdHVzIiwidXJsZW5jb2RlZCIsImV4dGVuZGVkIiwiUGFnZXNSb3V0ZXIiLCJsaW1pdCIsImFsbG93TWV0aG9kT3ZlcnJpZGUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyb3V0ZXMiLCJyb3V0ZSIsImFkZFJhdGVMaW1pdCIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImFwcFJvdXRlciIsInByb21pc2VSb3V0ZXIiLCJoYW5kbGVQYXJzZUVycm9ycyIsIlRFU1RJTkciLCJvbiIsImVyciIsInN0ZGVyciIsIndyaXRlIiwicG9ydCIsImV4aXQiLCJtZXNzYWdlIiwic3RhY2siLCJQQVJTRV9TRVJWRVJfRU5BQkxFX0VYUEVSSU1FTlRBTF9ESVJFQ1RfQUNDRVNTIiwiQ29yZU1hbmFnZXIiLCJzZXRSRVNUQ29udHJvbGxlciIsIlBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIiLCJyb3V0ZXJzIiwiQ2xhc3Nlc1JvdXRlciIsIlVzZXJzUm91dGVyIiwiU2Vzc2lvbnNSb3V0ZXIiLCJSb2xlc1JvdXRlciIsIkFuYWx5dGljc1JvdXRlciIsIkluc3RhbGxhdGlvbnNSb3V0ZXIiLCJGdW5jdGlvbnNSb3V0ZXIiLCJTY2hlbWFzUm91dGVyIiwiUHVzaFJvdXRlciIsIkxvZ3NSb3V0ZXIiLCJJQVBWYWxpZGF0aW9uUm91dGVyIiwiRmVhdHVyZXNSb3V0ZXIiLCJHbG9iYWxDb25maWdSb3V0ZXIiLCJHcmFwaFFMUm91dGVyIiwiUHVyZ2VSb3V0ZXIiLCJIb29rc1JvdXRlciIsIkNsb3VkQ29kZVJvdXRlciIsIkF1ZGllbmNlc1JvdXRlciIsIkFnZ3JlZ2F0ZVJvdXRlciIsIlNlY3VyaXR5Um91dGVyIiwicmVkdWNlIiwibWVtbyIsInJvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudE9udG8iLCJzdGFydEFwcCIsIm1pZGRsZXdhcmUiLCJtb3VudFBhdGgiLCJtb3VudEdyYXBoUUwiLCJtb3VudFBsYXlncm91bmQiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJ1bmRlZmluZWQiLCJncmFwaFFMU2NoZW1hIiwicmVhZEZpbGVTeW5jIiwicGFyc2VHcmFwaFFMU2VydmVyIiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiZ3JhcGhRTFBhdGgiLCJwbGF5Z3JvdW5kUGF0aCIsImFwcGx5R3JhcGhRTCIsImFwcGx5UGxheWdyb3VuZCIsImdldExvZ2dlciIsIndhcm4iLCJsaXN0ZW4iLCJob3N0IiwidHJhY2siLCJzdGFydExpdmVRdWVyeVNlcnZlciIsImxpdmVRdWVyeVNlcnZlck9wdGlvbnMiLCJjcmVhdGVMaXZlUXVlcnlTZXJ2ZXIiLCJ0cnVzdFByb3h5IiwiY29uZmlndXJlTGlzdGVuZXJzIiwidmVyaWZ5U2VydmVyVXJsIiwiZXhwcmVzc0FwcCIsInBhcnNlU2VydmVyIiwiaHR0cFNlcnZlciIsImNyZWF0ZVNlcnZlciIsIlBhcnNlTGl2ZVF1ZXJ5U2VydmVyIiwiaXNWYWxpZEh0dHBVcmwiLCJzdHJpbmciLCJ1cmwiLCJVUkwiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXRjaCIsImRhdGEiLCJyZXRyeSIsImhlYWRlcnMiLCJQYXJzZUNsb3VkIiwiY29uZiIsImFwcGxpY2F0aW9uSWQiLCJuZXdWYWwiLCJjb25maWd1cmFibGUiLCJDbG91ZCIsImdsb2JhbCIsImtleXMiLCJkZWZhdWx0cyIsImRhdGFiYXNlT3B0aW9ucyIsIkRhdGFiYXNlT3B0aW9uRGVmYXVsdHMiLCJyZWdleCIsIm1hdGNoIiwidXNlclNlbnNpdGl2ZUZpZWxkcyIsImZyb20iLCJTZXQiLCJwcm90ZWN0ZWRGaWVsZHMiLCJfVXNlciIsImMiLCJjdXIiLCJ1bnEiLCJzdGRvdXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvUGFyc2VTZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUGFyc2VTZXJ2ZXIgLSBvcGVuLXNvdXJjZSBjb21wYXRpYmxlIEFQSSBTZXJ2ZXIgZm9yIFBhcnNlIGFwcHNcblxudmFyIGJhdGNoID0gcmVxdWlyZSgnLi9iYXRjaCcpLFxuICBleHByZXNzID0gcmVxdWlyZSgnZXhwcmVzcycpLFxuICBtaWRkbGV3YXJlcyA9IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMnKSxcbiAgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2UsXG4gIHsgcGFyc2UgfSA9IHJlcXVpcmUoJ2dyYXBocWwnKSxcbiAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5pbXBvcnQgeyBQYXJzZVNlcnZlck9wdGlvbnMsIExpdmVRdWVyeVNlcnZlck9wdGlvbnMgfSBmcm9tICcuL09wdGlvbnMnO1xuaW1wb3J0IHsgc2V0UmVnZXhUaW1lb3V0IH0gZnJvbSAnLi9MaXZlUXVlcnkvUXVlcnlUb29scyc7XG5pbXBvcnQgZGVmYXVsdHMsIHsgRGF0YWJhc2VPcHRpb25EZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMnO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgeyBBbmFseXRpY3NSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvQW5hbHl0aWNzUm91dGVyJztcbmltcG9ydCB7IENsYXNzZXNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvQ2xhc3Nlc1JvdXRlcic7XG5pbXBvcnQgeyBGZWF0dXJlc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9GZWF0dXJlc1JvdXRlcic7XG5pbXBvcnQgeyBGaWxlc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9GaWxlc1JvdXRlcic7XG5pbXBvcnQgeyBGdW5jdGlvbnNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcbmltcG9ydCB7IEdsb2JhbENvbmZpZ1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9HbG9iYWxDb25maWdSb3V0ZXInO1xuaW1wb3J0IHsgR3JhcGhRTFJvdXRlciB9IGZyb20gJy4vUm91dGVycy9HcmFwaFFMUm91dGVyJztcbmltcG9ydCB7IEhvb2tzUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL0hvb2tzUm91dGVyJztcbmltcG9ydCB7IElBUFZhbGlkYXRpb25Sb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvSUFQVmFsaWRhdGlvblJvdXRlcic7XG5pbXBvcnQgeyBJbnN0YWxsYXRpb25zUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL0luc3RhbGxhdGlvbnNSb3V0ZXInO1xuaW1wb3J0IHsgTG9nc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9Mb2dzUm91dGVyJztcbmltcG9ydCB7IFBhcnNlTGl2ZVF1ZXJ5U2VydmVyIH0gZnJvbSAnLi9MaXZlUXVlcnkvUGFyc2VMaXZlUXVlcnlTZXJ2ZXInO1xuaW1wb3J0IHsgUGFnZXNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvUGFnZXNSb3V0ZXInO1xuaW1wb3J0IHsgUHVzaFJvdXRlciB9IGZyb20gJy4vUm91dGVycy9QdXNoUm91dGVyJztcbmltcG9ydCB7IENsb3VkQ29kZVJvdXRlciB9IGZyb20gJy4vUm91dGVycy9DbG91ZENvZGVSb3V0ZXInO1xuaW1wb3J0IHsgUm9sZXNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvUm9sZXNSb3V0ZXInO1xuaW1wb3J0IHsgU2NoZW1hc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9TY2hlbWFzUm91dGVyJztcbmltcG9ydCB7IFNlc3Npb25zUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL1Nlc3Npb25zUm91dGVyJztcbmltcG9ydCB7IFVzZXJzUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL1VzZXJzUm91dGVyJztcbmltcG9ydCB7IFB1cmdlUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL1B1cmdlUm91dGVyJztcbmltcG9ydCB7IEF1ZGllbmNlc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9BdWRpZW5jZXNSb3V0ZXInO1xuaW1wb3J0IHsgQWdncmVnYXRlUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL0FnZ3JlZ2F0ZVJvdXRlcic7XG5pbXBvcnQgeyBQYXJzZVNlcnZlclJFU1RDb250cm9sbGVyIH0gZnJvbSAnLi9QYXJzZVNlcnZlclJFU1RDb250cm9sbGVyJztcbmltcG9ydCAqIGFzIGNvbnRyb2xsZXJzIGZyb20gJy4vQ29udHJvbGxlcnMnO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH0gZnJvbSAnLi9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlcic7XG5pbXBvcnQgeyBTZWN1cml0eVJvdXRlciB9IGZyb20gJy4vUm91dGVycy9TZWN1cml0eVJvdXRlcic7XG5pbXBvcnQgQ2hlY2tSdW5uZXIgZnJvbSAnLi9TZWN1cml0eS9DaGVja1J1bm5lcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5pbXBvcnQgeyBEZWZpbmVkU2NoZW1hcyB9IGZyb20gJy4vU2NoZW1hTWlncmF0aW9ucy9EZWZpbmVkU2NoZW1hcyc7XG5pbXBvcnQgT3B0aW9uc0RlZmluaXRpb25zIGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgeyByZXNvbHZpbmdQcm9taXNlLCBDb25uZWN0aW9ucyB9IGZyb20gJy4vVGVzdFV0aWxzJztcblxuLy8gTXV0YXRlIHRoZSBQYXJzZSBvYmplY3QgdG8gYWRkIHRoZSBDbG91ZCBDb2RlIGhhbmRsZXJzXG5hZGRQYXJzZUNsb3VkKCk7XG5cbi8vIFRyYWNrIGNvbm5lY3Rpb25zIHRvIGRlc3Ryb3kgdGhlbSBvbiBzaHV0ZG93blxuY29uc3QgY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoKTtcblxuLy8gUGFyc2VTZXJ2ZXIgd29ya3MgbGlrZSBhIGNvbnN0cnVjdG9yIG9mIGFuIGV4cHJlc3MgYXBwLlxuLy8gaHR0cHM6Ly9wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvYXBpL21hc3Rlci9QYXJzZVNlcnZlck9wdGlvbnMuaHRtbFxuY2xhc3MgUGFyc2VTZXJ2ZXIge1xuICBfYXBwOiBhbnk7XG4gIGNvbmZpZzogYW55O1xuICBzZXJ2ZXI6IGFueTtcbiAgZXhwcmVzc0FwcDogYW55O1xuICBsaXZlUXVlcnlTZXJ2ZXI6IGFueTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1BhcnNlU2VydmVyT3B0aW9uc30gb3B0aW9ucyB0aGUgcGFyc2Ugc2VydmVyIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICAgIC8vIFNjYW4gZm9yIGRlcHJlY2F0ZWQgUGFyc2UgU2VydmVyIG9wdGlvbnNcbiAgICBEZXByZWNhdG9yLnNjYW5QYXJzZVNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBjb25zdCBpbnRlcmZhY2VzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShPcHRpb25zRGVmaW5pdGlvbnMpKTtcblxuICAgIGZ1bmN0aW9uIGdldFZhbGlkT2JqZWN0KHJvb3QpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm9vdCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvb3Rba2V5XSwgJ3R5cGUnKSkge1xuICAgICAgICAgIGlmIChyb290W2tleV0udHlwZS5lbmRzV2l0aCgnW10nKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBbZ2V0VmFsaWRPYmplY3QoaW50ZXJmYWNlc1tyb290W2tleV0udHlwZS5zbGljZSgwLCAtMildKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gZ2V0VmFsaWRPYmplY3QoaW50ZXJmYWNlc1tyb290W2tleV0udHlwZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnNCbHVlcHJpbnQgPSBnZXRWYWxpZE9iamVjdChpbnRlcmZhY2VzWydQYXJzZVNlcnZlck9wdGlvbnMnXSk7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleU5hbWVzKG9yaWdpbmFsLCByZWYsIG5hbWUgPSAnJykge1xuICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgY29uc3QgcHJlZml4ID0gbmFtZSArIChuYW1lICE9PSAnJyA/ICcuJyA6ICcnKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZiwga2V5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCArIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHJlZltrZXldID09PSAnJykgeyBjb250aW51ZTsgfVxuICAgICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcmlnaW5hbFtrZXldKSAmJiBBcnJheS5pc0FycmF5KHJlZltrZXldKSkge1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHJlZltrZXldWzBdO1xuICAgICAgICAgICAgb3JpZ2luYWxba2V5XS5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh2YWxpZGF0ZUtleU5hbWVzKGl0ZW0sIHR5cGUsIHByZWZpeCArIGtleSArIGBbJHtpZHh9XWApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JpZ2luYWxba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHJlZltrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVLZXlOYW1lcyhvcmlnaW5hbFtrZXldLCByZWZba2V5XSwgcHJlZml4ICsga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IGRpZmYgPSB2YWxpZGF0ZUtleU5hbWVzKG9wdGlvbnMsIG9wdGlvbnNCbHVlcHJpbnQpO1xuICAgIGlmIChkaWZmLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxvZ2dlciA9IChsb2dnaW5nIGFzIGFueSkubG9nZ2VyO1xuICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIGtleShzKSBmb3VuZCBpbiBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbjogJHtkaWZmLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IG9wdGlvbiBkZWZhdWx0c1xuICAgIGluamVjdERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHtcbiAgICAgIGFwcElkID0gcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYXBwSWQhJyksXG4gICAgICBtYXN0ZXJLZXkgPSByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIG1hc3RlcktleSEnKSxcbiAgICAgIGphdmFzY3JpcHRLZXksXG4gICAgICBzZXJ2ZXJVUkwgPSByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHNlcnZlclVSTCEnKSxcbiAgICB9ID0gb3B0aW9ucztcbiAgICAvLyBJbml0aWFsaXplIHRoZSBub2RlIGNsaWVudCBTREsgYXV0b21hdGljYWxseVxuICAgIFBhcnNlLmluaXRpYWxpemUoYXBwSWQsIGphdmFzY3JpcHRLZXkgfHwgJ3VudXNlZCcsIG1hc3RlcktleSk7XG4gICAgUGFyc2Uuc2VydmVyVVJMID0gc2VydmVyVVJMO1xuICAgIENvbmZpZy52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgYWxsQ29udHJvbGxlcnMgPSBjb250cm9sbGVycy5nZXRDb250cm9sbGVycyhvcHRpb25zKTtcblxuICAgIChvcHRpb25zIGFzIGFueSkuc3RhdGUgPSAnaW5pdGlhbGl6ZWQnO1xuICAgIHRoaXMuY29uZmlnID0gQ29uZmlnLnB1dChPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCBhbGxDb250cm9sbGVycykpO1xuICAgIHRoaXMuY29uZmlnLm1hc3RlcktleUlwc1N0b3JlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzU3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBzZXRSZWdleFRpbWVvdXQob3B0aW9ucy5saXZlUXVlcnk/LnJlZ2V4VGltZW91dCk7XG4gICAgbG9nZ2luZy5zZXRMb2dnZXIoYWxsQ29udHJvbGxlcnMubG9nZ2VyQ29udHJvbGxlcik7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIFBhcnNlIFNlcnZlciBhcyBhbiBleHByZXNzIGFwcDsgdGhpcyBwcm9taXNlIHJlc29sdmVzIHdoZW4gUGFyc2UgU2VydmVyIGlzIHJlYWR5IHRvIGFjY2VwdCByZXF1ZXN0cy5cbiAgICovXG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zdGF0ZSA9PT0gJ29rJykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLnN0YXRlID0gJ3N0YXJ0aW5nJztcbiAgICAgIENvbmZpZy5wdXQodGhpcy5jb25maWcpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICAgIGhvb2tzQ29udHJvbGxlcixcbiAgICAgICAgY2FjaGVDb250cm9sbGVyLFxuICAgICAgICBjbG91ZCxcbiAgICAgICAgc2VjdXJpdHksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbGl2ZVF1ZXJ5Q29udHJvbGxlcixcbiAgICAgIH0gPSB0aGlzLmNvbmZpZztcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGRhdGFiYXNlQ29udHJvbGxlci5wZXJmb3JtSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUuY29kZSAhPT0gUGFyc2UuRXJyb3IuRFVQTElDQVRFX1ZBTFVFKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcHVzaENvbnRyb2xsZXIgPSBhd2FpdCBjb250cm9sbGVycy5nZXRQdXNoQ29udHJvbGxlcih0aGlzLmNvbmZpZyk7XG4gICAgICBhd2FpdCBob29rc0NvbnRyb2xsZXIubG9hZCgpO1xuICAgICAgY29uc3Qgc3RhcnR1cFByb21pc2VzID0gW3RoaXMuY29uZmlnLmxvYWRNYXN0ZXJLZXk/LigpXTtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgc3RhcnR1cFByb21pc2VzLnB1c2gobmV3IERlZmluZWRTY2hlbWFzKHNjaGVtYSwgdGhpcy5jb25maWcpLmV4ZWN1dGUoKSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGNhY2hlQ29udHJvbGxlci5hZGFwdGVyPy5jb25uZWN0ICYmXG4gICAgICAgIHR5cGVvZiBjYWNoZUNvbnRyb2xsZXIuYWRhcHRlci5jb25uZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgc3RhcnR1cFByb21pc2VzLnB1c2goY2FjaGVDb250cm9sbGVyLmFkYXB0ZXIuY29ubmVjdCgpKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0dXBQcm9taXNlcy5wdXNoKGxpdmVRdWVyeUNvbnRyb2xsZXIuY29ubmVjdCgpKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHN0YXJ0dXBQcm9taXNlcyk7XG4gICAgICBpZiAoY2xvdWQpIHtcbiAgICAgICAgYWRkUGFyc2VDbG91ZCgpO1xuICAgICAgICBpZiAodHlwZW9mIGNsb3VkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGNsb3VkKFBhcnNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNsb3VkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGxldCBqc29uO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9qc29uKSB7XG4gICAgICAgICAgICBqc29uID0gcmVxdWlyZShwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9qc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX3R5cGUgPT09ICdtb2R1bGUnIHx8IGpzb24/LnR5cGUgPT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICBhd2FpdCBpbXBvcnQocGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGNsb3VkKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVpcmUocGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGNsb3VkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IFwiYXJndW1lbnQgJ2Nsb3VkJyBtdXN0IGVpdGhlciBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgICB9XG4gICAgICBpZiAoc2VjdXJpdHkgJiYgc2VjdXJpdHkuZW5hYmxlQ2hlY2sgJiYgc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cpIHtcbiAgICAgICAgbmV3IENoZWNrUnVubmVyKHNlY3VyaXR5KS5ydW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLnN0YXRlID0gJ29rJztcbiAgICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4ucHVzaENvbnRyb2xsZXIgfTtcbiAgICAgIENvbmZpZy5wdXQodGhpcy5jb25maWcpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMuY29uZmlnLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhcHAoKSB7XG4gICAgaWYgKCF0aGlzLl9hcHApIHtcbiAgICAgIHRoaXMuX2FwcCA9IFBhcnNlU2VydmVyLmFwcCh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcHA7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIHBhcnNlIHNlcnZlciwgY2FuY2VscyBhbnkgb25nb2luZyByZXF1ZXN0cyBhbmQgY2xvc2VzIGFsbCBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQ3VycmVudGx5LCBleHByZXNzIGRvZXNuJ3Qgc2h1dCBkb3duIGltbWVkaWF0ZWx5IGFmdGVyIHJlY2VpdmluZyBTSUdJTlQvU0lHVEVSTVxuICAgKiBpZiBpdCBoYXMgY2xpZW50IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZW4ndCB0aW1lZCBvdXQuXG4gICAqIChUaGlzIGlzIGEga25vd24gaXNzdWUgd2l0aCBub2RlIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yNjQyKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIHN0b3BwZWRcbiAgICovXG4gIGFzeW5jIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGNvbnN0IHNlcnZlckNsb3NlUHJvbWlzZSA9IHJlc29sdmluZ1Byb21pc2UoKTtcbiAgICBjb25zdCBsaXZlUXVlcnlTZXJ2ZXJDbG9zZVByb21pc2UgPSByZXNvbHZpbmdQcm9taXNlKCk7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLnNlcnZlci5jbG9zZSgoZXJyb3IpID0+IHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2xvc2luZyBwYXJzZSBzZXJ2ZXInLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJDbG9zZVByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLmxpdmVRdWVyeVNlcnZlcj8uc2VydmVyPy5jbG9zZSAmJiB0aGlzLmxpdmVRdWVyeVNlcnZlci5zZXJ2ZXIgIT09IHRoaXMuc2VydmVyKSB7XG4gICAgICB0aGlzLmxpdmVRdWVyeVNlcnZlci5zZXJ2ZXIuY2xvc2UoKGVycm9yKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2xvc2luZyBsaXZlIHF1ZXJ5IHNlcnZlcicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBsaXZlUXVlcnlTZXJ2ZXJDbG9zZVByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpdmVRdWVyeVNlcnZlckNsb3NlUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlcjogZGF0YWJhc2VBZGFwdGVyIH0gPSB0aGlzLmNvbmZpZy5kYXRhYmFzZUNvbnRyb2xsZXI7XG4gICAgaWYgKGRhdGFiYXNlQWRhcHRlciAmJiB0eXBlb2YgZGF0YWJhc2VBZGFwdGVyLmhhbmRsZVNodXRkb3duID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKGRhdGFiYXNlQWRhcHRlci5oYW5kbGVTaHV0ZG93bigpKTtcbiAgICB9XG4gICAgY29uc3QgeyBhZGFwdGVyOiBmaWxlQWRhcHRlciB9ID0gdGhpcy5jb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGlmIChmaWxlQWRhcHRlciAmJiB0eXBlb2YgZmlsZUFkYXB0ZXIuaGFuZGxlU2h1dGRvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb21pc2VzLnB1c2goZmlsZUFkYXB0ZXIuaGFuZGxlU2h1dGRvd24oKSk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlcjogY2FjaGVBZGFwdGVyIH0gPSB0aGlzLmNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgaWYgKGNhY2hlQWRhcHRlciAmJiB0eXBlb2YgY2FjaGVBZGFwdGVyLmhhbmRsZVNodXRkb3duID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKGNhY2hlQWRhcHRlci5oYW5kbGVTaHV0ZG93bigpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGl2ZVF1ZXJ5U2VydmVyKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMubGl2ZVF1ZXJ5U2VydmVyLnNodXRkb3duKCkpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgY29ubmVjdGlvbnMuZGVzdHJveUFsbCgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtzZXJ2ZXJDbG9zZVByb21pc2UsIGxpdmVRdWVyeVNlcnZlckNsb3NlUHJvbWlzZV0pO1xuICAgIGlmICh0aGlzLmNvbmZpZy5zZXJ2ZXJDbG9zZUNvbXBsZXRlKSB7XG4gICAgICB0aGlzLmNvbmZpZy5zZXJ2ZXJDbG9zZUNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQWxsb3cgZGV2ZWxvcGVycyB0byBjdXN0b21pemUgZWFjaCByZXF1ZXN0IHdpdGggaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICovXG4gIHN0YXRpYyBhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcGksIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgICBhcGkudXNlKG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQ3JlYXRlIGFuIGV4cHJlc3MgYXBwIGZvciB0aGUgcGFyc2Ugc2VydmVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGxldCB5b3Ugc3BlY2lmeSB0aGUgbWF4VXBsb2FkU2l6ZSB3aGVuIGNyZWF0aW5nIHRoZSBleHByZXNzIGFwcCAgKi9cbiAgc3RhdGljIGFwcChvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWF4VXBsb2FkU2l6ZSA9ICcyMG1iJyxcbiAgICAgIGFwcElkLFxuICAgICAgZGlyZWN0QWNjZXNzLFxuICAgICAgcGFnZXMsXG4gICAgICByYXRlTGltaXQgPSBbXSxcbiAgICB9ID0gb3B0aW9ucztcbiAgICAvLyBUaGlzIGFwcCBzZXJ2ZXMgdGhlIFBhcnNlIEFQSSBkaXJlY3RseS5cbiAgICAvLyBJdCdzIHRoZSBlcXVpdmFsZW50IG9mIGh0dHBzOi8vYXBpLnBhcnNlLmNvbS8xIGluIHRoZSBob3N0ZWQgUGFyc2UgQVBJLlxuICAgIHZhciBhcGkgPSBleHByZXNzKCk7XG4gICAgLy9hcGkudXNlKFwiL2FwcHNcIiwgZXhwcmVzcy5zdGF0aWMoX19kaXJuYW1lICsgXCIvcHVibGljXCIpKTtcbiAgICBhcGkudXNlKG1pZGRsZXdhcmVzLmFsbG93Q3Jvc3NEb21haW4oYXBwSWQpKTtcbiAgICBhcGkudXNlKG1pZGRsZXdhcmVzLmFsbG93RG91YmxlRm9yd2FyZFNsYXNoKTtcbiAgICAvLyBGaWxlIGhhbmRsaW5nIG5lZWRzIHRvIGJlIGJlZm9yZSBkZWZhdWx0IG1pZGRsZXdhcmVzIGFyZSBhcHBsaWVkXG4gICAgYXBpLnVzZShcbiAgICAgICcvJyxcbiAgICAgIG5ldyBGaWxlc1JvdXRlcigpLmV4cHJlc3NSb3V0ZXIoe1xuICAgICAgICBtYXhVcGxvYWRTaXplOiBtYXhVcGxvYWRTaXplLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXBpLnVzZSgnL2hlYWx0aCcsIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICAgICAgcmVzLnN0YXR1cyhvcHRpb25zLnN0YXRlID09PSAnb2snID8gMjAwIDogNTAzKTtcbiAgICAgIGlmIChvcHRpb25zLnN0YXRlID09PSAnc3RhcnRpbmcnKSB7XG4gICAgICAgIHJlcy5zZXQoJ1JldHJ5LUFmdGVyJywgMSk7XG4gICAgICB9XG4gICAgICByZXMuanNvbih7XG4gICAgICAgIHN0YXR1czogb3B0aW9ucy5zdGF0ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXBpLnVzZShcbiAgICAgICcvJyxcbiAgICAgIGV4cHJlc3MudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBQYWdlc1JvdXRlcihwYWdlcykuZXhwcmVzc1JvdXRlcigpXG4gICAgKTtcblxuICAgIGFwaS51c2UoZXhwcmVzcy5qc29uKHsgdHlwZTogJyovKicsIGxpbWl0OiBtYXhVcGxvYWRTaXplIH0pKTtcbiAgICBhcGkudXNlKG1pZGRsZXdhcmVzLmFsbG93TWV0aG9kT3ZlcnJpZGUpO1xuICAgIGFwaS51c2UobWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcGkuc2V0KCdxdWVyeSBwYXJzZXInLCAnZXh0ZW5kZWQnKTtcbiAgICBjb25zdCByb3V0ZXMgPSBBcnJheS5pc0FycmF5KHJhdGVMaW1pdCkgPyByYXRlTGltaXQgOiBbcmF0ZUxpbWl0XTtcbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgbWlkZGxld2FyZXMuYWRkUmF0ZUxpbWl0KHJvdXRlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXBpLnVzZShtaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIHRoaXMuYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBpLCBvcHRpb25zKTtcbiAgICBjb25zdCBhcHBSb3V0ZXIgPSBQYXJzZVNlcnZlci5wcm9taXNlUm91dGVyKHsgYXBwSWQgfSk7XG4gICAgYXBpLnVzZShhcHBSb3V0ZXIuZXhwcmVzc1JvdXRlcigpKTtcblxuICAgIGFwaS51c2UobWlkZGxld2FyZXMuaGFuZGxlUGFyc2VFcnJvcnMpO1xuXG4gICAgLy8gcnVuIHRoZSBmb2xsb3dpbmcgd2hlbiBub3QgdGVzdGluZ1xuICAgIGlmICghcHJvY2Vzcy5lbnYuVEVTVElORykge1xuICAgICAgLy9UaGlzIGNhdXNlcyB0ZXN0cyB0byBzcGV3IHNvbWUgdXNlbGVzcyB3YXJuaW5ncywgc28gZGlzYWJsZSBpbiB0ZXN0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRUFERFJJTlVTRScpIHtcbiAgICAgICAgICAvLyB1c2VyLWZyaWVuZGx5IG1lc3NhZ2UgZm9yIHRoaXMgY29tbW9uIGVycm9yXG4gICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFVuYWJsZSB0byBsaXN0ZW4gb24gcG9ydCAke2Vyci5wb3J0fS4gVGhlIHBvcnQgaXMgYWxyZWFkeSBpbiB1c2UuYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ0FuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvY2N1cnJlZDogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1N0YWNrIFRyYWNlOlxcbicgKyBlcnIuc3RhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuUEFSU0VfU0VSVkVSX0VOQUJMRV9FWFBFUklNRU5UQUxfRElSRUNUX0FDQ0VTUyA9PT0gJzEnIHx8IGRpcmVjdEFjY2Vzcykge1xuICAgICAgUGFyc2UuQ29yZU1hbmFnZXIuc2V0UkVTVENvbnRyb2xsZXIoUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlcihhcHBJZCwgYXBwUm91dGVyKSk7XG4gICAgfVxuICAgIHJldHVybiBhcGk7XG4gIH1cblxuICBzdGF0aWMgcHJvbWlzZVJvdXRlcih7IGFwcElkIH0pIHtcbiAgICBjb25zdCByb3V0ZXJzID0gW1xuICAgICAgbmV3IENsYXNzZXNSb3V0ZXIoKSxcbiAgICAgIG5ldyBVc2Vyc1JvdXRlcigpLFxuICAgICAgbmV3IFNlc3Npb25zUm91dGVyKCksXG4gICAgICBuZXcgUm9sZXNSb3V0ZXIoKSxcbiAgICAgIG5ldyBBbmFseXRpY3NSb3V0ZXIoKSxcbiAgICAgIG5ldyBJbnN0YWxsYXRpb25zUm91dGVyKCksXG4gICAgICBuZXcgRnVuY3Rpb25zUm91dGVyKCksXG4gICAgICBuZXcgU2NoZW1hc1JvdXRlcigpLFxuICAgICAgbmV3IFB1c2hSb3V0ZXIoKSxcbiAgICAgIG5ldyBMb2dzUm91dGVyKCksXG4gICAgICBuZXcgSUFQVmFsaWRhdGlvblJvdXRlcigpLFxuICAgICAgbmV3IEZlYXR1cmVzUm91dGVyKCksXG4gICAgICBuZXcgR2xvYmFsQ29uZmlnUm91dGVyKCksXG4gICAgICBuZXcgR3JhcGhRTFJvdXRlcigpLFxuICAgICAgbmV3IFB1cmdlUm91dGVyKCksXG4gICAgICBuZXcgSG9va3NSb3V0ZXIoKSxcbiAgICAgIG5ldyBDbG91ZENvZGVSb3V0ZXIoKSxcbiAgICAgIG5ldyBBdWRpZW5jZXNSb3V0ZXIoKSxcbiAgICAgIG5ldyBBZ2dyZWdhdGVSb3V0ZXIoKSxcbiAgICAgIG5ldyBTZWN1cml0eVJvdXRlcigpLFxuICAgIF07XG5cbiAgICBjb25zdCByb3V0ZXMgPSByb3V0ZXJzLnJlZHVjZSgobWVtbywgcm91dGVyKSA9PiB7XG4gICAgICByZXR1cm4gbWVtby5jb25jYXQocm91dGVyLnJvdXRlcyk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgYXBwUm91dGVyID0gbmV3IFByb21pc2VSb3V0ZXIocm91dGVzLCBhcHBJZCk7XG5cbiAgICBiYXRjaC5tb3VudE9udG8oYXBwUm91dGVyKTtcbiAgICByZXR1cm4gYXBwUm91dGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIHN0YXJ0cyB0aGUgcGFyc2Ugc2VydmVyJ3MgZXhwcmVzcyBhcHBcbiAgICogQHBhcmFtIHtQYXJzZVNlcnZlck9wdGlvbnN9IG9wdGlvbnMgdG8gdXNlIHRvIHN0YXJ0IHRoZSBzZXJ2ZXJcbiAgICogQHJldHVybnMge1BhcnNlU2VydmVyfSB0aGUgcGFyc2Ugc2VydmVyIGluc3RhbmNlXG4gICAqL1xuXG4gIGFzeW5jIHN0YXJ0QXBwKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIFBhcnNlU2VydmVyLnN0YXJ0QXBwOiAnLCBlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcbiAgICBpZiAob3B0aW9ucy5taWRkbGV3YXJlKSB7XG4gICAgICBsZXQgbWlkZGxld2FyZTtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taWRkbGV3YXJlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1pZGRsZXdhcmUgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvcHRpb25zLm1pZGRsZXdhcmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pZGRsZXdhcmUgPSBvcHRpb25zLm1pZGRsZXdhcmU7IC8vIHVzZSBhcy1pcyBsZXQgZXhwcmVzcyBmYWlsXG4gICAgICB9XG4gICAgICBhcHAudXNlKG1pZGRsZXdhcmUpO1xuICAgIH1cbiAgICBhcHAudXNlKG9wdGlvbnMubW91bnRQYXRoLCB0aGlzLmFwcCk7XG5cbiAgICBpZiAob3B0aW9ucy5tb3VudEdyYXBoUUwgPT09IHRydWUgfHwgb3B0aW9ucy5tb3VudFBsYXlncm91bmQgPT09IHRydWUpIHtcbiAgICAgIGxldCBncmFwaFFMQ3VzdG9tVHlwZURlZnMgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ3JhcGhRTFNjaGVtYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzID0gcGFyc2UoZnMucmVhZEZpbGVTeW5jKG9wdGlvbnMuZ3JhcGhRTFNjaGVtYSwgJ3V0ZjgnKSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5ncmFwaFFMU2NoZW1hID09PSAnb2JqZWN0JyB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5ncmFwaFFMU2NoZW1hID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzID0gb3B0aW9ucy5ncmFwaFFMU2NoZW1hO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZUdyYXBoUUxTZXJ2ZXIgPSBuZXcgUGFyc2VHcmFwaFFMU2VydmVyKHRoaXMsIHtcbiAgICAgICAgZ3JhcGhRTFBhdGg6IG9wdGlvbnMuZ3JhcGhRTFBhdGgsXG4gICAgICAgIHBsYXlncm91bmRQYXRoOiBvcHRpb25zLnBsYXlncm91bmRQYXRoLFxuICAgICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9wdGlvbnMubW91bnRHcmFwaFFMKSB7XG4gICAgICAgIHBhcnNlR3JhcGhRTFNlcnZlci5hcHBseUdyYXBoUUwoYXBwKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubW91bnRQbGF5Z3JvdW5kKSB7XG4gICAgICAgIHBhcnNlR3JhcGhRTFNlcnZlci5hcHBseVBsYXlncm91bmQoYXBwKTtcbiAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoKS53YXJuKFxuICAgICAgICAgICdHcmFwaFFMIFBsYXlncm91bmQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIEl0IGV4cG9zZXMgdGhlIG1hc3RlciBrZXkgaW4gdGhlIGJyb3dzZXIuIFVzZSBQYXJzZSBEYXNoYm9hcmQgYXMgR3JhcGhRTCBJREUgb3IgY29uZmlndXJlIGEgdGhpcmQtcGFydHkgR3JhcGhRTCBjbGllbnQgd2l0aCBjdXN0b20gcmVxdWVzdCBoZWFkZXJzLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2VydmVyID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBhcHAubGlzdGVuKG9wdGlvbnMucG9ydCwgb3B0aW9ucy5ob3N0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnNlcnZlciA9IHNlcnZlcjtcbiAgICBjb25uZWN0aW9ucy50cmFjayhzZXJ2ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnRMaXZlUXVlcnlTZXJ2ZXIgfHwgb3B0aW9ucy5saXZlUXVlcnlTZXJ2ZXJPcHRpb25zKSB7XG4gICAgICB0aGlzLmxpdmVRdWVyeVNlcnZlciA9IGF3YWl0IFBhcnNlU2VydmVyLmNyZWF0ZUxpdmVRdWVyeVNlcnZlcihcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBvcHRpb25zLmxpdmVRdWVyeVNlcnZlck9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5saXZlUXVlcnlTZXJ2ZXIuc2VydmVyICE9PSB0aGlzLnNlcnZlcikge1xuICAgICAgICBjb25uZWN0aW9ucy50cmFjayh0aGlzLmxpdmVRdWVyeVNlcnZlci5zZXJ2ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cnVzdFByb3h5KSB7XG4gICAgICBhcHAuc2V0KCd0cnVzdCBwcm94eScsIG9wdGlvbnMudHJ1c3RQcm94eSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCFwcm9jZXNzLmVudi5URVNUSU5HKSB7XG4gICAgICBjb25maWd1cmVMaXN0ZW5lcnModGhpcyk7XG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnlTZXJ2ZXJVcmwgIT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IFBhcnNlU2VydmVyLnZlcmlmeVNlcnZlclVybCgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmV4cHJlc3NBcHAgPSBhcHA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBQYXJzZVNlcnZlciBhbmQgc3RhcnRzIGl0LlxuICAgKiBAcGFyYW0ge1BhcnNlU2VydmVyT3B0aW9uc30gb3B0aW9ucyB1c2VkIHRvIHN0YXJ0IHRoZSBzZXJ2ZXJcbiAgICogQHJldHVybnMge1BhcnNlU2VydmVyfSB0aGUgcGFyc2Ugc2VydmVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc3RhcnRBcHAob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgcGFyc2VTZXJ2ZXIgPSBuZXcgUGFyc2VTZXJ2ZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlU2VydmVyLnN0YXJ0QXBwKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgbGl2ZVF1ZXJ5IHNlcnZlclxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7U2VydmVyfSBodHRwU2VydmVyIGFuIG9wdGlvbmFsIGh0dHAgc2VydmVyIHRvIHBhc3NcbiAgICogQHBhcmFtIHtMaXZlUXVlcnlTZXJ2ZXJPcHRpb25zfSBjb25maWcgb3B0aW9ucyBmb3IgdGhlIGxpdmVRdWVyeVNlcnZlclxuICAgKiBAcGFyYW0ge1BhcnNlU2VydmVyT3B0aW9uc30gb3B0aW9ucyBvcHRpb25zIGZvciB0aGUgUGFyc2VTZXJ2ZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8UGFyc2VMaXZlUXVlcnlTZXJ2ZXI+fSB0aGUgbGl2ZSBxdWVyeSBzZXJ2ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVMaXZlUXVlcnlTZXJ2ZXIoXG4gICAgaHR0cFNlcnZlcixcbiAgICBjb25maWc6IExpdmVRdWVyeVNlcnZlck9wdGlvbnMsXG4gICAgb3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zXG4gICk6IFByb21pc2U8UGFyc2VMaXZlUXVlcnlTZXJ2ZXI+IHtcbiAgICBpZiAoIWh0dHBTZXJ2ZXIgfHwgKGNvbmZpZyAmJiBjb25maWcucG9ydCkpIHtcbiAgICAgIHZhciBhcHAgPSBleHByZXNzKCk7XG4gICAgICBodHRwU2VydmVyID0gcmVxdWlyZSgnaHR0cCcpLmNyZWF0ZVNlcnZlcihhcHApO1xuICAgICAgaHR0cFNlcnZlci5saXN0ZW4oY29uZmlnLnBvcnQpO1xuICAgIH1cbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgUGFyc2VMaXZlUXVlcnlTZXJ2ZXIoaHR0cFNlcnZlciwgY29uZmlnLCBvcHRpb25zKTtcbiAgICBhd2FpdCBzZXJ2ZXIuY29ubmVjdCgpO1xuICAgIHJldHVybiBzZXJ2ZXI7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdmVyaWZ5U2VydmVyVXJsKCkge1xuICAgIC8vIHBlcmZvcm0gYSBoZWFsdGggY2hlY2sgb24gdGhlIHNlcnZlclVSTCB2YWx1ZVxuICAgIGlmIChQYXJzZS5zZXJ2ZXJVUkwpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRIdHRwVXJsID0gc3RyaW5nID0+IHtcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1cmwgPSBuZXcgVVJMKHN0cmluZyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOic7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXJsID0gYCR7UGFyc2Uuc2VydmVyVVJMLnJlcGxhY2UoL1xcLyQvLCAnJyl9L2hlYWx0aGA7XG4gICAgICBpZiAoIWlzVmFsaWRIdHRwVXJsKHVybCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBcXG5XQVJOSU5HLCBVbmFibGUgdG8gY29ubmVjdCB0byAnJHtQYXJzZS5zZXJ2ZXJVUkx9JyBhcyB0aGUgVVJMIGlzIGludmFsaWQuYCArXG4gICAgICAgICAgICBgIENsb3VkIGNvZGUgYW5kIHB1c2ggbm90aWZpY2F0aW9ucyBtYXkgYmUgdW5hdmFpbGFibGUhXFxuYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZSgnLi9yZXF1ZXN0Jyk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QoeyB1cmwgfSkuY2F0Y2gocmVzcG9uc2UgPT4gcmVzcG9uc2UpO1xuICAgICAgY29uc3QganNvbiA9IHJlc3BvbnNlLmRhdGEgfHwgbnVsbDtcbiAgICAgIGNvbnN0IHJldHJ5ID0gcmVzcG9uc2UuaGVhZGVycz8uWydyZXRyeS1hZnRlciddO1xuICAgICAgaWYgKHJldHJ5KSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByZXRyeSAqIDEwMDApKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U2VydmVyVXJsKCk7XG4gICAgICB9XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDAgfHwganNvbj8uc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBcXG5XQVJOSU5HLCBVbmFibGUgdG8gY29ubmVjdCB0byAnJHtQYXJzZS5zZXJ2ZXJVUkx9Jy5gICtcbiAgICAgICAgICAgIGAgQ2xvdWQgY29kZSBhbmQgcHVzaCBub3RpZmljYXRpb25zIG1heSBiZSB1bmF2YWlsYWJsZSFcXG5gXG4gICAgICAgICk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkUGFyc2VDbG91ZCgpIHtcbiAgY29uc3QgUGFyc2VDbG91ZCA9IHJlcXVpcmUoJy4vY2xvdWQtY29kZS9QYXJzZS5DbG91ZCcpO1xuICBjb25zdCBQYXJzZVNlcnZlciA9IHJlcXVpcmUoJy4vY2xvdWQtY29kZS9QYXJzZS5TZXJ2ZXInKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcnNlLCAnU2VydmVyJywge1xuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IGNvbmYgPSBDb25maWcuZ2V0KFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICAgICAgcmV0dXJuIHsgLi4uY29uZiwgLi4uUGFyc2VTZXJ2ZXIgfTtcbiAgICB9LFxuICAgIHNldChuZXdWYWwpIHtcbiAgICAgIG5ld1ZhbC5hcHBJZCA9IFBhcnNlLmFwcGxpY2F0aW9uSWQ7XG4gICAgICBDb25maWcucHV0KG5ld1ZhbCk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gIH0pO1xuICBPYmplY3QuYXNzaWduKFBhcnNlLkNsb3VkLCBQYXJzZUNsb3VkKTtcbiAgZ2xvYmFsLlBhcnNlID0gUGFyc2U7XG59XG5cbmZ1bmN0aW9uIGluamVjdERlZmF1bHRzKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIGtleSkpIHtcbiAgICAgIG9wdGlvbnNba2V5XSA9IGRlZmF1bHRzW2tleV07XG4gICAgfVxuICB9KTtcblxuICAvLyBJbmplY3QgZGVmYXVsdHMgZm9yIGRhdGFiYXNlIG9wdGlvbnM7IG9ubHkgd2hlbiBubyBleHBsaWNpdCBkYXRhYmFzZSBhZGFwdGVyIGlzIHNldCxcbiAgLy8gYmVjYXVzZSBhbiBleHBsaWNpdCBhZGFwdGVyIG1hbmFnZXMgaXRzIG93biBvcHRpb25zIGFuZCBwYXNzaW5nIGRhdGFiYXNlT3B0aW9ucyBhbG9uZ3NpZGVcbiAgLy8gaXQgd291bGQgY2F1c2UgYSBjb25mbGljdCBlcnJvciBpbiBnZXREYXRhYmFzZUNvbnRyb2xsZXIuXG4gIGlmICghb3B0aW9ucy5kYXRhYmFzZUFkYXB0ZXIpIHtcbiAgICBpZiAob3B0aW9ucy5kYXRhYmFzZU9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5kYXRhYmFzZU9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRhdGFiYXNlT3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob3B0aW9ucy5kYXRhYmFzZU9wdGlvbnMpKSB7XG4gICAgICBPYmplY3Qua2V5cyhEYXRhYmFzZU9wdGlvbkRlZmF1bHRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuZGF0YWJhc2VPcHRpb25zLCBrZXkpKSB7XG4gICAgICAgICAgb3B0aW9ucy5kYXRhYmFzZU9wdGlvbnNba2V5XSA9IERhdGFiYXNlT3B0aW9uRGVmYXVsdHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NlcnZlclVSTCcpKSB7XG4gICAgb3B0aW9ucy5zZXJ2ZXJVUkwgPSBgaHR0cDovL2xvY2FsaG9zdDoke29wdGlvbnMucG9ydH0ke29wdGlvbnMubW91bnRQYXRofWA7XG4gIH1cblxuICAvLyBSZXNlcnZlZCBDaGFyYWN0ZXJzXG4gIGlmIChvcHRpb25zLmFwcElkKSB7XG4gICAgY29uc3QgcmVnZXggPSAvWyEjJCUnKCkqKyYvOjs9P0BbXFxde31eLHw8Pl0vZztcbiAgICBpZiAob3B0aW9ucy5hcHBJZC5tYXRjaChyZWdleCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBcXG5XQVJOSU5HLCBhcHBJZCB0aGF0IGNvbnRhaW5zIHNwZWNpYWwgY2hhcmFjdGVycyBjYW4gY2F1c2UgaXNzdWVzIHdoaWxlIHVzaW5nIHdpdGggdXJscy5cXG5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIGlmIChvcHRpb25zLnVzZXJTZW5zaXRpdmVGaWVsZHMpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgIXByb2Nlc3MuZW52LlRFU1RJTkcgJiZcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFxcbkRFUFJFQ0FURUQ6IHVzZXJTZW5zaXRpdmVGaWVsZHMgaGFzIGJlZW4gcmVwbGFjZWQgYnkgcHJvdGVjdGVkRmllbGRzIGFsbG93aW5nIHRoZSBhYmlsaXR5IHRvIHByb3RlY3QgZmllbGRzIGluIGFsbCBjbGFzc2VzIHdpdGggQ0xQLiBcXG5gXG4gICAgICApO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuXG4gICAgY29uc3QgdXNlclNlbnNpdGl2ZUZpZWxkcyA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFsuLi4oZGVmYXVsdHMudXNlclNlbnNpdGl2ZUZpZWxkcyB8fCBbXSksIC4uLihvcHRpb25zLnVzZXJTZW5zaXRpdmVGaWVsZHMgfHwgW10pXSlcbiAgICApO1xuXG4gICAgLy8gSWYgdGhlIG9wdGlvbnMucHJvdGVjdGVkRmllbGRzIGlzIHVuc2V0LFxuICAgIC8vIGl0J2xsIGJlIGFzc2lnbmVkIHRoZSBkZWZhdWx0IGFib3ZlLlxuICAgIC8vIEhlcmUsIHByb3RlY3QgYWdhaW5zdCB0aGUgY2FzZSB3aGVyZSBwcm90ZWN0ZWRGaWVsZHNcbiAgICAvLyBpcyBzZXQsIGJ1dCBkb2Vzbid0IGhhdmUgX1VzZXIuXG4gICAgaWYgKCEoJ19Vc2VyJyBpbiBvcHRpb25zLnByb3RlY3RlZEZpZWxkcykpIHtcbiAgICAgIG9wdGlvbnMucHJvdGVjdGVkRmllbGRzID0gT2JqZWN0LmFzc2lnbih7IF9Vc2VyOiBbXSB9LCBvcHRpb25zLnByb3RlY3RlZEZpZWxkcyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHNbJ19Vc2VyJ11bJyonXSA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFsuLi4ob3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHNbJ19Vc2VyJ11bJyonXSB8fCBbXSksIC4uLnVzZXJTZW5zaXRpdmVGaWVsZHNdKVxuICAgICk7XG4gIH1cblxuICAvLyBNZXJnZSBwcm90ZWN0ZWRGaWVsZHMgb3B0aW9ucyB3aXRoIGRlZmF1bHRzLlxuICBPYmplY3Qua2V5cyhkZWZhdWx0cy5wcm90ZWN0ZWRGaWVsZHMpLmZvckVhY2goYyA9PiB7XG4gICAgY29uc3QgY3VyID0gb3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHNbY107XG4gICAgaWYgKCFjdXIpIHtcbiAgICAgIG9wdGlvbnMucHJvdGVjdGVkRmllbGRzW2NdID0gZGVmYXVsdHMucHJvdGVjdGVkRmllbGRzW2NdO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cy5wcm90ZWN0ZWRGaWVsZHNbY10pLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IHVucSA9IG5ldyBTZXQoW1xuICAgICAgICAgIC4uLihvcHRpb25zLnByb3RlY3RlZEZpZWxkc1tjXVtyXSB8fCBbXSksXG4gICAgICAgICAgLi4uZGVmYXVsdHMucHJvdGVjdGVkRmllbGRzW2NdW3JdLFxuICAgICAgICBdKTtcbiAgICAgICAgb3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHNbY11bcl0gPSBBcnJheS5mcm9tKHVucSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBUaG9zZSBjYW4ndCBiZSB0ZXN0ZWQgYXMgaXQgcmVxdWlyZXMgYSBzdWJwcm9jZXNzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gY29uZmlndXJlTGlzdGVuZXJzKHBhcnNlU2VydmVyKSB7XG4gIGNvbnN0IGhhbmRsZVNodXRkb3duID0gZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdUZXJtaW5hdGlvbiBzaWduYWwgcmVjZWl2ZWQuIFNodXR0aW5nIGRvd24uJyk7XG4gICAgcGFyc2VTZXJ2ZXIuaGFuZGxlU2h1dGRvd24oKTtcbiAgfTtcbiAgcHJvY2Vzcy5vbignU0lHVEVSTScsIGhhbmRsZVNodXRkb3duKTtcbiAgcHJvY2Vzcy5vbignU0lHSU5UJywgaGFuZGxlU2h1dGRvd24pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQYXJzZVNlcnZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBV0EsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBRCx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBRCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQUYsc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxjQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxlQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxZQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxnQkFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsbUJBQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLGNBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFlBQUEsR0FBQWYsT0FBQTtBQUNBLElBQUFnQixvQkFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQixvQkFBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixXQUFBLEdBQUFsQixPQUFBO0FBQ0EsSUFBQW1CLHFCQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLFlBQUEsR0FBQXBCLE9BQUE7QUFDQSxJQUFBcUIsV0FBQSxHQUFBckIsT0FBQTtBQUNBLElBQUFzQixnQkFBQSxHQUFBdEIsT0FBQTtBQUNBLElBQUF1QixZQUFBLEdBQUF2QixP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
634
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUXVlcnlUb29scyIsInJlcXVpcmUiLCJfZGVmYXVsdHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImxvZ2dpbmciLCJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9Qcm9taXNlUm91dGVyIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX0FuYWx5dGljc1JvdXRlciIsIl9DbGFzc2VzUm91dGVyIiwiX0ZlYXR1cmVzUm91dGVyIiwiX0ZpbGVzUm91dGVyIiwiX0Z1bmN0aW9uc1JvdXRlciIsIl9HbG9iYWxDb25maWdSb3V0ZXIiLCJfR3JhcGhRTFJvdXRlciIsIl9Ib29rc1JvdXRlciIsIl9JQVBWYWxpZGF0aW9uUm91dGVyIiwiX0luc3RhbGxhdGlvbnNSb3V0ZXIiLCJfTG9nc1JvdXRlciIsIl9QYXJzZUxpdmVRdWVyeVNlcnZlciIsIl9QYWdlc1JvdXRlciIsIl9QdXNoUm91dGVyIiwiX0Nsb3VkQ29kZVJvdXRlciIsIl9Sb2xlc1JvdXRlciIsIl9TY2hlbWFzUm91dGVyIiwiX1Nlc3Npb25zUm91dGVyIiwiX1VzZXJzUm91dGVyIiwiX1B1cmdlUm91dGVyIiwiX0F1ZGllbmNlc1JvdXRlciIsIl9BZ2dyZWdhdGVSb3V0ZXIiLCJfUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlciIsImNvbnRyb2xsZXJzIiwiX1BhcnNlR3JhcGhRTFNlcnZlciIsIl9TZWN1cml0eVJvdXRlciIsIl9DaGVja1J1bm5lciIsIl9EZXByZWNhdG9yIiwiX0RlZmluZWRTY2hlbWFzIiwiX0RlZmluaXRpb25zIiwiX1Rlc3RVdGlscyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImJhdGNoIiwiZXhwcmVzcyIsIm1pZGRsZXdhcmVzIiwiUGFyc2UiLCJwYXJzZSIsInBhdGgiLCJmcyIsImFkZFBhcnNlQ2xvdWQiLCJjb25uZWN0aW9ucyIsIkNvbm5lY3Rpb25zIiwiUGFyc2VTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJEZXByZWNhdG9yIiwic2NhblBhcnNlU2VydmVyT3B0aW9ucyIsImludGVyZmFjZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiT3B0aW9uc0RlZmluaXRpb25zIiwiZ2V0VmFsaWRPYmplY3QiLCJyb290IiwicmVzdWx0Iiwia2V5IiwicHJvdG90eXBlIiwidHlwZSIsImVuZHNXaXRoIiwic2xpY2UiLCJvcHRpb25zQmx1ZXByaW50IiwidmFsaWRhdGVLZXlOYW1lcyIsIm9yaWdpbmFsIiwicmVmIiwibmFtZSIsInByZWZpeCIsInB1c2giLCJyZXMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiaXRlbSIsImlkeCIsImNvbmNhdCIsImRpZmYiLCJsZW5ndGgiLCJsb2dnZXIiLCJlcnJvciIsImpvaW4iLCJpbmplY3REZWZhdWx0cyIsImFwcElkIiwicmVxdWlyZWRQYXJhbWV0ZXIiLCJtYXN0ZXJLZXkiLCJqYXZhc2NyaXB0S2V5Iiwic2VydmVyVVJMIiwiaW5pdGlhbGl6ZSIsIkNvbmZpZyIsInZhbGlkYXRlT3B0aW9ucyIsImFsbENvbnRyb2xsZXJzIiwiZ2V0Q29udHJvbGxlcnMiLCJzdGF0ZSIsImNvbmZpZyIsInB1dCIsImFzc2lnbiIsIm1hc3RlcktleUlwc1N0b3JlIiwiTWFwIiwibWFpbnRlbmFuY2VLZXlJcHNTdG9yZSIsInJlYWRPbmx5TWFzdGVyS2V5SXBzU3RvcmUiLCJzZXRSZWdleFRpbWVvdXQiLCJsaXZlUXVlcnkiLCJyZWdleFRpbWVvdXQiLCJzZXRMb2dnZXIiLCJsb2dnZXJDb250cm9sbGVyIiwic3RhcnQiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJob29rc0NvbnRyb2xsZXIiLCJjYWNoZUNvbnRyb2xsZXIiLCJjbG91ZCIsInNlY3VyaXR5Iiwic2NoZW1hIiwibGl2ZVF1ZXJ5Q29udHJvbGxlciIsInBlcmZvcm1Jbml0aWFsaXphdGlvbiIsImNvZGUiLCJFcnJvciIsIkRVUExJQ0FURV9WQUxVRSIsInB1c2hDb250cm9sbGVyIiwiZ2V0UHVzaENvbnRyb2xsZXIiLCJsb2FkIiwic3RhcnR1cFByb21pc2VzIiwibG9hZE1hc3RlcktleSIsIkRlZmluZWRTY2hlbWFzIiwiZXhlY3V0ZSIsImFkYXB0ZXIiLCJjb25uZWN0IiwiUHJvbWlzZSIsImFsbCIsInJlc29sdmUiLCJqc29uIiwicHJvY2VzcyIsImVudiIsIm5wbV9wYWNrYWdlX2pzb24iLCJucG1fcGFja2FnZV90eXBlIiwiY3dkIiwic2V0VGltZW91dCIsImVuYWJsZUNoZWNrIiwiZW5hYmxlQ2hlY2tMb2ciLCJDaGVja1J1bm5lciIsInJ1biIsImNvbnNvbGUiLCJhcHAiLCJfYXBwIiwiaGFuZGxlU2h1dGRvd24iLCJzZXJ2ZXJDbG9zZVByb21pc2UiLCJyZXNvbHZpbmdQcm9taXNlIiwibGl2ZVF1ZXJ5U2VydmVyQ2xvc2VQcm9taXNlIiwicHJvbWlzZXMiLCJzZXJ2ZXIiLCJjbG9zZSIsImxpdmVRdWVyeVNlcnZlciIsImRhdGFiYXNlQWRhcHRlciIsImZpbGVBZGFwdGVyIiwiZmlsZXNDb250cm9sbGVyIiwiY2FjaGVBZGFwdGVyIiwic2h1dGRvd24iLCJkZXN0cm95QWxsIiwic2VydmVyQ2xvc2VDb21wbGV0ZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwicmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwidXNlIiwibWF4VXBsb2FkU2l6ZSIsImRpcmVjdEFjY2VzcyIsInBhZ2VzIiwicmF0ZUxpbWl0IiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93RG91YmxlRm9yd2FyZFNsYXNoIiwiRmlsZXNSb3V0ZXIiLCJleHByZXNzUm91dGVyIiwicmVxIiwic3RhdHVzIiwidXJsZW5jb2RlZCIsImV4dGVuZGVkIiwiUGFnZXNSb3V0ZXIiLCJsaW1pdCIsImFsbG93TWV0aG9kT3ZlcnJpZGUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyb3V0ZXMiLCJyb3V0ZSIsImFkZFJhdGVMaW1pdCIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImFwcFJvdXRlciIsInByb21pc2VSb3V0ZXIiLCJoYW5kbGVQYXJzZUVycm9ycyIsIlRFU1RJTkciLCJvbiIsImVyciIsInN0ZGVyciIsIndyaXRlIiwicG9ydCIsImV4aXQiLCJtZXNzYWdlIiwic3RhY2siLCJQQVJTRV9TRVJWRVJfRU5BQkxFX0VYUEVSSU1FTlRBTF9ESVJFQ1RfQUNDRVNTIiwiQ29yZU1hbmFnZXIiLCJzZXRSRVNUQ29udHJvbGxlciIsIlBhcnNlU2VydmVyUkVTVENvbnRyb2xsZXIiLCJyb3V0ZXJzIiwiQ2xhc3Nlc1JvdXRlciIsIlVzZXJzUm91dGVyIiwiU2Vzc2lvbnNSb3V0ZXIiLCJSb2xlc1JvdXRlciIsIkFuYWx5dGljc1JvdXRlciIsIkluc3RhbGxhdGlvbnNSb3V0ZXIiLCJGdW5jdGlvbnNSb3V0ZXIiLCJTY2hlbWFzUm91dGVyIiwiUHVzaFJvdXRlciIsIkxvZ3NSb3V0ZXIiLCJGZWF0dXJlc1JvdXRlciIsIkdsb2JhbENvbmZpZ1JvdXRlciIsIkdyYXBoUUxSb3V0ZXIiLCJQdXJnZVJvdXRlciIsIkhvb2tzUm91dGVyIiwiQ2xvdWRDb2RlUm91dGVyIiwiQXVkaWVuY2VzUm91dGVyIiwiQWdncmVnYXRlUm91dGVyIiwiU2VjdXJpdHlSb3V0ZXIiLCJlbmFibGVQcm9kdWN0UHVyY2hhc2VMZWdhY3lBcGkiLCJJQVBWYWxpZGF0aW9uUm91dGVyIiwicmVkdWNlIiwibWVtbyIsInJvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJtb3VudE9udG8iLCJzdGFydEFwcCIsIm1pZGRsZXdhcmUiLCJtb3VudFBhdGgiLCJtb3VudEdyYXBoUUwiLCJtb3VudFBsYXlncm91bmQiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJ1bmRlZmluZWQiLCJncmFwaFFMU2NoZW1hIiwicmVhZEZpbGVTeW5jIiwicGFyc2VHcmFwaFFMU2VydmVyIiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiZ3JhcGhRTFBhdGgiLCJwbGF5Z3JvdW5kUGF0aCIsImFwcGx5R3JhcGhRTCIsImFwcGx5UGxheWdyb3VuZCIsImdldExvZ2dlciIsIndhcm4iLCJsaXN0ZW4iLCJob3N0IiwidHJhY2siLCJzdGFydExpdmVRdWVyeVNlcnZlciIsImxpdmVRdWVyeVNlcnZlck9wdGlvbnMiLCJjcmVhdGVMaXZlUXVlcnlTZXJ2ZXIiLCJ0cnVzdFByb3h5IiwiY29uZmlndXJlTGlzdGVuZXJzIiwidmVyaWZ5U2VydmVyVXJsIiwiZXhwcmVzc0FwcCIsInBhcnNlU2VydmVyIiwiaHR0cFNlcnZlciIsImNyZWF0ZVNlcnZlciIsIlBhcnNlTGl2ZVF1ZXJ5U2VydmVyIiwiaXNWYWxpZEh0dHBVcmwiLCJzdHJpbmciLCJ1cmwiLCJVUkwiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJjYXRjaCIsImRhdGEiLCJyZXRyeSIsImhlYWRlcnMiLCJQYXJzZUNsb3VkIiwiY29uZiIsImFwcGxpY2F0aW9uSWQiLCJuZXdWYWwiLCJjb25maWd1cmFibGUiLCJDbG91ZCIsImdsb2JhbCIsImtleXMiLCJkZWZhdWx0cyIsImRhdGFiYXNlT3B0aW9ucyIsIkRhdGFiYXNlT3B0aW9uRGVmYXVsdHMiLCJyZWdleCIsIm1hdGNoIiwidXNlclNlbnNpdGl2ZUZpZWxkcyIsImZyb20iLCJTZXQiLCJwcm90ZWN0ZWRGaWVsZHMiLCJfVXNlciIsImMiLCJjdXIiLCJ1bnEiLCJzdGRvdXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvUGFyc2VTZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUGFyc2VTZXJ2ZXIgLSBvcGVuLXNvdXJjZSBjb21wYXRpYmxlIEFQSSBTZXJ2ZXIgZm9yIFBhcnNlIGFwcHNcblxudmFyIGJhdGNoID0gcmVxdWlyZSgnLi9iYXRjaCcpLFxuICBleHByZXNzID0gcmVxdWlyZSgnZXhwcmVzcycpLFxuICBtaWRkbGV3YXJlcyA9IHJlcXVpcmUoJy4vbWlkZGxld2FyZXMnKSxcbiAgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2UsXG4gIHsgcGFyc2UgfSA9IHJlcXVpcmUoJ2dyYXBocWwnKSxcbiAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgZnMgPSByZXF1aXJlKCdmcycpO1xuXG5pbXBvcnQgeyBQYXJzZVNlcnZlck9wdGlvbnMsIExpdmVRdWVyeVNlcnZlck9wdGlvbnMgfSBmcm9tICcuL09wdGlvbnMnO1xuaW1wb3J0IHsgc2V0UmVnZXhUaW1lb3V0IH0gZnJvbSAnLi9MaXZlUXVlcnkvUXVlcnlUb29scyc7XG5pbXBvcnQgZGVmYXVsdHMsIHsgRGF0YWJhc2VPcHRpb25EZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMnO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4vUHJvbWlzZVJvdXRlcic7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgeyBBbmFseXRpY3NSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvQW5hbHl0aWNzUm91dGVyJztcbmltcG9ydCB7IENsYXNzZXNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvQ2xhc3Nlc1JvdXRlcic7XG5pbXBvcnQgeyBGZWF0dXJlc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9GZWF0dXJlc1JvdXRlcic7XG5pbXBvcnQgeyBGaWxlc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9GaWxlc1JvdXRlcic7XG5pbXBvcnQgeyBGdW5jdGlvbnNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcbmltcG9ydCB7IEdsb2JhbENvbmZpZ1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9HbG9iYWxDb25maWdSb3V0ZXInO1xuaW1wb3J0IHsgR3JhcGhRTFJvdXRlciB9IGZyb20gJy4vUm91dGVycy9HcmFwaFFMUm91dGVyJztcbmltcG9ydCB7IEhvb2tzUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL0hvb2tzUm91dGVyJztcbmltcG9ydCB7IElBUFZhbGlkYXRpb25Sb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvSUFQVmFsaWRhdGlvblJvdXRlcic7XG5pbXBvcnQgeyBJbnN0YWxsYXRpb25zUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL0luc3RhbGxhdGlvbnNSb3V0ZXInO1xuaW1wb3J0IHsgTG9nc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9Mb2dzUm91dGVyJztcbmltcG9ydCB7IFBhcnNlTGl2ZVF1ZXJ5U2VydmVyIH0gZnJvbSAnLi9MaXZlUXVlcnkvUGFyc2VMaXZlUXVlcnlTZXJ2ZXInO1xuaW1wb3J0IHsgUGFnZXNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvUGFnZXNSb3V0ZXInO1xuaW1wb3J0IHsgUHVzaFJvdXRlciB9IGZyb20gJy4vUm91dGVycy9QdXNoUm91dGVyJztcbmltcG9ydCB7IENsb3VkQ29kZVJvdXRlciB9IGZyb20gJy4vUm91dGVycy9DbG91ZENvZGVSb3V0ZXInO1xuaW1wb3J0IHsgUm9sZXNSb3V0ZXIgfSBmcm9tICcuL1JvdXRlcnMvUm9sZXNSb3V0ZXInO1xuaW1wb3J0IHsgU2NoZW1hc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9TY2hlbWFzUm91dGVyJztcbmltcG9ydCB7IFNlc3Npb25zUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL1Nlc3Npb25zUm91dGVyJztcbmltcG9ydCB7IFVzZXJzUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL1VzZXJzUm91dGVyJztcbmltcG9ydCB7IFB1cmdlUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL1B1cmdlUm91dGVyJztcbmltcG9ydCB7IEF1ZGllbmNlc1JvdXRlciB9IGZyb20gJy4vUm91dGVycy9BdWRpZW5jZXNSb3V0ZXInO1xuaW1wb3J0IHsgQWdncmVnYXRlUm91dGVyIH0gZnJvbSAnLi9Sb3V0ZXJzL0FnZ3JlZ2F0ZVJvdXRlcic7XG5pbXBvcnQgeyBQYXJzZVNlcnZlclJFU1RDb250cm9sbGVyIH0gZnJvbSAnLi9QYXJzZVNlcnZlclJFU1RDb250cm9sbGVyJztcbmltcG9ydCAqIGFzIGNvbnRyb2xsZXJzIGZyb20gJy4vQ29udHJvbGxlcnMnO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH0gZnJvbSAnLi9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlcic7XG5pbXBvcnQgeyBTZWN1cml0eVJvdXRlciB9IGZyb20gJy4vUm91dGVycy9TZWN1cml0eVJvdXRlcic7XG5pbXBvcnQgQ2hlY2tSdW5uZXIgZnJvbSAnLi9TZWN1cml0eS9DaGVja1J1bm5lcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5pbXBvcnQgeyBEZWZpbmVkU2NoZW1hcyB9IGZyb20gJy4vU2NoZW1hTWlncmF0aW9ucy9EZWZpbmVkU2NoZW1hcyc7XG5pbXBvcnQgT3B0aW9uc0RlZmluaXRpb25zIGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgeyByZXNvbHZpbmdQcm9taXNlLCBDb25uZWN0aW9ucyB9IGZyb20gJy4vVGVzdFV0aWxzJztcblxuLy8gTXV0YXRlIHRoZSBQYXJzZSBvYmplY3QgdG8gYWRkIHRoZSBDbG91ZCBDb2RlIGhhbmRsZXJzXG5hZGRQYXJzZUNsb3VkKCk7XG5cbi8vIFRyYWNrIGNvbm5lY3Rpb25zIHRvIGRlc3Ryb3kgdGhlbSBvbiBzaHV0ZG93blxuY29uc3QgY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoKTtcblxuLy8gUGFyc2VTZXJ2ZXIgd29ya3MgbGlrZSBhIGNvbnN0cnVjdG9yIG9mIGFuIGV4cHJlc3MgYXBwLlxuLy8gaHR0cHM6Ly9wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvYXBpL21hc3Rlci9QYXJzZVNlcnZlck9wdGlvbnMuaHRtbFxuY2xhc3MgUGFyc2VTZXJ2ZXIge1xuICBfYXBwOiBhbnk7XG4gIGNvbmZpZzogYW55O1xuICBzZXJ2ZXI6IGFueTtcbiAgZXhwcmVzc0FwcDogYW55O1xuICBsaXZlUXVlcnlTZXJ2ZXI6IGFueTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1BhcnNlU2VydmVyT3B0aW9uc30gb3B0aW9ucyB0aGUgcGFyc2Ugc2VydmVyIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICAgIC8vIFNjYW4gZm9yIGRlcHJlY2F0ZWQgUGFyc2UgU2VydmVyIG9wdGlvbnNcbiAgICBEZXByZWNhdG9yLnNjYW5QYXJzZVNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBjb25zdCBpbnRlcmZhY2VzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShPcHRpb25zRGVmaW5pdGlvbnMpKTtcblxuICAgIGZ1bmN0aW9uIGdldFZhbGlkT2JqZWN0KHJvb3QpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gcm9vdCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvb3Rba2V5XSwgJ3R5cGUnKSkge1xuICAgICAgICAgIGlmIChyb290W2tleV0udHlwZS5lbmRzV2l0aCgnW10nKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBbZ2V0VmFsaWRPYmplY3QoaW50ZXJmYWNlc1tyb290W2tleV0udHlwZS5zbGljZSgwLCAtMildKV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gZ2V0VmFsaWRPYmplY3QoaW50ZXJmYWNlc1tyb290W2tleV0udHlwZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnNCbHVlcHJpbnQgPSBnZXRWYWxpZE9iamVjdChpbnRlcmZhY2VzWydQYXJzZVNlcnZlck9wdGlvbnMnXSk7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUtleU5hbWVzKG9yaWdpbmFsLCByZWYsIG5hbWUgPSAnJykge1xuICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgY29uc3QgcHJlZml4ID0gbmFtZSArIChuYW1lICE9PSAnJyA/ICcuJyA6ICcnKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9yaWdpbmFsKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZiwga2V5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCArIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHJlZltrZXldID09PSAnJykgeyBjb250aW51ZTsgfVxuICAgICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcmlnaW5hbFtrZXldKSAmJiBBcnJheS5pc0FycmF5KHJlZltrZXldKSkge1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHJlZltrZXldWzBdO1xuICAgICAgICAgICAgb3JpZ2luYWxba2V5XS5mb3JFYWNoKChpdGVtLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdCh2YWxpZGF0ZUtleU5hbWVzKGl0ZW0sIHR5cGUsIHByZWZpeCArIGtleSArIGBbJHtpZHh9XWApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JpZ2luYWxba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHJlZltrZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVLZXlOYW1lcyhvcmlnaW5hbFtrZXldLCByZWZba2V5XSwgcHJlZml4ICsga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IGRpZmYgPSB2YWxpZGF0ZUtleU5hbWVzKG9wdGlvbnMsIG9wdGlvbnNCbHVlcHJpbnQpO1xuICAgIGlmIChkaWZmLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxvZ2dlciA9IChsb2dnaW5nIGFzIGFueSkubG9nZ2VyO1xuICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIGtleShzKSBmb3VuZCBpbiBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbjogJHtkaWZmLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IG9wdGlvbiBkZWZhdWx0c1xuICAgIGluamVjdERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHtcbiAgICAgIGFwcElkID0gcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYXBwSWQhJyksXG4gICAgICBtYXN0ZXJLZXkgPSByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIG1hc3RlcktleSEnKSxcbiAgICAgIGphdmFzY3JpcHRLZXksXG4gICAgICBzZXJ2ZXJVUkwgPSByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHNlcnZlclVSTCEnKSxcbiAgICB9ID0gb3B0aW9ucztcbiAgICAvLyBJbml0aWFsaXplIHRoZSBub2RlIGNsaWVudCBTREsgYXV0b21hdGljYWxseVxuICAgIFBhcnNlLmluaXRpYWxpemUoYXBwSWQsIGphdmFzY3JpcHRLZXkgfHwgJ3VudXNlZCcsIG1hc3RlcktleSk7XG4gICAgUGFyc2Uuc2VydmVyVVJMID0gc2VydmVyVVJMO1xuICAgIENvbmZpZy52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgYWxsQ29udHJvbGxlcnMgPSBjb250cm9sbGVycy5nZXRDb250cm9sbGVycyhvcHRpb25zKTtcblxuICAgIChvcHRpb25zIGFzIGFueSkuc3RhdGUgPSAnaW5pdGlhbGl6ZWQnO1xuICAgIHRoaXMuY29uZmlnID0gQ29uZmlnLnB1dChPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCBhbGxDb250cm9sbGVycykpO1xuICAgIHRoaXMuY29uZmlnLm1hc3RlcktleUlwc1N0b3JlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzU3RvcmUgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBzZXRSZWdleFRpbWVvdXQob3B0aW9ucy5saXZlUXVlcnk/LnJlZ2V4VGltZW91dCk7XG4gICAgbG9nZ2luZy5zZXRMb2dnZXIoYWxsQ29udHJvbGxlcnMubG9nZ2VyQ29udHJvbGxlcik7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIFBhcnNlIFNlcnZlciBhcyBhbiBleHByZXNzIGFwcDsgdGhpcyBwcm9taXNlIHJlc29sdmVzIHdoZW4gUGFyc2UgU2VydmVyIGlzIHJlYWR5IHRvIGFjY2VwdCByZXF1ZXN0cy5cbiAgICovXG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zdGF0ZSA9PT0gJ29rJykge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLnN0YXRlID0gJ3N0YXJ0aW5nJztcbiAgICAgIENvbmZpZy5wdXQodGhpcy5jb25maWcpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICAgIGhvb2tzQ29udHJvbGxlcixcbiAgICAgICAgY2FjaGVDb250cm9sbGVyLFxuICAgICAgICBjbG91ZCxcbiAgICAgICAgc2VjdXJpdHksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbGl2ZVF1ZXJ5Q29udHJvbGxlcixcbiAgICAgIH0gPSB0aGlzLmNvbmZpZztcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGRhdGFiYXNlQ29udHJvbGxlci5wZXJmb3JtSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUuY29kZSAhPT0gUGFyc2UuRXJyb3IuRFVQTElDQVRFX1ZBTFVFKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcHVzaENvbnRyb2xsZXIgPSBhd2FpdCBjb250cm9sbGVycy5nZXRQdXNoQ29udHJvbGxlcih0aGlzLmNvbmZpZyk7XG4gICAgICBhd2FpdCBob29rc0NvbnRyb2xsZXIubG9hZCgpO1xuICAgICAgY29uc3Qgc3RhcnR1cFByb21pc2VzID0gW3RoaXMuY29uZmlnLmxvYWRNYXN0ZXJLZXk/LigpXTtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgc3RhcnR1cFByb21pc2VzLnB1c2gobmV3IERlZmluZWRTY2hlbWFzKHNjaGVtYSwgdGhpcy5jb25maWcpLmV4ZWN1dGUoKSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGNhY2hlQ29udHJvbGxlci5hZGFwdGVyPy5jb25uZWN0ICYmXG4gICAgICAgIHR5cGVvZiBjYWNoZUNvbnRyb2xsZXIuYWRhcHRlci5jb25uZWN0ID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgc3RhcnR1cFByb21pc2VzLnB1c2goY2FjaGVDb250cm9sbGVyLmFkYXB0ZXIuY29ubmVjdCgpKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0dXBQcm9taXNlcy5wdXNoKGxpdmVRdWVyeUNvbnRyb2xsZXIuY29ubmVjdCgpKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHN0YXJ0dXBQcm9taXNlcyk7XG4gICAgICBpZiAoY2xvdWQpIHtcbiAgICAgICAgYWRkUGFyc2VDbG91ZCgpO1xuICAgICAgICBpZiAodHlwZW9mIGNsb3VkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGNsb3VkKFBhcnNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNsb3VkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGxldCBqc29uO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9qc29uKSB7XG4gICAgICAgICAgICBqc29uID0gcmVxdWlyZShwcm9jZXNzLmVudi5ucG1fcGFja2FnZV9qc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX3R5cGUgPT09ICdtb2R1bGUnIHx8IGpzb24/LnR5cGUgPT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICBhd2FpdCBpbXBvcnQocGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGNsb3VkKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVpcmUocGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGNsb3VkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IFwiYXJndW1lbnQgJ2Nsb3VkJyBtdXN0IGVpdGhlciBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uXCI7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgICB9XG4gICAgICBpZiAoc2VjdXJpdHkgJiYgc2VjdXJpdHkuZW5hYmxlQ2hlY2sgJiYgc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cpIHtcbiAgICAgICAgbmV3IENoZWNrUnVubmVyKHNlY3VyaXR5KS5ydW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLnN0YXRlID0gJ29rJztcbiAgICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZywgLi4ucHVzaENvbnRyb2xsZXIgfTtcbiAgICAgIENvbmZpZy5wdXQodGhpcy5jb25maWcpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMuY29uZmlnLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhcHAoKSB7XG4gICAgaWYgKCF0aGlzLl9hcHApIHtcbiAgICAgIHRoaXMuX2FwcCA9IFBhcnNlU2VydmVyLmFwcCh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcHA7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIHBhcnNlIHNlcnZlciwgY2FuY2VscyBhbnkgb25nb2luZyByZXF1ZXN0cyBhbmQgY2xvc2VzIGFsbCBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQ3VycmVudGx5LCBleHByZXNzIGRvZXNuJ3Qgc2h1dCBkb3duIGltbWVkaWF0ZWx5IGFmdGVyIHJlY2VpdmluZyBTSUdJTlQvU0lHVEVSTVxuICAgKiBpZiBpdCBoYXMgY2xpZW50IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZW4ndCB0aW1lZCBvdXQuXG4gICAqIChUaGlzIGlzIGEga25vd24gaXNzdWUgd2l0aCBub2RlIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8yNjQyKVxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2VydmVyIGlzIHN0b3BwZWRcbiAgICovXG4gIGFzeW5jIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGNvbnN0IHNlcnZlckNsb3NlUHJvbWlzZSA9IHJlc29sdmluZ1Byb21pc2UoKTtcbiAgICBjb25zdCBsaXZlUXVlcnlTZXJ2ZXJDbG9zZVByb21pc2UgPSByZXNvbHZpbmdQcm9taXNlKCk7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLnNlcnZlci5jbG9zZSgoZXJyb3IpID0+IHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2xvc2luZyBwYXJzZSBzZXJ2ZXInLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBzZXJ2ZXJDbG9zZVByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLmxpdmVRdWVyeVNlcnZlcj8uc2VydmVyPy5jbG9zZSAmJiB0aGlzLmxpdmVRdWVyeVNlcnZlci5zZXJ2ZXIgIT09IHRoaXMuc2VydmVyKSB7XG4gICAgICB0aGlzLmxpdmVRdWVyeVNlcnZlci5zZXJ2ZXIuY2xvc2UoKGVycm9yKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2xvc2luZyBsaXZlIHF1ZXJ5IHNlcnZlcicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBsaXZlUXVlcnlTZXJ2ZXJDbG9zZVByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpdmVRdWVyeVNlcnZlckNsb3NlUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlcjogZGF0YWJhc2VBZGFwdGVyIH0gPSB0aGlzLmNvbmZpZy5kYXRhYmFzZUNvbnRyb2xsZXI7XG4gICAgaWYgKGRhdGFiYXNlQWRhcHRlciAmJiB0eXBlb2YgZGF0YWJhc2VBZGFwdGVyLmhhbmRsZVNodXRkb3duID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKGRhdGFiYXNlQWRhcHRlci5oYW5kbGVTaHV0ZG93bigpKTtcbiAgICB9XG4gICAgY29uc3QgeyBhZGFwdGVyOiBmaWxlQWRhcHRlciB9ID0gdGhpcy5jb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGlmIChmaWxlQWRhcHRlciAmJiB0eXBlb2YgZmlsZUFkYXB0ZXIuaGFuZGxlU2h1dGRvd24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb21pc2VzLnB1c2goZmlsZUFkYXB0ZXIuaGFuZGxlU2h1dGRvd24oKSk7XG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlcjogY2FjaGVBZGFwdGVyIH0gPSB0aGlzLmNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgaWYgKGNhY2hlQWRhcHRlciAmJiB0eXBlb2YgY2FjaGVBZGFwdGVyLmhhbmRsZVNodXRkb3duID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKGNhY2hlQWRhcHRlci5oYW5kbGVTaHV0ZG93bigpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGl2ZVF1ZXJ5U2VydmVyKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMubGl2ZVF1ZXJ5U2VydmVyLnNodXRkb3duKCkpO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgY29ubmVjdGlvbnMuZGVzdHJveUFsbCgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtzZXJ2ZXJDbG9zZVByb21pc2UsIGxpdmVRdWVyeVNlcnZlckNsb3NlUHJvbWlzZV0pO1xuICAgIGlmICh0aGlzLmNvbmZpZy5zZXJ2ZXJDbG9zZUNvbXBsZXRlKSB7XG4gICAgICB0aGlzLmNvbmZpZy5zZXJ2ZXJDbG9zZUNvbXBsZXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQWxsb3cgZGV2ZWxvcGVycyB0byBjdXN0b21pemUgZWFjaCByZXF1ZXN0IHdpdGggaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICovXG4gIHN0YXRpYyBhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcGksIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgICBhcGkudXNlKG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQ3JlYXRlIGFuIGV4cHJlc3MgYXBwIGZvciB0aGUgcGFyc2Ugc2VydmVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGxldCB5b3Ugc3BlY2lmeSB0aGUgbWF4VXBsb2FkU2l6ZSB3aGVuIGNyZWF0aW5nIHRoZSBleHByZXNzIGFwcCAgKi9cbiAgc3RhdGljIGFwcChvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWF4VXBsb2FkU2l6ZSA9ICcyMG1iJyxcbiAgICAgIGFwcElkLFxuICAgICAgZGlyZWN0QWNjZXNzLFxuICAgICAgcGFnZXMsXG4gICAgICByYXRlTGltaXQgPSBbXSxcbiAgICB9ID0gb3B0aW9ucztcbiAgICAvLyBUaGlzIGFwcCBzZXJ2ZXMgdGhlIFBhcnNlIEFQSSBkaXJlY3RseS5cbiAgICAvLyBJdCdzIHRoZSBlcXVpdmFsZW50IG9mIGh0dHBzOi8vYXBpLnBhcnNlLmNvbS8xIGluIHRoZSBob3N0ZWQgUGFyc2UgQVBJLlxuICAgIHZhciBhcGkgPSBleHByZXNzKCk7XG4gICAgLy9hcGkudXNlKFwiL2FwcHNcIiwgZXhwcmVzcy5zdGF0aWMoX19kaXJuYW1lICsgXCIvcHVibGljXCIpKTtcbiAgICBhcGkudXNlKG1pZGRsZXdhcmVzLmFsbG93Q3Jvc3NEb21haW4oYXBwSWQpKTtcbiAgICBhcGkudXNlKG1pZGRsZXdhcmVzLmFsbG93RG91YmxlRm9yd2FyZFNsYXNoKTtcbiAgICAvLyBGaWxlIGhhbmRsaW5nIG5lZWRzIHRvIGJlIGJlZm9yZSBkZWZhdWx0IG1pZGRsZXdhcmVzIGFyZSBhcHBsaWVkXG4gICAgYXBpLnVzZShcbiAgICAgICcvJyxcbiAgICAgIG5ldyBGaWxlc1JvdXRlcigpLmV4cHJlc3NSb3V0ZXIoe1xuICAgICAgICBtYXhVcGxvYWRTaXplOiBtYXhVcGxvYWRTaXplLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXBpLnVzZSgnL2hlYWx0aCcsIGZ1bmN0aW9uIChyZXEsIHJlcykge1xuICAgICAgcmVzLnN0YXR1cyhvcHRpb25zLnN0YXRlID09PSAnb2snID8gMjAwIDogNTAzKTtcbiAgICAgIGlmIChvcHRpb25zLnN0YXRlID09PSAnc3RhcnRpbmcnKSB7XG4gICAgICAgIHJlcy5zZXQoJ1JldHJ5LUFmdGVyJywgMSk7XG4gICAgICB9XG4gICAgICByZXMuanNvbih7XG4gICAgICAgIHN0YXR1czogb3B0aW9ucy5zdGF0ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXBpLnVzZShcbiAgICAgICcvJyxcbiAgICAgIGV4cHJlc3MudXJsZW5jb2RlZCh7IGV4dGVuZGVkOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBQYWdlc1JvdXRlcihwYWdlcykuZXhwcmVzc1JvdXRlcigpXG4gICAgKTtcblxuICAgIGFwaS51c2UoZXhwcmVzcy5qc29uKHsgdHlwZTogJyovKicsIGxpbWl0OiBtYXhVcGxvYWRTaXplIH0pKTtcbiAgICBhcGkudXNlKG1pZGRsZXdhcmVzLmFsbG93TWV0aG9kT3ZlcnJpZGUpO1xuICAgIGFwaS51c2UobWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcGkuc2V0KCdxdWVyeSBwYXJzZXInLCAnZXh0ZW5kZWQnKTtcbiAgICBjb25zdCByb3V0ZXMgPSBBcnJheS5pc0FycmF5KHJhdGVMaW1pdCkgPyByYXRlTGltaXQgOiBbcmF0ZUxpbWl0XTtcbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgbWlkZGxld2FyZXMuYWRkUmF0ZUxpbWl0KHJvdXRlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgYXBpLnVzZShtaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIHRoaXMuYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBpLCBvcHRpb25zKTtcbiAgICBjb25zdCBhcHBSb3V0ZXIgPSBQYXJzZVNlcnZlci5wcm9taXNlUm91dGVyKHsgYXBwSWQsIG9wdGlvbnMgfSk7XG4gICAgYXBpLnVzZShhcHBSb3V0ZXIuZXhwcmVzc1JvdXRlcigpKTtcblxuICAgIGFwaS51c2UobWlkZGxld2FyZXMuaGFuZGxlUGFyc2VFcnJvcnMpO1xuXG4gICAgLy8gcnVuIHRoZSBmb2xsb3dpbmcgd2hlbiBub3QgdGVzdGluZ1xuICAgIGlmICghcHJvY2Vzcy5lbnYuVEVTVElORykge1xuICAgICAgLy9UaGlzIGNhdXNlcyB0ZXN0cyB0byBzcGV3IHNvbWUgdXNlbGVzcyB3YXJuaW5ncywgc28gZGlzYWJsZSBpbiB0ZXN0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRUFERFJJTlVTRScpIHtcbiAgICAgICAgICAvLyB1c2VyLWZyaWVuZGx5IG1lc3NhZ2UgZm9yIHRoaXMgY29tbW9uIGVycm9yXG4gICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFVuYWJsZSB0byBsaXN0ZW4gb24gcG9ydCAke2Vyci5wb3J0fS4gVGhlIHBvcnQgaXMgYWxyZWFkeSBpbiB1c2UuYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ0FuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvY2N1cnJlZDogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1N0YWNrIFRyYWNlOlxcbicgKyBlcnIuc3RhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuUEFSU0VfU0VSVkVSX0VOQUJMRV9FWFBFUklNRU5UQUxfRElSRUNUX0FDQ0VTUyA9PT0gJzEnIHx8IGRpcmVjdEFjY2Vzcykge1xuICAgICAgUGFyc2UuQ29yZU1hbmFnZXIuc2V0UkVTVENvbnRyb2xsZXIoUGFyc2VTZXJ2ZXJSRVNUQ29udHJvbGxlcihhcHBJZCwgYXBwUm91dGVyKSk7XG4gICAgfVxuICAgIHJldHVybiBhcGk7XG4gIH1cblxuICBzdGF0aWMgcHJvbWlzZVJvdXRlcih7IGFwcElkLCBvcHRpb25zIH0pIHtcbiAgICBjb25zdCByb3V0ZXJzID0gW1xuICAgICAgbmV3IENsYXNzZXNSb3V0ZXIoKSxcbiAgICAgIG5ldyBVc2Vyc1JvdXRlcigpLFxuICAgICAgbmV3IFNlc3Npb25zUm91dGVyKCksXG4gICAgICBuZXcgUm9sZXNSb3V0ZXIoKSxcbiAgICAgIG5ldyBBbmFseXRpY3NSb3V0ZXIoKSxcbiAgICAgIG5ldyBJbnN0YWxsYXRpb25zUm91dGVyKCksXG4gICAgICBuZXcgRnVuY3Rpb25zUm91dGVyKCksXG4gICAgICBuZXcgU2NoZW1hc1JvdXRlcigpLFxuICAgICAgbmV3IFB1c2hSb3V0ZXIoKSxcbiAgICAgIG5ldyBMb2dzUm91dGVyKCksXG4gICAgICBuZXcgRmVhdHVyZXNSb3V0ZXIoKSxcbiAgICAgIG5ldyBHbG9iYWxDb25maWdSb3V0ZXIoKSxcbiAgICAgIG5ldyBHcmFwaFFMUm91dGVyKCksXG4gICAgICBuZXcgUHVyZ2VSb3V0ZXIoKSxcbiAgICAgIG5ldyBIb29rc1JvdXRlcigpLFxuICAgICAgbmV3IENsb3VkQ29kZVJvdXRlcigpLFxuICAgICAgbmV3IEF1ZGllbmNlc1JvdXRlcigpLFxuICAgICAgbmV3IEFnZ3JlZ2F0ZVJvdXRlcigpLFxuICAgICAgbmV3IFNlY3VyaXR5Um91dGVyKCksXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zPy5lbmFibGVQcm9kdWN0UHVyY2hhc2VMZWdhY3lBcGkgIT09IGZhbHNlKSB7XG4gICAgICByb3V0ZXJzLnB1c2gobmV3IElBUFZhbGlkYXRpb25Sb3V0ZXIoKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVzID0gcm91dGVycy5yZWR1Y2UoKG1lbW8sIHJvdXRlcikgPT4ge1xuICAgICAgcmV0dXJuIG1lbW8uY29uY2F0KHJvdXRlci5yb3V0ZXMpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGFwcFJvdXRlciA9IG5ldyBQcm9taXNlUm91dGVyKHJvdXRlcywgYXBwSWQpO1xuXG4gICAgYmF0Y2gubW91bnRPbnRvKGFwcFJvdXRlcik7XG4gICAgcmV0dXJuIGFwcFJvdXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGFydHMgdGhlIHBhcnNlIHNlcnZlcidzIGV4cHJlc3MgYXBwXG4gICAqIEBwYXJhbSB7UGFyc2VTZXJ2ZXJPcHRpb25zfSBvcHRpb25zIHRvIHVzZSB0byBzdGFydCB0aGUgc2VydmVyXG4gICAqIEByZXR1cm5zIHtQYXJzZVNlcnZlcn0gdGhlIHBhcnNlIHNlcnZlciBpbnN0YW5jZVxuICAgKi9cblxuICBhc3luYyBzdGFydEFwcChvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvbiBQYXJzZVNlcnZlci5zdGFydEFwcDogJywgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBjb25zdCBhcHAgPSBleHByZXNzKCk7XG4gICAgaWYgKG9wdGlvbnMubWlkZGxld2FyZSkge1xuICAgICAgbGV0IG1pZGRsZXdhcmU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMubWlkZGxld2FyZSA9PSAnc3RyaW5nJykge1xuICAgICAgICBtaWRkbGV3YXJlID0gcmVxdWlyZShwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0aW9ucy5taWRkbGV3YXJlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaWRkbGV3YXJlID0gb3B0aW9ucy5taWRkbGV3YXJlOyAvLyB1c2UgYXMtaXMgbGV0IGV4cHJlc3MgZmFpbFxuICAgICAgfVxuICAgICAgYXBwLnVzZShtaWRkbGV3YXJlKTtcbiAgICB9XG4gICAgYXBwLnVzZShvcHRpb25zLm1vdW50UGF0aCwgdGhpcy5hcHApO1xuXG4gICAgaWYgKG9wdGlvbnMubW91bnRHcmFwaFFMID09PSB0cnVlIHx8IG9wdGlvbnMubW91bnRQbGF5Z3JvdW5kID09PSB0cnVlKSB7XG4gICAgICBsZXQgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdyYXBoUUxTY2hlbWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGdyYXBoUUxDdXN0b21UeXBlRGVmcyA9IHBhcnNlKGZzLnJlYWRGaWxlU3luYyhvcHRpb25zLmdyYXBoUUxTY2hlbWEsICd1dGY4JykpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuZ3JhcGhRTFNjaGVtYSA9PT0gJ29iamVjdCcgfHxcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMuZ3JhcGhRTFNjaGVtYSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIGdyYXBoUUxDdXN0b21UeXBlRGVmcyA9IG9wdGlvbnMuZ3JhcGhRTFNjaGVtYTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VHcmFwaFFMU2VydmVyID0gbmV3IFBhcnNlR3JhcGhRTFNlcnZlcih0aGlzLCB7XG4gICAgICAgIGdyYXBoUUxQYXRoOiBvcHRpb25zLmdyYXBoUUxQYXRoLFxuICAgICAgICBwbGF5Z3JvdW5kUGF0aDogb3B0aW9ucy5wbGF5Z3JvdW5kUGF0aCxcbiAgICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcHRpb25zLm1vdW50R3JhcGhRTCkge1xuICAgICAgICBwYXJzZUdyYXBoUUxTZXJ2ZXIuYXBwbHlHcmFwaFFMKGFwcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLm1vdW50UGxheWdyb3VuZCkge1xuICAgICAgICBwYXJzZUdyYXBoUUxTZXJ2ZXIuYXBwbHlQbGF5Z3JvdW5kKGFwcCk7XG4gICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkud2FybihcbiAgICAgICAgICAnR3JhcGhRTCBQbGF5Z3JvdW5kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBJdCBleHBvc2VzIHRoZSBtYXN0ZXIga2V5IGluIHRoZSBicm93c2VyLiBVc2UgUGFyc2UgRGFzaGJvYXJkIGFzIEdyYXBoUUwgSURFIG9yIGNvbmZpZ3VyZSBhIHRoaXJkLXBhcnR5IEdyYXBoUUwgY2xpZW50IHdpdGggY3VzdG9tIHJlcXVlc3QgaGVhZGVycy4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgYXBwLmxpc3RlbihvcHRpb25zLnBvcnQsIG9wdGlvbnMuaG9zdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvbHZlKHRoaXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gICAgY29ubmVjdGlvbnMudHJhY2soc2VydmVyKTtcblxuICAgIGlmIChvcHRpb25zLnN0YXJ0TGl2ZVF1ZXJ5U2VydmVyIHx8IG9wdGlvbnMubGl2ZVF1ZXJ5U2VydmVyT3B0aW9ucykge1xuICAgICAgdGhpcy5saXZlUXVlcnlTZXJ2ZXIgPSBhd2FpdCBQYXJzZVNlcnZlci5jcmVhdGVMaXZlUXVlcnlTZXJ2ZXIoXG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgb3B0aW9ucy5saXZlUXVlcnlTZXJ2ZXJPcHRpb25zLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMubGl2ZVF1ZXJ5U2VydmVyLnNlcnZlciAhPT0gdGhpcy5zZXJ2ZXIpIHtcbiAgICAgICAgY29ubmVjdGlvbnMudHJhY2sodGhpcy5saXZlUXVlcnlTZXJ2ZXIuc2VydmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJ1c3RQcm94eSkge1xuICAgICAgYXBwLnNldCgndHJ1c3QgcHJveHknLCBvcHRpb25zLnRydXN0UHJveHkpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghcHJvY2Vzcy5lbnYuVEVTVElORykge1xuICAgICAgY29uZmlndXJlTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgaWYgKG9wdGlvbnMudmVyaWZ5U2VydmVyVXJsICE9PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCBQYXJzZVNlcnZlci52ZXJpZnlTZXJ2ZXJVcmwoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5leHByZXNzQXBwID0gYXBwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgUGFyc2VTZXJ2ZXIgYW5kIHN0YXJ0cyBpdC5cbiAgICogQHBhcmFtIHtQYXJzZVNlcnZlck9wdGlvbnN9IG9wdGlvbnMgdXNlZCB0byBzdGFydCB0aGUgc2VydmVyXG4gICAqIEByZXR1cm5zIHtQYXJzZVNlcnZlcn0gdGhlIHBhcnNlIHNlcnZlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHN0YXJ0QXBwKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICAgIGNvbnN0IHBhcnNlU2VydmVyID0gbmV3IFBhcnNlU2VydmVyKG9wdGlvbnMpO1xuICAgIHJldHVybiBwYXJzZVNlcnZlci5zdGFydEFwcChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIGxpdmVRdWVyeSBzZXJ2ZXJcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge1NlcnZlcn0gaHR0cFNlcnZlciBhbiBvcHRpb25hbCBodHRwIHNlcnZlciB0byBwYXNzXG4gICAqIEBwYXJhbSB7TGl2ZVF1ZXJ5U2VydmVyT3B0aW9uc30gY29uZmlnIG9wdGlvbnMgZm9yIHRoZSBsaXZlUXVlcnlTZXJ2ZXJcbiAgICogQHBhcmFtIHtQYXJzZVNlcnZlck9wdGlvbnN9IG9wdGlvbnMgb3B0aW9ucyBmb3IgdGhlIFBhcnNlU2VydmVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlTGl2ZVF1ZXJ5U2VydmVyPn0gdGhlIGxpdmUgcXVlcnkgc2VydmVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlTGl2ZVF1ZXJ5U2VydmVyKFxuICAgIGh0dHBTZXJ2ZXIsXG4gICAgY29uZmlnOiBMaXZlUXVlcnlTZXJ2ZXJPcHRpb25zLFxuICAgIG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9uc1xuICApOiBQcm9taXNlPFBhcnNlTGl2ZVF1ZXJ5U2VydmVyPiB7XG4gICAgaWYgKCFodHRwU2VydmVyIHx8IChjb25maWcgJiYgY29uZmlnLnBvcnQpKSB7XG4gICAgICB2YXIgYXBwID0gZXhwcmVzcygpO1xuICAgICAgaHR0cFNlcnZlciA9IHJlcXVpcmUoJ2h0dHAnKS5jcmVhdGVTZXJ2ZXIoYXBwKTtcbiAgICAgIGh0dHBTZXJ2ZXIubGlzdGVuKGNvbmZpZy5wb3J0KTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IFBhcnNlTGl2ZVF1ZXJ5U2VydmVyKGh0dHBTZXJ2ZXIsIGNvbmZpZywgb3B0aW9ucyk7XG4gICAgYXdhaXQgc2VydmVyLmNvbm5lY3QoKTtcbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHZlcmlmeVNlcnZlclVybCgpIHtcbiAgICAvLyBwZXJmb3JtIGEgaGVhbHRoIGNoZWNrIG9uIHRoZSBzZXJ2ZXJVUkwgdmFsdWVcbiAgICBpZiAoUGFyc2Uuc2VydmVyVVJMKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkSHR0cFVybCA9IHN0cmluZyA9PiB7XG4gICAgICAgIGxldCB1cmw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdXJsID0gbmV3IFVSTChzdHJpbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVybCA9IGAke1BhcnNlLnNlcnZlclVSTC5yZXBsYWNlKC9cXC8kLywgJycpfS9oZWFsdGhgO1xuICAgICAgaWYgKCFpc1ZhbGlkSHR0cFVybCh1cmwpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgXFxuV0FSTklORywgVW5hYmxlIHRvIGNvbm5lY3QgdG8gJyR7UGFyc2Uuc2VydmVyVVJMfScgYXMgdGhlIFVSTCBpcyBpbnZhbGlkLmAgK1xuICAgICAgICAgICAgYCBDbG91ZCBjb2RlIGFuZCBwdXNoIG5vdGlmaWNhdGlvbnMgbWF5IGJlIHVuYXZhaWxhYmxlIVxcbmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHsgdXJsIH0pLmNhdGNoKHJlc3BvbnNlID0+IHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IGpzb24gPSByZXNwb25zZS5kYXRhIHx8IG51bGw7XG4gICAgICBjb25zdCByZXRyeSA9IHJlc3BvbnNlLmhlYWRlcnM/LlsncmV0cnktYWZ0ZXInXTtcbiAgICAgIGlmIChyZXRyeSkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnkgKiAxMDAwKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNlcnZlclVybCgpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwIHx8IGpzb24/LnN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgXFxuV0FSTklORywgVW5hYmxlIHRvIGNvbm5lY3QgdG8gJyR7UGFyc2Uuc2VydmVyVVJMfScuYCArXG4gICAgICAgICAgICBgIENsb3VkIGNvZGUgYW5kIHB1c2ggbm90aWZpY2F0aW9ucyBtYXkgYmUgdW5hdmFpbGFibGUhXFxuYFxuICAgICAgICApO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFBhcnNlQ2xvdWQoKSB7XG4gIGNvbnN0IFBhcnNlQ2xvdWQgPSByZXF1aXJlKCcuL2Nsb3VkLWNvZGUvUGFyc2UuQ2xvdWQnKTtcbiAgY29uc3QgUGFyc2VTZXJ2ZXIgPSByZXF1aXJlKCcuL2Nsb3VkLWNvZGUvUGFyc2UuU2VydmVyJyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJzZSwgJ1NlcnZlcicsIHtcbiAgICBnZXQoKSB7XG4gICAgICBjb25zdCBjb25mID0gQ29uZmlnLmdldChQYXJzZS5hcHBsaWNhdGlvbklkKTtcbiAgICAgIHJldHVybiB7IC4uLmNvbmYsIC4uLlBhcnNlU2VydmVyIH07XG4gICAgfSxcbiAgICBzZXQobmV3VmFsKSB7XG4gICAgICBuZXdWYWwuYXBwSWQgPSBQYXJzZS5hcHBsaWNhdGlvbklkO1xuICAgICAgQ29uZmlnLnB1dChuZXdWYWwpO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LmFzc2lnbihQYXJzZS5DbG91ZCwgUGFyc2VDbG91ZCk7XG4gIGdsb2JhbC5QYXJzZSA9IFBhcnNlO1xufVxuXG5mdW5jdGlvbiBpbmplY3REZWZhdWx0cyhvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpIHtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBrZXkpKSB7XG4gICAgICBvcHRpb25zW2tleV0gPSBkZWZhdWx0c1trZXldO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSW5qZWN0IGRlZmF1bHRzIGZvciBkYXRhYmFzZSBvcHRpb25zOyBvbmx5IHdoZW4gbm8gZXhwbGljaXQgZGF0YWJhc2UgYWRhcHRlciBpcyBzZXQsXG4gIC8vIGJlY2F1c2UgYW4gZXhwbGljaXQgYWRhcHRlciBtYW5hZ2VzIGl0cyBvd24gb3B0aW9ucyBhbmQgcGFzc2luZyBkYXRhYmFzZU9wdGlvbnMgYWxvbmdzaWRlXG4gIC8vIGl0IHdvdWxkIGNhdXNlIGEgY29uZmxpY3QgZXJyb3IgaW4gZ2V0RGF0YWJhc2VDb250cm9sbGVyLlxuICBpZiAoIW9wdGlvbnMuZGF0YWJhc2VBZGFwdGVyKSB7XG4gICAgaWYgKG9wdGlvbnMuZGF0YWJhc2VPcHRpb25zID09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZGF0YWJhc2VPcHRpb25zID0ge307XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYXRhYmFzZU9wdGlvbnMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG9wdGlvbnMuZGF0YWJhc2VPcHRpb25zKSkge1xuICAgICAgT2JqZWN0LmtleXMoRGF0YWJhc2VPcHRpb25EZWZhdWx0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmRhdGFiYXNlT3B0aW9ucywga2V5KSkge1xuICAgICAgICAgIG9wdGlvbnMuZGF0YWJhc2VPcHRpb25zW2tleV0gPSBEYXRhYmFzZU9wdGlvbkRlZmF1bHRzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdzZXJ2ZXJVUkwnKSkge1xuICAgIG9wdGlvbnMuc2VydmVyVVJMID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRpb25zLnBvcnR9JHtvcHRpb25zLm1vdW50UGF0aH1gO1xuICB9XG5cbiAgLy8gUmVzZXJ2ZWQgQ2hhcmFjdGVyc1xuICBpZiAob3B0aW9ucy5hcHBJZCkge1xuICAgIGNvbnN0IHJlZ2V4ID0gL1shIyQlJygpKismLzo7PT9AW1xcXXt9Xix8PD5dL2c7XG4gICAgaWYgKG9wdGlvbnMuYXBwSWQubWF0Y2gocmVnZXgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgXFxuV0FSTklORywgYXBwSWQgdGhhdCBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMgY2FuIGNhdXNlIGlzc3VlcyB3aGlsZSB1c2luZyB3aXRoIHVybHMuXFxuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBpZiAob3B0aW9ucy51c2VyU2Vuc2l0aXZlRmllbGRzKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICAgICFwcm9jZXNzLmVudi5URVNUSU5HICYmXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBcXG5ERVBSRUNBVEVEOiB1c2VyU2Vuc2l0aXZlRmllbGRzIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHByb3RlY3RlZEZpZWxkcyBhbGxvd2luZyB0aGUgYWJpbGl0eSB0byBwcm90ZWN0IGZpZWxkcyBpbiBhbGwgY2xhc3NlcyB3aXRoIENMUC4gXFxuYFxuICAgICAgKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cblxuICAgIGNvbnN0IHVzZXJTZW5zaXRpdmVGaWVsZHMgPSBBcnJheS5mcm9tKFxuICAgICAgbmV3IFNldChbLi4uKGRlZmF1bHRzLnVzZXJTZW5zaXRpdmVGaWVsZHMgfHwgW10pLCAuLi4ob3B0aW9ucy51c2VyU2Vuc2l0aXZlRmllbGRzIHx8IFtdKV0pXG4gICAgKTtcblxuICAgIC8vIElmIHRoZSBvcHRpb25zLnByb3RlY3RlZEZpZWxkcyBpcyB1bnNldCxcbiAgICAvLyBpdCdsbCBiZSBhc3NpZ25lZCB0aGUgZGVmYXVsdCBhYm92ZS5cbiAgICAvLyBIZXJlLCBwcm90ZWN0IGFnYWluc3QgdGhlIGNhc2Ugd2hlcmUgcHJvdGVjdGVkRmllbGRzXG4gICAgLy8gaXMgc2V0LCBidXQgZG9lc24ndCBoYXZlIF9Vc2VyLlxuICAgIGlmICghKCdfVXNlcicgaW4gb3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHMpKSB7XG4gICAgICBvcHRpb25zLnByb3RlY3RlZEZpZWxkcyA9IE9iamVjdC5hc3NpZ24oeyBfVXNlcjogW10gfSwgb3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHMpO1xuICAgIH1cblxuICAgIG9wdGlvbnMucHJvdGVjdGVkRmllbGRzWydfVXNlciddWycqJ10gPSBBcnJheS5mcm9tKFxuICAgICAgbmV3IFNldChbLi4uKG9wdGlvbnMucHJvdGVjdGVkRmllbGRzWydfVXNlciddWycqJ10gfHwgW10pLCAuLi51c2VyU2Vuc2l0aXZlRmllbGRzXSlcbiAgICApO1xuICB9XG5cbiAgLy8gTWVyZ2UgcHJvdGVjdGVkRmllbGRzIG9wdGlvbnMgd2l0aCBkZWZhdWx0cy5cbiAgT2JqZWN0LmtleXMoZGVmYXVsdHMucHJvdGVjdGVkRmllbGRzKS5mb3JFYWNoKGMgPT4ge1xuICAgIGNvbnN0IGN1ciA9IG9wdGlvbnMucHJvdGVjdGVkRmllbGRzW2NdO1xuICAgIGlmICghY3VyKSB7XG4gICAgICBvcHRpb25zLnByb3RlY3RlZEZpZWxkc1tjXSA9IGRlZmF1bHRzLnByb3RlY3RlZEZpZWxkc1tjXTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMucHJvdGVjdGVkRmllbGRzW2NdKS5mb3JFYWNoKHIgPT4ge1xuICAgICAgICBjb25zdCB1bnEgPSBuZXcgU2V0KFtcbiAgICAgICAgICAuLi4ob3B0aW9ucy5wcm90ZWN0ZWRGaWVsZHNbY11bcl0gfHwgW10pLFxuICAgICAgICAgIC4uLmRlZmF1bHRzLnByb3RlY3RlZEZpZWxkc1tjXVtyXSxcbiAgICAgICAgXSk7XG4gICAgICAgIG9wdGlvbnMucHJvdGVjdGVkRmllbGRzW2NdW3JdID0gQXJyYXkuZnJvbSh1bnEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gVGhvc2UgY2FuJ3QgYmUgdGVzdGVkIGFzIGl0IHJlcXVpcmVzIGEgc3VicHJvY2Vzc1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZUxpc3RlbmVycyhwYXJzZVNlcnZlcikge1xuICBjb25zdCBoYW5kbGVTaHV0ZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnVGVybWluYXRpb24gc2lnbmFsIHJlY2VpdmVkLiBTaHV0dGluZyBkb3duLicpO1xuICAgIHBhcnNlU2VydmVyLmhhbmRsZVNodXRkb3duKCk7XG4gIH07XG4gIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBoYW5kbGVTaHV0ZG93bik7XG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGhhbmRsZVNodXRkb3duKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2VTZXJ2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFNLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdBQUFGLHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBUSxnQkFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsY0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksZ0JBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLG1CQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxjQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFDQSxJQUFBZ0Isb0JBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIsb0JBQUEsR0FBQWpCLE9BQUE7QUFDQSxJQUFBa0IsV0FBQSxHQUFBbEIsT0FBQTtBQUNBLElB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
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.PushWorker = void 0;
7
- var _deepcopy = _interopRequireDefault(require("deepcopy"));
8
7
  var _AdaptableController = _interopRequireDefault(require("../Controllers/AdaptableController"));
9
8
  var _Auth = require("../Auth");
10
9
  var _Config = _interopRequireDefault(require("../Config"));
@@ -17,7 +16,6 @@ var _PushQueue = require("./PushQueue");
17
16
  var _logger = _interopRequireDefault(require("../logger"));
18
17
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
- // -disable-next
21
19
  function groupByBadge(installations) {
22
20
  return installations.reduce((map, installation) => {
23
21
  const badge = installation.badge + '';
@@ -90,7 +88,7 @@ class PushWorker {
90
88
 
91
89
  // Map the on the badges count and return the send result
92
90
  const promises = Object.keys(badgeInstallationsMap).map(badge => {
93
- const payload = (0, _deepcopy.default)(body);
91
+ const payload = structuredClone(body);
94
92
  payload.data.badge = parseInt(badge);
95
93
  const installations = badgeInstallationsMap[badge];
96
94
  return this.sendToAdapter(payload, installations, pushStatus, config, UTCOffset);
@@ -100,4 +98,4 @@ class PushWorker {
100
98
  }
101
99
  exports.PushWorker = PushWorker;
102
100
  var _default = exports.default = PushWorker;
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVlcGNvcHkiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9BZGFwdGFibGVDb250cm9sbGVyIiwiX0F1dGgiLCJfQ29uZmlnIiwiX1B1c2hBZGFwdGVyIiwiX3Jlc3QiLCJfU3RhdHVzSGFuZGxlciIsInV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGFyc2VNZXNzYWdlUXVldWUiLCJfUHVzaFF1ZXVlIiwiX2xvZ2dlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdyb3VwQnlCYWRnZSIsImluc3RhbGxhdGlvbnMiLCJyZWR1Y2UiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJiYWRnZSIsInB1c2giLCJQdXNoV29ya2VyIiwiY29uc3RydWN0b3IiLCJwdXNoQWRhcHRlciIsInN1YnNjcmliZXJDb25maWciLCJBZGFwdGFibGVDb250cm9sbGVyIiwidmFsaWRhdGVBZGFwdGVyIiwiUHVzaEFkYXB0ZXIiLCJhZGFwdGVyIiwiY2hhbm5lbCIsIlB1c2hRdWV1ZSIsImRlZmF1bHRQdXNoQ2hhbm5lbCIsInN1YnNjcmliZXIiLCJQYXJzZU1lc3NhZ2VRdWV1ZSIsImNyZWF0ZVN1YnNjcmliZXIiLCJzdWJzY3JpYmUiLCJvbiIsIm1lc3NhZ2VTdHIiLCJ3b3JrSXRlbSIsIkpTT04iLCJwYXJzZSIsInJ1biIsImJvZHkiLCJxdWVyeSIsInB1c2hTdGF0dXMiLCJhcHBsaWNhdGlvbklkIiwiVVRDT2Zmc2V0IiwiY29uZmlnIiwiQ29uZmlnIiwiYXV0aCIsIm1hc3RlciIsIndoZXJlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInB1c2hTdGF0dXNIYW5kbGVyIiwib2JqZWN0SWQiLCJyZXN0IiwiZmluZCIsInRoZW4iLCJyZXN1bHRzIiwibGVuZ3RoIiwic2VuZFRvQWRhcHRlciIsImxvY2FsZXMiLCJnZXRMb2NhbGVzRnJvbVB1c2giLCJib2RpZXNQZXJMb2NhbGVzIiwiZ3JvdXBwZWRJbnN0YWxsYXRpb25zIiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJwcm9taXNlcyIsImtleXMiLCJsb2NhbGUiLCJQcm9taXNlIiwiYWxsIiwiaXNQdXNoSW5jcmVtZW50aW5nIiwibG9nZ2VyIiwidmVyYm9zZSIsInNlbmQiLCJ0cmFja1NlbnQiLCJiYWRnZUluc3RhbGxhdGlvbnNNYXAiLCJwYXlsb2FkIiwiZGVlcGNvcHkiLCJkYXRhIiwicGFyc2VJbnQiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC9QdXNoV29ya2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCBkZWVwY29weSBmcm9tICdkZWVwY29weSc7XG5pbXBvcnQgQWRhcHRhYmxlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IG1hc3RlciB9IGZyb20gJy4uL0F1dGgnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IHsgUHVzaEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9QdXNoL1B1c2hBZGFwdGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IHsgcHVzaFN0YXR1c0hhbmRsZXIgfSBmcm9tICcuLi9TdGF0dXNIYW5kbGVyJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUGFyc2VNZXNzYWdlUXVldWUgfSBmcm9tICcuLi9QYXJzZU1lc3NhZ2VRdWV1ZSc7XG5pbXBvcnQgeyBQdXNoUXVldWUgfSBmcm9tICcuL1B1c2hRdWV1ZSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZSgobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICBjb25zdCBiYWRnZSA9IGluc3RhbGxhdGlvbi5iYWRnZSArICcnO1xuICAgIG1hcFtiYWRnZV0gPSBtYXBbYmFkZ2VdIHx8IFtdO1xuICAgIG1hcFtiYWRnZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFB1c2hXb3JrZXIge1xuICBzdWJzY3JpYmVyOiA/YW55O1xuICBhZGFwdGVyOiBhbnk7XG4gIGNoYW5uZWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdXNoQWRhcHRlcjogUHVzaEFkYXB0ZXIsIHN1YnNjcmliZXJDb25maWc6IGFueSA9IHt9KSB7XG4gICAgQWRhcHRhYmxlQ29udHJvbGxlci52YWxpZGF0ZUFkYXB0ZXIocHVzaEFkYXB0ZXIsIHRoaXMsIFB1c2hBZGFwdGVyKTtcbiAgICB0aGlzLmFkYXB0ZXIgPSBwdXNoQWRhcHRlcjtcblxuICAgIHRoaXMuY2hhbm5lbCA9IHN1YnNjcmliZXJDb25maWcuY2hhbm5lbCB8fCBQdXNoUXVldWUuZGVmYXVsdFB1c2hDaGFubmVsKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVyID0gUGFyc2VNZXNzYWdlUXVldWUuY3JlYXRlU3Vic2NyaWJlcihzdWJzY3JpYmVyQ29uZmlnKTtcbiAgICBpZiAodGhpcy5zdWJzY3JpYmVyKSB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVyO1xuICAgICAgc3Vic2NyaWJlci5zdWJzY3JpYmUodGhpcy5jaGFubmVsKTtcbiAgICAgIHN1YnNjcmliZXIub24oJ21lc3NhZ2UnLCAoY2hhbm5lbCwgbWVzc2FnZVN0cikgPT4ge1xuICAgICAgICBjb25zdCB3b3JrSXRlbSA9IEpTT04ucGFyc2UobWVzc2FnZVN0cik7XG4gICAgICAgIHRoaXMucnVuKHdvcmtJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1bih7IGJvZHksIHF1ZXJ5LCBwdXNoU3RhdHVzLCBhcHBsaWNhdGlvbklkLCBVVENPZmZzZXQgfTogYW55KTogUHJvbWlzZTwqPiB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBjb25zdCBhdXRoID0gbWFzdGVyKGNvbmZpZyk7XG4gICAgY29uc3Qgd2hlcmUgPSB1dGlscy5hcHBseURldmljZVRva2VuRXhpc3RzKHF1ZXJ5LndoZXJlKTtcbiAgICBkZWxldGUgcXVlcnkud2hlcmU7XG4gICAgcHVzaFN0YXR1cyA9IHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZywgcHVzaFN0YXR1cy5vYmplY3RJZCk7XG4gICAgcmV0dXJuIHJlc3QuZmluZChjb25maWcsIGF1dGgsICdfSW5zdGFsbGF0aW9uJywgd2hlcmUsIHF1ZXJ5KS50aGVuKCh7IHJlc3VsdHMgfSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCByZXN1bHRzLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgfSk7XG4gIH1cblxuICBzZW5kVG9BZGFwdGVyKFxuICAgIGJvZHk6IGFueSxcbiAgICBpbnN0YWxsYXRpb25zOiBhbnlbXSxcbiAgICBwdXNoU3RhdHVzOiBhbnksXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgVVRDT2Zmc2V0OiA/YW55XG4gICk6IFByb21pc2U8Kj4ge1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgbG9jYWxlcyBpbiB0aGUgcHVzaCBib2R5XG4gICAgY29uc3QgbG9jYWxlcyA9IHV0aWxzLmdldExvY2FsZXNGcm9tUHVzaChib2R5KTtcbiAgICBpZiAobG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBHZXQgYWxsIHRyYW5mb3JtZWQgYm9kaWVzIGZvciBlYWNoIGxvY2FsZVxuICAgICAgY29uc3QgYm9kaWVzUGVyTG9jYWxlcyA9IHV0aWxzLmJvZGllc1BlckxvY2FsZXMoYm9keSwgbG9jYWxlcyk7XG5cbiAgICAgIC8vIEdyb3VwIGluc3RhbGxhdGlvbnMgb24gdGhlIHNwZWNpZmllZCBsb2NhbGVzIChlbiwgZnIsIGRlZmF1bHQgZXRjLi4uKVxuICAgICAgY29uc3QgZ3JvdXBwZWRJbnN0YWxsYXRpb25zID0gdXRpbHMuZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyk7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5rZXlzKGdyb3VwcGVkSW5zdGFsbGF0aW9ucykubWFwKGxvY2FsZSA9PiB7XG4gICAgICAgIGNvbnN0IGluc3RhbGxhdGlvbnMgPSBncm91cHBlZEluc3RhbGxhdGlvbnNbbG9jYWxlXTtcbiAgICAgICAgY29uc3QgYm9keSA9IGJvZGllc1BlckxvY2FsZXNbbG9jYWxlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvQWRhcHRlcihib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLCBjb25maWcsIFVUQ09mZnNldCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkpIHtcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBTZW5kaW5nIHB1c2ggdG8gJHtpbnN0YWxsYXRpb25zLmxlbmd0aH1gKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuc2VuZChib2R5LCBpbnN0YWxsYXRpb25zLCBwdXNoU3RhdHVzLm9iamVjdElkKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICByZXR1cm4gcHVzaFN0YXR1cy50cmFja1NlbnQocmVzdWx0cywgVVRDT2Zmc2V0KS50aGVuKCgpID0+IHJlc3VsdHMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGVjdCB0aGUgYmFkZ2VzIHRvIHJlZHVjZSB0aGUgIyBvZiBjYWxsc1xuICAgIGNvbnN0IGJhZGdlSW5zdGFsbGF0aW9uc01hcCA9IGdyb3VwQnlCYWRnZShpbnN0YWxsYXRpb25zKTtcblxuICAgIC8vIE1hcCB0aGUgb24gdGhlIGJhZGdlcyBjb3VudCBhbmQgcmV0dXJuIHRoZSBzZW5kIHJlc3VsdFxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoYmFkZ2VJbnN0YWxsYXRpb25zTWFwKS5tYXAoYmFkZ2UgPT4ge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGRlZXBjb3B5KGJvZHkpO1xuICAgICAgcGF5bG9hZC5kYXRhLmJhZGdlID0gcGFyc2VJbnQoYmFkZ2UpO1xuICAgICAgY29uc3QgaW5zdGFsbGF0aW9ucyA9IGJhZGdlSW5zdGFsbGF0aW9uc01hcFtiYWRnZV07XG4gICAgICByZXR1cm4gdGhpcy5zZW5kVG9BZGFwdGVyKHBheWxvYWQsIGluc3RhbGxhdGlvbnMsIHB1c2hTdGF0dXMsIGNvbmZpZywgVVRDT2Zmc2V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hXb3JrZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLElBQUFBLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLG9CQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFDLHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBUyxrQkFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsVUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsT0FBQSxHQUFBWixzQkFBQSxDQUFBQyxPQUFBO0FBQStCLFNBQUFRLHdCQUFBSSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTix1QkFBQSxZQUFBQSxDQUFBSSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGdCQUFBUCxDQUFBLElBQUFELENBQUEsZ0JBQUFDLENBQUEsT0FBQWEsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLElBQUFELENBQUEsR0FBQVUsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFNLENBQUEsSUFBQUMsQ0FBQSxDQUFBUCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxXQUFBTyxDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFkLHVCQUFBYSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBWC9CO0FBYUEsU0FBU21CLFlBQVlBLENBQUNDLGFBQWEsRUFBRTtFQUNuQyxPQUFPQSxhQUFhLENBQUNDLE1BQU0sQ0FBQyxDQUFDQyxHQUFHLEVBQUVDLFlBQVksS0FBSztJQUNqRCxNQUFNQyxLQUFLLEdBQUdELFlBQVksQ0FBQ0MsS0FBSyxHQUFHLEVBQUU7SUFDckNGLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDLEdBQUdGLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDLElBQUksRUFBRTtJQUM3QkYsR0FBRyxDQUFDRSxLQUFLLENBQUMsQ0FBQ0MsSUFBSSxDQUFDRixZQUFZLENBQUM7SUFDN0IsT0FBT0QsR0FBRztFQUNaLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSO0FBRU8sTUFBTUksVUFBVSxDQUFDO0VBS3RCQyxXQUFXQSxDQUFDQyxXQUF3QixFQUFFQyxnQkFBcUIsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNoRUMsNEJBQW1CLENBQUNDLGVBQWUsQ0FBQ0gsV0FBVyxFQUFFLElBQUksRUFBRUksd0JBQVcsQ0FBQztJQUNuRSxJQUFJLENBQUNDLE9BQU8sR0FBR0wsV0FBVztJQUUxQixJQUFJLENBQUNNLE9BQU8sR0FBR0wsZ0JBQWdCLENBQUNLLE9BQU8sSUFBSUMsb0JBQVMsQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQztJQUN6RSxJQUFJLENBQUNDLFVBQVUsR0FBR0Msb0NBQWlCLENBQUNDLGdCQUFnQixDQUFDVixnQkFBZ0IsQ0FBQztJQUN0RSxJQUFJLElBQUksQ0FBQ1EsVUFBVSxFQUFFO01BQ25CLE1BQU1BLFVBQVUsR0FBRyxJQUFJLENBQUNBLFVBQVU7TUFDbENBLFVBQVUsQ0FBQ0csU0FBUyxDQUFDLElBQUksQ0FBQ04sT0FBTyxDQUFDO01BQ2xDRyxVQUFVLENBQUNJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQ1AsT0FBTyxFQUFFUSxVQUFVLEtBQUs7UUFDaEQsTUFBTUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsVUFBVSxDQUFDO1FBQ3ZDLElBQUksQ0FBQ0ksR0FBRyxDQUFDSCxRQUFRLENBQUM7TUFDcEIsQ0FBQyxDQUFDO0lBQ0o7RUFDRjtFQUVBRyxHQUFHQSxDQUFDO0lBQUVDLElBQUk7SUFBRUMsS0FBSztJQUFFQyxVQUFVO0lBQUVDLGFBQWE7SUFBRUM7RUFBZSxDQUFDLEVBQWM7SUFDMUUsTUFBTUMsTUFBTSxHQUFHQyxlQUFNLENBQUN6QyxHQUFHLENBQUNzQyxhQUFhLENBQUM7SUFDeEMsTUFBTUksSUFBSSxHQUFHLElBQUFDLFlBQU0sRUFBQ0gsTUFBTSxDQUFDO0lBQzNCLE1BQU1JLEtBQUssR0FBRzdELEtBQUssQ0FBQzhELHNCQUFzQixDQUFDVCxLQUFLLENBQUNRLEtBQUssQ0FBQztJQUN2RCxPQUFPUixLQUFLLENBQUNRLEtBQUs7SUFDbEJQLFVBQVUsR0FBRyxJQUFBUyxnQ0FBaUIsRUFBQ04sTUFBTSxFQUFFSCxVQUFVLENBQUNVLFFBQVEsQ0FBQztJQUMzRCxPQUFPQyxhQUFJLENBQUNDLElBQUksQ0FBQ1QsTUFBTSxFQUFFRSxJQUFJLEVBQUUsZUFBZSxFQUFFRSxLQUFLLEVBQUVSLEtBQUssQ0FBQyxDQUFDYyxJQUFJLENBQUMsQ0FBQztNQUFFQztJQUFRLENBQUMsS0FBSztNQUNsRixJQUFJQSxPQUFPLENBQUNDLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDdkI7TUFDRjtNQUNBLE9BQU8sSUFBSSxDQUFDQyxhQUFhLENBQUNsQixJQUFJLEVBQUVnQixPQUFPLEVBQUVkLFVBQVUsRUFBRUcsTUFBTSxFQUFFRCxTQUFTLENBQUM7SUFDekUsQ0FBQyxDQUFDO0VBQ0o7RUFFQWMsYUFBYUEsQ0FDWGxCLElBQVMsRUFDVDNCLGFBQW9CLEVBQ3BCNkIsVUFBZSxFQUNmRyxNQUFjLEVBQ2RELFNBQWUsRUFDSDtJQUNaO0lBQ0EsTUFBTWUsT0FBTyxHQUFHdkUsS0FBSyxDQUFDd0Usa0JBQWtCLENBQUNwQixJQUFJLENBQUM7SUFDOUMsSUFBSW1CLE9BQU8sQ0FBQ0YsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0QjtNQUNBLE1BQU1JLGdCQUFnQixHQUFHekUsS0FBSyxDQUFDeUUsZ0JBQWdCLENBQUNyQixJQUFJLEVBQUVtQixPQUFPLENBQUM7O01BRTlEO01BQ0EsTUFBTUcscUJBQXFCLEdBQUcxRSxLQUFLLENBQUMyRSx1QkFBdUIsQ0FBQ2xELGFBQWEsRUFBRThDLE9BQU8sQ0FBQztNQUNuRixNQUFNSyxRQUFRLEdBQUd2RCxNQUFNLENBQUN3RCxJQUFJLENBQUNILHFCQUFxQixDQUFDLENBQUMvQyxHQUFHLENBQUNtRCxNQUFNLElBQUk7UUFDaEUsTUFBTXJELGFBQWEsR0FBR2lELHFCQUFxQixDQUFDSSxNQUFNLENBQUM7UUFDbkQsTUFBTTFCLElBQUksR0FBR3FCLGdCQUFnQixDQUFDSyxNQUFNLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUNSLGFBQWEsQ0FBQ2xCLElBQUksRUFBRTNCLGFBQWEsRUFBRTZCLFVBQVUsRUFBRUcsTUFBTSxFQUFFRCxTQUFTLENBQUM7TUFDL0UsQ0FBQyxDQUFDO01BQ0YsT0FBT3VCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDSixRQUFRLENBQUM7SUFDOUI7SUFFQSxJQUFJLENBQUM1RSxLQUFLLENBQUNpRixrQkFBa0IsQ0FBQzdCLElBQUksQ0FBQyxFQUFFO01BQ25DOEIsZUFBTSxDQUFDQyxPQUFPLENBQUMsbUJBQW1CMUQsYUFBYSxDQUFDNEMsTUFBTSxFQUFFLENBQUM7TUFDekQsT0FBTyxJQUFJLENBQUMvQixPQUFPLENBQUM4QyxJQUFJLENBQUNoQyxJQUFJLEVBQUUzQixhQUFhLEVBQUU2QixVQUFVLENBQUNVLFFBQVEsQ0FBQyxDQUFDRyxJQUFJLENBQUNDLE9BQU8sSUFBSTtRQUNqRixPQUFPZCxVQUFVLENBQUMrQixTQUFTLENBQUNqQixPQUFPLEVBQUVaLFNBQVMsQ0FBQyxDQUFDVyxJQUFJLENBQUMsTUFBTUMsT0FBTyxDQUFDO01BQ3JFLENBQUMsQ0FBQztJQUNKOztJQUVBO0lBQ0EsTUFBTWtCLHFCQUFxQixHQUFHOUQsWUFBWSxDQUFDQyxhQUFhLENBQUM7O0lBRXpEO0lBQ0EsTUFBTW1ELFFBQVEsR0FBR3ZELE1BQU0sQ0FBQ3dELElBQUksQ0FBQ1MscUJBQXFCLENBQUMsQ0FBQzNELEdBQUcsQ0FBQ0UsS0FBSyxJQUFJO01BQy9ELE1BQU0wRCxPQUFPLEdBQUcsSUFBQUMsaUJBQVEsRUFBQ3BDLElBQUksQ0FBQztNQUM5Qm1DLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDNUQsS0FBSyxHQUFHNkQsUUFBUSxDQUFDN0QsS0FBSyxDQUFDO01BQ3BDLE1BQU1KLGFBQWEsR0FBRzZELHFCQUFxQixDQUFDekQsS0FBSyxDQUFDO01BQ2xELE9BQU8sSUFBSSxDQUFDeUMsYUFBYSxDQUFDaUIsT0FBTyxFQUFFOUQsYUFBYSxFQUFFNkIsVUFBVSxFQUFFRyxNQUFNLEVBQUVELFNBQVMsQ0FBQztJQUNsRixDQUFDLENBQUM7SUFDRixPQUFPdUIsT0FBTyxDQUFDQyxHQUFHLENBQUNKLFFBQVEsQ0FBQztFQUM5QjtBQUNGO0FBQUNlLE9BQUEsQ0FBQTVELFVBQUEsR0FBQUEsVUFBQTtBQUFBLElBQUE2RCxRQUFBLEdBQUFELE9BQUEsQ0FBQTVFLE9BQUEsR0FFY2dCLFVBQVUiLCJpZ25vcmVMaXN0IjpbXX0=
101
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQWRhcHRhYmxlQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX1B1c2hBZGFwdGVyIiwiX3Jlc3QiLCJfU3RhdHVzSGFuZGxlciIsInV0aWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGFyc2VNZXNzYWdlUXVldWUiLCJfUHVzaFF1ZXVlIiwiX2xvZ2dlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdyb3VwQnlCYWRnZSIsImluc3RhbGxhdGlvbnMiLCJyZWR1Y2UiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJiYWRnZSIsInB1c2giLCJQdXNoV29ya2VyIiwiY29uc3RydWN0b3IiLCJwdXNoQWRhcHRlciIsInN1YnNjcmliZXJDb25maWciLCJBZGFwdGFibGVDb250cm9sbGVyIiwidmFsaWRhdGVBZGFwdGVyIiwiUHVzaEFkYXB0ZXIiLCJhZGFwdGVyIiwiY2hhbm5lbCIsIlB1c2hRdWV1ZSIsImRlZmF1bHRQdXNoQ2hhbm5lbCIsInN1YnNjcmliZXIiLCJQYXJzZU1lc3NhZ2VRdWV1ZSIsImNyZWF0ZVN1YnNjcmliZXIiLCJzdWJzY3JpYmUiLCJvbiIsIm1lc3NhZ2VTdHIiLCJ3b3JrSXRlbSIsIkpTT04iLCJwYXJzZSIsInJ1biIsImJvZHkiLCJxdWVyeSIsInB1c2hTdGF0dXMiLCJhcHBsaWNhdGlvbklkIiwiVVRDT2Zmc2V0IiwiY29uZmlnIiwiQ29uZmlnIiwiYXV0aCIsIm1hc3RlciIsIndoZXJlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInB1c2hTdGF0dXNIYW5kbGVyIiwib2JqZWN0SWQiLCJyZXN0IiwiZmluZCIsInRoZW4iLCJyZXN1bHRzIiwibGVuZ3RoIiwic2VuZFRvQWRhcHRlciIsImxvY2FsZXMiLCJnZXRMb2NhbGVzRnJvbVB1c2giLCJib2RpZXNQZXJMb2NhbGVzIiwiZ3JvdXBwZWRJbnN0YWxsYXRpb25zIiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJwcm9taXNlcyIsImtleXMiLCJsb2NhbGUiLCJQcm9taXNlIiwiYWxsIiwiaXNQdXNoSW5jcmVtZW50aW5nIiwibG9nZ2VyIiwidmVyYm9zZSIsInNlbmQiLCJ0cmFja1NlbnQiLCJiYWRnZUluc3RhbGxhdGlvbnNNYXAiLCJwYXlsb2FkIiwic3RydWN0dXJlZENsb25lIiwiZGF0YSIsInBhcnNlSW50IiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1B1c2gvUHVzaFdvcmtlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi4vQ29udHJvbGxlcnMvQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBtYXN0ZXIgfSBmcm9tICcuLi9BdXRoJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCB7IFB1c2hBZGFwdGVyIH0gZnJvbSAnLi4vQWRhcHRlcnMvUHVzaC9QdXNoQWRhcHRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCB7IHB1c2hTdGF0dXNIYW5kbGVyIH0gZnJvbSAnLi4vU3RhdHVzSGFuZGxlcic7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFBhcnNlTWVzc2FnZVF1ZXVlIH0gZnJvbSAnLi4vUGFyc2VNZXNzYWdlUXVldWUnO1xuaW1wb3J0IHsgUHVzaFF1ZXVlIH0gZnJvbSAnLi9QdXNoUXVldWUnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5mdW5jdGlvbiBncm91cEJ5QmFkZ2UoaW5zdGFsbGF0aW9ucykge1xuICByZXR1cm4gaW5zdGFsbGF0aW9ucy5yZWR1Y2UoKG1hcCwgaW5zdGFsbGF0aW9uKSA9PiB7XG4gICAgY29uc3QgYmFkZ2UgPSBpbnN0YWxsYXRpb24uYmFkZ2UgKyAnJztcbiAgICBtYXBbYmFkZ2VdID0gbWFwW2JhZGdlXSB8fCBbXTtcbiAgICBtYXBbYmFkZ2VdLnB1c2goaW5zdGFsbGF0aW9uKTtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBjbGFzcyBQdXNoV29ya2VyIHtcbiAgc3Vic2NyaWJlcjogP2FueTtcbiAgYWRhcHRlcjogYW55O1xuICBjaGFubmVsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVzaEFkYXB0ZXI6IFB1c2hBZGFwdGVyLCBzdWJzY3JpYmVyQ29uZmlnOiBhbnkgPSB7fSkge1xuICAgIEFkYXB0YWJsZUNvbnRyb2xsZXIudmFsaWRhdGVBZGFwdGVyKHB1c2hBZGFwdGVyLCB0aGlzLCBQdXNoQWRhcHRlcik7XG4gICAgdGhpcy5hZGFwdGVyID0gcHVzaEFkYXB0ZXI7XG5cbiAgICB0aGlzLmNoYW5uZWwgPSBzdWJzY3JpYmVyQ29uZmlnLmNoYW5uZWwgfHwgUHVzaFF1ZXVlLmRlZmF1bHRQdXNoQ2hhbm5lbCgpO1xuICAgIHRoaXMuc3Vic2NyaWJlciA9IFBhcnNlTWVzc2FnZVF1ZXVlLmNyZWF0ZVN1YnNjcmliZXIoc3Vic2NyaWJlckNvbmZpZyk7XG4gICAgaWYgKHRoaXMuc3Vic2NyaWJlcikge1xuICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IHRoaXMuc3Vic2NyaWJlcjtcbiAgICAgIHN1YnNjcmliZXIuc3Vic2NyaWJlKHRoaXMuY2hhbm5lbCk7XG4gICAgICBzdWJzY3JpYmVyLm9uKCdtZXNzYWdlJywgKGNoYW5uZWwsIG1lc3NhZ2VTdHIpID0+IHtcbiAgICAgICAgY29uc3Qgd29ya0l0ZW0gPSBKU09OLnBhcnNlKG1lc3NhZ2VTdHIpO1xuICAgICAgICB0aGlzLnJ1bih3b3JrSXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBydW4oeyBib2R5LCBxdWVyeSwgcHVzaFN0YXR1cywgYXBwbGljYXRpb25JZCwgVVRDT2Zmc2V0IH06IGFueSk6IFByb21pc2U8Kj4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwbGljYXRpb25JZCk7XG4gICAgY29uc3QgYXV0aCA9IG1hc3Rlcihjb25maWcpO1xuICAgIGNvbnN0IHdoZXJlID0gdXRpbHMuYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyhxdWVyeS53aGVyZSk7XG4gICAgZGVsZXRlIHF1ZXJ5LndoZXJlO1xuICAgIHB1c2hTdGF0dXMgPSBwdXNoU3RhdHVzSGFuZGxlcihjb25maWcsIHB1c2hTdGF0dXMub2JqZWN0SWQpO1xuICAgIHJldHVybiByZXN0LmZpbmQoY29uZmlnLCBhdXRoLCAnX0luc3RhbGxhdGlvbicsIHdoZXJlLCBxdWVyeSkudGhlbigoeyByZXN1bHRzIH0pID0+IHtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNlbmRUb0FkYXB0ZXIoYm9keSwgcmVzdWx0cywgcHVzaFN0YXR1cywgY29uZmlnLCBVVENPZmZzZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VuZFRvQWRhcHRlcihcbiAgICBib2R5OiBhbnksXG4gICAgaW5zdGFsbGF0aW9uczogYW55W10sXG4gICAgcHVzaFN0YXR1czogYW55LFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIFVUQ09mZnNldDogP2FueVxuICApOiBQcm9taXNlPCo+IHtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGxvY2FsZXMgaW4gdGhlIHB1c2ggYm9keVxuICAgIGNvbnN0IGxvY2FsZXMgPSB1dGlscy5nZXRMb2NhbGVzRnJvbVB1c2goYm9keSk7XG4gICAgaWYgKGxvY2FsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgICAgIGNvbnN0IGJvZGllc1BlckxvY2FsZXMgPSB1dGlscy5ib2RpZXNQZXJMb2NhbGVzKGJvZHksIGxvY2FsZXMpO1xuXG4gICAgICAvLyBHcm91cCBpbnN0YWxsYXRpb25zIG9uIHRoZSBzcGVjaWZpZWQgbG9jYWxlcyAoZW4sIGZyLCBkZWZhdWx0IGV0Yy4uLilcbiAgICAgIGNvbnN0IGdyb3VwcGVkSW5zdGFsbGF0aW9ucyA9IHV0aWxzLmdyb3VwQnlMb2NhbGVJZGVudGlmaWVyKGluc3RhbGxhdGlvbnMsIGxvY2FsZXMpO1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3Qua2V5cyhncm91cHBlZEluc3RhbGxhdGlvbnMpLm1hcChsb2NhbGUgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YWxsYXRpb25zID0gZ3JvdXBwZWRJbnN0YWxsYXRpb25zW2xvY2FsZV07XG4gICAgICAgIGNvbnN0IGJvZHkgPSBib2RpZXNQZXJMb2NhbGVzW2xvY2FsZV07XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmRUb0FkYXB0ZXIoYm9keSwgaW5zdGFsbGF0aW9ucywgcHVzaFN0YXR1cywgY29uZmlnLCBVVENPZmZzZXQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNQdXNoSW5jcmVtZW50aW5nKGJvZHkpKSB7XG4gICAgICBsb2dnZXIudmVyYm9zZShgU2VuZGluZyBwdXNoIHRvICR7aW5zdGFsbGF0aW9ucy5sZW5ndGh9YCk7XG4gICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnNlbmQoYm9keSwgaW5zdGFsbGF0aW9ucywgcHVzaFN0YXR1cy5vYmplY3RJZCkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMudHJhY2tTZW50KHJlc3VsdHMsIFVUQ09mZnNldCkudGhlbigoKSA9PiByZXN1bHRzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbGxlY3QgdGhlIGJhZGdlcyB0byByZWR1Y2UgdGhlICMgb2YgY2FsbHNcbiAgICBjb25zdCBiYWRnZUluc3RhbGxhdGlvbnNNYXAgPSBncm91cEJ5QmFkZ2UoaW5zdGFsbGF0aW9ucyk7XG5cbiAgICAvLyBNYXAgdGhlIG9uIHRoZSBiYWRnZXMgY291bnQgYW5kIHJldHVybiB0aGUgc2VuZCByZXN1bHRcbiAgICBjb25zdCBwcm9taXNlcyA9IE9iamVjdC5rZXlzKGJhZGdlSW5zdGFsbGF0aW9uc01hcCkubWFwKGJhZGdlID0+IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBzdHJ1Y3R1cmVkQ2xvbmUoYm9keSk7XG4gICAgICBwYXlsb2FkLmRhdGEuYmFkZ2UgPSBwYXJzZUludChiYWRnZSk7XG4gICAgICBjb25zdCBpbnN0YWxsYXRpb25zID0gYmFkZ2VJbnN0YWxsYXRpb25zTWFwW2JhZGdlXTtcbiAgICAgIHJldHVybiB0aGlzLnNlbmRUb0FkYXB0ZXIocGF5bG9hZCwgaW5zdGFsbGF0aW9ucywgcHVzaFN0YXR1cywgY29uZmlnLCBVVENPZmZzZXQpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVzaFdvcmtlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQVAsT0FBQTtBQUNBLElBQUFRLGtCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxPQUFBLEdBQUFYLHNCQUFB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
package/lib/Push/utils.js CHANGED
@@ -12,7 +12,6 @@ exports.stripLocalesFromBody = stripLocalesFromBody;
12
12
  exports.transformPushBodyForLocale = transformPushBodyForLocale;
13
13
  exports.validatePushType = validatePushType;
14
14
  var _node = _interopRequireDefault(require("parse/node"));
15
- var _deepcopy = _interopRequireDefault(require("deepcopy"));
16
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
16
  function isPushIncrementing(body) {
18
17
  if (!body.data || !body.data.badge) {
@@ -44,7 +43,7 @@ function transformPushBodyForLocale(body, locale) {
44
43
  if (!data) {
45
44
  return body;
46
45
  }
47
- body = (0, _deepcopy.default)(body);
46
+ body = structuredClone(body);
48
47
  localizableKeys.forEach(key => {
49
48
  const localeValue = body.data[`${key}-${locale}`];
50
49
  if (localeValue) {
@@ -119,7 +118,7 @@ function validatePushType(where = {}, validPushTypes = []) {
119
118
  }
120
119
  }
121
120
  function applyDeviceTokenExists(where) {
122
- where = (0, _deepcopy.default)(where);
121
+ where = structuredClone(where);
123
122
  if (!Object.prototype.hasOwnProperty.call(where, 'deviceToken')) {
124
123
  where['deviceToken'] = {
125
124
  $exists: true
@@ -127,4 +126,4 @@ function applyDeviceTokenExists(where) {
127
126
  }
128
127
  return where;
129
128
  }
130
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2RlZXBjb3B5IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaXNQdXNoSW5jcmVtZW50aW5nIiwiYm9keSIsImRhdGEiLCJiYWRnZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsIk51bWJlciIsImFtb3VudCIsImxvY2FsaXphYmxlS2V5cyIsImdldExvY2FsZXNGcm9tUHVzaCIsIlNldCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJtZW1vIiwia2V5IiwiZm9yRWFjaCIsImxvY2FsaXphYmxlS2V5IiwiaW5kZXhPZiIsInB1c2giLCJzbGljZSIsImxlbmd0aCIsInRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlIiwibG9jYWxlIiwiZGVlcGNvcHkiLCJsb2NhbGVWYWx1ZSIsInN0cmlwTG9jYWxlc0Zyb21Cb2R5IiwiYm9kaWVzUGVyTG9jYWxlcyIsImxvY2FsZXMiLCJyZXN1bHQiLCJncm91cEJ5TG9jYWxlSWRlbnRpZmllciIsImluc3RhbGxhdGlvbnMiLCJtYXAiLCJpbnN0YWxsYXRpb24iLCJhZGRlZCIsImxvY2FsZUlkZW50aWZpZXIiLCJ2YWxpZGF0ZVB1c2hUeXBlIiwid2hlcmUiLCJ2YWxpZFB1c2hUeXBlcyIsImRldmljZVR5cGVGaWVsZCIsImRldmljZVR5cGUiLCJkZXZpY2VUeXBlcyIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsImkiLCJQYXJzZSIsIkVycm9yIiwiUFVTSF9NSVNDT05GSUdVUkVEIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIiRleGlzdHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUHVzaC91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgZGVlcGNvcHkgZnJvbSAnZGVlcGNvcHknO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQdXNoSW5jcmVtZW50aW5nKGJvZHkpIHtcbiAgaWYgKCFib2R5LmRhdGEgfHwgIWJvZHkuZGF0YS5iYWRnZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGJhZGdlID0gYm9keS5kYXRhLmJhZGdlO1xuICBpZiAodHlwZW9mIGJhZGdlID09ICdzdHJpbmcnICYmIGJhZGdlLnRvTG93ZXJDYXNlKCkgPT0gJ2luY3JlbWVudCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGJhZGdlID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIGJhZGdlLl9fb3AgPT0gJ3N0cmluZycgJiZcbiAgICBiYWRnZS5fX29wLnRvTG93ZXJDYXNlKCkgPT0gJ2luY3JlbWVudCcgJiZcbiAgICBOdW1iZXIoYmFkZ2UuYW1vdW50KVxuICApO1xufVxuXG5jb25zdCBsb2NhbGl6YWJsZUtleXMgPSBbJ2FsZXJ0JywgJ3RpdGxlJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbGVzRnJvbVB1c2goYm9keSkge1xuICBjb25zdCBkYXRhID0gYm9keS5kYXRhO1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIFtcbiAgICAuLi5uZXcgU2V0KFxuICAgICAgT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICAgICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihgJHtsb2NhbGl6YWJsZUtleX0tYCkgPT0gMCkge1xuICAgICAgICAgICAgbWVtby5wdXNoKGtleS5zbGljZShsb2NhbGl6YWJsZUtleS5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lbW87XG4gICAgICB9LCBbXSlcbiAgICApLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUHVzaEJvZHlGb3JMb2NhbGUoYm9keSwgbG9jYWxlKSB7XG4gIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG4gIGJvZHkgPSBkZWVwY29weShib2R5KTtcbiAgbG9jYWxpemFibGVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsb2NhbGVWYWx1ZSA9IGJvZHkuZGF0YVtgJHtrZXl9LSR7bG9jYWxlfWBdO1xuICAgIGlmIChsb2NhbGVWYWx1ZSkge1xuICAgICAgYm9keS5kYXRhW2tleV0gPSBsb2NhbGVWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KSB7XG4gIGlmICghYm9keS5kYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgT2JqZWN0LmtleXMoYm9keS5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBib2R5LmRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9kaWVzUGVyTG9jYWxlcyhib2R5LCBsb2NhbGVzID0gW10pIHtcbiAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgY29uc3QgcmVzdWx0ID0gbG9jYWxlcy5yZWR1Y2UoKG1lbW8sIGxvY2FsZSkgPT4ge1xuICAgIG1lbW9bbG9jYWxlXSA9IHRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlKGJvZHksIGxvY2FsZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgLy8gU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSwgd2l0aCB0aGUgc3RyaXBwZWQgYm9keVxuICByZXN1bHQuZGVmYXVsdCA9IHN0cmlwTG9jYWxlc0Zyb21Cb2R5KGJvZHkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyA9IFtdKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZShcbiAgICAobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIgJiYgaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIuaW5kZXhPZihsb2NhbGUpID09PSAwKSB7XG4gICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIG1hcFtsb2NhbGVdID0gbWFwW2xvY2FsZV0gfHwgW107XG4gICAgICAgICAgbWFwW2xvY2FsZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgbWFwLmRlZmF1bHQucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICAgIHsgZGVmYXVsdDogW10gfVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZVR5cGUgcGFyYW1ldGVyIGluIHF1cnkgY29uZGl0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSBBIHF1ZXJ5IGNvbmRpdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRQdXNoVHlwZXMgQW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcyhzdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1c2hUeXBlKHdoZXJlID0ge30sIHZhbGlkUHVzaFR5cGVzID0gW10pIHtcbiAgdmFyIGRldmljZVR5cGVGaWVsZCA9IHdoZXJlLmRldmljZVR5cGUgfHwge307XG4gIHZhciBkZXZpY2VUeXBlcyA9IFtdO1xuICBpZiAodHlwZW9mIGRldmljZVR5cGVGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXZpY2VUeXBlcy5wdXNoKGRldmljZVR5cGVGaWVsZCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXZpY2VUeXBlRmllbGRbJyRpbiddKSkge1xuICAgIGRldmljZVR5cGVzLmNvbmNhdChkZXZpY2VUeXBlRmllbGRbJyRpbiddKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRldmljZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRldmljZVR5cGUgPSBkZXZpY2VUeXBlc1tpXTtcbiAgICBpZiAodmFsaWRQdXNoVHlwZXMuaW5kZXhPZihkZXZpY2VUeXBlKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBkZXZpY2VUeXBlICsgJyBpcyBub3Qgc3VwcG9ydGVkIHB1c2ggdHlwZS4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSkge1xuICB3aGVyZSA9IGRlZXBjb3B5KHdoZXJlKTtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2hlcmUsICdkZXZpY2VUb2tlbicpKSB7XG4gICAgd2hlcmVbJ2RldmljZVRva2VuJ10gPSB7ICRleGlzdHM6IHRydWUgfTtcbiAgfVxuICByZXR1cm4gd2hlcmU7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
129
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaXNQdXNoSW5jcmVtZW50aW5nIiwiYm9keSIsImRhdGEiLCJiYWRnZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsIk51bWJlciIsImFtb3VudCIsImxvY2FsaXphYmxlS2V5cyIsImdldExvY2FsZXNGcm9tUHVzaCIsIlNldCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJtZW1vIiwia2V5IiwiZm9yRWFjaCIsImxvY2FsaXphYmxlS2V5IiwiaW5kZXhPZiIsInB1c2giLCJzbGljZSIsImxlbmd0aCIsInRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlIiwibG9jYWxlIiwic3RydWN0dXJlZENsb25lIiwibG9jYWxlVmFsdWUiLCJzdHJpcExvY2FsZXNGcm9tQm9keSIsImJvZGllc1BlckxvY2FsZXMiLCJsb2NhbGVzIiwicmVzdWx0IiwiZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIiLCJpbnN0YWxsYXRpb25zIiwibWFwIiwiaW5zdGFsbGF0aW9uIiwiYWRkZWQiLCJsb2NhbGVJZGVudGlmaWVyIiwidmFsaWRhdGVQdXNoVHlwZSIsIndoZXJlIiwidmFsaWRQdXNoVHlwZXMiLCJkZXZpY2VUeXBlRmllbGQiLCJkZXZpY2VUeXBlIiwiZGV2aWNlVHlwZXMiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJpIiwiUGFyc2UiLCJFcnJvciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsImFwcGx5RGV2aWNlVG9rZW5FeGlzdHMiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCIkZXhpc3RzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1B1c2gvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1B1c2hJbmNyZW1lbnRpbmcoYm9keSkge1xuICBpZiAoIWJvZHkuZGF0YSB8fCAhYm9keS5kYXRhLmJhZGdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYmFkZ2UgPSBib2R5LmRhdGEuYmFkZ2U7XG4gIGlmICh0eXBlb2YgYmFkZ2UgPT0gJ3N0cmluZycgJiYgYmFkZ2UudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgYmFkZ2UgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgYmFkZ2UuX19vcCA9PSAnc3RyaW5nJyAmJlxuICAgIGJhZGdlLl9fb3AudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50JyAmJlxuICAgIE51bWJlcihiYWRnZS5hbW91bnQpXG4gICk7XG59XG5cbmNvbnN0IGxvY2FsaXphYmxlS2V5cyA9IFsnYWxlcnQnLCAndGl0bGUnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZXNGcm9tUHVzaChib2R5KSB7XG4gIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIC4uLm5ldyBTZXQoXG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgICAgICBsb2NhbGl6YWJsZUtleXMuZm9yRWFjaChsb2NhbGl6YWJsZUtleSA9PiB7XG4gICAgICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgICAgICBtZW1vLnB1c2goa2V5LnNsaWNlKGxvY2FsaXphYmxlS2V5Lmxlbmd0aCArIDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH0sIFtdKVxuICAgICksXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1QdXNoQm9keUZvckxvY2FsZShib2R5LCBsb2NhbGUpIHtcbiAgY29uc3QgZGF0YSA9IGJvZHkuZGF0YTtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgYm9keSA9IHN0cnVjdHVyZWRDbG9uZShib2R5KTtcbiAgbG9jYWxpemFibGVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBsb2NhbGVWYWx1ZSA9IGJvZHkuZGF0YVtgJHtrZXl9LSR7bG9jYWxlfWBdO1xuICAgIGlmIChsb2NhbGVWYWx1ZSkge1xuICAgICAgYm9keS5kYXRhW2tleV0gPSBsb2NhbGVWYWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaXBMb2NhbGVzRnJvbUJvZHkoYm9keSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcExvY2FsZXNGcm9tQm9keShib2R5KSB7XG4gIGlmICghYm9keS5kYXRhKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgT2JqZWN0LmtleXMoYm9keS5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgbG9jYWxpemFibGVLZXlzLmZvckVhY2gobG9jYWxpemFibGVLZXkgPT4ge1xuICAgICAgaWYgKGtleS5pbmRleE9mKGAke2xvY2FsaXphYmxlS2V5fS1gKSA9PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBib2R5LmRhdGFba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBib2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm9kaWVzUGVyTG9jYWxlcyhib2R5LCBsb2NhbGVzID0gW10pIHtcbiAgLy8gR2V0IGFsbCB0cmFuZm9ybWVkIGJvZGllcyBmb3IgZWFjaCBsb2NhbGVcbiAgY29uc3QgcmVzdWx0ID0gbG9jYWxlcy5yZWR1Y2UoKG1lbW8sIGxvY2FsZSkgPT4ge1xuICAgIG1lbW9bbG9jYWxlXSA9IHRyYW5zZm9ybVB1c2hCb2R5Rm9yTG9jYWxlKGJvZHksIGxvY2FsZSk7XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgLy8gU2V0IHRoZSBkZWZhdWx0IGxvY2FsZSwgd2l0aCB0aGUgc3RyaXBwZWQgYm9keVxuICByZXN1bHQuZGVmYXVsdCA9IHN0cmlwTG9jYWxlc0Zyb21Cb2R5KGJvZHkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeUxvY2FsZUlkZW50aWZpZXIoaW5zdGFsbGF0aW9ucywgbG9jYWxlcyA9IFtdKSB7XG4gIHJldHVybiBpbnN0YWxsYXRpb25zLnJlZHVjZShcbiAgICAobWFwLCBpbnN0YWxsYXRpb24pID0+IHtcbiAgICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgICAgbG9jYWxlcy5mb3JFYWNoKGxvY2FsZSA9PiB7XG4gICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIgJiYgaW5zdGFsbGF0aW9uLmxvY2FsZUlkZW50aWZpZXIuaW5kZXhPZihsb2NhbGUpID09PSAwKSB7XG4gICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgIG1hcFtsb2NhbGVdID0gbWFwW2xvY2FsZV0gfHwgW107XG4gICAgICAgICAgbWFwW2xvY2FsZV0ucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghYWRkZWQpIHtcbiAgICAgICAgbWFwLmRlZmF1bHQucHVzaChpbnN0YWxsYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9LFxuICAgIHsgZGVmYXVsdDogW10gfVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZVR5cGUgcGFyYW1ldGVyIGluIHF1cnkgY29uZGl0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSB3aGVyZSBBIHF1ZXJ5IGNvbmRpdGlvblxuICogQHBhcmFtIHtBcnJheX0gdmFsaWRQdXNoVHlwZXMgQW4gYXJyYXkgb2YgdmFsaWQgcHVzaCB0eXBlcyhzdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVB1c2hUeXBlKHdoZXJlID0ge30sIHZhbGlkUHVzaFR5cGVzID0gW10pIHtcbiAgdmFyIGRldmljZVR5cGVGaWVsZCA9IHdoZXJlLmRldmljZVR5cGUgfHwge307XG4gIHZhciBkZXZpY2VUeXBlcyA9IFtdO1xuICBpZiAodHlwZW9mIGRldmljZVR5cGVGaWVsZCA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXZpY2VUeXBlcy5wdXNoKGRldmljZVR5cGVGaWVsZCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXZpY2VUeXBlRmllbGRbJyRpbiddKSkge1xuICAgIGRldmljZVR5cGVzLmNvbmNhdChkZXZpY2VUeXBlRmllbGRbJyRpbiddKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRldmljZVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRldmljZVR5cGUgPSBkZXZpY2VUeXBlc1tpXTtcbiAgICBpZiAodmFsaWRQdXNoVHlwZXMuaW5kZXhPZihkZXZpY2VUeXBlKSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBkZXZpY2VUeXBlICsgJyBpcyBub3Qgc3VwcG9ydGVkIHB1c2ggdHlwZS4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSkge1xuICB3aGVyZSA9IHN0cnVjdHVyZWRDbG9uZSh3aGVyZSk7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdoZXJlLCAnZGV2aWNlVG9rZW4nKSkge1xuICAgIHdoZXJlWydkZXZpY2VUb2tlbiddID0geyAkZXhpc3RzOiB0cnVlIH07XG4gIH1cbiAgcmV0dXJuIHdoZXJlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7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