parse-server 6.0.0-alpha.2 → 6.0.0-alpha.21

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 (191) hide show
  1. package/README.md +45 -17
  2. package/lib/AccountLockout.js +11 -26
  3. package/lib/Adapters/AdapterLoader.js +8 -14
  4. package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
  5. package/lib/Adapters/Auth/AuthAdapter.js +7 -16
  6. package/lib/Adapters/Auth/OAuth1Client.js +32 -57
  7. package/lib/Adapters/Auth/apple.js +6 -22
  8. package/lib/Adapters/Auth/facebook.js +7 -37
  9. package/lib/Adapters/Auth/gcenter.js +8 -37
  10. package/lib/Adapters/Auth/github.js +7 -10
  11. package/lib/Adapters/Auth/google.js +11 -34
  12. package/lib/Adapters/Auth/gpgames.js +5 -8
  13. package/lib/Adapters/Auth/httpsRequest.js +1 -7
  14. package/lib/Adapters/Auth/index.js +20 -65
  15. package/lib/Adapters/Auth/instagram.js +5 -9
  16. package/lib/Adapters/Auth/janraincapture.js +8 -12
  17. package/lib/Adapters/Auth/janrainengage.js +7 -11
  18. package/lib/Adapters/Auth/keycloak.js +5 -19
  19. package/lib/Adapters/Auth/ldap.js +1 -15
  20. package/lib/Adapters/Auth/line.js +7 -10
  21. package/lib/Adapters/Auth/linkedin.js +7 -12
  22. package/lib/Adapters/Auth/meetup.js +7 -10
  23. package/lib/Adapters/Auth/microsoft.js +7 -10
  24. package/lib/Adapters/Auth/oauth2.js +6 -18
  25. package/lib/Adapters/Auth/phantauth.js +8 -10
  26. package/lib/Adapters/Auth/qq.js +7 -13
  27. package/lib/Adapters/Auth/spotify.js +7 -14
  28. package/lib/Adapters/Auth/twitter.js +5 -15
  29. package/lib/Adapters/Auth/vkontakte.js +9 -15
  30. package/lib/Adapters/Auth/wechat.js +7 -10
  31. package/lib/Adapters/Auth/weibo.js +7 -11
  32. package/lib/Adapters/Cache/CacheAdapter.js +4 -12
  33. package/lib/Adapters/Cache/InMemoryCache.js +5 -19
  34. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
  35. package/lib/Adapters/Cache/LRUCache.js +1 -11
  36. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
  37. package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
  38. package/lib/Adapters/Cache/SchemaCache.js +1 -6
  39. package/lib/Adapters/Email/MailAdapter.js +2 -7
  40. package/lib/Adapters/Files/FilesAdapter.js +7 -21
  41. package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
  42. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  43. package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
  44. package/lib/Adapters/Logger/WinstonLogger.js +3 -30
  45. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
  46. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
  47. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
  48. package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
  49. package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
  50. package/lib/Adapters/Push/PushAdapter.js +2 -8
  51. package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
  52. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
  53. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
  54. package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
  55. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
  56. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
  57. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
  58. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
  59. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  60. package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
  61. package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
  62. package/lib/Auth.js +54 -121
  63. package/lib/ClientSDK.js +3 -11
  64. package/lib/Config.js +69 -113
  65. package/lib/Controllers/AdaptableController.js +6 -18
  66. package/lib/Controllers/AnalyticsController.js +1 -9
  67. package/lib/Controllers/CacheController.js +3 -23
  68. package/lib/Controllers/DatabaseController.js +147 -345
  69. package/lib/Controllers/FilesController.js +5 -34
  70. package/lib/Controllers/HooksController.js +1 -51
  71. package/lib/Controllers/LiveQueryController.js +4 -23
  72. package/lib/Controllers/LoggerController.js +15 -54
  73. package/lib/Controllers/ParseGraphQLController.js +49 -104
  74. package/lib/Controllers/PushController.js +20 -59
  75. package/lib/Controllers/SchemaController.js +154 -344
  76. package/lib/Controllers/UserController.js +11 -72
  77. package/lib/Controllers/index.js +19 -68
  78. package/lib/Controllers/types.js +1 -1
  79. package/lib/Deprecator/Deprecations.js +1 -8
  80. package/lib/Deprecator/Deprecator.js +9 -18
  81. package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
  82. package/lib/GraphQL/ParseGraphQLServer.js +2 -29
  83. package/lib/GraphQL/helpers/objectsMutations.js +2 -12
  84. package/lib/GraphQL/helpers/objectsQueries.js +18 -76
  85. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
  86. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
  87. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
  88. package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
  89. package/lib/GraphQL/loaders/filesMutations.js +2 -19
  90. package/lib/GraphQL/loaders/functionsMutations.js +6 -17
  91. package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
  92. package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
  93. package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
  94. package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
  95. package/lib/GraphQL/loaders/schemaMutations.js +1 -20
  96. package/lib/GraphQL/loaders/schemaQueries.js +1 -14
  97. package/lib/GraphQL/loaders/schemaTypes.js +2 -6
  98. package/lib/GraphQL/loaders/usersMutations.js +6 -28
  99. package/lib/GraphQL/loaders/usersQueries.js +4 -26
  100. package/lib/GraphQL/parseGraphQLUtils.js +6 -19
  101. package/lib/GraphQL/transformers/className.js +1 -4
  102. package/lib/GraphQL/transformers/constraintType.js +1 -20
  103. package/lib/GraphQL/transformers/inputType.js +1 -20
  104. package/lib/GraphQL/transformers/mutation.js +6 -51
  105. package/lib/GraphQL/transformers/outputType.js +1 -20
  106. package/lib/GraphQL/transformers/query.js +6 -42
  107. package/lib/GraphQL/transformers/schemaFields.js +7 -34
  108. package/lib/KeyPromiseQueue.js +1 -12
  109. package/lib/LiveQuery/Client.js +1 -25
  110. package/lib/LiveQuery/Id.js +1 -7
  111. package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
  112. package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
  113. package/lib/LiveQuery/ParsePubSub.js +1 -12
  114. package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
  115. package/lib/LiveQuery/QueryTools.js +14 -116
  116. package/lib/LiveQuery/RequestSchema.js +1 -1
  117. package/lib/LiveQuery/SessionTokenCache.js +1 -17
  118. package/lib/LiveQuery/Subscription.js +4 -18
  119. package/lib/LiveQuery/equalObjects.js +2 -14
  120. package/lib/Options/Definitions.js +79 -10
  121. package/lib/Options/docs.js +23 -3
  122. package/lib/Options/index.js +4 -12
  123. package/lib/Options/parsers.js +1 -18
  124. package/lib/Page.js +1 -9
  125. package/lib/ParseMessageQueue.js +1 -10
  126. package/lib/ParseServer.js +144 -182
  127. package/lib/ParseServerRESTController.js +6 -33
  128. package/lib/PromiseRouter.js +16 -50
  129. package/lib/Push/PushQueue.js +3 -15
  130. package/lib/Push/PushWorker.js +7 -32
  131. package/lib/Push/utils.js +9 -38
  132. package/lib/RestQuery.js +105 -242
  133. package/lib/RestWrite.js +212 -377
  134. package/lib/Routers/AggregateRouter.js +14 -51
  135. package/lib/Routers/AnalyticsRouter.js +2 -8
  136. package/lib/Routers/AudiencesRouter.js +1 -15
  137. package/lib/Routers/ClassesRouter.js +3 -53
  138. package/lib/Routers/CloudCodeRouter.js +1 -19
  139. package/lib/Routers/FeaturesRouter.js +1 -10
  140. package/lib/Routers/FilesRouter.js +29 -76
  141. package/lib/Routers/FunctionsRouter.js +5 -28
  142. package/lib/Routers/GlobalConfigRouter.js +4 -18
  143. package/lib/Routers/GraphQLRouter.js +1 -14
  144. package/lib/Routers/HooksRouter.js +1 -29
  145. package/lib/Routers/IAPValidationRouter.js +6 -29
  146. package/lib/Routers/InstallationsRouter.js +2 -12
  147. package/lib/Routers/LogsRouter.js +4 -16
  148. package/lib/Routers/PagesRouter.js +69 -129
  149. package/lib/Routers/PublicAPIRouter.js +3 -62
  150. package/lib/Routers/PurgeRouter.js +1 -15
  151. package/lib/Routers/PushRouter.js +2 -18
  152. package/lib/Routers/RolesRouter.js +1 -7
  153. package/lib/Routers/SchemasRouter.js +4 -34
  154. package/lib/Routers/SecurityRouter.js +1 -12
  155. package/lib/Routers/SessionsRouter.js +3 -19
  156. package/lib/Routers/UsersRouter.js +58 -155
  157. package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
  158. package/lib/SchemaMigrations/Migrations.js +2 -8
  159. package/lib/Security/Check.js +8 -16
  160. package/lib/Security/CheckGroup.js +4 -11
  161. package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
  162. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
  163. package/lib/Security/CheckGroups/CheckGroups.js +1 -4
  164. package/lib/Security/CheckRunner.js +22 -41
  165. package/lib/StatusHandler.js +12 -69
  166. package/lib/TestUtils.js +1 -6
  167. package/lib/Utils.js +27 -66
  168. package/lib/batch.js +17 -28
  169. package/lib/cache.js +1 -3
  170. package/lib/cli/definitions/parse-live-query-server.js +1 -3
  171. package/lib/cli/definitions/parse-server.js +1 -3
  172. package/lib/cli/parse-live-query-server.js +1 -6
  173. package/lib/cli/parse-server.js +11 -21
  174. package/lib/cli/utils/commander.js +13 -51
  175. package/lib/cli/utils/runner.js +1 -14
  176. package/lib/cloud-code/Parse.Cloud.js +71 -92
  177. package/lib/cryptoUtils.js +11 -19
  178. package/lib/defaults.js +2 -14
  179. package/lib/deprecated.js +1 -2
  180. package/lib/index.js +16 -34
  181. package/lib/logger.js +6 -13
  182. package/lib/middlewares.js +147 -151
  183. package/lib/password.js +6 -10
  184. package/lib/request.js +173 -2
  185. package/lib/requiredParameter.js +1 -3
  186. package/lib/rest.js +19 -41
  187. package/lib/triggers.js +54 -252
  188. package/lib/vendor/mongodbUrl.js +125 -305
  189. package/package.json +22 -19
  190. package/lib/cloud-code/HTTPResponse.js +0 -73
  191. package/lib/cloud-code/httpRequest.js +0 -192
@@ -4,39 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ParseGraphQLServer = void 0;
7
-
8
7
  var _cors = _interopRequireDefault(require("cors"));
9
-
10
8
  var _node = require("@graphql-yoga/node");
11
-
12
9
  var _graphql = require("graphql");
13
-
14
10
  var _subscriptionsTransportWs = require("subscriptions-transport-ws");
15
-
16
11
  var _middlewares = require("../middlewares");
17
-
18
12
  var _requiredParameter = _interopRequireDefault(require("../requiredParameter"));
19
-
20
13
  var _logger = _interopRequireDefault(require("../logger"));
21
-
22
14
  var _ParseGraphQLSchema = require("./ParseGraphQLSchema");
23
-
24
15
  var _ParseGraphQLController = _interopRequireWildcard(require("../Controllers/ParseGraphQLController"));
25
-
26
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
-
28
17
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
-
30
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
-
32
19
  class ParseGraphQLServer {
33
20
  constructor(parseServer, config) {
34
21
  this.parseServer = parseServer || (0, _requiredParameter.default)('You must provide a parseServer instance!');
35
-
36
22
  if (!config || !config.graphQLPath) {
37
23
  (0, _requiredParameter.default)('You must provide a config.graphQLPath!');
38
24
  }
39
-
40
25
  this.config = config;
41
26
  this.parseGraphQLController = this.parseServer.config.parseGraphQLController;
42
27
  this.log = this.parseServer.config && this.parseServer.config.loggerController || _logger.default;
@@ -48,7 +33,6 @@ class ParseGraphQLServer {
48
33
  appId: this.parseServer.config.appId
49
34
  });
50
35
  }
51
-
52
36
  async _getGraphQLOptions() {
53
37
  try {
54
38
  return {
@@ -74,20 +58,16 @@ class ParseGraphQLServer {
74
58
  throw e;
75
59
  }
76
60
  }
77
-
78
61
  async _getServer() {
79
62
  const schemaRef = this.parseGraphQLSchema.graphQLSchema;
80
63
  const newSchemaRef = await this.parseGraphQLSchema.load();
81
-
82
64
  if (schemaRef === newSchemaRef && this._server) {
83
65
  return this._server;
84
66
  }
85
-
86
67
  const options = await this._getGraphQLOptions();
87
68
  this._server = (0, _node.createServer)(options);
88
69
  return this._server;
89
70
  }
90
-
91
71
  _transformMaxUploadSizeToBytes(maxUploadSize) {
92
72
  const unitMap = {
93
73
  kb: 1,
@@ -96,26 +76,23 @@ class ParseGraphQLServer {
96
76
  };
97
77
  return Number(maxUploadSize.slice(0, -2)) * Math.pow(1024, unitMap[maxUploadSize.slice(-2).toLowerCase()]);
98
78
  }
99
-
100
79
  applyGraphQL(app) {
101
80
  if (!app || !app.use) {
102
81
  (0, _requiredParameter.default)('You must provide an Express.js app instance!');
103
82
  }
104
-
105
83
  app.use(this.config.graphQLPath, (0, _cors.default)());
106
84
  app.use(this.config.graphQLPath, _middlewares.handleParseHeaders);
85
+ app.use(this.config.graphQLPath, _middlewares.handleParseSession);
107
86
  app.use(this.config.graphQLPath, _middlewares.handleParseErrors);
108
87
  app.use(this.config.graphQLPath, async (req, res) => {
109
88
  const server = await this._getServer();
110
89
  return server(req, res);
111
90
  });
112
91
  }
113
-
114
92
  applyPlayground(app) {
115
93
  if (!app || !app.get) {
116
94
  (0, _requiredParameter.default)('You must provide an Express.js app instance!');
117
95
  }
118
-
119
96
  app.get(this.config.playgroundPath || (0, _requiredParameter.default)('You must provide a config.playgroundPath to applyPlayground!'), (_req, res) => {
120
97
  res.setHeader('Content-Type', 'text/html');
121
98
  res.write((0, _node.renderGraphiQL)({
@@ -129,7 +106,6 @@ class ParseGraphQLServer {
129
106
  res.end();
130
107
  });
131
108
  }
132
-
133
109
  createSubscriptions(server) {
134
110
  _subscriptionsTransportWs.SubscriptionServer.create({
135
111
  execute: _graphql.execute,
@@ -140,12 +116,9 @@ class ParseGraphQLServer {
140
116
  path: this.config.subscriptionsPath || (0, _requiredParameter.default)('You must provide a config.subscriptionsPath to createSubscriptions!')
141
117
  });
142
118
  }
143
-
144
119
  setGraphQLConfig(graphQLConfig) {
145
120
  return this.parseGraphQLController.updateGraphQLConfig(graphQLConfig);
146
121
  }
147
-
148
122
  }
149
-
150
123
  exports.ParseGraphQLServer = ParseGraphQLServer;
151
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJuYW1lcyI6WyJQYXJzZUdyYXBoUUxTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlU2VydmVyIiwiY29uZmlnIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsImF1dGgiLCJtYXNrZWRFcnJvcnMiLCJtdWx0aXBhcnQiLCJmaWxlU2l6ZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJlIiwiZXJyb3IiLCJzdGFjayIsInRvU3RyaW5nIiwiX2dldFNlcnZlciIsInNjaGVtYVJlZiIsImdyYXBoUUxTY2hlbWEiLCJuZXdTY2hlbWFSZWYiLCJfc2VydmVyIiwib3B0aW9ucyIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsInVzZSIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlRXJyb3JzIiwicmVzIiwic2VydmVyIiwiYXBwbHlQbGF5Z3JvdW5kIiwiZ2V0IiwicGxheWdyb3VuZFBhdGgiLCJfcmVxIiwic2V0SGVhZGVyIiwid3JpdGUiLCJlbmRwb2ludCIsInN1YnNjcmlwdGlvbkVuZHBvaW50Iiwic3Vic2NyaXB0aW9uc1BhdGgiLCJoZWFkZXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hc3RlcktleSIsImVuZCIsImNyZWF0ZVN1YnNjcmlwdGlvbnMiLCJTdWJzY3JpcHRpb25TZXJ2ZXIiLCJjcmVhdGUiLCJleGVjdXRlIiwic3Vic2NyaWJlIiwib25PcGVyYXRpb24iLCJfbWVzc2FnZSIsInBhcmFtcyIsIndlYlNvY2tldCIsIk9iamVjdCIsImFzc2lnbiIsInVwZ3JhZGVSZXEiLCJwYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsTUFBTUEsa0JBQU4sQ0FBeUI7QUFHdkJDLEVBQUFBLFdBQVcsQ0FBQ0MsV0FBRCxFQUFjQyxNQUFkLEVBQXNCO0FBQy9CLFNBQUtELFdBQUwsR0FBbUJBLFdBQVcsSUFBSSxnQ0FBa0IsMENBQWxCLENBQWxDOztBQUNBLFFBQUksQ0FBQ0MsTUFBRCxJQUFXLENBQUNBLE1BQU0sQ0FBQ0MsV0FBdkIsRUFBb0M7QUFDbEMsc0NBQWtCLHdDQUFsQjtBQUNEOztBQUNELFNBQUtELE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtFLHNCQUFMLEdBQThCLEtBQUtILFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCRSxzQkFBdEQ7QUFDQSxTQUFLQyxHQUFMLEdBQ0csS0FBS0osV0FBTCxDQUFpQkMsTUFBakIsSUFBMkIsS0FBS0QsV0FBTCxDQUFpQkMsTUFBakIsQ0FBd0JJLGdCQUFwRCxJQUF5RUMsZUFEM0U7QUFFQSxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQyxzQ0FBSixDQUF1QjtBQUMvQ0wsTUFBQUEsc0JBQXNCLEVBQUUsS0FBS0Esc0JBRGtCO0FBRS9DTSxNQUFBQSxrQkFBa0IsRUFBRSxLQUFLVCxXQUFMLENBQWlCQyxNQUFqQixDQUF3QlEsa0JBRkc7QUFHL0NMLE1BQUFBLEdBQUcsRUFBRSxLQUFLQSxHQUhxQztBQUkvQ00sTUFBQUEscUJBQXFCLEVBQUUsS0FBS1QsTUFBTCxDQUFZUyxxQkFKWTtBQUsvQ0MsTUFBQUEsS0FBSyxFQUFFLEtBQUtYLFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCVTtBQUxnQixLQUF2QixDQUExQjtBQU9EOztBQUV1QixRQUFsQkMsa0JBQWtCLEdBQUc7QUFDekIsUUFBSTtBQUNGLGFBQU87QUFDTEMsUUFBQUEsTUFBTSxFQUFFLE1BQU0sS0FBS04sa0JBQUwsQ0FBd0JPLElBQXhCLEVBRFQ7QUFFTEMsUUFBQUEsT0FBTyxFQUFFLENBQUM7QUFBRUMsVUFBQUEsR0FBRyxFQUFFO0FBQUVDLFlBQUFBLElBQUY7QUFBUWhCLFlBQUFBLE1BQVI7QUFBZ0JpQixZQUFBQTtBQUFoQjtBQUFQLFNBQUQsTUFBc0M7QUFDN0NELFVBQUFBLElBRDZDO0FBRTdDaEIsVUFBQUEsTUFGNkM7QUFHN0NpQixVQUFBQTtBQUg2QyxTQUF0QyxDQUZKO0FBT0xDLFFBQUFBLFlBQVksRUFBRSxLQVBUO0FBUUxDLFFBQUFBLFNBQVMsRUFBRTtBQUNUQyxVQUFBQSxRQUFRLEVBQUUsS0FBS0MsOEJBQUwsQ0FDUixLQUFLdEIsV0FBTCxDQUFpQkMsTUFBakIsQ0FBd0JzQixhQUF4QixJQUF5QyxNQURqQztBQUREO0FBUk4sT0FBUDtBQWNELEtBZkQsQ0FlRSxPQUFPQyxDQUFQLEVBQVU7QUFDVixXQUFLcEIsR0FBTCxDQUFTcUIsS0FBVCxDQUFlRCxDQUFDLENBQUNFLEtBQUYsSUFBWSxPQUFPRixDQUFDLENBQUNHLFFBQVQsS0FBc0IsVUFBdEIsSUFBb0NILENBQUMsQ0FBQ0csUUFBRixFQUFoRCxJQUFpRUgsQ0FBaEY7QUFDQSxZQUFNQSxDQUFOO0FBQ0Q7QUFDRjs7QUFFZSxRQUFWSSxVQUFVLEdBQUc7QUFDakIsVUFBTUMsU0FBUyxHQUFHLEtBQUt0QixrQkFBTCxDQUF3QnVCLGFBQTFDO0FBQ0EsVUFBTUMsWUFBWSxHQUFHLE1BQU0sS0FBS3hCLGtCQUFMLENBQXdCTyxJQUF4QixFQUEzQjs7QUFDQSxRQUFJZSxTQUFTLEtBQUtFLFlBQWQsSUFBOEIsS0FBS0MsT0FBdkMsRUFBZ0Q7QUFDOUMsYUFBTyxLQUFLQSxPQUFaO0FBQ0Q7O0FBQ0QsVUFBTUMsT0FBTyxHQUFHLE1BQU0sS0FBS3JCLGtCQUFMLEVBQXRCO0FBQ0EsU0FBS29CLE9BQUwsR0FBZSx3QkFBYUMsT0FBYixDQUFmO0FBQ0EsV0FBTyxLQUFLRCxPQUFaO0FBQ0Q7O0FBRURWLEVBQUFBLDhCQUE4QixDQUFDQyxhQUFELEVBQWdCO0FBQzVDLFVBQU1XLE9BQU8sR0FBRztBQUNkQyxNQUFBQSxFQUFFLEVBQUUsQ0FEVTtBQUVkQyxNQUFBQSxFQUFFLEVBQUUsQ0FGVTtBQUdkQyxNQUFBQSxFQUFFLEVBQUU7QUFIVSxLQUFoQjtBQU1BLFdBQ0VDLE1BQU0sQ0FBQ2YsYUFBYSxDQUFDZ0IsS0FBZCxDQUFvQixDQUFwQixFQUF1QixDQUFDLENBQXhCLENBQUQsQ0FBTixHQUNBQyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxJQUFULEVBQWVQLE9BQU8sQ0FBQ1gsYUFBYSxDQUFDZ0IsS0FBZCxDQUFvQixDQUFDLENBQXJCLEVBQXdCRyxXQUF4QixFQUFELENBQXRCLENBRkY7QUFJRDs7QUFFREMsRUFBQUEsWUFBWSxDQUFDQyxHQUFELEVBQU07QUFDaEIsUUFBSSxDQUFDQSxHQUFELElBQVEsQ0FBQ0EsR0FBRyxDQUFDQyxHQUFqQixFQUFzQjtBQUNwQixzQ0FBa0IsOENBQWxCO0FBQ0Q7O0FBRURELElBQUFBLEdBQUcsQ0FBQ0MsR0FBSixDQUFRLEtBQUs1QyxNQUFMLENBQVlDLFdBQXBCLEVBQWlDLG9CQUFqQztBQUNBMEMsSUFBQUEsR0FBRyxDQUFDQyxHQUFKLENBQVEsS0FBSzVDLE1BQUwsQ0FBWUMsV0FBcEIsRUFBaUM0QywrQkFBakM7QUFDQUYsSUFBQUEsR0FBRyxDQUFDQyxHQUFKLENBQVEsS0FBSzVDLE1BQUwsQ0FBWUMsV0FBcEIsRUFBaUM2Qyw4QkFBakM7QUFDQUgsSUFBQUEsR0FBRyxDQUFDQyxHQUFKLENBQVEsS0FBSzVDLE1BQUwsQ0FBWUMsV0FBcEIsRUFBaUMsT0FBT2MsR0FBUCxFQUFZZ0MsR0FBWixLQUFvQjtBQUNuRCxZQUFNQyxNQUFNLEdBQUcsTUFBTSxLQUFLckIsVUFBTCxFQUFyQjtBQUNBLGFBQU9xQixNQUFNLENBQUNqQyxHQUFELEVBQU1nQyxHQUFOLENBQWI7QUFDRCxLQUhEO0FBSUQ7O0FBRURFLEVBQUFBLGVBQWUsQ0FBQ04sR0FBRCxFQUFNO0FBQ25CLFFBQUksQ0FBQ0EsR0FBRCxJQUFRLENBQUNBLEdBQUcsQ0FBQ08sR0FBakIsRUFBc0I7QUFDcEIsc0NBQWtCLDhDQUFsQjtBQUNEOztBQUNEUCxJQUFBQSxHQUFHLENBQUNPLEdBQUosQ0FDRSxLQUFLbEQsTUFBTCxDQUFZbUQsY0FBWixJQUNFLGdDQUFrQiw4REFBbEIsQ0FGSixFQUdFLENBQUNDLElBQUQsRUFBT0wsR0FBUCxLQUFlO0FBQ2JBLE1BQUFBLEdBQUcsQ0FBQ00sU0FBSixDQUFjLGNBQWQsRUFBOEIsV0FBOUI7QUFDQU4sTUFBQUEsR0FBRyxDQUFDTyxLQUFKLENBQ0UsMEJBQWU7QUFDYkMsUUFBQUEsUUFBUSxFQUFFLEtBQUt2RCxNQUFMLENBQVlDLFdBRFQ7QUFFYnVELFFBQUFBLG9CQUFvQixFQUFFLEtBQUt4RCxNQUFMLENBQVl5RCxpQkFGckI7QUFHYkMsUUFBQUEsT0FBTyxFQUFFQyxJQUFJLENBQUNDLFNBQUwsQ0FBZTtBQUN0QixvQ0FBMEIsS0FBSzdELFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCVSxLQUQ1QjtBQUV0QixnQ0FBc0IsS0FBS1gsV0FBTCxDQUFpQkMsTUFBakIsQ0FBd0I2RDtBQUZ4QixTQUFmO0FBSEksT0FBZixDQURGO0FBVUFkLE1BQUFBLEdBQUcsQ0FBQ2UsR0FBSjtBQUNELEtBaEJIO0FBa0JEOztBQUVEQyxFQUFBQSxtQkFBbUIsQ0FBQ2YsTUFBRCxFQUFTO0FBQzFCZ0IsaURBQW1CQyxNQUFuQixDQUNFO0FBQ0VDLE1BQUFBLE9BQU8sRUFBUEEsZ0JBREY7QUFFRUMsTUFBQUEsU0FBUyxFQUFUQSxrQkFGRjtBQUdFQyxNQUFBQSxXQUFXLEVBQUUsT0FBT0MsUUFBUCxFQUFpQkMsTUFBakIsRUFBeUJDLFNBQXpCLEtBQ1hDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JILE1BQWxCLEVBQTBCLE1BQU0sS0FBSzNELGtCQUFMLENBQXdCNEQsU0FBUyxDQUFDRyxVQUFsQyxDQUFoQztBQUpKLEtBREYsRUFPRTtBQUNFMUIsTUFBQUEsTUFERjtBQUVFMkIsTUFBQUEsSUFBSSxFQUNGLEtBQUszRSxNQUFMLENBQVl5RCxpQkFBWixJQUNBLGdDQUFrQixxRUFBbEI7QUFKSixLQVBGO0FBY0Q7O0FBRURtQixFQUFBQSxnQkFBZ0IsQ0FBQ0MsYUFBRCxFQUE2QztBQUMzRCxXQUFPLEtBQUszRSxzQkFBTCxDQUE0QjRFLG1CQUE1QixDQUFnREQsYUFBaEQsQ0FBUDtBQUNEOztBQTVIc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIsIHJlbmRlckdyYXBoaVFMIH0gZnJvbSAnQGdyYXBocWwteW9nYS9ub2RlJztcbmltcG9ydCB7IGV4ZWN1dGUsIHN1YnNjcmliZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uU2VydmVyIH0gZnJvbSAnc3Vic2NyaXB0aW9ucy10cmFuc3BvcnQtd3MnO1xuaW1wb3J0IHsgaGFuZGxlUGFyc2VFcnJvcnMsIGhhbmRsZVBhcnNlSGVhZGVycyB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6ICh7IHJlcTogeyBpbmZvLCBjb25maWcsIGF1dGggfSB9KSA9PiAoe1xuICAgICAgICAgIGluZm8sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgIH0pLFxuICAgICAgICBtYXNrZWRFcnJvcnM6IGZhbHNlLFxuICAgICAgICBtdWx0aXBhcnQ6IHtcbiAgICAgICAgICBmaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgICB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXhVcGxvYWRTaXplIHx8ICcyMG1iJ1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKCk7XG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIGFwcGx5R3JhcGhRTChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLnVzZSkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgY29yc01pZGRsZXdhcmUoKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgcmVuZGVyR3JhcGhpUUwoe1xuICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uRW5kcG9pbnQ6IHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoLFxuICAgICAgICAgICAgaGVhZGVyczogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgICAgICAgICAgICAnWC1QYXJzZS1NYXN0ZXItS2V5JzogdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTdWJzY3JpcHRpb25zKHNlcnZlcikge1xuICAgIFN1YnNjcmlwdGlvblNlcnZlci5jcmVhdGUoXG4gICAgICB7XG4gICAgICAgIGV4ZWN1dGUsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgb25PcGVyYXRpb246IGFzeW5jIChfbWVzc2FnZSwgcGFyYW1zLCB3ZWJTb2NrZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyh3ZWJTb2NrZXQudXBncmFkZVJlcSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwYXRoOlxuICAgICAgICAgIHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoIHx8XG4gICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuc3Vic2NyaXB0aW9uc1BhdGggdG8gY3JlYXRlU3Vic2NyaXB0aW9ucyEnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXX0=
124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZUdyYXBoUUxTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlU2VydmVyIiwiY29uZmlnIiwicmVxdWlyZWRQYXJhbWV0ZXIiLCJncmFwaFFMUGF0aCIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJsb2ciLCJsb2dnZXJDb250cm9sbGVyIiwiZGVmYXVsdExvZ2dlciIsInBhcnNlR3JhcGhRTFNjaGVtYSIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImRhdGFiYXNlQ29udHJvbGxlciIsImdyYXBoUUxDdXN0b21UeXBlRGVmcyIsImFwcElkIiwiX2dldEdyYXBoUUxPcHRpb25zIiwic2NoZW1hIiwibG9hZCIsImNvbnRleHQiLCJyZXEiLCJpbmZvIiwiYXV0aCIsIm1hc2tlZEVycm9ycyIsIm11bHRpcGFydCIsImZpbGVTaXplIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsImUiLCJlcnJvciIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zZXJ2ZXIiLCJvcHRpb25zIiwiY3JlYXRlU2VydmVyIiwidW5pdE1hcCIsImtiIiwibWIiLCJnYiIsIk51bWJlciIsInNsaWNlIiwiTWF0aCIsInBvdyIsInRvTG93ZXJDYXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwidXNlIiwiY29yc01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsInJlcyIsInNlcnZlciIsImFwcGx5UGxheWdyb3VuZCIsImdldCIsInBsYXlncm91bmRQYXRoIiwiX3JlcSIsInNldEhlYWRlciIsIndyaXRlIiwicmVuZGVyR3JhcGhpUUwiLCJlbmRwb2ludCIsInN1YnNjcmlwdGlvbkVuZHBvaW50Iiwic3Vic2NyaXB0aW9uc1BhdGgiLCJoZWFkZXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hc3RlcktleSIsImVuZCIsImNyZWF0ZVN1YnNjcmlwdGlvbnMiLCJTdWJzY3JpcHRpb25TZXJ2ZXIiLCJjcmVhdGUiLCJleGVjdXRlIiwic3Vic2NyaWJlIiwib25PcGVyYXRpb24iLCJfbWVzc2FnZSIsInBhcmFtcyIsIndlYlNvY2tldCIsIk9iamVjdCIsImFzc2lnbiIsInVwZ3JhZGVSZXEiLCJwYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0dyYXBoUUwvUGFyc2VHcmFwaFFMU2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3JzTWlkZGxld2FyZSBmcm9tICdjb3JzJztcbmltcG9ydCB7IGNyZWF0ZVNlcnZlciwgcmVuZGVyR3JhcGhpUUwgfSBmcm9tICdAZ3JhcGhxbC15b2dhL25vZGUnO1xuaW1wb3J0IHsgZXhlY3V0ZSwgc3Vic2NyaWJlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TZXJ2ZXIgfSBmcm9tICdzdWJzY3JpcHRpb25zLXRyYW5zcG9ydC13cyc7XG5pbXBvcnQgeyBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTZXJ2ZXIge1xuICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiBQYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnNlU2VydmVyLCBjb25maWcpIHtcbiAgICB0aGlzLnBhcnNlU2VydmVyID0gcGFyc2VTZXJ2ZXIgfHwgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZVNlcnZlciBpbnN0YW5jZSEnKTtcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLmdyYXBoUUxQYXRoKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5ncmFwaFFMUGF0aCEnKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyID0gdGhpcy5wYXJzZVNlcnZlci5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgICB0aGlzLmxvZyA9XG4gICAgICAodGhpcy5wYXJzZVNlcnZlci5jb25maWcgJiYgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubG9nZ2VyQ29udHJvbGxlcikgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYSA9IG5ldyBQYXJzZUdyYXBoUUxTY2hlbWEoe1xuICAgICAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgICAgZGF0YWJhc2VDb250cm9sbGVyOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5kYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzOiB0aGlzLmNvbmZpZy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMsXG4gICAgICBhcHBJZDogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBfZ2V0R3JhcGhRTE9wdGlvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYTogYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpLFxuICAgICAgICBjb250ZXh0OiAoeyByZXE6IHsgaW5mbywgY29uZmlnLCBhdXRoIH0gfSkgPT4gKHtcbiAgICAgICAgICBpbmZvLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBhdXRoLFxuICAgICAgICB9KSxcbiAgICAgICAgbWFza2VkRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgbXVsdGlwYXJ0OiB7XG4gICAgICAgICAgZmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgICAgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWF4VXBsb2FkU2l6ZSB8fCAnMjBtYidcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihlLnN0YWNrIHx8ICh0eXBlb2YgZS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiBlLnRvU3RyaW5nKCkpIHx8IGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZ2V0U2VydmVyKCkge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmdyYXBoUUxTY2hlbWE7XG4gICAgY29uc3QgbmV3U2NoZW1hUmVmID0gYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpO1xuICAgIGlmIChzY2hlbWFSZWYgPT09IG5ld1NjaGVtYVJlZiAmJiB0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucygpO1xuICAgIHRoaXMuX3NlcnZlciA9IGNyZWF0ZVNlcnZlcihvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCB1bml0TWFwID0ge1xuICAgICAga2I6IDEsXG4gICAgICBtYjogMixcbiAgICAgIGdiOiAzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyKG1heFVwbG9hZFNpemUuc2xpY2UoMCwgLTIpKSAqXG4gICAgICBNYXRoLnBvdygxMDI0LCB1bml0TWFwW21heFVwbG9hZFNpemUuc2xpY2UoLTIpLnRvTG93ZXJDYXNlKCldKVxuICAgICk7XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cblxuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGNvcnNNaWRkbGV3YXJlKCkpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlSGVhZGVycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VTZXNzaW9uKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgcmVuZGVyR3JhcGhpUUwoe1xuICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uRW5kcG9pbnQ6IHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoLFxuICAgICAgICAgICAgaGVhZGVyczogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgICAgICAgICAgICAnWC1QYXJzZS1NYXN0ZXItS2V5JzogdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTdWJzY3JpcHRpb25zKHNlcnZlcikge1xuICAgIFN1YnNjcmlwdGlvblNlcnZlci5jcmVhdGUoXG4gICAgICB7XG4gICAgICAgIGV4ZWN1dGUsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgb25PcGVyYXRpb246IGFzeW5jIChfbWVzc2FnZSwgcGFyYW1zLCB3ZWJTb2NrZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyh3ZWJTb2NrZXQudXBncmFkZVJlcSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwYXRoOlxuICAgICAgICAgIHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoIHx8XG4gICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuc3Vic2NyaXB0aW9uc1BhdGggdG8gY3JlYXRlU3Vic2NyaXB0aW9ucyEnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFtRztBQUFBO0FBQUE7QUFFbkcsTUFBTUEsa0JBQWtCLENBQUM7RUFHdkJDLFdBQVcsQ0FBQ0MsV0FBVyxFQUFFQyxNQUFNLEVBQUU7SUFDL0IsSUFBSSxDQUFDRCxXQUFXLEdBQUdBLFdBQVcsSUFBSSxJQUFBRSwwQkFBaUIsRUFBQywwQ0FBMEMsQ0FBQztJQUMvRixJQUFJLENBQUNELE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNFLFdBQVcsRUFBRTtNQUNsQyxJQUFBRCwwQkFBaUIsRUFBQyx3Q0FBd0MsQ0FBQztJQUM3RDtJQUNBLElBQUksQ0FBQ0QsTUFBTSxHQUFHQSxNQUFNO0lBQ3BCLElBQUksQ0FBQ0csc0JBQXNCLEdBQUcsSUFBSSxDQUFDSixXQUFXLENBQUNDLE1BQU0sQ0FBQ0csc0JBQXNCO0lBQzVFLElB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
@@ -3,38 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.deleteObject = exports.updateObject = exports.createObject = void 0;
7
-
6
+ exports.updateObject = exports.deleteObject = exports.createObject = void 0;
8
7
  var _rest = _interopRequireDefault(require("../../rest"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  const createObject = async (className, fields, config, auth, info) => {
13
10
  if (!fields) {
14
11
  fields = {};
15
12
  }
16
-
17
13
  return (await _rest.default.create(config, auth, className, fields, info.clientSDK, info.context)).response;
18
14
  };
19
-
20
15
  exports.createObject = createObject;
21
-
22
16
  const updateObject = async (className, objectId, fields, config, auth, info) => {
23
17
  if (!fields) {
24
18
  fields = {};
25
19
  }
26
-
27
20
  return (await _rest.default.update(config, auth, className, {
28
21
  objectId
29
22
  }, fields, info.clientSDK, info.context)).response;
30
23
  };
31
-
32
24
  exports.updateObject = updateObject;
33
-
34
25
  const deleteObject = async (className, objectId, config, auth, info) => {
35
26
  await _rest.default.del(config, auth, className, objectId, info.context);
36
27
  return true;
37
28
  };
38
-
39
29
  exports.deleteObject = deleteObject;
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvb2JqZWN0c011dGF0aW9ucy5qcyJdLCJuYW1lcyI6WyJjcmVhdGVPYmplY3QiLCJjbGFzc05hbWUiLCJmaWVsZHMiLCJjb25maWciLCJhdXRoIiwiaW5mbyIsInJlc3QiLCJjcmVhdGUiLCJjbGllbnRTREsiLCJjb250ZXh0IiwicmVzcG9uc2UiLCJ1cGRhdGVPYmplY3QiLCJvYmplY3RJZCIsInVwZGF0ZSIsImRlbGV0ZU9iamVjdCIsImRlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUEsTUFBTUEsWUFBWSxHQUFHLE9BQU9DLFNBQVAsRUFBa0JDLE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ0MsSUFBbEMsRUFBd0NDLElBQXhDLEtBQWlEO0FBQ3BFLE1BQUksQ0FBQ0gsTUFBTCxFQUFhO0FBQ1hBLElBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0Q7O0FBRUQsU0FBTyxDQUFDLE1BQU1JLGNBQUtDLE1BQUwsQ0FBWUosTUFBWixFQUFvQkMsSUFBcEIsRUFBMEJILFNBQTFCLEVBQXFDQyxNQUFyQyxFQUE2Q0csSUFBSSxDQUFDRyxTQUFsRCxFQUE2REgsSUFBSSxDQUFDSSxPQUFsRSxDQUFQLEVBQ0pDLFFBREg7QUFFRCxDQVBEOzs7O0FBU0EsTUFBTUMsWUFBWSxHQUFHLE9BQU9WLFNBQVAsRUFBa0JXLFFBQWxCLEVBQTRCVixNQUE1QixFQUFvQ0MsTUFBcEMsRUFBNENDLElBQTVDLEVBQWtEQyxJQUFsRCxLQUEyRDtBQUM5RSxNQUFJLENBQUNILE1BQUwsRUFBYTtBQUNYQSxJQUFBQSxNQUFNLEdBQUcsRUFBVDtBQUNEOztBQUVELFNBQU8sQ0FDTCxNQUFNSSxjQUFLTyxNQUFMLENBQVlWLE1BQVosRUFBb0JDLElBQXBCLEVBQTBCSCxTQUExQixFQUFxQztBQUFFVyxJQUFBQTtBQUFGLEdBQXJDLEVBQW1EVixNQUFuRCxFQUEyREcsSUFBSSxDQUFDRyxTQUFoRSxFQUEyRUgsSUFBSSxDQUFDSSxPQUFoRixDQURELEVBRUxDLFFBRkY7QUFHRCxDQVJEOzs7O0FBVUEsTUFBTUksWUFBWSxHQUFHLE9BQU9iLFNBQVAsRUFBa0JXLFFBQWxCLEVBQTRCVCxNQUE1QixFQUFvQ0MsSUFBcEMsRUFBMENDLElBQTFDLEtBQW1EO0FBQ3RFLFFBQU1DLGNBQUtTLEdBQUwsQ0FBU1osTUFBVCxFQUFpQkMsSUFBakIsRUFBdUJILFNBQXZCLEVBQWtDVyxRQUFsQyxFQUE0Q1AsSUFBSSxDQUFDSSxPQUFqRCxDQUFOO0FBQ0EsU0FBTyxJQUFQO0FBQ0QsQ0FIRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZXN0IGZyb20gJy4uLy4uL3Jlc3QnO1xuXG5jb25zdCBjcmVhdGVPYmplY3QgPSBhc3luYyAoY2xhc3NOYW1lLCBmaWVsZHMsIGNvbmZpZywgYXV0aCwgaW5mbykgPT4ge1xuICBpZiAoIWZpZWxkcykge1xuICAgIGZpZWxkcyA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIChhd2FpdCByZXN0LmNyZWF0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgZmllbGRzLCBpbmZvLmNsaWVudFNESywgaW5mby5jb250ZXh0KSlcbiAgICAucmVzcG9uc2U7XG59O1xuXG5jb25zdCB1cGRhdGVPYmplY3QgPSBhc3luYyAoY2xhc3NOYW1lLCBvYmplY3RJZCwgZmllbGRzLCBjb25maWcsIGF1dGgsIGluZm8pID0+IHtcbiAgaWYgKCFmaWVsZHMpIHtcbiAgICBmaWVsZHMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgcmVzdC51cGRhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHsgb2JqZWN0SWQgfSwgZmllbGRzLCBpbmZvLmNsaWVudFNESywgaW5mby5jb250ZXh0KVxuICApLnJlc3BvbnNlO1xufTtcblxuY29uc3QgZGVsZXRlT2JqZWN0ID0gYXN5bmMgKGNsYXNzTmFtZSwgb2JqZWN0SWQsIGNvbmZpZywgYXV0aCwgaW5mbykgPT4ge1xuICBhd2FpdCByZXN0LmRlbChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgb2JqZWN0SWQsIGluZm8uY29udGV4dCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlT2JqZWN0LCB1cGRhdGVPYmplY3QsIGRlbGV0ZU9iamVjdCB9O1xuIl19
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVPYmplY3QiLCJjbGFzc05hbWUiLCJmaWVsZHMiLCJjb25maWciLCJhdXRoIiwiaW5mbyIsInJlc3QiLCJjcmVhdGUiLCJjbGllbnRTREsiLCJjb250ZXh0IiwicmVzcG9uc2UiLCJ1cGRhdGVPYmplY3QiLCJvYmplY3RJZCIsInVwZGF0ZSIsImRlbGV0ZU9iamVjdCIsImRlbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvb2JqZWN0c011dGF0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVzdCBmcm9tICcuLi8uLi9yZXN0JztcblxuY29uc3QgY3JlYXRlT2JqZWN0ID0gYXN5bmMgKGNsYXNzTmFtZSwgZmllbGRzLCBjb25maWcsIGF1dGgsIGluZm8pID0+IHtcbiAgaWYgKCFmaWVsZHMpIHtcbiAgICBmaWVsZHMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiAoYXdhaXQgcmVzdC5jcmVhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIGZpZWxkcywgaW5mby5jbGllbnRTREssIGluZm8uY29udGV4dCkpXG4gICAgLnJlc3BvbnNlO1xufTtcblxuY29uc3QgdXBkYXRlT2JqZWN0ID0gYXN5bmMgKGNsYXNzTmFtZSwgb2JqZWN0SWQsIGZpZWxkcywgY29uZmlnLCBhdXRoLCBpbmZvKSA9PiB7XG4gIGlmICghZmllbGRzKSB7XG4gICAgZmllbGRzID0ge307XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IHJlc3QudXBkYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCB7IG9iamVjdElkIH0sIGZpZWxkcywgaW5mby5jbGllbnRTREssIGluZm8uY29udGV4dClcbiAgKS5yZXNwb25zZTtcbn07XG5cbmNvbnN0IGRlbGV0ZU9iamVjdCA9IGFzeW5jIChjbGFzc05hbWUsIG9iamVjdElkLCBjb25maWcsIGF1dGgsIGluZm8pID0+IHtcbiAgYXdhaXQgcmVzdC5kZWwoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdElkLCBpbmZvLmNvbnRleHQpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZU9iamVjdCwgdXBkYXRlT2JqZWN0LCBkZWxldGVPYmplY3QgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFBOEI7QUFFOUIsTUFBTUEsWUFBWSxHQUFHLE9BQU9DLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxLQUFLO0VBQ3BFLElBQUksQ0FBQ0gsTUFBTSxFQUFFO0lBQ1hBLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDYjtFQUVBLE9BQU8sQ0FBQyxNQUFNSSxhQUFJLENBQUNDLE1BQU0sQ0FBQ0osTUFBTSxFQUFFQyxJQUFJLEVBQUVILFNBQVMsRUFBRUMsTUFBTSxFQUFFRyxJQUFJLENBQUNHLFNBQVMsRUFBRUgsSUFBSSxDQUFDSSxPQUFPLENBQUMsRUFDckZDLFFBQVE7QUFDYixDQUFDO0FBQUM7QUFFRixNQUFNQyxZQUFZLEdBQUcsT0FBT1YsU0FBUyxFQUFFVyxRQUFRLEVBQUVWLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksS0FBSztFQUM5RSxJQUFJLENBQUNILE1BQU0sRUFBRTtJQUNYQSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2I7RUFFQSxPQUFPLENBQ0wsTUFBTUksYUFBSSxDQUFDTyxNQUFNLENBQUNWLE1BQU0sRUFBRUMsSUFBSSxFQUFFSCxTQUFTLEVBQUU7SUFBRVc7RUFBUyxDQUFDLEVBQUVWLE1BQU0sRUFBRUcsSUFBSSxDQUFDRyxTQUFTLEVBQUVILElBQUksQ0FBQ0ksT0FBTyxDQUFDLEVBQzlGQyxRQUFRO0FBQ1osQ0FBQztBQUFDO0FBRUYsTUFBTUksWUFBWSxHQUFHLE9BQU9iLFNBQVMsRUFBRVcsUUFBUSxFQUFFVCxNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxLQUFLO0VBQ3RFLE1BQU1DLGFBQUksQ0FBQ1MsR0FBRyxDQUFDWixNQUFNLEVBQUVDLElBQUksRUFBRUgsU0FBUyxFQUFFVyxRQUFRLEVBQUVQLElBQUksQ0FBQ0ksT0FBTyxDQUFDO0VBQy9ELE9BQU8sSUFBSTtBQUNiLENBQUM7QUFBQyJ9
@@ -3,30 +3,20 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.needToGetAllKeys = exports.calculateSkipAndLimit = exports.findObjects = exports.getObject = void 0;
7
-
6
+ exports.needToGetAllKeys = exports.getObject = exports.findObjects = exports.calculateSkipAndLimit = void 0;
8
7
  var _node = _interopRequireDefault(require("parse/node"));
9
-
10
8
  var _graphqlRelay = require("graphql-relay");
11
-
12
9
  var _rest = _interopRequireDefault(require("../../rest"));
13
-
14
10
  var _query = require("../transformers/query");
15
-
16
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
12
  // Eslint/Prettier conflict
19
-
20
13
  /* eslint-disable*/
21
14
  const needToGetAllKeys = (fields, keys, parseClasses) => keys ? keys.split(',').some(keyName => {
22
15
  const key = keyName.split('.');
23
-
24
16
  if (fields[key[0]]) {
25
17
  if (fields[key[0]].type === 'Relation') return false;
26
-
27
18
  if (fields[key[0]].type === 'Pointer') {
28
19
  const subClass = parseClasses[fields[key[0]].targetClass];
29
-
30
20
  if (subClass && subClass.fields[key[1]]) {
31
21
  // Current sub key is not custom
32
22
  return false;
@@ -35,19 +25,14 @@ const needToGetAllKeys = (fields, keys, parseClasses) => keys ? keys.split(',').
35
25
  // current key is not custom
36
26
  return false;
37
27
  }
38
- } // Key not found into Parse Schema so it's custom
39
-
40
-
28
+ }
29
+ // Key not found into Parse Schema so it's custom
41
30
  return true;
42
31
  }) : true;
43
32
  /* eslint-enable*/
44
-
45
-
46
33
  exports.needToGetAllKeys = needToGetAllKeys;
47
-
48
34
  const getObject = async (className, objectId, keys, include, readPreference, includeReadPreference, config, auth, info, parseClasses) => {
49
35
  const options = {};
50
-
51
36
  try {
52
37
  if (!needToGetAllKeys(parseClasses[className].fields, keys, parseClasses)) {
53
38
  options.keys = keys;
@@ -55,41 +40,30 @@ const getObject = async (className, objectId, keys, include, readPreference, inc
55
40
  } catch (e) {
56
41
  console.error(e);
57
42
  }
58
-
59
43
  if (include) {
60
44
  options.include = include;
61
-
62
45
  if (includeReadPreference) {
63
46
  options.includeReadPreference = includeReadPreference;
64
47
  }
65
48
  }
66
-
67
49
  if (readPreference) {
68
50
  options.readPreference = readPreference;
69
51
  }
70
-
71
52
  const response = await _rest.default.get(config, auth, className, objectId, options, info.clientSDK, info.context);
72
-
73
53
  if (!response.results || response.results.length == 0) {
74
54
  throw new _node.default.Error(_node.default.Error.OBJECT_NOT_FOUND, 'Object not found.');
75
55
  }
76
-
77
56
  const object = response.results[0];
78
-
79
57
  if (className === '_User') {
80
58
  delete object.sessionToken;
81
59
  }
82
-
83
60
  return object;
84
61
  };
85
-
86
62
  exports.getObject = getObject;
87
-
88
63
  const findObjects = async (className, where, order, skipInput, first, after, last, before, keys, include, includeAll, readPreference, includeReadPreference, subqueryReadPreference, config, auth, info, selectedFields, parseClasses) => {
89
64
  if (!where) {
90
65
  where = {};
91
66
  }
92
-
93
67
  (0, _query.transformQueryInputToParse)(where, className, parseClasses);
94
68
  const skipAndLimitCalculation = calculateSkipAndLimit(skipInput, first, after, last, before, config.maxLimit);
95
69
  let {
@@ -100,63 +74,49 @@ const findObjects = async (className, where, order, skipInput, first, after, las
100
74
  needToPreCount
101
75
  } = skipAndLimitCalculation;
102
76
  let preCount = undefined;
103
-
104
77
  if (needToPreCount) {
105
78
  const preCountOptions = {
106
79
  limit: 0,
107
80
  count: true
108
81
  };
109
-
110
82
  if (readPreference) {
111
83
  preCountOptions.readPreference = readPreference;
112
84
  }
113
-
114
85
  if (Object.keys(where).length > 0 && subqueryReadPreference) {
115
86
  preCountOptions.subqueryReadPreference = subqueryReadPreference;
116
87
  }
117
-
118
88
  preCount = (await _rest.default.find(config, auth, className, where, preCountOptions, info.clientSDK, info.context)).count;
119
-
120
89
  if ((skip || 0) + limit < preCount) {
121
90
  skip = preCount - limit;
122
91
  }
123
92
  }
124
-
125
93
  const options = {};
126
-
127
94
  if (selectedFields.find(field => field.startsWith('edges.') || field.startsWith('pageInfo.'))) {
128
95
  if (limit || limit === 0) {
129
96
  options.limit = limit;
130
97
  } else {
131
98
  options.limit = 100;
132
99
  }
133
-
134
100
  if (options.limit !== 0) {
135
101
  if (order) {
136
102
  options.order = order;
137
103
  }
138
-
139
104
  if (skip) {
140
105
  options.skip = skip;
141
106
  }
142
-
143
107
  if (config.maxLimit && options.limit > config.maxLimit) {
144
108
  // Silently replace the limit on the query with the max configured
145
109
  options.limit = config.maxLimit;
146
110
  }
147
-
148
111
  if (!needToGetAllKeys(parseClasses[className].fields, keys, parseClasses)) {
149
112
  options.keys = keys;
150
113
  }
151
-
152
114
  if (includeAll === true) {
153
115
  options.includeAll = includeAll;
154
116
  }
155
-
156
117
  if (!options.includeAll && include) {
157
118
  options.include = include;
158
119
  }
159
-
160
120
  if ((options.includeAll || options.include) && includeReadPreference) {
161
121
  options.includeReadPreference = includeReadPreference;
162
122
  }
@@ -164,30 +124,23 @@ const findObjects = async (className, where, order, skipInput, first, after, las
164
124
  } else {
165
125
  options.limit = 0;
166
126
  }
167
-
168
127
  if ((selectedFields.includes('count') || selectedFields.includes('pageInfo.hasPreviousPage') || selectedFields.includes('pageInfo.hasNextPage')) && !needToPreCount) {
169
128
  options.count = true;
170
129
  }
171
-
172
130
  if (readPreference) {
173
131
  options.readPreference = readPreference;
174
132
  }
175
-
176
133
  if (Object.keys(where).length > 0 && subqueryReadPreference) {
177
134
  options.subqueryReadPreference = subqueryReadPreference;
178
135
  }
179
-
180
136
  let results, count;
181
-
182
137
  if (options.count || !options.limit || options.limit && options.limit > 0) {
183
138
  const findResult = await _rest.default.find(config, auth, className, where, options, info.clientSDK, info.context);
184
139
  results = findResult.results;
185
140
  count = findResult.count;
186
141
  }
187
-
188
142
  let edges = null;
189
143
  let pageInfo = null;
190
-
191
144
  if (results) {
192
145
  edges = results.map((result, index) => ({
193
146
  cursor: (0, _graphqlRelay.offsetToCursor)((skip || 0) + index),
@@ -200,60 +153,54 @@ const findObjects = async (className, where, order, skipInput, first, after, las
200
153
  hasNextPage: (preCount || count) > (skip || 0) + results.length
201
154
  };
202
155
  }
203
-
204
156
  return {
205
157
  edges,
206
158
  pageInfo,
207
159
  count: preCount || count
208
160
  };
209
161
  };
210
-
211
162
  exports.findObjects = findObjects;
212
-
213
163
  const calculateSkipAndLimit = (skipInput, first, after, last, before, maxLimit) => {
214
164
  let skip = undefined;
215
165
  let limit = undefined;
216
- let needToPreCount = false; // Validates the skip input
166
+ let needToPreCount = false;
217
167
 
168
+ // Validates the skip input
218
169
  if (skipInput || skipInput === 0) {
219
170
  if (skipInput < 0) {
220
171
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'Skip should be a positive number');
221
172
  }
222
-
223
173
  skip = skipInput;
224
- } // Validates the after param
225
-
174
+ }
226
175
 
176
+ // Validates the after param
227
177
  if (after) {
228
178
  after = (0, _graphqlRelay.cursorToOffset)(after);
229
-
230
179
  if (!after && after !== 0 || after < 0) {
231
180
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'After is not a valid cursor');
232
- } // If skip and after are passed, a new skip is calculated by adding them
233
-
181
+ }
234
182
 
183
+ // If skip and after are passed, a new skip is calculated by adding them
235
184
  skip = (skip || 0) + (after + 1);
236
- } // Validates the first param
237
-
185
+ }
238
186
 
187
+ // Validates the first param
239
188
  if (first || first === 0) {
240
189
  if (first < 0) {
241
190
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'First should be a positive number');
242
- } // The first param is translated to the limit param of the Parse legacy API
243
-
191
+ }
244
192
 
193
+ // The first param is translated to the limit param of the Parse legacy API
245
194
  limit = first;
246
- } // Validates the before param
247
-
195
+ }
248
196
 
197
+ // Validates the before param
249
198
  if (before || before === 0) {
250
199
  // This method converts the cursor to the index of the object
251
200
  before = (0, _graphqlRelay.cursorToOffset)(before);
252
-
253
201
  if (!before && before !== 0 || before < 0) {
254
202
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'Before is not a valid cursor');
255
203
  }
256
-
257
204
  if ((skip || 0) >= before) {
258
205
  // If the before index is less than the skip, no objects will be returned
259
206
  limit = 0;
@@ -261,25 +208,22 @@ const calculateSkipAndLimit = (skipInput, first, after, last, before, maxLimit)
261
208
  // If there is no limit set, the limit is calculated. Or, if the limit (plus skip) is bigger than the before index, the new limit is set.
262
209
  limit = before - (skip || 0);
263
210
  }
264
- } // Validates the last param
265
-
211
+ }
266
212
 
213
+ // Validates the last param
267
214
  if (last || last === 0) {
268
215
  if (last < 0) {
269
216
  throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'Last should be a positive number');
270
217
  }
271
-
272
218
  if (last > maxLimit) {
273
219
  // Last can't be bigger than Parse server maxLimit config.
274
220
  last = maxLimit;
275
221
  }
276
-
277
222
  if (limit || limit === 0) {
278
223
  // If there is a previous limit set, it may be adjusted
279
224
  if (last < limit) {
280
225
  // if last is less than the current limit
281
226
  skip = (skip || 0) + (limit - last); // The skip is adjusted
282
-
283
227
  limit = last; // the limit is adjusted
284
228
  }
285
229
  } else if (last === 0) {
@@ -291,13 +235,11 @@ const calculateSkipAndLimit = (skipInput, first, after, last, before, maxLimit)
291
235
  needToPreCount = true;
292
236
  }
293
237
  }
294
-
295
238
  return {
296
239
  skip,
297
240
  limit,
298
241
  needToPreCount
299
242
  };
300
243
  };
301
-
302
244
  exports.calculateSkipAndLimit = calculateSkipAndLimit;
303
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvb2JqZWN0c1F1ZXJpZXMuanMiXSwibmFtZXMiOlsibmVlZFRvR2V0QWxsS2V5cyIsImZpZWxkcyIsImtleXMiLCJwYXJzZUNsYXNzZXMiLCJzcGxpdCIsInNvbWUiLCJrZXlOYW1lIiwia2V5IiwidHlwZSIsInN1YkNsYXNzIiwidGFyZ2V0Q2xhc3MiLCJnZXRPYmplY3QiLCJjbGFzc05hbWUiLCJvYmplY3RJZCIsImluY2x1ZGUiLCJyZWFkUHJlZmVyZW5jZSIsImluY2x1ZGVSZWFkUHJlZmVyZW5jZSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwib3B0aW9ucyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJyZXNwb25zZSIsInJlc3QiLCJnZXQiLCJjbGllbnRTREsiLCJjb250ZXh0IiwicmVzdWx0cyIsImxlbmd0aCIsIlBhcnNlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwib2JqZWN0Iiwic2Vzc2lvblRva2VuIiwiZmluZE9iamVjdHMiLCJ3aGVyZSIsIm9yZGVyIiwic2tpcElucHV0IiwiZmlyc3QiLCJhZnRlciIsImxhc3QiLCJiZWZvcmUiLCJpbmNsdWRlQWxsIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsInNlbGVjdGVkRmllbGRzIiwic2tpcEFuZExpbWl0Q2FsY3VsYXRpb24iLCJjYWxjdWxhdGVTa2lwQW5kTGltaXQiLCJtYXhMaW1pdCIsInNraXAiLCJsaW1pdCIsIm5lZWRUb1ByZUNvdW50IiwicHJlQ291bnQiLCJ1bmRlZmluZWQiLCJwcmVDb3VudE9wdGlvbnMiLCJjb3VudCIsIk9iamVjdCIsImZpbmQiLCJmaWVsZCIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsImZpbmRSZXN1bHQiLCJlZGdlcyIsInBhZ2VJbmZvIiwibWFwIiwicmVzdWx0IiwiaW5kZXgiLCJjdXJzb3IiLCJub2RlIiwiaGFzUHJldmlvdXNQYWdlIiwic3RhcnRDdXJzb3IiLCJlbmRDdXJzb3IiLCJoYXNO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QSxLQUFLLEdBQUcsQ0FBUjtBQUNELEtBSE0sTUFHQTtBQUNMO0FBQ0FBLE1BQUFBLEtBQUssR0FBR1QsSUFBUjtBQUNBVSxNQUFBQSxjQUFjLEdBQUcsSUFBakI7QUFDRDtBQUNGOztBQUNELFNBQU87QUFDTEYsSUFBQUEsSUFESztBQUVMQyxJQUFBQSxLQUZLO0FBR0xDLElBQUFBO0FBSEssR0FBUDtBQUtELENBbkZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgb2Zmc2V0VG9DdXJzb3IsIGN1cnNvclRvT2Zmc2V0IH0gZnJvbSAnZ3JhcGhxbC1yZWxheSc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi8uLi9yZXN0JztcbmltcG9ydCB7IHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL3F1ZXJ5JztcblxuLy8gRXNsaW50L1ByZXR0aWVyIGNvbmZsaWN0XG4vKiBlc2xpbnQtZGlzYWJsZSovXG5jb25zdCBuZWVkVG9HZXRBbGxLZXlzID0gKGZpZWxkcywga2V5cywgcGFyc2VDbGFzc2VzKSA9PlxuICBrZXlzXG4gICAgPyBrZXlzLnNwbGl0KCcsJykuc29tZShrZXlOYW1lID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5TmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoZmllbGRzW2tleVswXV0pIHtcbiAgICAgICAgICBpZiAoZmllbGRzW2tleVswXV0udHlwZSA9PT0gJ1JlbGF0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGlmIChmaWVsZHNba2V5WzBdXS50eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkNsYXNzID0gcGFyc2VDbGFzc2VzW2ZpZWxkc1trZXlbMF1dLnRhcmdldENsYXNzXTtcbiAgICAgICAgICAgIGlmIChzdWJDbGFzcyAmJiBzdWJDbGFzcy5maWVsZHNba2V5WzFdXSkge1xuICAgICAgICAgICAgICAvLyBDdXJyZW50IHN1YiBrZXkgaXMgbm90IGN1c3RvbVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICFrZXlbMV0gfHxcbiAgICAgICAgICAgIGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdBcnJheScgfHxcbiAgICAgICAgICAgIGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdPYmplY3QnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBpcyBub3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEtleSBub3QgZm91bmQgaW50byBQYXJzZSBTY2hlbWEgc28gaXQncyBjdXN0b21cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgIDogdHJ1ZTtcbi8qIGVzbGludC1lbmFibGUqL1xuXG5jb25zdCBnZXRPYmplY3QgPSBhc3luYyAoXG4gIGNsYXNzTmFtZSxcbiAgb2JqZWN0SWQsXG4gIGtleXMsXG4gIGluY2x1ZGUsXG4gIHJlYWRQcmVmZXJlbmNlLFxuICBpbmNsdWRlUmVhZFByZWZlcmVuY2UsXG4gIGNvbmZpZyxcbiAgYXV0aCxcbiAgaW5mbyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICB0cnkge1xuICAgIGlmICghbmVlZFRvR2V0QWxsS2V5cyhwYXJzZUNsYXNzZXNbY2xhc3NOYW1lXS5maWVsZHMsIGtleXMsIHBhcnNlQ2xhc3NlcykpIHtcbiAgICAgIG9wdGlvbnMua2V5cyA9IGtleXM7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICBpZiAoaW5jbHVkZSkge1xuICAgIG9wdGlvbnMuaW5jbHVkZSA9IGluY2x1ZGU7XG4gICAgaWYgKGluY2x1ZGVSZWFkUHJlZmVyZW5jZSkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBpbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICB9XG4gIGlmIChyZWFkUHJlZmVyZW5jZSkge1xuICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSByZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVzdC5nZXQoXG4gICAgY29uZmlnLFxuICAgIGF1dGgsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9iamVjdElkLFxuICAgIG9wdGlvbnMsXG4gICAgaW5mby5jbGllbnRTREssXG4gICAgaW5mby5jb250ZXh0XG4gICk7XG5cbiAgaWYgKCFyZXNwb25zZS5yZXN1bHRzIHx8IHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ09iamVjdCBub3QgZm91bmQuJyk7XG4gIH1cblxuICBjb25zdCBvYmplY3QgPSByZXNwb25zZS5yZXN1bHRzWzBdO1xuICBpZiAoY2xhc3NOYW1lID09PSAnX1VzZXInKSB7XG4gICAgZGVsZXRlIG9iamVjdC5zZXNzaW9uVG9rZW47XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbmNvbnN0IGZpbmRPYmplY3RzID0gYXN5bmMgKFxuICBjbGFzc05hbWUsXG4gIHdoZXJlLFxuICBvcmRlcixcbiAgc2tpcElucHV0LFxuICBmaXJzdCxcbiAgYWZ0ZXIsXG4gIGxhc3QsXG4gIGJlZm9yZSxcbiAga2V5cyxcbiAgaW5jbHVkZSxcbiAgaW5jbHVkZUFsbCxcbiAgcmVhZFByZWZlcmVuY2UsXG4gIGluY2x1ZGVSZWFkUHJlZmVyZW5jZSxcbiAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSxcbiAgY29uZmlnLFxuICBhdXRoLFxuICBpbmZvLFxuICBzZWxlY3RlZEZpZWxkcyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgaWYgKCF3aGVyZSkge1xuICAgIHdoZXJlID0ge307XG4gIH1cbiAgdHJhbnNmb3JtUXVlcnlJbnB1dFRvUGFyc2Uod2hlcmUsIGNsYXNzTmFtZSwgcGFyc2VDbGFzc2VzKTtcbiAgY29uc3Qgc2tpcEFuZExpbWl0Q2FsY3VsYXRpb24gPSBjYWxjdWxhdGVTa2lwQW5kTGltaXQoXG4gICAgc2tpcElucHV0LFxuICAgIGZpcnN0LFxuICAgIGFmdGVyLFxuICAgIGxhc3QsXG4gICAgYmVmb3JlLFxuICAgIGNvbmZpZy5tYXhMaW1pdFxuICApO1xuICBsZXQgeyBza2lwIH0gPSBza2lwQW5kTGltaXRDYWxjdWxhdGlvbjtcbiAgY29uc3QgeyBsaW1pdCwgbmVlZFRvUHJlQ291bnQgfSA9IHNraXBBbmRMaW1pdENhbGN1bGF0aW9uO1xuICBsZXQgcHJlQ291bnQgPSB1bmRlZmluZWQ7XG4gIGlmIChuZWVkVG9QcmVDb3VudCkge1xuICAgIGNvbnN0IHByZUNvdW50T3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiAwLFxuICAgICAgY291bnQ6IHRydWUsXG4gICAgfTtcbiAgICBpZiAocmVhZFByZWZlcmVuY2UpIHtcbiAgICAgIHByZUNvdW50T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMod2hlcmUpLmxlbmd0aCA+IDAgJiYgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSkge1xuICAgICAgcHJlQ291bnRPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBwcmVDb3VudCA9IChcbiAgICAgIGF3YWl0IHJlc3QuZmluZChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgd2hlcmUsIHByZUNvdW50T3B0aW9ucywgaW5mby5jbGllbnRTREssIGluZm8uY29udGV4dClcbiAgICApLmNvdW50O1xuICAgIGlmICgoc2tpcCB8fCAwKSArIGxpbWl0IDwgcHJlQ291bnQpIHtcbiAgICAgIHNraXAgPSBwcmVDb3VudCAtIGxpbWl0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICBpZiAoc2VsZWN0ZWRGaWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKCdlZGdlcy4nKSB8fCBmaWVsZC5zdGFydHNXaXRoKCdwYWdlSW5mby4nKSkpIHtcbiAgICBpZiAobGltaXQgfHwgbGltaXQgPT09IDApIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSBsaW1pdDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5saW1pdCA9IDEwMDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGltaXQgIT09IDApIHtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICBvcHRpb25zLm9yZGVyID0gb3JkZXI7XG4gICAgICB9XG4gICAgICBpZiAoc2tpcCkge1xuICAgICAgICBvcHRpb25zLnNraXAgPSBza2lwO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5tYXhMaW1pdCAmJiBvcHRpb25zLmxpbWl0ID4gY29uZmlnLm1heExpbWl0KSB7XG4gICAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgICBvcHRpb25zLmxpbWl0ID0gY29uZmlnLm1heExpbWl0O1xuICAgICAgfVxuICAgICAgaWYgKCFuZWVkVG9HZXRBbGxLZXlzKHBhcnNlQ2xhc3Nlc1tjbGFzc05hbWVdLmZpZWxkcywga2V5cywgcGFyc2VDbGFzc2VzKSkge1xuICAgICAgICBvcHRpb25zLmtleXMgPSBrZXlzO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVBbGwgPT09IHRydWUpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlQWxsID0gaW5jbHVkZUFsbDtcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5pbmNsdWRlQWxsICYmIGluY2x1ZGUpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gaW5jbHVkZTtcbiAgICAgIH1cbiAgICAgIGlmICgob3B0aW9ucy5pbmNsdWRlQWxsIHx8IG9wdGlvbnMuaW5jbHVkZSkgJiYgaW5jbHVkZVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmxpbWl0ID0gMDtcbiAgfVxuXG4gIGlmIChcbiAgICAoc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ2NvdW50JykgfHxcbiAgICAgIHNlbGVjdGVkRmllbGRzLmluY2x1ZGVzKCdwYWdlSW5mby5oYXNQcmV2aW91c1BhZ2UnKSB8fFxuICAgICAgc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ3BhZ2VJbmZvLmhhc05leHRQYWdlJykpICYmXG4gICAgIW5lZWRUb1ByZUNvdW50XG4gICkge1xuICAgIG9wdGlvbnMuY291bnQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyh3aGVyZSkubGVuZ3RoID4gMCAmJiBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGxldCByZXN1bHRzLCBjb3VudDtcbiAgaWYgKG9wdGlvbnMuY291bnQgfHwgIW9wdGlvbnMubGltaXQgfHwgKG9wdGlvbnMubGltaXQgJiYgb3B0aW9ucy5saW1pdCA+IDApKSB7XG4gICAgY29uc3QgZmluZFJlc3VsdCA9IGF3YWl0IHJlc3QuZmluZChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICB3aGVyZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbmZvLmNsaWVudFNESyxcbiAgICAgIGluZm8uY29udGV4dFxuICAgICk7XG4gICAgcmVzdWx0cyA9IGZpbmRSZXN1bHQucmVzdWx0cztcbiAgICBjb3VudCA9IGZpbmRSZXN1bHQuY291bnQ7XG4gIH1cblxuICBsZXQgZWRnZXMgPSBudWxsO1xuICBsZXQgcGFnZUluZm8gPSBudWxsO1xuICBpZiAocmVzdWx0cykge1xuICAgIGVkZ2VzID0gcmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+ICh7XG4gICAgICBjdXJzb3I6IG9mZnNldFRvQ3Vyc29yKChza2lwIHx8IDApICsgaW5kZXgpLFxuICAgICAgbm9kZTogcmVzdWx0LFxuICAgIH0pKTtcblxuICAgIHBhZ2VJbmZvID0ge1xuICAgICAgaGFzUHJldmlvdXNQYWdlOlxuICAgICAgICAoKHByZUNvdW50ICYmIHByZUNvdW50ID4gMCkgfHwgKGNvdW50ICYmIGNvdW50ID4gMCkpICYmIHNraXAgIT09IHVuZGVmaW5lZCAmJiBza2lwID4gMCxcbiAgICAgIHN0YXJ0Q3Vyc29yOiBvZmZzZXRUb0N1cnNvcihza2lwIHx8IDApLFxuICAgICAgZW5kQ3Vyc29yOiBvZmZzZXRUb0N1cnNvcigoc2tpcCB8fCAwKSArIChyZXN1bHRzLmxlbmd0aCB8fCAxKSAtIDEpLFxuICAgICAgaGFzTmV4dFBhZ2U6IChwcmVDb3VudCB8fCBjb3VudCkgPiAoc2tpcCB8fCAwKSArIHJlc3VsdHMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVkZ2VzLFxuICAgIHBhZ2VJbmZvLFxuICAgIGNvdW50OiBwcmVDb3VudCB8fCBjb3VudCxcbiAgfTtcbn07XG5cbmNvbnN0IGNhbGN1bGF0ZVNraXBBbmRMaW1pdCA9IChza2lwSW5wdXQsIGZpcnN0LCBhZnRlciwgbGFzdCwgYmVmb3JlLCBtYXhMaW1pdCkgPT4ge1xuICBsZXQgc2tpcCA9IHVuZGVmaW5lZDtcbiAgbGV0IGxpbWl0ID0gdW5kZWZpbmVkO1xuICBsZXQgbmVlZFRvUHJlQ291bnQgPSBmYWxzZTtcblxuICAvLyBWYWxpZGF0ZXMgdGhlIHNraXAgaW5wdXRcbiAgaWYgKHNraXBJbnB1dCB8fCBza2lwSW5wdXQgPT09IDApIHtcbiAgICBpZiAoc2tpcElucHV0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdTa2lwIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBza2lwID0gc2tpcElucHV0O1xuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBhZnRlciBwYXJhbVxuICBpZiAoYWZ0ZXIpIHtcbiAgICBhZnRlciA9IGN1cnNvclRvT2Zmc2V0KGFmdGVyKTtcbiAgICBpZiAoKCFhZnRlciAmJiBhZnRlciAhPT0gMCkgfHwgYWZ0ZXIgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0FmdGVyIGlzIG5vdCBhIHZhbGlkIGN1cnNvcicpO1xuICAgIH1cblxuICAgIC8vIElmIHNraXAgYW5kIGFmdGVyIGFyZSBwYXNzZWQsIGEgbmV3IHNraXAgaXMgY2FsY3VsYXRlZCBieSBhZGRpbmcgdGhlbVxuICAgIHNraXAgPSAoc2tpcCB8fCAwKSArIChhZnRlciArIDEpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBmaXJzdCBwYXJhbVxuICBpZiAoZmlyc3QgfHwgZmlyc3QgPT09IDApIHtcbiAgICBpZiAoZmlyc3QgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0ZpcnN0IHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBwYXJhbSBpcyB0cmFuc2xhdGVkIHRvIHRoZSBsaW1pdCBwYXJhbSBvZiB0aGUgUGFyc2UgbGVnYWN5IEFQSVxuICAgIGxpbWl0ID0gZmlyc3Q7XG4gIH1cblxuICAvLyBWYWxpZGF0ZXMgdGhlIGJlZm9yZSBwYXJhbVxuICBpZiAoYmVmb3JlIHx8IGJlZm9yZSA9PT0gMCkge1xuICAgIC8vIFRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBjdXJzb3IgdG8gdGhlIGluZGV4IG9mIHRoZSBvYmplY3RcbiAgICBiZWZvcmUgPSBjdXJzb3JUb09mZnNldChiZWZvcmUpO1xuICAgIGlmICgoIWJlZm9yZSAmJiBiZWZvcmUgIT09IDApIHx8IGJlZm9yZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnQmVmb3JlIGlzIG5vdCBhIHZhbGlkIGN1cnNvcicpO1xuICAgIH1cblxuICAgIGlmICgoc2tpcCB8fCAwKSA+PSBiZWZvcmUpIHtcbiAgICAgIC8vIElmIHRoZSBiZWZvcmUgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBza2lwLCBubyBvYmplY3RzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICAgIGxpbWl0ID0gMDtcbiAgICB9IGVsc2UgaWYgKCghbGltaXQgJiYgbGltaXQgIT09IDApIHx8IChza2lwIHx8IDApICsgbGltaXQgPiBiZWZvcmUpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGxpbWl0IHNldCwgdGhlIGxpbWl0IGlzIGNhbGN1bGF0ZWQuIE9yLCBpZiB0aGUgbGltaXQgKHBsdXMgc2tpcCkgaXMgYmlnZ2VyIHRoYW4gdGhlIGJlZm9yZSBpbmRleCwgdGhlIG5ldyBsaW1pdCBpcyBzZXQuXG4gICAgICBsaW1pdCA9IGJlZm9yZSAtIChza2lwIHx8IDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlcyB0aGUgbGFzdCBwYXJhbVxuICBpZiAobGFzdCB8fCBsYXN0ID09PSAwKSB7XG4gICAgaWYgKGxhc3QgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0xhc3Qgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKGxhc3QgPiBtYXhMaW1pdCkge1xuICAgICAgLy8gTGFzdCBjYW4ndCBiZSBiaWdnZXIgdGhhbiBQYXJzZSBzZXJ2ZXIgbWF4TGltaXQgY29uZmlnLlxuICAgICAgbGFzdCA9IG1heExpbWl0O1xuICAgIH1cblxuICAgIGlmIChsaW1pdCB8fCBsaW1pdCA9PT0gMCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBsaW1pdCBzZXQsIGl0IG1heSBiZSBhZGp1c3RlZFxuICAgICAgaWYgKGxhc3QgPCBsaW1pdCkge1xuICAgICAgICAvLyBpZiBsYXN0IGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsaW1pdFxuICAgICAgICBza2lwID0gKHNraXAgfHwgMCkgKyAobGltaXQgLSBsYXN0KTsgLy8gVGhlIHNraXAgaXMgYWRqdXN0ZWRcbiAgICAgICAgbGltaXQgPSBsYXN0OyAvLyB0aGUgbGltaXQgaXMgYWRqdXN0ZWRcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09IDApIHtcbiAgICAgIC8vIE5vIG9iamVjdHMgd2lsbCBiZSByZXR1cm5lZFxuICAgICAgbGltaXQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBwcmV2aW91cyBsaW1pdCBzZXQsIHRoZSBsaW1pdCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgYW5kIHByZSBjb3VudCBpcyBuZWVkZWQuXG4gICAgICBsaW1pdCA9IGxhc3Q7XG4gICAgICBuZWVkVG9QcmVDb3VudCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgc2tpcCxcbiAgICBsaW1pdCxcbiAgICBuZWVkVG9QcmVDb3VudCxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGdldE9iamVjdCwgZmluZE9iamVjdHMsIGNhbGN1bGF0ZVNraXBBbmRMaW1pdCwgbmVlZFRvR2V0QWxsS2V5cyB9O1xuIl19
245
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuZWVkVG9HZXRBbGxLZXlzIiwiZmllbGRzIiwia2V5cyIsInBhcnNlQ2xhc3NlcyIsInNwbGl0Iiwic29tZSIsImtleU5hbWUiLCJrZXkiLCJ0eXBlIiwic3ViQ2xhc3MiLCJ0YXJnZXRDbGFzcyIsImdldE9iamVjdCIsImNsYXNzTmFtZSIsIm9iamVjdElkIiwiaW5jbHVkZSIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwiY29uZmlnIiwiYXV0aCIsImluZm8iLCJvcHRpb25zIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsInJlc3BvbnNlIiwicmVzdCIsImdldCIsImNsaWVudFNESyIsImNvbnRleHQiLCJyZXN1bHRzIiwibGVuZ3RoIiwiUGFyc2UiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJvYmplY3QiLCJzZXNzaW9uVG9rZW4iLCJmaW5kT2JqZWN0cyIsIndoZXJlIiwib3JkZXIiLCJza2lwSW5wdXQiLCJmaXJzdCIsImFmdGVyIiwibGFzdCIsImJlZm9yZSIsImluY2x1ZGVBbGwiLCJzdWJxdWVyeVJlYWRQcmVmZXJlbmNlIiwic2VsZWN0ZWRGaWVsZHMiLCJ0cmFuc2Zvcm1RdWVyeUlucHV0VG9QYXJzZSIsInNraXBBbmRMaW1pdENhbGN1bGF0aW9uIiwiY2FsY3VsYXRlU2tpcEFuZExpbWl0IiwibWF4TGltaXQiLCJza2lwIiwibGltaXQiLCJuZWVkVG9QcmVDb3VudCIsInByZUNvdW50IiwidW5kZWZpbmVkIiwicHJlQ291bnRPcHRpb25zIiwiY291bnQiLCJPYmplY3QiLCJmaW5kIiwiZmllbGQiLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJmaW5kUmVzdWx0IiwiZWRnZXMiLCJwYWdlSW5mbyIsIm1hcCIsInJlc3VsdCIsImluZGV4IiwiY3Vyc29yIiwib2Zmc2V0VG9DdXJzb3IiLCJub2RlIiwiaGFzUHJldmlvdXNQYWdlIiwic3RhcnRDdXJzb3IiLCJlbmRDdXJzb3IiLCJoYXNOZXh0UGFnZSIsIklOVkFMSURfUVVFUlkiLCJjdXJzb3JUb09mZnNldCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvb2JqZWN0c1F1ZXJpZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgb2Zmc2V0VG9DdXJzb3IsIGN1cnNvclRvT2Zmc2V0IH0gZnJvbSAnZ3JhcGhxbC1yZWxheSc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi8uLi9yZXN0JztcbmltcG9ydCB7IHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL3F1ZXJ5JztcblxuLy8gRXNsaW50L1ByZXR0aWVyIGNvbmZsaWN0XG4vKiBlc2xpbnQtZGlzYWJsZSovXG5jb25zdCBuZWVkVG9HZXRBbGxLZXlzID0gKGZpZWxkcywga2V5cywgcGFyc2VDbGFzc2VzKSA9PlxuICBrZXlzXG4gICAgPyBrZXlzLnNwbGl0KCcsJykuc29tZShrZXlOYW1lID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5TmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoZmllbGRzW2tleVswXV0pIHtcbiAgICAgICAgICBpZiAoZmllbGRzW2tleVswXV0udHlwZSA9PT0gJ1JlbGF0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGlmIChmaWVsZHNba2V5WzBdXS50eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkNsYXNzID0gcGFyc2VDbGFzc2VzW2ZpZWxkc1trZXlbMF1dLnRhcmdldENsYXNzXTtcbiAgICAgICAgICAgIGlmIChzdWJDbGFzcyAmJiBzdWJDbGFzcy5maWVsZHNba2V5WzFdXSkge1xuICAgICAgICAgICAgICAvLyBDdXJyZW50IHN1YiBrZXkgaXMgbm90IGN1c3RvbVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICFrZXlbMV0gfHxcbiAgICAgICAgICAgIGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdBcnJheScgfHxcbiAgICAgICAgICAgIGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdPYmplY3QnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBpcyBub3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEtleSBub3QgZm91bmQgaW50byBQYXJzZSBTY2hlbWEgc28gaXQncyBjdXN0b21cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgIDogdHJ1ZTtcbi8qIGVzbGludC1lbmFibGUqL1xuXG5jb25zdCBnZXRPYmplY3QgPSBhc3luYyAoXG4gIGNsYXNzTmFtZSxcbiAgb2JqZWN0SWQsXG4gIGtleXMsXG4gIGluY2x1ZGUsXG4gIHJlYWRQcmVmZXJlbmNlLFxuICBpbmNsdWRlUmVhZFByZWZlcmVuY2UsXG4gIGNvbmZpZyxcbiAgYXV0aCxcbiAgaW5mbyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICB0cnkge1xuICAgIGlmICghbmVlZFRvR2V0QWxsS2V5cyhwYXJzZUNsYXNzZXNbY2xhc3NOYW1lXS5maWVsZHMsIGtleXMsIHBhcnNlQ2xhc3NlcykpIHtcbiAgICAgIG9wdGlvbnMua2V5cyA9IGtleXM7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICBpZiAoaW5jbHVkZSkge1xuICAgIG9wdGlvbnMuaW5jbHVkZSA9IGluY2x1ZGU7XG4gICAgaWYgKGluY2x1ZGVSZWFkUHJlZmVyZW5jZSkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBpbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICB9XG4gIGlmIChyZWFkUHJlZmVyZW5jZSkge1xuICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSByZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVzdC5nZXQoXG4gICAgY29uZmlnLFxuICAgIGF1dGgsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9iamVjdElkLFxuICAgIG9wdGlvbnMsXG4gICAgaW5mby5jbGllbnRTREssXG4gICAgaW5mby5jb250ZXh0XG4gICk7XG5cbiAgaWYgKCFyZXNwb25zZS5yZXN1bHRzIHx8IHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ09iamVjdCBub3QgZm91bmQuJyk7XG4gIH1cblxuICBjb25zdCBvYmplY3QgPSByZXNwb25zZS5yZXN1bHRzWzBdO1xuICBpZiAoY2xhc3NOYW1lID09PSAnX1VzZXInKSB7XG4gICAgZGVsZXRlIG9iamVjdC5zZXNzaW9uVG9rZW47XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbmNvbnN0IGZpbmRPYmplY3RzID0gYXN5bmMgKFxuICBjbGFzc05hbWUsXG4gIHdoZXJlLFxuICBvcmRlcixcbiAgc2tpcElucHV0LFxuICBmaXJzdCxcbiAgYWZ0ZXIsXG4gIGxhc3QsXG4gIGJlZm9yZSxcbiAga2V5cyxcbiAgaW5jbHVkZSxcbiAgaW5jbHVkZUFsbCxcbiAgcmVhZFByZWZlcmVuY2UsXG4gIGluY2x1ZGVSZWFkUHJlZmVyZW5jZSxcbiAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSxcbiAgY29uZmlnLFxuICBhdXRoLFxuICBpbmZvLFxuICBzZWxlY3RlZEZpZWxkcyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgaWYgKCF3aGVyZSkge1xuICAgIHdoZXJlID0ge307XG4gIH1cbiAgdHJhbnNmb3JtUXVlcnlJbnB1dFRvUGFyc2Uod2hlcmUsIGNsYXNzTmFtZSwgcGFyc2VDbGFzc2VzKTtcbiAgY29uc3Qgc2tpcEFuZExpbWl0Q2FsY3VsYXRpb24gPSBjYWxjdWxhdGVTa2lwQW5kTGltaXQoXG4gICAgc2tpcElucHV0LFxuICAgIGZpcnN0LFxuICAgIGFmdGVyLFxuICAgIGxhc3QsXG4gICAgYmVmb3JlLFxuICAgIGNvbmZpZy5tYXhMaW1pdFxuICApO1xuICBsZXQgeyBza2lwIH0gPSBza2lwQW5kTGltaXRDYWxjdWxhdGlvbjtcbiAgY29uc3QgeyBsaW1pdCwgbmVlZFRvUHJlQ291bnQgfSA9IHNraXBBbmRMaW1pdENhbGN1bGF0aW9uO1xuICBsZXQgcHJlQ291bnQgPSB1bmRlZmluZWQ7XG4gIGlmIChuZWVkVG9QcmVDb3VudCkge1xuICAgIGNvbnN0IHByZUNvdW50T3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiAwLFxuICAgICAgY291bnQ6IHRydWUsXG4gICAgfTtcbiAgICBpZiAocmVhZFByZWZlcmVuY2UpIHtcbiAgICAgIHByZUNvdW50T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMod2hlcmUpLmxlbmd0aCA+IDAgJiYgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSkge1xuICAgICAgcHJlQ291bnRPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBwcmVDb3VudCA9IChcbiAgICAgIGF3YWl0IHJlc3QuZmluZChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgd2hlcmUsIHByZUNvdW50T3B0aW9ucywgaW5mby5jbGllbnRTREssIGluZm8uY29udGV4dClcbiAgICApLmNvdW50O1xuICAgIGlmICgoc2tpcCB8fCAwKSArIGxpbWl0IDwgcHJlQ291bnQpIHtcbiAgICAgIHNraXAgPSBwcmVDb3VudCAtIGxpbWl0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICBpZiAoc2VsZWN0ZWRGaWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKCdlZGdlcy4nKSB8fCBmaWVsZC5zdGFydHNXaXRoKCdwYWdlSW5mby4nKSkpIHtcbiAgICBpZiAobGltaXQgfHwgbGltaXQgPT09IDApIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSBsaW1pdDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5saW1pdCA9IDEwMDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGltaXQgIT09IDApIHtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICBvcHRpb25zLm9yZGVyID0gb3JkZXI7XG4gICAgICB9XG4gICAgICBpZiAoc2tpcCkge1xuICAgICAgICBvcHRpb25zLnNraXAgPSBza2lwO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5tYXhMaW1pdCAmJiBvcHRpb25zLmxpbWl0ID4gY29uZmlnLm1heExpbWl0KSB7XG4gICAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgICBvcHRpb25zLmxpbWl0ID0gY29uZmlnLm1heExpbWl0O1xuICAgICAgfVxuICAgICAgaWYgKCFuZWVkVG9HZXRBbGxLZXlzKHBhcnNlQ2xhc3Nlc1tjbGFzc05hbWVdLmZpZWxkcywga2V5cywgcGFyc2VDbGFzc2VzKSkge1xuICAgICAgICBvcHRpb25zLmtleXMgPSBrZXlzO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVBbGwgPT09IHRydWUpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlQWxsID0gaW5jbHVkZUFsbDtcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5pbmNsdWRlQWxsICYmIGluY2x1ZGUpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gaW5jbHVkZTtcbiAgICAgIH1cbiAgICAgIGlmICgob3B0aW9ucy5pbmNsdWRlQWxsIHx8IG9wdGlvbnMuaW5jbHVkZSkgJiYgaW5jbHVkZVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmxpbWl0ID0gMDtcbiAgfVxuXG4gIGlmIChcbiAgICAoc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ2NvdW50JykgfHxcbiAgICAgIHNlbGVjdGVkRmllbGRzLmluY2x1ZGVzKCdwYWdlSW5mby5oYXNQcmV2aW91c1BhZ2UnKSB8fFxuICAgICAgc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ3BhZ2VJbmZvLmhhc05leHRQYWdlJykpICYmXG4gICAgIW5lZWRUb1ByZUNvdW50XG4gICkge1xuICAgIG9wdGlvbnMuY291bnQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyh3aGVyZSkubGVuZ3RoID4gMCAmJiBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGxldCByZXN1bHRzLCBjb3VudDtcbiAgaWYgKG9wdGlvbnMuY291bnQgfHwgIW9wdGlvbnMubGltaXQgfHwgKG9wdGlvbnMubGltaXQgJiYgb3B0aW9ucy5saW1pdCA+IDApKSB7XG4gICAgY29uc3QgZmluZFJlc3VsdCA9IGF3YWl0IHJlc3QuZmluZChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICB3aGVyZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbmZvLmNsaWVudFNESyxcbiAgICAgIGluZm8uY29udGV4dFxuICAgICk7XG4gICAgcmVzdWx0cyA9IGZpbmRSZXN1bHQucmVzdWx0cztcbiAgICBjb3VudCA9IGZpbmRSZXN1bHQuY291bnQ7XG4gIH1cblxuICBsZXQgZWRnZXMgPSBudWxsO1xuICBsZXQgcGFnZUluZm8gPSBudWxsO1xuICBpZiAocmVzdWx0cykge1xuICAgIGVkZ2VzID0gcmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+ICh7XG4gICAgICBjdXJzb3I6IG9mZnNldFRvQ3Vyc29yKChza2lwIHx8IDApICsgaW5kZXgpLFxuICAgICAgbm9kZTogcmVzdWx0LFxuICAgIH0pKTtcblxuICAgIHBhZ2VJbmZvID0ge1xuICAgICAgaGFzUHJldmlvdXNQYWdlOlxuICAgICAgICAoKHByZUNvdW50ICYmIHByZUNvdW50ID4gMCkgfHwgKGNvdW50ICYmIGNvdW50ID4gMCkpICYmIHNraXAgIT09IHVuZGVmaW5lZCAmJiBza2lwID4gMCxcbiAgICAgIHN0YXJ0Q3Vyc29yOiBvZmZzZXRUb0N1cnNvcihza2lwIHx8IDApLFxuICAgICAgZW5kQ3Vyc29yOiBvZmZzZXRUb0N1cnNvcigoc2tpcCB8fCAwKSArIChyZXN1bHRzLmxlbmd0aCB8fCAxKSAtIDEpLFxuICAgICAgaGFzTmV4dFBhZ2U6IChwcmVDb3VudCB8fCBjb3VudCkgPiAoc2tpcCB8fCAwKSArIHJlc3VsdHMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVkZ2VzLFxuICAgIHBhZ2VJbmZvLFxuICAgIGNvdW50OiBwcmVDb3VudCB8fCBjb3VudCxcbiAgfTtcbn07XG5cbmNvbnN0IGNhbGN1bGF0ZVNraXBBbmRMaW1pdCA9IChza2lwSW5wdXQsIGZpcnN0LCBhZnRlciwgbGFzdCwgYmVmb3JlLCBtYXhMaW1pdCkgPT4ge1xuICBsZXQgc2tpcCA9IHVuZGVmaW5lZDtcbiAgbGV0IGxpbWl0ID0gdW5kZWZpbmVkO1xuICBsZXQgbmVlZFRvUHJlQ291bnQgPSBmYWxzZTtcblxuICAvLyBWYWxpZGF0ZXMgdGhlIHNraXAgaW5wdXRcbiAgaWYgKHNraXBJbnB1dCB8fCBza2lwSW5wdXQgPT09IDApIHtcbiAgICBpZiAoc2tpcElucHV0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdTa2lwIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBza2lwID0gc2tpcElucHV0O1xuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBhZnRlciBwYXJhbVxuICBpZiAoYWZ0ZXIpIHtcbiAgICBhZnRlciA9IGN1cnNvclRvT2Zmc2V0KGFmdGVyKTtcbiAgICBpZiAoKCFhZnRlciAmJiBhZnRlciAhPT0gMCkgfHwgYWZ0ZXIgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0FmdGVyIGlzIG5vdCBhIHZhbGlkIGN1cnNvcicpO1xuICAgIH1cblxuICAgIC8vIElmIHNraXAgYW5kIGFmdGVyIGFyZSBwYXNzZWQsIGEgbmV3IHNraXAgaXMgY2FsY3VsYXRlZCBieSBhZGRpbmcgdGhlbVxuICAgIHNraXAgPSAoc2tpcCB8fCAwKSArIChhZnRlciArIDEpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBmaXJzdCBwYXJhbVxuICBpZiAoZmlyc3QgfHwgZmlyc3QgPT09IDApIHtcbiAgICBpZiAoZmlyc3QgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0ZpcnN0IHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBwYXJhbSBpcyB0cmFuc2xhdGVkIHRvIHRoZSBsaW1pdCBwYXJhbSBvZiB0aGUgUGFyc2UgbGVnYWN5IEFQSVxuICAgIGxpbWl0ID0gZmlyc3Q7XG4gIH1cblxuICAvLyBWYWxpZGF0ZXMgdGhlIGJlZm9yZSBwYXJhbVxuICBpZiAoYmVmb3JlIHx8IGJlZm9yZSA9PT0gMCkge1xuICAgIC8vIFRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBjdXJzb3IgdG8gdGhlIGluZGV4IG9mIHRoZSBvYmplY3RcbiAgICBiZWZvcmUgPSBjdXJzb3JUb09mZnNldChiZWZvcmUpO1xuICAgIGlmICgoIWJlZm9yZSAmJiBiZWZvcmUgIT09IDApIHx8IGJlZm9yZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnQmVmb3JlIGlzIG5vdCBhIHZhbGlkIGN1cnNvcicpO1xuICAgIH1cblxuICAgIGlmICgoc2tpcCB8fCAwKSA+PSBiZWZvcmUpIHtcbiAgICAgIC8vIElmIHRoZSBiZWZvcmUgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBza2lwLCBubyBvYmplY3RzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICAgIGxpbWl0ID0gMDtcbiAgICB9IGVsc2UgaWYgKCghbGltaXQgJiYgbGltaXQgIT09IDApIHx8IChza2lwIHx8IDApICsgbGltaXQgPiBiZWZvcmUpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGxpbWl0IHNldCwgdGhlIGxpbWl0IGlzIGNhbGN1bGF0ZWQuIE9yLCBpZiB0aGUgbGltaXQgKHBsdXMgc2tpcCkgaXMgYmlnZ2VyIHRoYW4gdGhlIGJlZm9yZSBpbmRleCwgdGhlIG5ldyBsaW1pdCBpcyBzZXQuXG4gICAgICBsaW1pdCA9IGJlZm9yZSAtIChza2lwIHx8IDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlcyB0aGUgbGFzdCBwYXJhbVxuICBpZiAobGFzdCB8fCBsYXN0ID09PSAwKSB7XG4gICAgaWYgKGxhc3QgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0xhc3Qgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKGxhc3QgPiBtYXhMaW1pdCkge1xuICAgICAgLy8gTGFzdCBjYW4ndCBiZSBiaWdnZXIgdGhhbiBQYXJzZSBzZXJ2ZXIgbWF4TGltaXQgY29uZmlnLlxuICAgICAgbGFzdCA9IG1heExpbWl0O1xuICAgIH1cblxuICAgIGlmIChsaW1pdCB8fCBsaW1pdCA9PT0gMCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBsaW1pdCBzZXQsIGl0IG1heSBiZSBhZGp1c3RlZFxuICAgICAgaWYgKGxhc3QgPCBsaW1pdCkge1xuICAgICAgICAvLyBpZiBsYXN0IGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsaW1pdFxuICAgICAgICBza2lwID0gKHNraXAgfHwgMCkgKyAobGltaXQgLSBsYXN0KTsgLy8gVGhlIHNraXAgaXMgYWRqdXN0ZWRcbiAgICAgICAgbGltaXQgPSBsYXN0OyAvLyB0aGUgbGltaXQgaXMgYWRqdXN0ZWRcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09IDApIHtcbiAgICAgIC8vIE5vIG9iamVjdHMgd2lsbCBiZSByZXR1cm5lZFxuICAgICAgbGltaXQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBwcmV2aW91cyBsaW1pdCBzZXQsIHRoZSBsaW1pdCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgYW5kIHByZSBjb3VudCBpcyBuZWVkZWQuXG4gICAgICBsaW1pdCA9IGxhc3Q7XG4gICAgICBuZWVkVG9QcmVDb3VudCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgc2tpcCxcbiAgICBsaW1pdCxcbiAgICBuZWVkVG9QcmVDb3VudCxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGdldE9iamVjdCwgZmluZE9iamVjdHMsIGNhbGN1bGF0ZVNraXBBbmRMaW1pdCwgbmVlZFRvR2V0QWxsS2V5cyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFtRTtBQUVuRTtBQUNBO0FBQ0EsTUFBTUEsZ0JBQWdCLEdBQUcsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFlBQVksS0FDbERELElBQUksR0FDQUEsSUFBSSxDQUFDRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQ0MsT0FBTyxJQUFJO0VBQzlCLE1B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