parse-server 4.10.2 → 5.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +450 -153
- package/lib/AccountLockout.js +23 -2
- package/lib/Adapters/AdapterLoader.js +1 -1
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +1 -1
- package/lib/Adapters/Auth/AuthAdapter.js +1 -1
- package/lib/Adapters/Auth/OAuth1Client.js +1 -1
- package/lib/Adapters/Auth/facebook.js +110 -10
- package/lib/Adapters/Auth/gcenter.js +1 -1
- package/lib/Adapters/Auth/gpgames.js +1 -1
- package/lib/Adapters/Auth/instagram.js +4 -2
- package/lib/Adapters/Auth/keycloak.js +1 -1
- package/lib/Adapters/Auth/ldap.js +3 -1
- package/lib/Adapters/Auth/oauth2.js +1 -1
- package/lib/Adapters/Auth/phantauth.js +1 -1
- package/lib/Adapters/Cache/CacheAdapter.js +1 -1
- package/lib/Adapters/Cache/RedisCacheAdapter.js +143 -0
- package/lib/Adapters/Cache/SchemaCache.js +31 -0
- package/lib/Adapters/Email/MailAdapter.js +1 -1
- package/lib/Adapters/Files/FilesAdapter.js +1 -1
- package/lib/Adapters/Files/GridFSBucketAdapter.js +1 -1
- package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
- package/lib/Adapters/Logger/LoggerAdapter.js +1 -1
- package/lib/Adapters/Logger/WinstonLogger.js +4 -4
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +5 -1
- package/lib/Adapters/PubSub/PubSubAdapter.js +1 -1
- package/lib/Adapters/Push/PushAdapter.js +1 -1
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +1 -1
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +1 -1
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +51 -11
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +9 -6
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +11 -1
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +91 -57
- package/lib/Adapters/WebSocketServer/WSAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +1 -1
- package/lib/Auth.js +2 -39
- package/lib/Config.js +149 -8
- package/lib/Controllers/AdaptableController.js +1 -9
- package/lib/Controllers/CacheController.js +1 -1
- package/lib/Controllers/DatabaseController.js +148 -44
- package/lib/Controllers/FilesController.js +1 -1
- package/lib/Controllers/HooksController.js +2 -2
- package/lib/Controllers/LiveQueryController.js +16 -3
- package/lib/Controllers/LoggerController.js +1 -1
- package/lib/Controllers/ParseGraphQLController.js +2 -2
- package/lib/Controllers/PushController.js +1 -1
- package/lib/Controllers/SchemaController.js +101 -88
- package/lib/Controllers/UserController.js +16 -5
- package/lib/Controllers/index.js +10 -11
- package/lib/Deprecator/Deprecations.js +28 -0
- package/lib/Deprecator/Deprecator.js +135 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +71 -39
- package/lib/GraphQL/ParseGraphQLServer.js +3 -3
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +4 -7
- package/lib/GraphQL/loaders/defaultRelaySchema.js +3 -3
- package/lib/GraphQL/loaders/filesMutations.js +2 -2
- package/lib/GraphQL/loaders/functionsMutations.js +9 -5
- package/lib/GraphQL/loaders/parseClassMutations.js +21 -9
- package/lib/GraphQL/loaders/parseClassQueries.js +9 -6
- package/lib/GraphQL/loaders/parseClassTypes.js +5 -5
- package/lib/GraphQL/loaders/schemaDirectives.js +1 -1
- package/lib/GraphQL/loaders/schemaMutations.js +8 -6
- package/lib/GraphQL/loaders/schemaQueries.js +6 -4
- package/lib/GraphQL/loaders/usersMutations.js +65 -7
- package/lib/GraphQL/transformers/constraintType.js +2 -2
- package/lib/GraphQL/transformers/inputType.js +2 -2
- package/lib/GraphQL/transformers/mutation.js +45 -10
- package/lib/GraphQL/transformers/outputType.js +2 -2
- package/lib/GraphQL/transformers/query.js +2 -2
- package/lib/GraphQL/transformers/schemaFields.js +1 -1
- package/lib/KeyPromiseQueue.js +59 -0
- package/lib/LiveQuery/Client.js +1 -1
- package/lib/LiveQuery/Id.js +1 -1
- package/lib/LiveQuery/ParseLiveQueryServer.js +158 -38
- package/lib/LiveQuery/ParseWebSocketServer.js +2 -2
- package/lib/LiveQuery/QueryTools.js +50 -1
- package/lib/LiveQuery/equalObjects.js +1 -1
- package/lib/Options/Definitions.js +220 -33
- package/lib/Options/docs.js +79 -21
- package/lib/Options/index.js +3 -1
- package/lib/Page.js +53 -0
- package/lib/ParseServer.js +37 -16
- package/lib/ParseServerRESTController.js +55 -45
- package/lib/PromiseRouter.js +7 -20
- package/lib/Push/PushQueue.js +1 -1
- package/lib/Push/PushWorker.js +2 -2
- package/lib/Push/utils.js +1 -1
- package/lib/RestQuery.js +45 -9
- package/lib/RestWrite.js +60 -10
- package/lib/Routers/AggregateRouter.js +23 -18
- package/lib/Routers/AudiencesRouter.js +2 -2
- package/lib/Routers/ClassesRouter.js +11 -11
- package/lib/Routers/CloudCodeRouter.js +1 -1
- package/lib/Routers/FeaturesRouter.js +2 -2
- package/lib/Routers/FilesRouter.js +34 -7
- package/lib/Routers/FunctionsRouter.js +2 -2
- package/lib/Routers/GlobalConfigRouter.js +2 -2
- package/lib/Routers/GraphQLRouter.js +3 -3
- package/lib/Routers/HooksRouter.js +2 -2
- package/lib/Routers/LogsRouter.js +2 -2
- package/lib/Routers/PagesRouter.js +722 -0
- package/lib/Routers/PurgeRouter.js +2 -2
- package/lib/Routers/PushRouter.js +3 -3
- package/lib/Routers/SchemasRouter.js +2 -2
- package/lib/Routers/SecurityRouter.js +47 -0
- package/lib/Routers/SessionsRouter.js +4 -2
- package/lib/Routers/UsersRouter.js +88 -17
- package/lib/Security/Check.js +118 -0
- package/lib/Security/CheckGroup.js +54 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +57 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +82 -0
- package/lib/Security/CheckGroups/CheckGroups.js +24 -0
- package/lib/Security/CheckRunner.js +236 -0
- package/lib/StatusHandler.js +27 -36
- package/lib/TestUtils.js +1 -1
- package/lib/Utils.js +226 -0
- package/lib/batch.js +55 -44
- package/lib/cli/utils/commander.js +8 -3
- package/lib/cloud-code/HTTPResponse.js +1 -1
- package/lib/cloud-code/Parse.Cloud.js +155 -19
- package/lib/cloud-code/httpRequest.js +1 -1
- package/lib/index.js +6 -12
- package/lib/middlewares.js +39 -4
- package/lib/rest.js +4 -4
- package/lib/triggers.js +134 -121
- package/lib/vendor/mongodbUrl.js +8 -10
- package/package.json +54 -29
- package/CHANGELOG.md +0 -1769
- package/lib/Adapters/Cache/RedisCacheAdapter/KeyPromiseQueue.js +0 -59
- package/lib/Adapters/Cache/RedisCacheAdapter/index.js +0 -130
- package/lib/Controllers/SchemaCache.js +0 -75
|
@@ -189,4 +189,4 @@ module.exports = function httpRequest(options) {
|
|
|
189
189
|
|
|
190
190
|
|
|
191
191
|
module.exports.encodeBody = encodeBody;
|
|
192
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbG91ZC1jb2RlL2h0dHBSZXF1ZXN0LmpzIl0sIm5hbWVzIjpbImNsaWVudHMiLCJodHRwIiwiaHR0cHMiLCJtYWtlQ2FsbGJhY2siLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzcG9uc2UiLCJjaHVua3MiLCJvbiIsImNodW5rIiwicHVzaCIsImJvZHkiLCJCdWZmZXIiLCJjb25jYXQiLCJodHRwUmVzcG9uc2UiLCJIVFRQUmVzcG9uc2UiLCJzdGF0dXMiLCJlbmNvZGVCb2R5IiwiaGVhZGVycyIsImNvbnRlbnRUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJtYXRjaCIsImxlbmd0aCIsInF1ZXJ5c3RyaW5nIiwic3RyaW5naWZ5IiwibG9nIiwiZXJyb3IiLCJjb250ZW50VHlwZSIsIkpTT04iLCJtb2R1bGUiLCJleHBvcnRzIiwiaHR0cFJlcXVlc3QiLCJvcHRpb25zIiwidXJsIiwiZSIsIlByb21pc2UiLCJhc3NpZ24iLCJwYXJhbXMiLCJxcyIsInBhcnNlIiwiY2xpZW50IiwicHJvdG9jb2wiLCJyZXF1ZXN0T3B0aW9ucyIsIm1ldGhvZCIsInBvcnQiLCJOdW1iZXIiLCJwYXRoIiwicGF0aG5hbWUiLCJob3N0bmFtZSIsImVuY29kaW5nIiwiZm9sbG93UmVkaXJlY3RzIiwiZm9yRWFjaCIsInNlYXJjaCIsInF1ZXJ5IiwiYXV0aCIsImFnZW50IiwicmVxIiwicmVxdWVzdCIsIndyaXRlIiwiZW5kIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsT0FBTyxHQUFHO0FBQ2QsV0FBU0MscUJBREs7QUFFZCxZQUFVQztBQUZJLENBQWhCOztBQUtBLFNBQVNDLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCQyxNQUEvQixFQUF1QztBQUNyQyxTQUFPLFVBQVVDLFFBQVYsRUFBb0I7QUFDekIsVUFBTUMsTUFBTSxHQUFHLEVBQWY7QUFDQUQsSUFBQUEsUUFBUSxD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bEI7QUFDRDs7QUFDRGdELElBQUFBLEdBQUcsQ0FBQ25ELEVBQUosQ0FBTyxPQUFQLEVBQWdCcUIsS0FBSyxJQUFJO0FBQ3ZCeEIsTUFBQUEsTUFBTSxDQUFDd0IsS0FBRCxDQUFOO0FBQ0QsS0FGRDtBQUdBOEIsSUFBQUEsR0FBRyxDQUFDRyxHQUFKO0FBQ0QsR0FUTSxDQUFQO0FBVUQsQ0F4REQ7QUEwREE7Ozs7Ozs7Ozs7Ozs7QUFZQTlCLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEIsVUFBZixHQUE0QkEsVUFBNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSFRUUFJlc3BvbnNlIGZyb20gJy4vSFRUUFJlc3BvbnNlJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBodHRwLCBodHRwcyB9IGZyb20gJ2ZvbGxvdy1yZWRpcmVjdHMnO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICd1cmwnO1xuXG5jb25zdCBjbGllbnRzID0ge1xuICAnaHR0cDonOiBodHRwLFxuICAnaHR0cHM6JzogaHR0cHMsXG59O1xuXG5mdW5jdGlvbiBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICByZXNwb25zZS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9KTtcbiAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBIVFRQUmVzcG9uc2UocmVzcG9uc2UsIGJvZHkpO1xuXG4gICAgICAvLyBDb25zaWRlciA8MjAwICYmID49IDQwMCBhcyBlcnJvcnNcbiAgICAgIGlmIChodHRwUmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IGh0dHBSZXNwb25zZS5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoaHR0cFJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGh0dHBSZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzcG9uc2Uub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgfTtcbn1cblxuY29uc3QgZW5jb2RlQm9keSA9IGZ1bmN0aW9uICh7IGJvZHksIGhlYWRlcnMgPSB7fSB9KSB7XG4gIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4geyBib2R5LCBoZWFkZXJzIH07XG4gIH1cbiAgdmFyIGNvbnRlbnRUeXBlS2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLmZpbHRlcihrZXkgPT4ge1xuICAgIHJldHVybiBrZXkubWF0Y2goL2NvbnRlbnQtdHlwZS9pKSAhPSBudWxsO1xuICB9KTtcblxuICBpZiAoY29udGVudFR5cGVLZXlzLmxlbmd0aCA9PSAwKSB7XG4gICAgLy8gbm8gY29udGVudCB0eXBlXG4gICAgLy8gIEFzIHBlciBodHRwczovL3BhcnNlLmNvbS9kb2NzL2Nsb3VkY29kZS9ndWlkZSNjbG91ZC1jb2RlLWFkdmFuY2VkLXNlbmRpbmctYS1wb3N0LXJlcXVlc3QgdGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMgc3VwcG9zZWRseSB4LXd3dy1mb3JtLXVybGVuY29kZWRcblxuICAgIGJvZHkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoYm9keSk7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChjb250ZW50VHlwZUtleXMubGVuZ3RoID4gMSkge1xuICAgICAgbG9nLmVycm9yKCdQYXJzZS5DbG91ZC5odHRwUmVxdWVzdCcsICdtdWx0aXBsZSBjb250ZW50LXR5cGUgaGVhZGVycyBhcmUgc2V0LicpO1xuICAgIH1cbiAgICAvLyBUaGVyZSBtYXliZSBtYW55LCB3ZSdsbCBqdXN0IHRha2UgdGhlIDFzdCBvbmVcbiAgICB2YXIgY29udGVudFR5cGUgPSBjb250ZW50VHlwZUtleXNbMF07XG4gICAgaWYgKGhlYWRlcnNbY29udGVudFR5cGVdLm1hdGNoKC9hcHBsaWNhdGlvblxcL2pzb24vaSkpIHtcbiAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbY29udGVudFR5cGVdLm1hdGNoKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC9pKSkge1xuICAgICAgYm9keSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShib2R5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYm9keSwgaGVhZGVycyB9O1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbiBIVFRQIFJlcXVlc3QuXG4gKlxuICogKipBdmFpbGFibGUgaW4gQ2xvdWQgQ29kZSBvbmx5LioqXG4gKlxuICogQnkgZGVmYXVsdCwgUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3QgZG9lcyBub3QgZm9sbG93IHJlZGlyZWN0cyBjYXVzZWQgYnkgSFRUUCAzeHggcmVzcG9uc2UgY29kZXMuIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dSZWRpcmVjdHMgb3B0aW9uIGluIHRoZSB7QGxpbmsgUGFyc2UuQ2xvdWQuSFRUUE9wdGlvbnN9IG9iamVjdCB0byBjaGFuZ2UgdGhpcyBiZWhhdmlvci5cbiAqXG4gKiBTYW1wbGUgcmVxdWVzdDpcbiAqIGBgYFxuICogUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3Qoe1xuICogICB1cmw6ICdodHRwOi8vd3d3LnBhcnNlLmNvbS8nXG4gKiB9KS50aGVuKGZ1bmN0aW9uKGh0dHBSZXNwb25zZSkge1xuICogICAvLyBzdWNjZXNzXG4gKiAgIGNvbnNvbGUubG9nKGh0dHBSZXNwb25zZS50ZXh0KTtcbiAqIH0sZnVuY3Rpb24oaHR0cFJlc3BvbnNlKSB7XG4gKiAgIC8vIGVycm9yXG4gKiAgIGNvbnNvbGUuZXJyb3IoJ1JlcXVlc3QgZmFpbGVkIHdpdGggcmVzcG9uc2UgY29kZSAnICsgaHR0cFJlc3BvbnNlLnN0YXR1cyk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBtZXRob2QgaHR0cFJlcXVlc3RcbiAqIEBuYW1lIFBhcnNlLkNsb3VkLmh0dHBSZXF1ZXN0XG4gKiBAcGFyYW0ge1BhcnNlLkNsb3VkLkhUVFBPcHRpb25zfSBvcHRpb25zIFRoZSBQYXJzZS5DbG91ZC5IVFRQT3B0aW9ucyBvYmplY3QgdGhhdCBtYWtlcyB0aGUgcmVxdWVzdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8UGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlPn0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIGEge0BsaW5rIFBhcnNlLkNsb3VkLkhUVFBSZXNwb25zZX0gb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgbGV0IHVybDtcbiAgdHJ5IHtcbiAgICB1cmwgPSBwYXJzZShvcHRpb25zLnVybCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gIH1cbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgZW5jb2RlQm9keShvcHRpb25zKSk7XG4gIC8vIHN1cHBvcnQgcGFyYW1zIG9wdGlvbnNcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zLnFzID0gb3B0aW9ucy5wYXJhbXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMucGFyYW1zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMucXMgPSBxdWVyeXN0cmluZy5wYXJzZShvcHRpb25zLnBhcmFtcyk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gY2xpZW50c1t1cmwucHJvdG9jb2xdO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJHt1cmwucHJvdG9jb2x9YCk7XG4gIH1cbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICBwb3J0OiBOdW1iZXIodXJsLnBvcnQpLFxuICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBmb2xsb3dSZWRpcmVjdHM6IG9wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSB0cnVlLFxuICB9O1xuICBpZiAocmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgIE9iamVjdC5rZXlzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICh1cmwuc2VhcmNoKSB7XG4gICAgb3B0aW9ucy5xcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucXMsIHF1ZXJ5c3RyaW5nLnBhcnNlKHVybC5xdWVyeSkpO1xuICB9XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIHJlcXVlc3RPcHRpb25zLmF1dGggPSB1cmwuYXV0aDtcbiAgfVxuICBpZiAob3B0aW9ucy5xcykge1xuICAgIHJlcXVlc3RPcHRpb25zLnBhdGggKz0gYD8ke3F1ZXJ5c3RyaW5nLnN0cmluZ2lmeShvcHRpb25zLnFzKX1gO1xuICB9XG4gIGlmIChvcHRpb25zLmFnZW50KSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYWdlbnQgPSBvcHRpb25zLmFnZW50O1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gY2xpZW50LnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG1ha2VDYWxsYmFjayhyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICByZXEud3JpdGUob3B0aW9ucy5ib2R5KTtcbiAgICB9XG4gICAgcmVxLm9uKCdlcnJvcicsIGVycm9yID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gICAgcmVxLmVuZCgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGFyc2UuQ2xvdWQuSFRUUE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfE9iamVjdH0gYm9keSBUaGUgYm9keSBvZiB0aGUgcmVxdWVzdC4gSWYgaXQgaXMgYSBKU09OIG9iamVjdCwgdGhlbiB0aGUgQ29udGVudC1UeXBlIHNldCBpbiB0aGUgaGVhZGVycyBtdXN0IGJlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvciBhcHBsaWNhdGlvbi9qc29uLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgdG8gYSB7QGxpbmsgQnVmZmVyfSBvYmplY3QgdG8gc2VuZCByYXcgYnl0ZXMuIElmIHlvdSB1c2UgYSBCdWZmZXIsIHlvdSBzaG91bGQgYWxzbyBzZXQgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgZXhwbGljaXRseSB0byBkZXNjcmliZSB3aGF0IHRoZXNlIGJ5dGVzIHJlcHJlc2VudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGVycm9yIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZhaWxzLiBJdCB3aWxsIGJlIHBhc3NlZCBhIFBhcnNlLkNsb3VkLkhUVFBSZXNwb25zZSBvYmplY3QuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGZvbGxvd1JlZGlyZWN0cyBXaGV0aGVyIHRvIGZvbGxvdyByZWRpcmVjdHMgY2F1c2VkIGJ5IEhUVFAgM3h4IHJlc3BvbnNlcy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWV0aG9kIFRoZSBtZXRob2Qgb2YgdGhlIHJlcXVlc3QuIEdFVCwgUE9TVCwgUFVULCBERUxFVEUsIEhFQUQsIGFuZCBPUFRJT05TIGFyZSBzdXBwb3J0ZWQuIFdpbGwgZGVmYXVsdCB0byBHRVQgaWYgbm90IHNwZWNpZmllZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfE9iamVjdH0gcGFyYW1zIFRoZSBxdWVyeSBwb3J0aW9uIG9mIHRoZSB1cmwuIFlvdSBjYW4gcGFzcyBhIEpTT04gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBsaWtlIHBhcmFtczoge3EgOiAnU2VhbiBQbG90dCd9IG9yIGEgcmF3IHN0cmluZyBsaWtlIHBhcmFtczpxPVNlYW4gUGxvdHQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuIEl0IHdpbGwgYmUgcGFzc2VkIGEgUGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgVGhlIHVybCB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLlxuICovXG5cbm1vZHVsZS5leHBvcnRzLmVuY29kZUJvZHkgPSBlbmNvZGVCb2R5O1xuIl19
|
|
192
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbG91ZC1jb2RlL2h0dHBSZXF1ZXN0LmpzIl0sIm5hbWVzIjpbImNsaWVudHMiLCJodHRwIiwiaHR0cHMiLCJtYWtlQ2FsbGJhY2siLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzcG9uc2UiLCJjaHVua3MiLCJvbiIsImNodW5rIiwicHVzaCIsImJvZHkiLCJCdWZmZXIiLCJjb25jYXQiLCJodHRwUmVzcG9uc2UiLCJIVFRQUmVzcG9uc2UiLCJzdGF0dXMiLCJlbmNvZGVCb2R5IiwiaGVhZGVycyIsImNvbnRlbnRUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJmaWx0ZXIiLCJrZXkiLCJtYXRjaCIsImxlbmd0aCIsInF1ZXJ5c3RyaW5nIiwic3RyaW5naWZ5IiwibG9nIiwiZXJyb3IiLCJjb250ZW50VHlwZSIsIkpTT04iLCJtb2R1bGUiLCJleHBvcnRzIiwiaHR0cFJlcXVlc3QiLCJvcHRpb25zIiwidXJsIiwiZSIsIlByb21pc2UiLCJhc3NpZ24iLCJwYXJhbXMiLCJxcyIsInBhcnNlIiwiY2xpZW50IiwicHJvdG9jb2wiLCJyZXF1ZXN0T3B0aW9ucyIsIm1ldGhvZCIsInBvcnQiLCJOdW1iZXIiLCJwYXRoIiwicGF0aG5hbWUiLCJob3N0bmFtZSIsImVuY29kaW5nIiwiZm9sbG93UmVkaXJlY3RzIiwiZm9yRWFjaCIsInNlYXJjaCIsInF1ZXJ5IiwiYXV0aCIsImFnZW50IiwicmVxIiwicmVxdWVzdCIsIndyaXRlIiwiZW5kIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsT0FBTyxHQUFHO0FBQ2QsV0FBU0MscUJBREs7QUFFZCxZQUFVQztBQUZJLENBQWhCOztBQUtBLFNBQVNDLFlBQVQsQ0FBc0JDLE9BQXRCLEVBQStCQyxNQUEvQixFQUF1QztBQUNyQyxTQUFPLFVBQVVDLFFBQVYsRUFBb0I7QUFDekIsVUFBTUMsTUFBTSxHQUFHLEVBQWY7QUFDQUQsSUFBQUEsUUFBUSxD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M0MsQ0FBWjs7QUFDQSxRQUFJQSxPQUFPLENBQUN4QixJQUFaLEVBQWtCO0FBQ2hCZ0QsTUFBQUEsR0FBRyxDQUFDRSxLQUFKLENBQVUxQixPQUFPLENBQUN4QixJQUFsQjtBQUNEOztBQUNEZ0QsSUFBQUEsR0FBRyxDQUFDbkQsRUFBSixDQUFPLE9BQVAsRUFBZ0JxQixLQUFLLElBQUk7QUFDdkJ4QixNQUFBQSxNQUFNLENBQUN3QixLQUFELENBQU47QUFDRCxLQUZEO0FBR0E4QixJQUFBQSxHQUFHLENBQUNHLEdBQUo7QUFDRCxHQVRNLENBQVA7QUFVRCxDQXhERDtBQTBEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTlCLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlaEIsVUFBZixHQUE0QkEsVUFBNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSFRUUFJlc3BvbnNlIGZyb20gJy4vSFRUUFJlc3BvbnNlJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBodHRwLCBodHRwcyB9IGZyb20gJ2ZvbGxvdy1yZWRpcmVjdHMnO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICd1cmwnO1xuXG5jb25zdCBjbGllbnRzID0ge1xuICAnaHR0cDonOiBodHRwLFxuICAnaHR0cHM6JzogaHR0cHMsXG59O1xuXG5mdW5jdGlvbiBtYWtlQ2FsbGJhY2socmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICByZXNwb25zZS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9KTtcbiAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZSA9IG5ldyBIVFRQUmVzcG9uc2UocmVzcG9uc2UsIGJvZHkpO1xuXG4gICAgICAvLyBDb25zaWRlciA8MjAwICYmID49IDQwMCBhcyBlcnJvcnNcbiAgICAgIGlmIChodHRwUmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IGh0dHBSZXNwb25zZS5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoaHR0cFJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGh0dHBSZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzcG9uc2Uub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgfTtcbn1cblxuY29uc3QgZW5jb2RlQm9keSA9IGZ1bmN0aW9uICh7IGJvZHksIGhlYWRlcnMgPSB7fSB9KSB7XG4gIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4geyBib2R5LCBoZWFkZXJzIH07XG4gIH1cbiAgdmFyIGNvbnRlbnRUeXBlS2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpLmZpbHRlcihrZXkgPT4ge1xuICAgIHJldHVybiBrZXkubWF0Y2goL2NvbnRlbnQtdHlwZS9pKSAhPSBudWxsO1xuICB9KTtcblxuICBpZiAoY29udGVudFR5cGVLZXlzLmxlbmd0aCA9PSAwKSB7XG4gICAgLy8gbm8gY29udGVudCB0eXBlXG4gICAgLy8gIEFzIHBlciBodHRwczovL3BhcnNlLmNvbS9kb2NzL2Nsb3VkY29kZS9ndWlkZSNjbG91ZC1jb2RlLWFkdmFuY2VkLXNlbmRpbmctYS1wb3N0LXJlcXVlc3QgdGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMgc3VwcG9zZWRseSB4LXd3dy1mb3JtLXVybGVuY29kZWRcblxuICAgIGJvZHkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoYm9keSk7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChjb250ZW50VHlwZUtleXMubGVuZ3RoID4gMSkge1xuICAgICAgbG9nLmVycm9yKCdQYXJzZS5DbG91ZC5odHRwUmVxdWVzdCcsICdtdWx0aXBsZSBjb250ZW50LXR5cGUgaGVhZGVycyBhcmUgc2V0LicpO1xuICAgIH1cbiAgICAvLyBUaGVyZSBtYXliZSBtYW55LCB3ZSdsbCBqdXN0IHRha2UgdGhlIDFzdCBvbmVcbiAgICB2YXIgY29udGVudFR5cGUgPSBjb250ZW50VHlwZUtleXNbMF07XG4gICAgaWYgKGhlYWRlcnNbY29udGVudFR5cGVdLm1hdGNoKC9hcHBsaWNhdGlvblxcL2pzb24vaSkpIHtcbiAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbY29udGVudFR5cGVdLm1hdGNoKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC9pKSkge1xuICAgICAgYm9keSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShib2R5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYm9keSwgaGVhZGVycyB9O1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbiBIVFRQIFJlcXVlc3QuXG4gKlxuICogKipBdmFpbGFibGUgaW4gQ2xvdWQgQ29kZSBvbmx5LioqXG4gKlxuICogQnkgZGVmYXVsdCwgUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3QgZG9lcyBub3QgZm9sbG93IHJlZGlyZWN0cyBjYXVzZWQgYnkgSFRUUCAzeHggcmVzcG9uc2UgY29kZXMuIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dSZWRpcmVjdHMgb3B0aW9uIGluIHRoZSB7QGxpbmsgUGFyc2UuQ2xvdWQuSFRUUE9wdGlvbnN9IG9iamVjdCB0byBjaGFuZ2UgdGhpcyBiZWhhdmlvci5cbiAqXG4gKiBTYW1wbGUgcmVxdWVzdDpcbiAqIGBgYFxuICogUGFyc2UuQ2xvdWQuaHR0cFJlcXVlc3Qoe1xuICogICB1cmw6ICdodHRwOi8vd3d3LnBhcnNlLmNvbS8nXG4gKiB9KS50aGVuKGZ1bmN0aW9uKGh0dHBSZXNwb25zZSkge1xuICogICAvLyBzdWNjZXNzXG4gKiAgIGNvbnNvbGUubG9nKGh0dHBSZXNwb25zZS50ZXh0KTtcbiAqIH0sZnVuY3Rpb24oaHR0cFJlc3BvbnNlKSB7XG4gKiAgIC8vIGVycm9yXG4gKiAgIGNvbnNvbGUuZXJyb3IoJ1JlcXVlc3QgZmFpbGVkIHdpdGggcmVzcG9uc2UgY29kZSAnICsgaHR0cFJlc3BvbnNlLnN0YXR1cyk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBtZXRob2QgaHR0cFJlcXVlc3RcbiAqIEBuYW1lIFBhcnNlLkNsb3VkLmh0dHBSZXF1ZXN0XG4gKiBAcGFyYW0ge1BhcnNlLkNsb3VkLkhUVFBPcHRpb25zfSBvcHRpb25zIFRoZSBQYXJzZS5DbG91ZC5IVFRQT3B0aW9ucyBvYmplY3QgdGhhdCBtYWtlcyB0aGUgcmVxdWVzdC5cbiAqIEByZXR1cm4ge1Byb21pc2U8UGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlPn0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIGEge0BsaW5rIFBhcnNlLkNsb3VkLkhUVFBSZXNwb25zZX0gb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGh0dHBSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgbGV0IHVybDtcbiAgdHJ5IHtcbiAgICB1cmwgPSBwYXJzZShvcHRpb25zLnVybCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gIH1cbiAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgZW5jb2RlQm9keShvcHRpb25zKSk7XG4gIC8vIHN1cHBvcnQgcGFyYW1zIG9wdGlvbnNcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zLnFzID0gb3B0aW9ucy5wYXJhbXM7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMucGFyYW1zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMucXMgPSBxdWVyeXN0cmluZy5wYXJzZShvcHRpb25zLnBhcmFtcyk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gY2xpZW50c1t1cmwucHJvdG9jb2xdO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJHt1cmwucHJvdG9jb2x9YCk7XG4gIH1cbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICBwb3J0OiBOdW1iZXIodXJsLnBvcnQpLFxuICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBmb2xsb3dSZWRpcmVjdHM6IG9wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSB0cnVlLFxuICB9O1xuICBpZiAocmVxdWVzdE9wdGlvbnMuaGVhZGVycykge1xuICAgIE9iamVjdC5rZXlzKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmICh1cmwuc2VhcmNoKSB7XG4gICAgb3B0aW9ucy5xcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucXMsIHF1ZXJ5c3RyaW5nLnBhcnNlKHVybC5xdWVyeSkpO1xuICB9XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIHJlcXVlc3RPcHRpb25zLmF1dGggPSB1cmwuYXV0aDtcbiAgfVxuICBpZiAob3B0aW9ucy5xcykge1xuICAgIHJlcXVlc3RPcHRpb25zLnBhdGggKz0gYD8ke3F1ZXJ5c3RyaW5nLnN0cmluZ2lmeShvcHRpb25zLnFzKX1gO1xuICB9XG4gIGlmIChvcHRpb25zLmFnZW50KSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuYWdlbnQgPSBvcHRpb25zLmFnZW50O1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gY2xpZW50LnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIG1ha2VDYWxsYmFjayhyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICByZXEud3JpdGUob3B0aW9ucy5ib2R5KTtcbiAgICB9XG4gICAgcmVxLm9uKCdlcnJvcicsIGVycm9yID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG4gICAgcmVxLmVuZCgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGFyc2UuQ2xvdWQuSFRUUE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfE9iamVjdH0gYm9keSBUaGUgYm9keSBvZiB0aGUgcmVxdWVzdC4gSWYgaXQgaXMgYSBKU09OIG9iamVjdCwgdGhlbiB0aGUgQ29udGVudC1UeXBlIHNldCBpbiB0aGUgaGVhZGVycyBtdXN0IGJlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvciBhcHBsaWNhdGlvbi9qc29uLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgdG8gYSB7QGxpbmsgQnVmZmVyfSBvYmplY3QgdG8gc2VuZCByYXcgYnl0ZXMuIElmIHlvdSB1c2UgYSBCdWZmZXIsIHlvdSBzaG91bGQgYWxzbyBzZXQgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgZXhwbGljaXRseSB0byBkZXNjcmliZSB3aGF0IHRoZXNlIGJ5dGVzIHJlcHJlc2VudC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGVycm9yIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGZhaWxzLiBJdCB3aWxsIGJlIHBhc3NlZCBhIFBhcnNlLkNsb3VkLkhUVFBSZXNwb25zZSBvYmplY3QuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGZvbGxvd1JlZGlyZWN0cyBXaGV0aGVyIHRvIGZvbGxvdyByZWRpcmVjdHMgY2F1c2VkIGJ5IEhUVFAgM3h4IHJlc3BvbnNlcy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWV0aG9kIFRoZSBtZXRob2Qgb2YgdGhlIHJlcXVlc3QuIEdFVCwgUE9TVCwgUFVULCBERUxFVEUsIEhFQUQsIGFuZCBPUFRJT05TIGFyZSBzdXBwb3J0ZWQuIFdpbGwgZGVmYXVsdCB0byBHRVQgaWYgbm90IHNwZWNpZmllZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfE9iamVjdH0gcGFyYW1zIFRoZSBxdWVyeSBwb3J0aW9uIG9mIHRoZSB1cmwuIFlvdSBjYW4gcGFzcyBhIEpTT04gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlycyBsaWtlIHBhcmFtczoge3EgOiAnU2VhbiBQbG90dCd9IG9yIGEgcmF3IHN0cmluZyBsaWtlIHBhcmFtczpxPVNlYW4gUGxvdHQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBzdWNjZXNzIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuIEl0IHdpbGwgYmUgcGFzc2VkIGEgUGFyc2UuQ2xvdWQuSFRUUFJlc3BvbnNlIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgVGhlIHVybCB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLlxuICovXG5cbm1vZHVsZS5leHBvcnRzLmVuY29kZUJvZHkgPSBlbmNvZGVCb2R5O1xuIl19
|
package/lib/index.js
CHANGED
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "S3Adapter", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _s3FilesAdapter.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
6
|
Object.defineProperty(exports, "FileSystemAdapter", {
|
|
13
7
|
enumerable: true,
|
|
14
8
|
get: function () {
|
|
@@ -51,12 +45,10 @@ Object.defineProperty(exports, "ParseGraphQLServer", {
|
|
|
51
45
|
return _ParseGraphQLServer.ParseGraphQLServer;
|
|
52
46
|
}
|
|
53
47
|
});
|
|
54
|
-
exports.TestUtils = exports.ParseServer = exports.GCSAdapter = exports.default = void 0;
|
|
48
|
+
exports.TestUtils = exports.ParseServer = exports.GCSAdapter = exports.S3Adapter = exports.default = void 0;
|
|
55
49
|
|
|
56
50
|
var _ParseServer2 = _interopRequireDefault(require("./ParseServer"));
|
|
57
51
|
|
|
58
|
-
var _s3FilesAdapter = _interopRequireDefault(require("@parse/s3-files-adapter"));
|
|
59
|
-
|
|
60
52
|
var _fsFilesAdapter = _interopRequireDefault(require("@parse/fs-files-adapter"));
|
|
61
53
|
|
|
62
54
|
var _InMemoryCacheAdapter = _interopRequireDefault(require("./Adapters/Cache/InMemoryCacheAdapter"));
|
|
@@ -81,9 +73,9 @@ var _Options = require("./Options");
|
|
|
81
73
|
|
|
82
74
|
var _ParseGraphQLServer = require("./GraphQL/ParseGraphQLServer");
|
|
83
75
|
|
|
84
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var
|
|
76
|
+
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); }
|
|
85
77
|
|
|
86
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
|
|
78
|
+
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; }
|
|
87
79
|
|
|
88
80
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
89
81
|
|
|
@@ -97,6 +89,8 @@ const _ParseServer = function (options) {
|
|
|
97
89
|
exports.ParseServer = _ParseServer;
|
|
98
90
|
_ParseServer.createLiveQueryServer = _ParseServer2.default.createLiveQueryServer;
|
|
99
91
|
_ParseServer.start = _ParseServer2.default.start;
|
|
92
|
+
const S3Adapter = (0, _deprecated.useExternal)('S3Adapter', '@parse/s3-files-adapter');
|
|
93
|
+
exports.S3Adapter = S3Adapter;
|
|
100
94
|
const GCSAdapter = (0, _deprecated.useExternal)('GCSAdapter', '@parse/gcs-files-adapter');
|
|
101
95
|
exports.GCSAdapter = GCSAdapter;
|
|
102
96
|
Object.defineProperty(module.exports, 'logger', {
|
|
@@ -104,4 +98,4 @@ Object.defineProperty(module.exports, 'logger', {
|
|
|
104
98
|
});
|
|
105
99
|
var _default = _ParseServer2.default;
|
|
106
100
|
exports.default = _default;
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJfUGFyc2VTZXJ2ZXIiLCJvcHRpb25zIiwic2VydmVyIiwiUGFyc2VTZXJ2ZXIiLCJhcHAiLCJjcmVhdGVMaXZlUXVlcnlTZXJ2ZXIiLCJzdGFydCIsIlMzQWRhcHRlciIsIkdDU0FkYXB0ZXIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIm1vZHVsZSIsImV4cG9ydHMiLCJnZXQiLCJnZXRMb2dnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVBO0FBQ0EsTUFBTUEsWUFBWSxHQUFHLFVBQVVDLE9BQVYsRUFBdUM7QUFDMUQsUUFBTUMsTUFBTSxHQUFHLElBQUlDLHFCQUFKLENBQWdCRixPQUFoQixDQUFmO0FBQ0EsU0FBT0MsTUFBTSxDQUFDRSxHQUFkO0FBQ0QsQ0FIRCxDLENBSUE7Ozs7QUFDQUosWUFBWSxDQUFDSyxxQkFBYixHQUFxQ0Ysc0JBQVlFLHFCQUFqRDtBQUNBTCxZQUFZLENBQUNNLEtBQWIsR0FBcUJILHNCQUFZRyxLQUFqQztBQUVBLE1BQU1DLFNBQVMsR0FBRyw2QkFBWSxXQUFaLEVBQXlCLHlCQUF6QixDQUFsQjs7QUFDQSxNQUFNQyxVQUFVLEdBQUcsNkJBQVksWUFBWixFQUEwQiwwQkFBMUIsQ0FBbkI7O0FBRUFDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBTSxDQUFDQyxPQUE3QixFQUFzQyxRQUF0QyxFQUFnRDtBQUM5Q0MsRUFBQUEsR0FBRyxFQUFFQztBQUR5QyxDQUFoRDtlQUllWCxxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZVNlcnZlciBmcm9tICcuL1BhcnNlU2VydmVyJztcbmltcG9ydCBGaWxlU3lzdGVtQWRhcHRlciBmcm9tICdAcGFyc2UvZnMtZmlsZXMtYWRhcHRlcic7XG5pbXBvcnQgSW5NZW1vcnlDYWNoZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9DYWNoZS9Jbk1lbW9yeUNhY2hlQWRhcHRlcic7XG5pbXBvcnQgTnVsbENhY2hlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL0NhY2hlL051bGxDYWNoZUFkYXB0ZXInO1xuaW1wb3J0IFJlZGlzQ2FjaGVBZGFwdGVyIGZyb20gJy4vQWRhcHRlcnMvQ2FjaGUvUmVkaXNDYWNoZUFkYXB0ZXInO1xuaW1wb3J0IExSVUNhY2hlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL0NhY2hlL0xSVUNhY2hlLmpzJztcbmltcG9ydCAqIGFzIFRlc3RVdGlscyBmcm9tICcuL1Rlc3RVdGlscyc7XG5pbXBvcnQgeyB1c2VFeHRlcm5hbCB9IGZyb20gJy4vZGVwcmVjYXRlZCc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBQdXNoV29ya2VyIH0gZnJvbSAnLi9QdXNoL1B1c2hXb3JrZXInO1xuaW1wb3J0IHsgUGFyc2VTZXJ2ZXJPcHRpb25zIH0gZnJvbSAnLi9PcHRpb25zJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNlcnZlciB9IGZyb20gJy4vR3JhcGhRTC9QYXJzZUdyYXBoUUxTZXJ2ZXInO1xuXG4vLyBGYWN0b3J5IGZ1bmN0aW9uXG5jb25zdCBfUGFyc2VTZXJ2ZXIgPSBmdW5jdGlvbiAob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKSB7XG4gIGNvbnN0IHNlcnZlciA9IG5ldyBQYXJzZVNlcnZlcihvcHRpb25zKTtcbiAgcmV0dXJuIHNlcnZlci5hcHA7XG59O1xuLy8gTW91bnQgdGhlIGNyZWF0ZSBsaXZlUXVlcnlTZXJ2ZXJcbl9QYXJzZVNlcnZlci5jcmVhdGVMaXZlUXVlcnlTZXJ2ZXIgPSBQYXJzZVNlcnZlci5jcmVhdGVMaXZlUXVlcnlTZXJ2ZXI7XG5fUGFyc2VTZXJ2ZXIuc3RhcnQgPSBQYXJzZVNlcnZlci5zdGFydDtcblxuY29uc3QgUzNBZGFwdGVyID0gdXNlRXh0ZXJuYWwoJ1MzQWRhcHRlcicsICdAcGFyc2UvczMtZmlsZXMtYWRhcHRlcicpO1xuY29uc3QgR0NTQWRhcHRlciA9IHVzZUV4dGVybmFsKCdHQ1NBZGFwdGVyJywgJ0BwYXJzZS9nY3MtZmlsZXMtYWRhcHRlcicpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdsb2dnZXInLCB7XG4gIGdldDogZ2V0TG9nZ2VyLFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNlU2VydmVyO1xuZXhwb3J0IHtcbiAgUzNBZGFwdGVyLFxuICBHQ1NBZGFwdGVyLFxuICBGaWxlU3lzdGVtQWRhcHRlcixcbiAgSW5NZW1vcnlDYWNoZUFkYXB0ZXIsXG4gIE51bGxDYWNoZUFkYXB0ZXIsXG4gIFJlZGlzQ2FjaGVBZGFwdGVyLFxuICBMUlVDYWNoZUFkYXB0ZXIsXG4gIFRlc3RVdGlscyxcbiAgUHVzaFdvcmtlcixcbiAgUGFyc2VHcmFwaFFMU2VydmVyLFxuICBfUGFyc2VTZXJ2ZXIgYXMgUGFyc2VTZXJ2ZXIsXG59O1xuIl19
|
package/lib/middlewares.js
CHANGED
|
@@ -47,6 +47,20 @@ const getMountForRequest = function (req) {
|
|
|
47
47
|
|
|
48
48
|
function handleParseHeaders(req, res, next) {
|
|
49
49
|
var mount = getMountForRequest(req);
|
|
50
|
+
let context = {};
|
|
51
|
+
|
|
52
|
+
if (req.get('X-Parse-Cloud-Context') != null) {
|
|
53
|
+
try {
|
|
54
|
+
context = JSON.parse(req.get('X-Parse-Cloud-Context'));
|
|
55
|
+
|
|
56
|
+
if (Object.prototype.toString.call(context) !== '[object Object]') {
|
|
57
|
+
throw 'Context is not an object';
|
|
58
|
+
}
|
|
59
|
+
} catch (e) {
|
|
60
|
+
return malformedContext(req, res);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
50
64
|
var info = {
|
|
51
65
|
appId: req.get('X-Parse-Application-Id'),
|
|
52
66
|
sessionToken: req.get('X-Parse-Session-Token'),
|
|
@@ -57,7 +71,7 @@ function handleParseHeaders(req, res, next) {
|
|
|
57
71
|
dotNetKey: req.get('X-Parse-Windows-Key'),
|
|
58
72
|
restAPIKey: req.get('X-Parse-REST-API-Key'),
|
|
59
73
|
clientVersion: req.get('X-Parse-Client-Version'),
|
|
60
|
-
context:
|
|
74
|
+
context: context
|
|
61
75
|
};
|
|
62
76
|
var basicAuth = httpAuth(req);
|
|
63
77
|
|
|
@@ -127,8 +141,21 @@ function handleParseHeaders(req, res, next) {
|
|
|
127
141
|
delete req.body._MasterKey;
|
|
128
142
|
}
|
|
129
143
|
|
|
130
|
-
if (req.body._context
|
|
131
|
-
|
|
144
|
+
if (req.body._context) {
|
|
145
|
+
if (req.body._context instanceof Object) {
|
|
146
|
+
info.context = req.body._context;
|
|
147
|
+
} else {
|
|
148
|
+
try {
|
|
149
|
+
info.context = JSON.parse(req.body._context);
|
|
150
|
+
|
|
151
|
+
if (Object.prototype.toString.call(info.context) !== '[object Object]') {
|
|
152
|
+
throw 'Context is not an object';
|
|
153
|
+
}
|
|
154
|
+
} catch (e) {
|
|
155
|
+
return malformedContext(req, res);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
132
159
|
delete req.body._context;
|
|
133
160
|
}
|
|
134
161
|
|
|
@@ -489,4 +516,12 @@ function invalidRequest(req, res) {
|
|
|
489
516
|
res.status(403);
|
|
490
517
|
res.end('{"error":"unauthorized"}');
|
|
491
518
|
}
|
|
492
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImdldE1vdW50Rm9yUmVxdWVzdCIsInJlcSIsIm1vdW50UGF0aExlbmd0aCIsIm9yaWdpbmFsVXJsIiwibGVuZ3RoIiwidXJsIiwibW91bnRQYXRoIiwic2xpY2UiLCJwcm90b2NvbCIsImdldCIsImhhbmRsZVBhcnNlSGVhZGVycyIsInJlcyIsIm5leHQiLCJtb3VudCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsImluc3RhbGxhdGlvbklkIiwiY2xpZW50S2V5IiwiamF2YXNjcmlwdEtleSIsImRvdE5ldEtleSIsInJlc3RBUElLZXkiLCJjbGllbnRWZXJzaW9uIiwiY29udGV4dCIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJKU09OIiwicGFyc2UiLCJlIiwiaW52YWxpZFJlcXVlc3QiLCJfUmV2b2NhYmxlU2Vzc2lvbiIsIl9BcHBsaWNhdGlvbklkIiwiX0phdmFTY3JpcHRLZXkiLCJfQ2xpZW50VmVyc2lvbiIsIl9JbnN0YWxsYXRpb25JZCIsIl9TZXNzaW9uVG9rZW4iLCJfTWFzdGVyS2V5IiwiX2NvbnRleHQiLCJPYmplY3QiLCJfQ29udGVudFR5cGUiLCJoZWFkZXJzIiwidG9TdHJpbmciLCJjbGllbnRTREsiLCJDbGllbnRTREsiLCJmcm9tU3RyaW5nIiwiZmlsZURhdGEiLCJiYXNlNjQiLCJmcm9tIiwiY2xpZW50SXAiLCJnZXRDbGllbnRJcCIsImFwcCIsImNvbmZpZyIsIkNvbmZpZyIsImlwIiwibWFzdGVyS2V5SXBzIiwiaW5kZXhPZiIsImlzTWFzdGVyIiwiYXV0aCIsIkF1dGgiLCJpc1JlYWRPbmx5TWFzdGVyIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJpc1JlYWRPbmx5Iiwia2V5cyIsIm9uZUtleUNvbmZpZ3VyZWQiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwib25lS2V5TWF0Y2hlcyIsInVzZXJGcm9tSldUIiwidXNlciIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4iLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwiY2F0Y2giLCJlcnJvciIsIlBhcnNlIiwiRXJyb3IiLCJsb2dnZXJDb250cm9sbGVyIiwiVU5LTk9XTl9FUlJPUiIsInNwbGl0IiwiY29ubmVjdGlvbiIsInJlbW90ZUFkZHJlc3MiLCJzb2NrZXQiLCJhdXRob3JpemF0aW9uIiwiaGVhZGVyIiwiYXV0aFByZWZpeCIsIm1hdGNoIiwidG9Mb3dlckNhc2UiLCJlbmNvZGVkQXV0aCIsInN1YnN0cmluZyIsImNyZWRlbnRpYWxzIiwiZGVjb2RlQmFzZTY0IiwianNLZXlQcmVmaXgiLCJtYXRjaEtleSIsInN0ciIsImFsbG93Q3Jvc3NEb21haW4iLCJhbGxvd0hlYWRlcnMiLCJqb2luIiwiYWxsb3dPcmlnaW4iLCJtZXRob2QiLCJzZW5kU3RhdHVzIiwiYWxsb3dNZXRob2RPdmVycmlkZSIsIl9tZXRob2QiLCJvcmlnaW5hbE1ldGhvZCIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZXJyIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsImVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIiLCJodHRwU3RhdHVzIiwiY29kZSIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwic3RhY2siLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZW5kIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJyZXF1ZXN0IiwicHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IiwiZGF0YWJhc2UiLCJhZGFwdGVyIiwiTW9uZ29TdG9yYWdlQWRhcHRlciIsInJlcXVlc3RJZCIsInBhdGhzIiwidHRsIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwicmVxUGF0aCIsInBhdGgiLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJjaGFyQXQiLCJleHBpcnlEYXRlIiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwicmVzdCIsImNyZWF0ZSIsIm1hc3RlciIsInJlcUlkIiwiZXhwaXJlIiwiX2VuY29kZSIsIkRVUExJQ0FURV9WQUxVRSIsIkRVUExJQ0FURV9SRVFVRVNUIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsdUJBQXVCLEdBQ2xDLCtPQURLOzs7QUFHUCxNQUFNQyxrQkFBa0IsR0FBRyxVQUFVQyxHQUFWLEVBQWU7QUFDeEMsUUFBTUMsZUFBZSxHQUFHRCxHQUFHLENBQUNFLFdBQUosQ0FBZ0JDLE1BQWhCLEdBQXlCSCxHQUFHLENBQUNJLEdBQUosQ0FBUUQsTUFBekQ7QUFDQSxRQUFNRSxTQUFTLEdBQUdMLEdBQUcsQ0FBQ0UsV0FBSixDQUFnQkksS0FBaEIsQ0FBc0IsQ0FBdEIsRUFBeUJMLGVBQXpCLENBQWxCO0FBQ0EsU0FBT0QsR0FBRyxDQUFDTyxRQUFKLEdBQWUsS0FBZixHQUF1QlAsR0FBRyxDQUFDUSxHQUFKLENBQVEsTUFBUixDQUF2QixHQUF5Q0gsU0FBaEQ7QUFDRCxDQUpELEMsQ0FNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNJLGtCQUFULENBQTRCVCxHQUE1QixFQUFpQ1UsR0FBakMsRUFBc0NDLElBQXRDLEVBQTRDO0FBQ2pELE1BQUlDLEtBQUssR0FBR2Isa0JBQWtCLENBQUNDLEdBQUQsQ0FBOUI7QUFFQSxNQUFJYSxJQUFJLEdBQUc7QUFDVEMsSUFBQUEsS0FBSyxFQUFFZCxHQUFHLENBQUNRLEdBQUosQ0FBUSx3QkFBUixDQURFO0FBRVRPLElBQUFBLFlBQVksRUFBRWYsR0FBRyxDQUFDUSxH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aGUnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGF1dGggZnJvbSAnLi9BdXRoJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi9Db25maWcnO1xuaW1wb3J0IENsaWVudFNESyBmcm9tICcuL0NsaWVudFNESyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgdmFyIGluZm8gPSB7XG4gICAgYXBwSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnKSxcbiAgICBzZXNzaW9uVG9rZW46IHJlcS5nZXQoJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbicpLFxuICAgIG1hc3RlcktleTogcmVxLmdldCgnWC1QYXJzZS1NYXN0ZXItS2V5JyksXG4gICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtSW5zdGFsbGF0aW9uLUlkJyksXG4gICAgY2xpZW50S2V5OiByZXEuZ2V0KCdYLVBhcnNlLUNsaWVudC1LZXknKSxcbiAgICBqYXZhc2NyaXB0S2V5OiByZXEuZ2V0KCdYLVBhcnNlLUphdmFzY3JpcHQtS2V5JyksXG4gICAgZG90TmV0S2V5OiByZXEuZ2V0KCdYLVBhcnNlLVdpbmRvd3MtS2V5JyksXG4gICAgcmVzdEFQSUtleTogcmVxLmdldCgnWC1QYXJzZS1SRVNULUFQSS1LZXknKSxcbiAgICBjbGllbnRWZXJzaW9uOiByZXEuZ2V0KCdYLVBhcnNlLUNsaWVudC1WZXJzaW9uJyksXG4gICAgY29udGV4dDoge30sXG4gIH07XG5cbiAgdmFyIGJhc2ljQXV0aCA9IGh0dHBBdXRoKHJlcSk7XG5cbiAgaWYgKGJhc2ljQXV0aCkge1xuICAgIHZhciBiYXNpY0F1dGhBcHBJZCA9IGJhc2ljQXV0aC5hcHBJZDtcbiAgICBpZiAoQXBwQ2FjaGUuZ2V0KGJhc2ljQXV0aEFwcElkKSkge1xuICAgICAgaW5mby5hcHBJZCA9IGJhc2ljQXV0aEFwcElkO1xuICAgICAgaW5mby5tYXN0ZXJLZXkgPSBiYXNpY0F1dGgubWFzdGVyS2V5IHx8IGluZm8ubWFzdGVyS2V5O1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gYmFzaWNBdXRoLmphdmFzY3JpcHRLZXkgfHwgaW5mby5qYXZhc2NyaXB0S2V5O1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYm9keSkge1xuICAgIC8vIFVuaXR5IFNESyBzZW5kcyBhIF9ub0JvZHkga2V5IHdoaWNoIG5lZWRzIHRvIGJlIHJlbW92ZWQuXG4gICAgLy8gVW5jbGVhciBhdCB0aGlzIHBvaW50IGlmIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi5cbiAgICBkZWxldGUgcmVxLmJvZHkuX25vQm9keTtcbiAgfVxuXG4gIHZhciBmaWxlVmlhSlNPTiA9IGZhbHNlO1xuXG4gIGlmICghaW5mby5hcHBJZCB8fCAhQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpKSB7XG4gICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBhcHAgaWQgb24gdGhlIGJvZHkuXG4gICAgaWYgKHJlcS5ib2R5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAvLyBUaGUgb25seSBjaGFuY2UgdG8gZmluZCB0aGUgYXBwIGlkIGlzIGlmIHRoaXMgaXMgYSBmaWxlXG4gICAgICAvLyB1cGxvYWQgdGhhdCBhY3R1YWxseSBpcyBhIEpTT04gYm9keS4gU28gdHJ5IHRvIHBhcnNlIGl0LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNlLWNvbW11bml0eS9wYXJzZS1zZXJ2ZXIvaXNzdWVzLzY1ODlcbiAgICAgIC8vIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0aGUgY2xpZW50IGlzIHRyeWluZyB0byB1cGxvYWQgYSBmaWxlIGJ1dCBmb3Jnb3RcbiAgICAgIC8vIHRvIHByb3ZpZGUgeC1wYXJzZS1hcHAtaWQgaW4gaGVhZGVyIGFuZCBwYXJzZSBhIGJpbmFyeSBmaWxlIHdpbGwgZmFpbFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxLmJvZHkgPSBKU09OLnBhcnNlKHJlcS5ib2R5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVWaWFKU09OID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVxLmJvZHkpIHtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fUmV2b2NhYmxlU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXEuYm9keSAmJlxuICAgICAgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQgJiZcbiAgICAgIEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkgJiZcbiAgICAgICghaW5mby5tYXN0ZXJLZXkgfHwgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKS5tYXN0ZXJLZXkgPT09IGluZm8ubWFzdGVyS2V5KVxuICAgICkge1xuICAgICAgaW5mby5hcHBJZCA9IHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gcmVxLmJvZHkuX0phdmFTY3JpcHRLZXkgfHwgJyc7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0phdmFTY3JpcHRLZXk7XG4gICAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhlIFJFU1QgQVBJIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlclxuICAgICAgLy8gU0RLcyBhcmUgaGFuZGxlZCBva1xuICAgICAgaWYgKHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uKSB7XG4gICAgICAgIGluZm8uY2xpZW50VmVyc2lvbiA9IHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0NsaWVudFZlcnNpb247XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX0luc3RhbGxhdGlvbklkKSB7XG4gICAgICAgIGluZm8uaW5zdGFsbGF0aW9uSWQgPSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX1Nlc3Npb25Ub2tlbikge1xuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9NYXN0ZXJLZXkpIHtcbiAgICAgICAgaW5mby5tYXN0ZXJLZXkgPSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCAmJiByZXEuYm9keS5fY29udGV4dCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBpbmZvLmNvbnRleHQgPSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9Db250ZW50VHlwZSkge1xuICAgICAgICByZXEuaGVhZGVyc1snY29udGVudC10eXBlJ10gPSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZm8uc2Vzc2lvblRva2VuICYmIHR5cGVvZiBpbmZvLnNlc3Npb25Ub2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IGluZm8uc2Vzc2lvblRva2VuLnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAoaW5mby5jbGllbnRWZXJzaW9uKSB7XG4gICAgaW5mby5jbGllbnRTREsgPSBDbGllbnRTREsuZnJvbVN0cmluZyhpbmZvLmNsaWVudFZlcnNpb24pO1xuICB9XG5cbiAgaWYgKGZpbGVWaWFKU09OKSB7XG4gICAgcmVxLmZpbGVEYXRhID0gcmVxLmJvZHkuZmlsZURhdGE7XG4gICAgLy8gV2UgbmVlZCB0byByZXBvcHVsYXRlIHJlcS5ib2R5IHdpdGggYSBidWZmZXJcbiAgICB2YXIgYmFzZTY0ID0gcmVxLmJvZHkuYmFzZTY0O1xuICAgIHJlcS5ib2R5ID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIH1cblxuICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG5cbiAgaW5mby5hcHAgPSBBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCk7XG4gIHJlcS5jb25maWcgPSBDb25maWcuZ2V0KGluZm8uYXBwSWQsIG1vdW50KTtcbiAgcmVxLmNvbmZpZy5oZWFkZXJzID0gcmVxLmhlYWRlcnMgfHwge307XG4gIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgcmVxLmluZm8gPSBpbmZvO1xuXG4gIGlmIChcbiAgICBpbmZvLm1hc3RlcktleSAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzICYmXG4gICAgcmVxLmNvbmZpZy5tYXN0ZXJLZXlJcHMubGVuZ3RoICE9PSAwICYmXG4gICAgcmVxLmNvbmZpZy5tYXN0ZXJLZXlJcHMuaW5kZXhPZihjbGllbnRJcCkgPT09IC0xXG4gICkge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICB2YXIgaXNNYXN0ZXIgPSBpbmZvLm1hc3RlcktleSA9PT0gcmVxLmNvbmZpZy5tYXN0ZXJLZXk7XG5cbiAgaWYgKGlzTWFzdGVyKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IHRydWUsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBpc1JlYWRPbmx5TWFzdGVyID0gaW5mby5tYXN0ZXJLZXkgPT09IHJlcS5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXk7XG4gIGlmIChcbiAgICB0eXBlb2YgcmVxLmNvbmZpZy5yZWFkT25seU1hc3RlcktleSAhPSAndW5kZWZpbmVkJyAmJlxuICAgIHJlcS5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgJiZcbiAgICBpc1JlYWRPbmx5TWFzdGVyXG4gICkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiB0cnVlLFxuICAgICAgaXNSZWFkT25seTogdHJ1ZSxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2xpZW50IGtleXMgYXJlIG5vdCByZXF1aXJlZCBpbiBwYXJzZS1zZXJ2ZXIsIGJ1dCBpZiBhbnkgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgaW4gdGhlIHNlcnZlciwgdmFsaWRhdGUgdGhlbVxuICAvLyAgdG8gcHJlc2VydmUgb3JpZ2luYWwgYmVoYXZpb3IuXG4gIGNvbnN0IGtleXMgPSBbJ2NsaWVudEtleScsICdqYXZhc2NyaXB0S2V5JywgJ2RvdE5ldEtleScsICdyZXN0QVBJS2V5J107XG4gIGNvbnN0IG9uZUtleUNvbmZpZ3VyZWQgPSBrZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiByZXEuY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgfSk7XG4gIGNvbnN0IG9uZUtleU1hdGNoZXMgPSBrZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiByZXEuY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiBpbmZvW2tleV0gPT09IHJlcS5jb25maWdba2V5XTtcbiAgfSk7XG5cbiAgaWYgKG9uZUtleUNvbmZpZ3VyZWQgJiYgIW9uZUtleU1hdGNoZXMpIHtcbiAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICB9XG5cbiAgaWYgKHJlcS51cmwgPT0gJy9sb2dpbicpIHtcbiAgICBkZWxldGUgaW5mby5zZXNzaW9uVG9rZW47XG4gIH1cblxuICBpZiAocmVxLnVzZXJGcm9tSldUKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgdXNlcjogcmVxLnVzZXJGcm9tSldULFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWluZm8uc2Vzc2lvblRva2VuKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICAvLyBoYW5kbGUgdGhlIHVwZ3JhZGVUb1Jldm9jYWJsZVNlc3Npb24gcGF0aCBvbiBpdCdzIG93blxuICAgICAgaWYgKFxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiAmJlxuICAgICAgICByZXEudXJsID09PSAnL3VwZ3JhZGVUb1Jldm9jYWJsZVNlc3Npb24nICYmXG4gICAgICAgIGluZm8uc2Vzc2lvblRva2VuLmluZGV4T2YoJ3I6JykgIT0gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBhdXRoLmdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4oe1xuICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC50aGVuKGF1dGggPT4ge1xuICAgICAgaWYgKGF1dGgpIHtcbiAgICAgICAgcmVxLmF1dGggPSBhdXRoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERldGVybWluZSB0aGUgY29ycmVjdCBlcnJvciBzY2VuYXJpby5cbiAgICAgICAgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLmVycm9yKCdlcnJvciBnZXR0aW5nIGF1dGggZm9yIHNlc3Npb25Ub2tlbicsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlVOS05PV05fRVJST1IsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50SXAocmVxKSB7XG4gIGlmIChyZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10pIHtcbiAgICAvLyB0cnkgdG8gZ2V0IGZyb20geC1mb3J3YXJlZC1mb3IgaWYgaXQgc2V0IChiZWhpbmQgcmV2ZXJzZSBwcm94eSlcbiAgICByZXR1cm4gcmVxLmhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddLnNwbGl0KCcsJylbMF07XG4gIH0gZWxzZSBpZiAocmVxLmNvbm5lY3Rpb24gJiYgcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcykge1xuICAgIC8vIG5vIHByb3h5LCB0cnkgZ2V0dGluZyBmcm9tIGNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzc1xuICAgIHJldHVybiByZXEuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzO1xuICB9IGVsc2UgaWYgKHJlcS5zb2NrZXQpIHtcbiAgICAvLyB0cnkgdG8gZ2V0IGl0IGZyb20gcmVxLnNvY2tldFxuICAgIHJldHVybiByZXEuc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gIH0gZWxzZSBpZiAocmVxLmNvbm5lY3Rpb24gJiYgcmVxLmNvbm5lY3Rpb24uc29ja2V0KSB7XG4gICAgLy8gdHJ5IHRvIGdldCBpdCBmb3JtIHRoZSBjb25uZWN0aW9uLnNvY2tldFxuICAgIHJldHVybiByZXEuY29ubmVjdGlvbi5zb2NrZXQucmVtb3RlQWRkcmVzcztcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBub24gYWJvdmUsIGZhbGxiYWNrLlxuICAgIHJldHVybiByZXEuaXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gaHR0cEF1dGgocmVxKSB7XG4gIGlmICghKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHJldHVybjtcblxuICB2YXIgaGVhZGVyID0gKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gIHZhciBhcHBJZCwgbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5O1xuXG4gIC8vIHBhcnNlIGhlYWRlclxuICB2YXIgYXV0aFByZWZpeCA9ICdiYXNpYyAnO1xuXG4gIHZhciBtYXRjaCA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYXV0aFByZWZpeCk7XG5cbiAgaWYgKG1hdGNoID09IDApIHtcbiAgICB2YXIgZW5jb2RlZEF1dGggPSBoZWFkZXIuc3Vic3RyaW5nKGF1dGhQcmVmaXgubGVuZ3RoLCBoZWFkZXIubGVuZ3RoKTtcbiAgICB2YXIgY3JlZGVudGlhbHMgPSBkZWNvZGVCYXNlNjQoZW5jb2RlZEF1dGgpLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID09IDIpIHtcbiAgICAgIGFwcElkID0gY3JlZGVudGlhbHNbMF07XG4gICAgICB2YXIga2V5ID0gY3JlZGVudGlhbHNbMV07XG5cbiAgICAgIHZhciBqc0tleVByZWZpeCA9ICdqYXZhc2NyaXB0LWtleT0nO1xuXG4gICAgICB2YXIgbWF0Y2hLZXkgPSBrZXkuaW5kZXhPZihqc0tleVByZWZpeCk7XG4gICAgICBpZiAobWF0Y2hLZXkgPT0gMCkge1xuICAgICAgICBqYXZhc2NyaXB0S2V5ID0ga2V5LnN1YnN0cmluZyhqc0tleVByZWZpeC5sZW5ndGgsIGtleS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFzdGVyS2V5ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFwcElkOiBhcHBJZCwgbWFzdGVyS2V5OiBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk6IGphdmFzY3JpcHRLZXkgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93Q3Jvc3NEb21haW4oYXBwSWQpIHtcbiAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIGdldE1vdW50Rm9yUmVxdWVzdChyZXEpKTtcbiAgICBsZXQgYWxsb3dIZWFkZXJzID0gREVGQVVMVF9BTExPV0VEX0hFQURFUlM7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dIZWFkZXJzKSB7XG4gICAgICBhbGxvd0hlYWRlcnMgKz0gYCwgJHtjb25maWcuYWxsb3dIZWFkZXJzLmpvaW4oJywgJyl9YDtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dPcmlnaW4gPSAoY29uZmlnICYmIGNvbmZpZy5hbGxvd09yaWdpbikgfHwgJyonO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsIGFsbG93T3JpZ2luKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCxQVVQsUE9TVCxERUxFVEUsT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCBhbGxvd0hlYWRlcnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJywgJ1gtUGFyc2UtSm9iLVN0YXR1cy1JZCwgWC1QYXJzZS1QdXNoLVN0YXR1cy1JZCcpO1xuICAgIC8vIGludGVyY2VwdCBPUFRJT05TIG1ldGhvZFxuICAgIGlmICgnT1BUSU9OUycgPT0gcmVxLm1ldGhvZCkge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93TWV0aG9kT3ZlcnJpZGUocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdQT1NUJyAmJiByZXEuYm9keS5fbWV0aG9kKSB7XG4gICAgcmVxLm9yaWdpbmFsTWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICByZXEubWV0aG9kID0gcmVxLmJvZHkuX21ldGhvZDtcbiAgICBkZWxldGUgcmVxLmJvZHkuX21ldGhvZDtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVQYXJzZUVycm9ycyhlcnIsIHJlcSwgcmVzLCBuZXh0KSB7XG4gIGNvbnN0IGxvZyA9IChyZXEuY29uZmlnICYmIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlcikgfHwgZGVmYXVsdExvZ2dlcjtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgaWYgKHJlcS5jb25maWcgJiYgcmVxLmNvbmZpZy5lbmFibGVFeHByZXNzRXJyb3JIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgIH1cbiAgICBsZXQgaHR0cFN0YXR1cztcbiAgICAvLyBUT0RPOiBmaWxsIG91dCB0aGlzIG1hcHBpbmdcbiAgICBzd2l0Y2ggKGVyci5jb2RlKSB7XG4gICAgICBjYXNlIFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUjpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDUwMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDQwMDtcbiAgICB9XG4gICAgcmVzLnN0YXR1cyhodHRwU3RhdHVzKTtcbiAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgbG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgfSBlbHNlIGlmIChlcnIuc3RhdHVzICYmIGVyci5tZXNzYWdlKSB7XG4gICAgcmVzLnN0YXR1cyhlcnIuc3RhdHVzKTtcbiAgICByZXMuanNvbih7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVyciwgZXJyLnN0YWNrKTtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIHNlcnZlciBlcnJvci4nLFxuICAgIH0pO1xuICAgIGlmICghKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYuVEVTVElORykpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkXCJ9Jyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcXVlc3QpIHtcbiAgaWYgKCFyZXF1ZXN0LmF1dGguaXNNYXN0ZXIpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vKipcbiAqIERlZHVwbGljYXRlcyBhIHJlcXVlc3QgdG8gZW5zdXJlIGlkZW1wb3RlbmN5LiBEdXBsaWNhdGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSByZXF1ZXN0IElEXG4gKiBpbiB0aGUgcmVxdWVzdCBoZWFkZXIuIElmIGEgcmVxdWVzdCBoYXMgbm8gcmVxdWVzdCBJRCwgaXQgaXMgZXhlY3V0ZWQgYW55d2F5LlxuICogQHBhcmFtIHsqfSByZXEgVGhlIHJlcXVlc3QgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBQcm9taXNlPHt9PlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5KHJlcSkge1xuICAvLyBFbmFibGUgZmVhdHVyZSBvbmx5IGZvciBNb25nb0RCXG4gIGlmICghKHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIE1vbmdvU3RvcmFnZUFkYXB0ZXIpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIEdldCBwYXJhbWV0ZXJzXG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gIGNvbnN0IHJlcXVlc3RJZCA9ICgocmVxIHx8IHt9KS5oZWFkZXJzIHx8IHt9KVsneC1wYXJzZS1yZXF1ZXN0LWlkJ107XG4gIGNvbnN0IHsgcGF0aHMsIHR0bCB9ID0gY29uZmlnLmlkZW1wb3RlbmN5T3B0aW9ucztcbiAgaWYgKCFyZXF1ZXN0SWQgfHwgIWNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gUmVxdWVzdCBwYXRoIG1heSBjb250YWluIHRyYWlsaW5nIHNsYXNoZXMsIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgc28gcmVtb3ZlXG4gIC8vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BlY2lmeSBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvblxuICBjb25zdCByZXFQYXRoID0gcmVxLnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kLywgJycpO1xuICAvLyBEZXRlcm1pbmUgd2hldGhlciBpZGVtcG90ZW5jeSBpcyBlbmFibGVkIGZvciBjdXJyZW50IHJlcXVlc3QgcGF0aFxuICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgLy8gQXNzdW1lIG9uZSB3YW50cyBhIHBhdGggdG8gYWx3YXlzIG1hdGNoIGZyb20gdGhlIGJlZ2lubmluZyB0byBwcmV2ZW50IGFueSBtaXN0YWtlc1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXRoLmNoYXJBdCgwKSA9PT0gJ14nID8gcGF0aCA6ICdeJyArIHBhdGgpO1xuICAgIGlmIChyZXFQYXRoLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gVHJ5IHRvIHN0b3JlIHJlcXVlc3RcbiAgY29uc3QgZXhwaXJ5RGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0U2Vjb25kcyhuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSArIHR0bCkpO1xuICByZXR1cm4gcmVzdFxuICAgIC5jcmVhdGUoY29uZmlnLCBhdXRoLm1hc3Rlcihjb25maWcpLCAnX0lkZW1wb3RlbmN5Jywge1xuICAgICAgcmVxSWQ6IHJlcXVlc3RJZCxcbiAgICAgIGV4cGlyZTogUGFyc2UuX2VuY29kZShleHBpcnlEYXRlKSxcbiAgICB9KVxuICAgIC5jYXRjaChlID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT0gUGFyc2UuRXJyb3IuRFVQTElDQVRFX1ZBTFVFKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5EVVBMSUNBVEVfUkVRVUVTVCwgJ0R1cGxpY2F0ZSByZXF1ZXN0Jyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMyk7XG4gIHJlcy5lbmQoJ3tcImVycm9yXCI6XCJ1bmF1dGhvcml6ZWRcIn0nKTtcbn1cbiJdfQ==
|
|
519
|
+
|
|
520
|
+
function malformedContext(req, res) {
|
|
521
|
+
res.status(400);
|
|
522
|
+
res.json({
|
|
523
|
+
code: _node.default.Error.INVALID_JSON,
|
|
524
|
+
error: 'Invalid object for context.'
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImdldE1vdW50Rm9yUmVxdWVzdCIsInJlcSIsIm1vdW50UGF0aExlbmd0aCIsIm9yaWdpbmFsVXJsIiwibGVuZ3RoIiwidXJsIiwibW91bnRQYXRoIiwic2xpY2UiLCJwcm90b2NvbCIsImdldCIsImhhbmRsZVBhcnNlSGVhZGVycyIsInJlcyIsIm5leHQiLCJtb3VudCIsImNvbnRleHQiLCJKU09OIiwicGFyc2UiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJlIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsImluc3RhbGxhdGlvbklkIiwiY2xpZW50S2V5IiwiamF2YXNjcmlwdEtleSIsImRvdE5ldEtleSIsInJlc3RBUElLZXkiLCJjbGllbnRWZXJzaW9uIiwiYmFzaWNBdXRoIiwiaHR0cEF1dGgiLCJiYXNpY0F1dGhBcHBJZCIsIkFwcENhY2hlIiwiYm9keSIsIl9ub0JvZHkiLCJmaWxlVmlhSlNPTiIsIkJ1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiX0NvbnRlbnRUeXBlIiwiaGVhZGVycyIsImNsaWVudFNESyIsIkNsaWVudFNESyIsImZyb21TdHJpbmciLCJmaWxlRGF0YSIsImJhc2U2NCIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiYXBwIiwiY29uZmlnIiwiQ29uZmlnIiwiaXAiLCJtYXN0ZXJLZXlJcHMiLCJpbmRleE9mIiwiaXNNYXN0ZXIiLCJhdXRoIiwiQXV0aCIsImlzUmVhZE9ubHlNYXN0ZXIiLCJyZWFkT25seU1hc3RlcktleSIsImlzUmVhZE9ubHkiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwidXNlckZyb21KV1QiLCJ1c2VyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJjYXRjaCIsImVycm9yIiwiUGFyc2UiLCJFcnJvciIsImxvZ2dlckNvbnRyb2xsZXIiLCJVTktOT1dOX0VSUk9SIiwic3BsaXQiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsInNvY2tldCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXIiLCJhdXRoUHJlZml4IiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsImVuY29kZWRBdXRoIiwic3Vic3RyaW5nIiwiY3JlZGVudGlhbHMiLCJkZWNvZGVCYXNlNjQiLCJqc0tleVByZWZpeCIsIm1hdGNoS2V5Iiwic3RyIiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93SGVhZGVycyIsImpvaW4iLCJhbGxvd09yaWdpbiIsIm1ldGhvZCIsInNlbmRTdGF0dXMiLCJhbGxvd01ldGhvZE92ZXJyaWRlIiwiX21ldGhvZCIsIm9yaWdpbmFsTWV0aG9kIiwiaGFuZGxlUGFyc2VFcnJvcnMiLCJlcnIiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsImh0dHBTdGF0dXMiLCJjb2RlIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiT0JKRUNUX05PVF9GT1VORCIsInN0YXR1cyIsImpzb24iLCJtZXNzYWdlIiwicHJvY2VzcyIsImVudiIsIlRFU1RJTkciLCJzdGFjayIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJlbmQiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsInJlcXVlc3QiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJkYXRhYmFzZSIsImFkYXB0ZXIiLCJNb25nb1N0b3JhZ2VBZGFwdGVyIiwicmVxdWVzdElkIiwicGF0aHMiLCJ0dGwiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJyZXFQYXRoIiwicGF0aCIsInJlcGxhY2UiLCJyZWdleCIsIlJlZ0V4cCIsImNoYXJBdCIsImV4cGlyeURhdGUiLCJEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJyZXN0IiwiY3JlYXRlIiwibWFzdGVyIiwicmVxSWQiLCJleHBpcmUiLCJfZW5jb2RlIiwiRFVQTElDQVRFX1ZBTFVFIiwiRFVQTElDQVRFX1JFUVVFU1QiLCJJTlZBTElEX0pTT04iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFTyxNQUFNQSx1QkFBdUIsR0FDbEMsK09BREs7OztBQUdQLE1BQU1DLGtCQUFrQixHQUFHLFVBQVVDLEdBQVYsRUFBZTtBQUN4QyxRQUFNQyxlQUFlLEdBQUdELEdBQUcsQ0FBQ0UsV0FBSixDQUFnQkMsTUFBaEIsR0FBeUJILEdBQUcsQ0FBQ0ksR0FBSixDQUFRRCxNQUF6RDtBQUNBLFFBQU1FLFNBQVMsR0FBR0wsR0FBRyxDQUFDRSxXQUFKLENBQWdCSSxLQUFoQixDQUFzQixDQUF0QixFQUF5QkwsZUFBekIsQ0FBbEI7QUFDQSxTQUFPRCxHQUFHLENBQUNPLFFBQUosR0FBZSxLQUFmLEdBQXVCUCxHQUFHLENBQUNRLEdBQUosQ0FBUSxNQUFSLENBQXZCLEdBQXlDSCxTQUFoRDtBQUNELENBSkQsQyxDQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0ksa0JBQVQsQ0FBNEJULEdBQTVCLEVBQWlDVSxHQUFqQyxFQUFzQ0MsSUFBdEMsRUFBNEM7QUFDakQsTUFBSUMsS0FBSyxHQUFHYixrQkFBa0IsQ0FBQ0MsR0FBRCxDQUE5QjtBQUVBLE1BQUlhLE9BQU8sR0FBRyxFQUFkOztBQUNBLE1BQUliLEdBQUcsQ0FBQ1EsR0FBSixDQUFR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SUFBSSxFQUFFbkMsY0FBTUMsS0FBTixDQUFZMEUsWUFBcEI7QUFBa0M1RSxJQUFBQSxLQUFLLEVBQUU7QUFBekMsR0FBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFwcENhY2hlIGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IGF1dGggZnJvbSAnLi9BdXRoJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi9Db25maWcnO1xuaW1wb3J0IENsaWVudFNESyBmcm9tICcuL0NsaWVudFNESyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgaW5mbyA9IHtcbiAgICBhcHBJZDogcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpLFxuICAgIHNlc3Npb25Ub2tlbjogcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyksXG4gICAgbWFzdGVyS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSxcbiAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICBjbGllbnRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LUtleScpLFxuICAgIGphdmFzY3JpcHRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtSmF2YXNjcmlwdC1LZXknKSxcbiAgICBkb3ROZXRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtV2luZG93cy1LZXknKSxcbiAgICByZXN0QVBJS2V5OiByZXEuZ2V0KCdYLVBhcnNlLVJFU1QtQVBJLUtleScpLFxuICAgIGNsaWVudFZlcnNpb246IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LVZlcnNpb24nKSxcbiAgICBjb250ZXh0OiBjb250ZXh0LFxuICB9O1xuXG4gIHZhciBiYXNpY0F1dGggPSBodHRwQXV0aChyZXEpO1xuXG4gIGlmIChiYXNpY0F1dGgpIHtcbiAgICB2YXIgYmFzaWNBdXRoQXBwSWQgPSBiYXNpY0F1dGguYXBwSWQ7XG4gICAgaWYgKEFwcENhY2hlLmdldChiYXNpY0F1dGhBcHBJZCkpIHtcbiAgICAgIGluZm8uYXBwSWQgPSBiYXNpY0F1dGhBcHBJZDtcbiAgICAgIGluZm8ubWFzdGVyS2V5ID0gYmFzaWNBdXRoLm1hc3RlcktleSB8fCBpbmZvLm1hc3RlcktleTtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IGJhc2ljQXV0aC5qYXZhc2NyaXB0S2V5IHx8IGluZm8uamF2YXNjcmlwdEtleTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVxLmJvZHkpIHtcbiAgICAvLyBVbml0eSBTREsgc2VuZHMgYSBfbm9Cb2R5IGtleSB3aGljaCBuZWVkcyB0byBiZSByZW1vdmVkLlxuICAgIC8vIFVuY2xlYXIgYXQgdGhpcyBwb2ludCBpZiBhY3Rpb24gbmVlZHMgdG8gYmUgdGFrZW4uXG4gICAgZGVsZXRlIHJlcS5ib2R5Ll9ub0JvZHk7XG4gIH1cblxuICB2YXIgZmlsZVZpYUpTT04gPSBmYWxzZTtcblxuICBpZiAoIWluZm8uYXBwSWQgfHwgIUFwcENhY2hlLmdldChpbmZvLmFwcElkKSkge1xuICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgYXBwIGlkIG9uIHRoZSBib2R5LlxuICAgIGlmIChyZXEuYm9keSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICB9XG4gICAgICBmaWxlVmlhSlNPTiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcS5ib2R5KSB7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX1Jldm9jYWJsZVNlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVxLmJvZHkgJiZcbiAgICAgIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkICYmXG4gICAgICBBcHBDYWNoZS5nZXQocmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQpICYmXG4gICAgICAoIWluZm8ubWFzdGVyS2V5IHx8IEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkubWFzdGVyS2V5ID09PSBpbmZvLm1hc3RlcktleSlcbiAgICApIHtcbiAgICAgIGluZm8uYXBwSWQgPSByZXEuYm9keS5fQXBwbGljYXRpb25JZDtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5IHx8ICcnO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5O1xuICAgICAgLy8gVE9ETzogdGVzdCB0aGF0IHRoZSBSRVNUIEFQSSBmb3JtYXRzIGdlbmVyYXRlZCBieSB0aGUgb3RoZXJcbiAgICAgIC8vIFNES3MgYXJlIGhhbmRsZWQgb2tcbiAgICAgIGlmIChyZXEuYm9keS5fQ2xpZW50VmVyc2lvbikge1xuICAgICAgICBpbmZvLmNsaWVudFZlcnNpb24gPSByZXEuYm9keS5fQ2xpZW50VmVyc2lvbjtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpbmZvLmluc3RhbGxhdGlvbklkID0gcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gPSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX1Nlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fTWFzdGVyS2V5KSB7XG4gICAgICAgIGluZm8ubWFzdGVyS2V5ID0gcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9NYXN0ZXJLZXk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX2NvbnRleHQpIHtcbiAgICAgICAgaWYgKHJlcS5ib2R5Ll9jb250ZXh0IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fQ29udGVudFR5cGUpIHtcbiAgICAgICAgcmVxLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gcmVxLmJvZHkuX0NvbnRlbnRUeXBlO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0NvbnRlbnRUeXBlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmZvLnNlc3Npb25Ub2tlbiAmJiB0eXBlb2YgaW5mby5zZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgaW5mby5zZXNzaW9uVG9rZW4gPSBpbmZvLnNlc3Npb25Ub2tlbi50b1N0cmluZygpO1xuICB9XG5cbiAgaWYgKGluZm8uY2xpZW50VmVyc2lvbikge1xuICAgIGluZm8uY2xpZW50U0RLID0gQ2xpZW50U0RLLmZyb21TdHJpbmcoaW5mby5jbGllbnRWZXJzaW9uKTtcbiAgfVxuXG4gIGlmIChmaWxlVmlhSlNPTikge1xuICAgIHJlcS5maWxlRGF0YSA9IHJlcS5ib2R5LmZpbGVEYXRhO1xuICAgIC8vIFdlIG5lZWQgdG8gcmVwb3B1bGF0ZSByZXEuYm9keSB3aXRoIGEgYnVmZmVyXG4gICAgdmFyIGJhc2U2NCA9IHJlcS5ib2R5LmJhc2U2NDtcbiAgICByZXEuYm9keSA9IEJ1ZmZlci5mcm9tKGJhc2U2NCwgJ2Jhc2U2NCcpO1xuICB9XG5cbiAgY29uc3QgY2xpZW50SXAgPSBnZXRDbGllbnRJcChyZXEpO1xuXG4gIGluZm8uYXBwID0gQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpO1xuICByZXEuY29uZmlnID0gQ29uZmlnLmdldChpbmZvLmFwcElkLCBtb3VudCk7XG4gIHJlcS5jb25maWcuaGVhZGVycyA9IHJlcS5oZWFkZXJzIHx8IHt9O1xuICByZXEuY29uZmlnLmlwID0gY2xpZW50SXA7XG4gIHJlcS5pbmZvID0gaW5mbztcblxuICBpZiAoXG4gICAgaW5mby5tYXN0ZXJLZXkgJiZcbiAgICByZXEuY29uZmlnLm1hc3RlcktleUlwcyAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHJlcS5jb25maWcubWFzdGVyS2V5SXBzLmluZGV4T2YoY2xpZW50SXApID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICB9XG5cbiAgdmFyIGlzTWFzdGVyID0gaW5mby5tYXN0ZXJLZXkgPT09IHJlcS5jb25maWcubWFzdGVyS2V5O1xuXG4gIGlmIChpc01hc3Rlcikge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiB0cnVlLFxuICAgIH0pO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaXNSZWFkT25seU1hc3RlciA9IGluZm8ubWFzdGVyS2V5ID09PSByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5O1xuICBpZiAoXG4gICAgdHlwZW9mIHJlcS5jb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICByZXEuY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICYmXG4gICAgaXNSZWFkT25seU1hc3RlclxuICApIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogdHJ1ZSxcbiAgICAgIGlzUmVhZE9ubHk6IHRydWUsXG4gICAgfSk7XG4gICAgbmV4dCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChyZXEudXJsID09ICcvbG9naW4nKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpbmZvLnNlc3Npb25Ub2tlbikge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gaGFuZGxlIHRoZSB1cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uIHBhdGggb24gaXQncyBvd25cbiAgICAgIGlmIChcbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gJiZcbiAgICAgICAgcmVxLnVybCA9PT0gJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJyAmJlxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbi5pbmRleE9mKCdyOicpICE9IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbihhdXRoID0+IHtcbiAgICAgIGlmIChhdXRoKSB7XG4gICAgICAgIHJlcS5hdXRoID0gYXV0aDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZXRlcm1pbmUgdGhlIGNvcnJlY3QgZXJyb3Igc2NlbmFyaW8uXG4gICAgICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VTktOT1dOX0VSUk9SLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICBpZiAocmVxLmhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddKSB7XG4gICAgLy8gdHJ5IHRvIGdldCBmcm9tIHgtZm9yd2FyZWQtZm9yIGlmIGl0IHNldCAoYmVoaW5kIHJldmVyc2UgcHJveHkpXG4gICAgcmV0dXJuIHJlcS5oZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXS5zcGxpdCgnLCcpWzBdO1xuICB9IGVsc2UgaWYgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3MpIHtcbiAgICAvLyBubyBwcm94eSwgdHJ5IGdldHRpbmcgZnJvbSBjb25uZWN0aW9uLnJlbW90ZUFkZHJlc3NcbiAgICByZXR1cm4gcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcztcbiAgfSBlbHNlIGlmIChyZXEuc29ja2V0KSB7XG4gICAgLy8gdHJ5IHRvIGdldCBpdCBmcm9tIHJlcS5zb2NrZXRcbiAgICByZXR1cm4gcmVxLnNvY2tldC5yZW1vdGVBZGRyZXNzO1xuICB9IGVsc2UgaWYgKHJlcS5jb25uZWN0aW9uICYmIHJlcS5jb25uZWN0aW9uLnNvY2tldCkge1xuICAgIC8vIHRyeSB0byBnZXQgaXQgZm9ybSB0aGUgY29ubmVjdGlvbi5zb2NrZXRcbiAgICByZXR1cm4gcmVxLmNvbm5lY3Rpb24uc29ja2V0LnJlbW90ZUFkZHJlc3M7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgbm9uIGFib3ZlLCBmYWxsYmFjay5cbiAgICByZXR1cm4gcmVxLmlwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGh0dHBBdXRoKHJlcSkge1xuICBpZiAoIShyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uKSByZXR1cm47XG5cbiAgdmFyIGhlYWRlciA9IChyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICB2YXIgYXBwSWQsIG1hc3RlcktleSwgamF2YXNjcmlwdEtleTtcblxuICAvLyBwYXJzZSBoZWFkZXJcbiAgdmFyIGF1dGhQcmVmaXggPSAnYmFzaWMgJztcblxuICB2YXIgbWF0Y2ggPSBoZWFkZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGF1dGhQcmVmaXgpO1xuXG4gIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgdmFyIGVuY29kZWRBdXRoID0gaGVhZGVyLnN1YnN0cmluZyhhdXRoUHJlZml4Lmxlbmd0aCwgaGVhZGVyLmxlbmd0aCk7XG4gICAgdmFyIGNyZWRlbnRpYWxzID0gZGVjb2RlQmFzZTY0KGVuY29kZWRBdXRoKS5zcGxpdCgnOicpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBhcHBJZCA9IGNyZWRlbnRpYWxzWzBdO1xuICAgICAgdmFyIGtleSA9IGNyZWRlbnRpYWxzWzFdO1xuXG4gICAgICB2YXIganNLZXlQcmVmaXggPSAnamF2YXNjcmlwdC1rZXk9JztcblxuICAgICAgdmFyIG1hdGNoS2V5ID0ga2V5LmluZGV4T2YoanNLZXlQcmVmaXgpO1xuICAgICAgaWYgKG1hdGNoS2V5ID09IDApIHtcbiAgICAgICAgamF2YXNjcmlwdEtleSA9IGtleS5zdWJzdHJpbmcoanNLZXlQcmVmaXgubGVuZ3RoLCBrZXkubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hc3RlcktleSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhcHBJZDogYXBwSWQsIG1hc3RlcktleTogbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5OiBqYXZhc2NyaXB0S2V5IH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChzdHIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0Nyb3NzRG9tYWluKGFwcElkKSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBnZXRNb3VudEZvclJlcXVlc3QocmVxKSk7XG4gICAgbGV0IGFsbG93SGVhZGVycyA9IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTO1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93SGVhZGVycykge1xuICAgICAgYWxsb3dIZWFkZXJzICs9IGAsICR7Y29uZmlnLmFsbG93SGVhZGVycy5qb2luKCcsICcpfWA7XG4gICAgfVxuICAgIGNvbnN0IGFsbG93T3JpZ2luID0gKGNvbmZpZyAmJiBjb25maWcuYWxsb3dPcmlnaW4pIHx8ICcqJztcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbik7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsUFVULFBPU1QsREVMRVRFLE9QVElPTlMnKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJywgYWxsb3dIZWFkZXJzKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsICdYLVBhcnNlLUpvYi1TdGF0dXMtSWQsIFgtUGFyc2UtUHVzaC1TdGF0dXMtSWQnKTtcbiAgICAvLyBpbnRlcmNlcHQgT1BUSU9OUyBtZXRob2RcbiAgICBpZiAoJ09QVElPTlMnID09IHJlcS5tZXRob2QpIHtcbiAgICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd01ldGhvZE92ZXJyaWRlKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmIChyZXEubWV0aG9kID09PSAnUE9TVCcgJiYgcmVxLmJvZHkuX21ldGhvZCkge1xuICAgIHJlcS5vcmlnaW5hbE1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgcmVxLm1ldGhvZCA9IHJlcS5ib2R5Ll9tZXRob2Q7XG4gICAgZGVsZXRlIHJlcS5ib2R5Ll9tZXRob2Q7XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VFcnJvcnMoZXJyLCByZXEsIHJlcywgbmV4dCkge1xuICBjb25zdCBsb2cgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIGlmIChyZXEuY29uZmlnICYmIHJlcS5jb25maWcuZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gICAgbGV0IGh0dHBTdGF0dXM7XG4gICAgLy8gVE9ETzogZmlsbCBvdXQgdGhpcyBtYXBwaW5nXG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1I6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA1MDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EOlxuICAgICAgICBodHRwU3RhdHVzID0gNDA0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDA7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGxvZy5lcnJvcignUGFyc2UgZXJyb3I6ICcsIGVycik7XG4gIH0gZWxzZSBpZiAoZXJyLnN0YXR1cyAmJiBlcnIubWVzc2FnZSkge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZXJyb3IoJ1VuY2F1Z2h0IGludGVybmFsIHNlcnZlciBlcnJvci4nLCBlcnIsIGVyci5zdGFjayk7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyxcbiAgICB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmICghcmVxLmF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgcmVzLmVuZCgne1wiZXJyb3JcIjpcInVuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZFwifScpO1xuICAgIHJldHVybjtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXF1ZXN0KSB7XG4gIGlmICghcmVxdWVzdC5hdXRoLmlzTWFzdGVyKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLyoqXG4gKiBEZWR1cGxpY2F0ZXMgYSByZXF1ZXN0IHRvIGVuc3VyZSBpZGVtcG90ZW5jeS4gRHVwbGljYXRlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcmVxdWVzdCBJRFxuICogaW4gdGhlIHJlcXVlc3QgaGVhZGVyLiBJZiBhIHJlcXVlc3QgaGFzIG5vIHJlcXVlc3QgSUQsIGl0IGlzIGV4ZWN1dGVkIGFueXdheS5cbiAqIEBwYXJhbSB7Kn0gcmVxIFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgUHJvbWlzZTx7fT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeShyZXEpIHtcbiAgLy8gRW5hYmxlIGZlYXR1cmUgb25seSBmb3IgTW9uZ29EQlxuICBpZiAoIShyZXEuY29uZmlnLmRhdGFiYXNlLmFkYXB0ZXIgaW5zdGFuY2VvZiBNb25nb1N0b3JhZ2VBZGFwdGVyKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBHZXQgcGFyYW1ldGVyc1xuICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICBjb25zdCByZXF1ZXN0SWQgPSAoKHJlcSB8fCB7fSkuaGVhZGVycyB8fCB7fSlbJ3gtcGFyc2UtcmVxdWVzdC1pZCddO1xuICBjb25zdCB7IHBhdGhzLCB0dGwgfSA9IGNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnM7XG4gIGlmICghcmVxdWVzdElkIHx8ICFjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFJlcXVlc3QgcGF0aCBtYXkgY29udGFpbiB0cmFpbGluZyBzbGFzaGVzLCBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHNvIHJlbW92ZVxuICAvLyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcmVxUGF0aCA9IHJlcS5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC8sICcnKTtcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaWRlbXBvdGVuY3kgaXMgZW5hYmxlZCBmb3IgY3VycmVudCByZXF1ZXN0IHBhdGhcbiAgbGV0IG1hdGNoID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIEFzc3VtZSBvbmUgd2FudHMgYSBwYXRoIHRvIGFsd2F5cyBtYXRjaCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gcHJldmVudCBhbnkgbWlzdGFrZXNcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0aC5jaGFyQXQoMCkgPT09ICdeJyA/IHBhdGggOiAnXicgKyBwYXRoKTtcbiAgICBpZiAocmVxUGF0aC5tYXRjaChyZWdleCkpIHtcbiAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFRyeSB0byBzdG9yZSByZXF1ZXN0XG4gIGNvbnN0IGV4cGlyeURhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFNlY29uZHMobmV3IERhdGUoKS5nZXRTZWNvbmRzKCkgKyB0dGwpKTtcbiAgcmV0dXJuIHJlc3RcbiAgICAuY3JlYXRlKGNvbmZpZywgYXV0aC5tYXN0ZXIoY29uZmlnKSwgJ19JZGVtcG90ZW5jeScsIHtcbiAgICAgIHJlcUlkOiByZXF1ZXN0SWQsXG4gICAgICBleHBpcmU6IFBhcnNlLl9lbmNvZGUoZXhwaXJ5RGF0ZSksXG4gICAgfSlcbiAgICAuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09IFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRFVQTElDQVRFX1JFUVVFU1QsICdEdXBsaWNhdGUgcmVxdWVzdCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDMpO1xuICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkXCJ9Jyk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDApO1xuICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgZXJyb3I6ICdJbnZhbGlkIG9iamVjdCBmb3IgY29udGV4dC4nIH0pO1xufVxuIl19
|
package/lib/rest.js
CHANGED
|
@@ -32,7 +32,7 @@ function find(config, auth, className, restWhere, restOptions, clientSDK, contex
|
|
|
32
32
|
return triggers.maybeRunQueryTrigger(triggers.Types.beforeFind, className, restWhere, restOptions, config, auth, context).then(result => {
|
|
33
33
|
restWhere = result.restWhere || restWhere;
|
|
34
34
|
restOptions = result.restOptions || restOptions;
|
|
35
|
-
const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK);
|
|
35
|
+
const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK, true, context);
|
|
36
36
|
return query.execute();
|
|
37
37
|
});
|
|
38
38
|
} // get is just like find but only queries an objectId.
|
|
@@ -46,7 +46,7 @@ const get = (config, auth, className, objectId, restOptions, clientSDK, context)
|
|
|
46
46
|
return triggers.maybeRunQueryTrigger(triggers.Types.beforeFind, className, restWhere, restOptions, config, auth, context, true).then(result => {
|
|
47
47
|
restWhere = result.restWhere || restWhere;
|
|
48
48
|
restOptions = result.restOptions || restOptions;
|
|
49
|
-
const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK);
|
|
49
|
+
const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK, true, context);
|
|
50
50
|
return query.execute();
|
|
51
51
|
});
|
|
52
52
|
}; // Returns a promise that doesn't resolve to any useful value.
|
|
@@ -145,7 +145,7 @@ function update(config, auth, className, restWhere, restObject, clientSDK, conte
|
|
|
145
145
|
|
|
146
146
|
if (hasTriggers || hasLiveQuery) {
|
|
147
147
|
// Do not use find, as it runs the before finds
|
|
148
|
-
return new RestQuery(config, auth, className, restWhere, undefined, undefined, false).execute({
|
|
148
|
+
return new RestQuery(config, auth, className, restWhere, undefined, undefined, false, context).execute({
|
|
149
149
|
op: 'update'
|
|
150
150
|
});
|
|
151
151
|
}
|
|
@@ -205,4 +205,4 @@ module.exports = {
|
|
|
205
205
|
get,
|
|
206
206
|
update
|
|
207
207
|
};
|
|
208
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXN0LmpzIl0sIm5hbWVzIjpbIlBhcnNlIiwicmVxdWlyZSIsIlJlc3RRdWVyeSIsIlJlc3RXcml0ZSIsInRyaWdnZXJzIiwiY2hlY2tUcmlnZ2VycyIsImNsYXNzTmFtZSIsImNvbmZpZyIsInR5cGVzIiwic29tZSIsInRyaWdnZXJUeXBlIiwiZ2V0VHJpZ2dlciIsIlR5cGVzIiwiYXBwbGljYXRpb25JZCIsImNoZWNrTGl2ZVF1ZXJ5IiwibGl2ZVF1ZXJ5Q29udHJvbGxlciIsImhhc0xpdmVRdWVyeSIsImZpbmQiLCJhdXRoIiwicmVzdFdoZXJlIiwicmVzdE9wdGlvbnMiLCJjbGllbnRTREsiLCJjb250ZXh0IiwiZW5mb3JjZVJvbGVTZWN1cml0eSIsIm1heWJlUnVuUXVlcnlUcmlnZ2VyIiwiYmVmb3JlRmluZCIsInRoZW4iLCJyZXN1bHQiLCJxdWVyeSIsImV4ZWN1dGUiLCJnZXQiLCJvYmplY3RJZCIsImRlbCIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwiaXNVbmF1dGhlbnRpY2F0ZWQiLCJTRVNTSU9OX01JU1NJTkciLCJpbmZsYXRlZE9iamVjdCIsInNjaGVtYUNvbnRyb2xsZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhc1RyaWdnZXJzIiwib3AiLCJyZXNwb25zZSIsInJlc3VsdHMiLCJsZW5ndGgiLCJmaXJzdFJlc3VsdCIsImlzTWFzdGVyIiwidXNlciIsImlkIiwiSU5WQUxJRF9TRVNTSU9OX1RPS0VOIiwiY2FjaGVBZGFwdGVyIiwiY2FjaGVDb250cm9sbGVyIiwic2Vzc2lvblRva2VuIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJtYXliZVJ1blRyaWdnZXIiLCJiZWZvcmVEZWxldGUiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiZ2V0VXNlclJvbGVzIiwiZGF0YWJhc2UiLCJsb2FkU2NoZW1hIiwicyIsIm9wdGlvbnMiLCJhY2wiLCJwdXNoIiwiY29uY2F0IiwidXNlclJvbGVzIiwiZGVzdHJveSIsInBlcm1zIiwiZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zIiwib25BZnRlckRlbGV0ZSIsImFmdGVyRGVsZXRlIiwiY2F0Y2giLCJlcnJvciIsImhhbmRsZVNlc3Npb25NaXNzaW5nRXJyb3IiLCJjcmVhdGUiLCJyZXN0T2JqZWN0Iiwid3JpdGUiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJvcmlnaW5hbFJlc3RPYmplY3QiLCJjb2RlIiwiY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzIiwibWV0aG9kIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImluZGV4T2YiLCJpc1JlYWRPbmx5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBRCxDQUFQLENBQXNCRCxLQUFsQzs7QUFFQSxJQUFJRSxTQUFTLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQXZCOztBQUNBLElBQUlFLFNBQVMsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FBdkI7O0FBQ0EsSUFBSUcsUUFBUSxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF0Qjs7QUFFQSxTQUFTSSxhQUFULENBQXVCQyxTQUF2QixFQUFrQ0MsTUFBbEMsRUFBMENDLEtBQTFDLEVBQWlEO0FBQy9DLFNBQU9BLEtBQUssQ0FBQ0MsSUFBTixDQUFXQyxXQUFXLElBQUk7QUFDL0IsV0FBT04sUUFBUSxDQUFDTyxVQUFULENBQW9CTCxTQUFwQixFQUErQkYsUUFBUSxDQUFDUSxLQUFULENBQWVGLFdBQWYsQ0FBL0IsRUFBNERILE1BQU0sQ0FBQ00sYUFBbkUsQ0FBUDtBQUNELEdBRk0sQ0FBUDtBQUdEOztBQUVELFNBQVNDLGNBQVQsQ0FBd0JSLFNBQXhCLEVBQW1DQyxNQUFuQyxFQUEyQztBQUN6QyxTQUFPQSxNQUFNLENBQUNRLG1CQUFQLElBQThCUixNQUFNLENBQUNRLG1CQUFQLENBQTJCQyxZQUEzQixDQUF3Q1YsU0FBeEMsQ0FBckM7QUFDRCxDLENBRUQ7OztB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SyxRQUFYLElBQXVCQSxNQUFNLEtBQUssTUFBdEMsRUFBOEM7QUFDNUMsWUFBTVYsS0FBSyxHQUFJLHlDQUF3Q1UsTUFBTyw0Q0FBOUQ7QUFDQSxZQUFNLElBQUlwRixLQUFLLENBQUNpQyxLQUFWLENBQWdCakMsS0FBSyxDQUFDaUMsS0FBTixDQUFZb0QsbUJBQTVCLEVBQWlEWCxLQUFqRCxDQUFOO0FBQ0Q7QUFDRixHQU5tRCxDQVFwRDs7O0FBQ0EsTUFBSVMsMkJBQTJCLENBQUNHLE9BQTVCLENBQW9DaEYsU0FBcEMsS0FBa0QsQ0FBbEQsSUFBdUQsQ0FBQ1ksSUFBSSxDQUFDNkIsUUFBakUsRUFBMkU7QUFDekUsVUFBTTJCLEtBQUssR0FBSSx5Q0FBd0NVLE1BQU8scUJBQW9COUUsU0FBVSxjQUE1RjtBQUNBLFVBQU0sSUFBSU4sS0FBSyxDQUFDaUMsS0FBVixDQUFnQmpDLEtBQUssQ0FBQ2lDLEtBQU4sQ0FBWW9ELG1CQUE1QixFQUFpRFgsS0FBakQsQ0FBTjtBQUNELEdBWm1ELENBY3BEOzs7QUFDQSxNQUFJeEQsSUFBSSxDQUFDcUUsVUFBTCxLQUFvQkgsTUFBTSxLQUFLLFFBQVgsSUFBdUJBLE1BQU0sS0FBSyxRQUFsQyxJQUE4Q0EsTUFBTSxLQUFLLFFBQTdFLENBQUosRUFBNEY7QUFDMUYsVUFBTVYsS0FBSyxHQUFJLG9EQUFtRFUsTUFBTyxhQUF6RTtBQUNBLFVBQU0sSUFBSXBGLEtBQUssQ0FBQ2lDLEtBQVYsQ0FBZ0JqQyxLQUFLLENBQUNpQyxLQUFOLENBQVlvRCxtQkFBNUIsRUFBaURYLEtBQWpELENBQU47QUFDRDtBQUNGOztBQUVEYyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZmIsRUFBQUEsTUFEZTtBQUVmNUMsRUFBQUEsR0FGZTtBQUdmZixFQUFBQSxJQUhlO0FBSWZhLEVBQUFBLEdBSmU7QUFLZmlELEVBQUFBO0FBTGUsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgY29udGFpbnMgaGVscGVycyBmb3IgcnVubmluZyBvcGVyYXRpb25zIGluIFJFU1QgZm9ybWF0LlxuLy8gVGhlIGdvYWwgaXMgdGhhdCBoYW5kbGVycyB0aGF0IGV4cGxpY2l0bHkgaGFuZGxlIGFuIGV4cHJlc3Mgcm91dGVcbi8vIHNob3VsZCBqdXN0IGJlIHNoYWxsb3cgd3JhcHBlcnMgYXJvdW5kIHRoaW5ncyBpbiB0aGlzIGZpbGUsIGJ1dFxuLy8gdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBub3QgZXhwbGljaXRseSBkZXBlbmQgb24gdGhlIHJlcXVlc3Rcbi8vIG9iamVjdC5cbi8vIFRoaXMgbWVhbnMgdGhhdCBvbmUgb2YgdGhlc2UgaGFuZGxlcnMgY2FuIHN1cHBvcnQgbXVsdGlwbGVcbi8vIHJvdXRlcy4gVGhhdCdzIHVzZWZ1bCBmb3IgdGhlIHJvdXRlcyB0aGF0IGRvIHJlYWxseSBzaW1pbGFyXG4vLyB0aGluZ3MuXG5cbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxudmFyIFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4vUmVzdFF1ZXJ5Jyk7XG52YXIgUmVzdFdyaXRlID0gcmVxdWlyZSgnLi9SZXN0V3JpdGUnKTtcbnZhciB0cmlnZ2VycyA9IHJlcXVpcmUoJy4vdHJpZ2dlcnMnKTtcblxuZnVuY3Rpb24gY2hlY2tUcmlnZ2VycyhjbGFzc05hbWUsIGNvbmZpZywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVzLnNvbWUodHJpZ2dlclR5cGUgPT4ge1xuICAgIHJldHVybiB0cmlnZ2Vycy5nZXRUcmlnZ2VyKGNsYXNzTmFtZSwgdHJpZ2dlcnMuVHlwZXNbdHJpZ2dlclR5cGVdLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0xpdmVRdWVyeShjbGFzc05hbWUsIGNvbmZpZykge1xuICByZXR1cm4gY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIgJiYgY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIuaGFzTGl2ZVF1ZXJ5KGNsYXNzTmFtZSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhbiBvYmplY3Qgd2l0aCBvcHRpb25hbCBrZXlzICdyZXN1bHRzJyBhbmQgJ2NvdW50Jy5cbmZ1bmN0aW9uIGZpbmQoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9wdGlvbnMsIGNsaWVudFNESywgY29udGV4dCkge1xuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCdmaW5kJywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgcmV0dXJuIHRyaWdnZXJzXG4gICAgLm1heWJlUnVuUXVlcnlUcmlnZ2VyKFxuICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJlc3RXaGVyZSxcbiAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbnRleHRcbiAgICApXG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIHJlc3RXaGVyZSA9IHJlc3VsdC5yZXN0V2hlcmUgfHwgcmVzdFdoZXJlO1xuICAgICAgcmVzdE9wdGlvbnMgPSByZXN1bHQucmVzdE9wdGlvbnMgfHwgcmVzdE9wdGlvbnM7XG4gICAgICBjb25zdCBxdWVyeSA9IG5ldyBSZXN0UXVlcnkoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9wdGlvbnMsIGNsaWVudFNESyk7XG4gICAgICByZXR1cm4gcXVlcnkuZXhlY3V0ZSgpO1xuICAgIH0pO1xufVxuXG4vLyBnZXQgaXMganVzdCBsaWtlIGZpbmQgYnV0IG9ubHkgcXVlcmllcyBhbiBvYmplY3RJZC5cbmNvbnN0IGdldCA9IChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgb2JqZWN0SWQsIHJlc3RPcHRpb25zLCBjbGllbnRTREssIGNvbnRleHQpID0+IHtcbiAgdmFyIHJlc3RXaGVyZSA9IHsgb2JqZWN0SWQgfTtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnZ2V0JywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgcmV0dXJuIHRyaWdnZXJzXG4gICAgLm1heWJlUnVuUXVlcnlUcmlnZ2VyKFxuICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHJlc3RXaGVyZSxcbiAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbnRleHQsXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICByZXN0V2hlcmUgPSByZXN1bHQucmVzdFdoZXJlIHx8IHJlc3RXaGVyZTtcbiAgICAgIHJlc3RPcHRpb25zID0gcmVzdWx0LnJlc3RPcHRpb25zIHx8IHJlc3RPcHRpb25zO1xuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPcHRpb25zLCBjbGllbnRTREspO1xuICAgICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICB9KTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZG9lc24ndCByZXNvbHZlIHRvIGFueSB1c2VmdWwgdmFsdWUuXG5mdW5jdGlvbiBkZWwoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdElkLCBjb250ZXh0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ2JhZCBvYmplY3RJZCcpO1xuICB9XG5cbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19Vc2VyJyAmJiBhdXRoLmlzVW5hdXRoZW50aWNhdGVkKCkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuU0VTU0lPTl9NSVNTSU5HLCAnSW5zdWZmaWNpZW50IGF1dGggdG8gZGVsZXRlIHVzZXInKTtcbiAgfVxuXG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2RlbGV0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG5cbiAgbGV0IGluZmxhdGVkT2JqZWN0O1xuICBsZXQgc2NoZW1hQ29udHJvbGxlcjtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBoYXNUcmlnZ2VycyA9IGNoZWNrVHJpZ2dlcnMoY2xhc3NOYW1lLCBjb25maWcsIFsnYmVmb3JlRGVsZXRlJywgJ2FmdGVyRGVsZXRlJ10pO1xuICAgICAgY29uc3QgaGFzTGl2ZVF1ZXJ5ID0gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpO1xuICAgICAgaWYgKGhhc1RyaWdnZXJzIHx8IGhhc0xpdmVRdWVyeSB8fCBjbGFzc05hbWUgPT0gJ19TZXNzaW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3RRdWVyeShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgeyBvYmplY3RJZCB9KVxuICAgICAgICAgIC5leGVjdXRlKHsgb3A6ICdkZWxldGUnIH0pXG4gICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSByZXNwb25zZS5yZXN1bHRzWzBdO1xuICAgICAgICAgICAgICBmaXJzdFJlc3VsdC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09ICdfU2Vzc2lvbicgJiYgIWF1dGguaXNNYXN0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGgudXNlciB8fCBmaXJzdFJlc3VsdC51c2VyLm9iamVjdElkICE9PSBhdXRoLnVzZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGNhY2hlQWRhcHRlciA9IGNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgIGNhY2hlQWRhcHRlci51c2VyLmRlbChmaXJzdFJlc3VsdC5zZXNzaW9uVG9rZW4pO1xuICAgICAgICAgICAgICBpbmZsYXRlZE9iamVjdCA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTihmaXJzdFJlc3VsdCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdPYmplY3Qgbm90IGZvdW5kIGZvciBkZWxldGUuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGlmICghYXV0aC5pc01hc3Rlcikge1xuICAgICAgICByZXR1cm4gYXV0aC5nZXRVc2VyUm9sZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KVxuICAgIC50aGVuKCgpID0+IGNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKCkpXG4gICAgLnRoZW4ocyA9PiB7XG4gICAgICBzY2hlbWFDb250cm9sbGVyID0gcztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghYXV0aC5pc01hc3Rlcikge1xuICAgICAgICBvcHRpb25zLmFjbCA9IFsnKiddO1xuICAgICAgICBpZiAoYXV0aC51c2VyKSB7XG4gICAgICAgICAgb3B0aW9ucy5hY2wucHVzaChhdXRoLnVzZXIuaWQpO1xuICAgICAgICAgIG9wdGlvbnMuYWNsID0gb3B0aW9ucy5hY2wuY29uY2F0KGF1dGgudXNlclJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uZmlnLmRhdGFiYXNlLmRlc3Ryb3koXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIG9iamVjdElkOiBvYmplY3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgc2NoZW1hQ29udHJvbGxlclxuICAgICAgKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIE5vdGlmeSBMaXZlUXVlcnkgc2VydmVyIGlmIHBvc3NpYmxlXG4gICAgICBjb25zdCBwZXJtcyA9IHNjaGVtYUNvbnRyb2xsZXIuZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zKGNsYXNzTmFtZSk7XG4gICAgICBjb25maWcubGl2ZVF1ZXJ5Q29udHJvbGxlci5vbkFmdGVyRGVsZXRlKGNsYXNzTmFtZSwgaW5mbGF0ZWRPYmplY3QsIG51bGwsIHBlcm1zKTtcbiAgICAgIHJldHVybiB0cmlnZ2Vycy5tYXliZVJ1blRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBhdXRoLFxuICAgICAgICBpbmZsYXRlZE9iamVjdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH0pXG4gICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIGhhbmRsZVNlc3Npb25NaXNzaW5nRXJyb3IoZXJyb3IsIGNsYXNzTmFtZSwgYXV0aCk7XG4gICAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZSwgc3RhdHVzLCBsb2NhdGlvbn0gb2JqZWN0LlxuZnVuY3Rpb24gY3JlYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0T2JqZWN0LCBjbGllbnRTREssIGNvbnRleHQpIHtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnY3JlYXRlJywgY2xhc3NOYW1lLCBhdXRoKTtcbiAgdmFyIHdyaXRlID0gbmV3IFJlc3RXcml0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgbnVsbCwgcmVzdE9iamVjdCwgbnVsbCwgY2xpZW50U0RLLCBjb250ZXh0KTtcbiAgcmV0dXJuIHdyaXRlLmV4ZWN1dGUoKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBjb250YWlucyB0aGUgZmllbGRzIG9mIHRoZSB1cGRhdGUgdGhhdCB0aGVcbi8vIFJFU1QgQVBJIGlzIHN1cHBvc2VkIHRvIHJldHVybi5cbi8vIFVzdWFsbHksIHRoaXMgaXMganVzdCB1cGRhdGVkQXQuXG5mdW5jdGlvbiB1cGRhdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHJlc3RXaGVyZSwgcmVzdE9iamVjdCwgY2xpZW50U0RLLCBjb250ZXh0KSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ3VwZGF0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZVNhdmUnLCAnYWZ0ZXJTYXZlJ10pO1xuICAgICAgY29uc3QgaGFzTGl2ZVF1ZXJ5ID0gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpO1xuICAgICAgaWYgKGhhc1RyaWdnZXJzIHx8IGhhc0xpdmVRdWVyeSkge1xuICAgICAgICAvLyBEbyBub3QgdXNlIGZpbmQsIGFzIGl0IHJ1bnMgdGhlIGJlZm9yZSBmaW5kc1xuICAgICAgICByZXR1cm4gbmV3IFJlc3RRdWVyeShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgYXV0aCxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKS5leGVjdXRlKHtcbiAgICAgICAgICBvcDogJ3VwZGF0ZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSlcbiAgICAudGhlbigoeyByZXN1bHRzIH0pID0+IHtcbiAgICAgIHZhciBvcmlnaW5hbFJlc3RPYmplY3Q7XG4gICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBvcmlnaW5hbFJlc3RPYmplY3QgPSByZXN1bHRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPYmplY3QsXG4gICAgICAgIG9yaWdpbmFsUmVzdE9iamVjdCxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICAndXBkYXRlJ1xuICAgICAgKS5leGVjdXRlKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKSB7XG4gIC8vIElmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgYSB1c2VyIHdpdGhvdXQgLyB3aXRoIGJhZCBzZXNzaW9uIHRva2VuXG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicgJiYgZXJyb3IuY29kZSA9PT0gUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCAmJiAhYXV0aC5pc01hc3Rlcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TRVNTSU9OX01JU1NJTkcsICdJbnN1ZmZpY2llbnQgYXV0aC4nKTtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn1cblxuY29uc3QgY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzID0gW1xuICAnX0pvYlN0YXR1cycsXG4gICdfUHVzaFN0YXR1cycsXG4gICdfSG9va3MnLFxuICAnX0dsb2JhbENvbmZpZycsXG4gICdfSm9iU2NoZWR1bGUnLFxuICAnX0lkZW1wb3RlbmN5Jyxcbl07XG4vLyBEaXNhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIF9Sb2xlIGNvbGxlY3Rpb24gZXhjZXB0IGJ5IG1hc3RlciBrZXlcbmZ1bmN0aW9uIGVuZm9yY2VSb2xlU2VjdXJpdHkobWV0aG9kLCBjbGFzc05hbWUsIGF1dGgpIHtcbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19JbnN0YWxsYXRpb24nICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgaWYgKG1ldGhvZCA9PT0gJ2RlbGV0ZScgfHwgbWV0aG9kID09PSAnZmluZCcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYENsaWVudHMgYXJlbid0IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgJHttZXRob2R9IG9wZXJhdGlvbiBvbiB0aGUgaW5zdGFsbGF0aW9uIGNvbGxlY3Rpb24uYDtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy9hbGwgdm9sYXRpbGVDbGFzc2VzIGFyZSBtYXN0ZXJLZXkgb25seVxuICBpZiAoY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzLmluZGV4T2YoY2xhc3NOYW1lKSA+PSAwICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSAke2NsYXNzTmFtZX0gY29sbGVjdGlvbi5gO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gIH1cblxuICAvLyByZWFkT25seSBtYXN0ZXJLZXkgaXMgbm90IGFsbG93ZWRcbiAgaWYgKGF1dGguaXNSZWFkT25seSAmJiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdjcmVhdGUnIHx8IG1ldGhvZCA9PT0gJ3VwZGF0ZScpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgcmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24uYDtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgZXJyb3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGUsXG4gIGRlbCxcbiAgZmluZCxcbiAgZ2V0LFxuICB1cGRhdGUsXG59O1xuIl19
|
|
208
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXN0LmpzIl0sIm5hbWVzIjpbIlBhcnNlIiwicmVxdWlyZSIsIlJlc3RRdWVyeSIsIlJlc3RXcml0ZSIsInRyaWdnZXJzIiwiY2hlY2tUcmlnZ2VycyIsImNsYXNzTmFtZSIsImNvbmZpZyIsInR5cGVzIiwic29tZSIsInRyaWdnZXJUeXBlIiwiZ2V0VHJpZ2dlciIsIlR5cGVzIiwiYXBwbGljYXRpb25JZCIsImNoZWNrTGl2ZVF1ZXJ5IiwibGl2ZVF1ZXJ5Q29udHJvbGxlciIsImhhc0xpdmVRdWVyeSIsImZpbmQiLCJhdXRoIiwicmVzdFdoZXJlIiwicmVzdE9wdGlvbnMiLCJjbGllbnRTREsiLCJjb250ZXh0IiwiZW5mb3JjZVJvbGVTZWN1cml0eSIsIm1heWJlUnVuUXVlcnlUcmlnZ2VyIiwiYmVmb3JlRmluZCIsInRoZW4iLCJyZXN1bHQiLCJxdWVyeSIsImV4ZWN1dGUiLCJnZXQiLCJvYmplY3RJZCIsImRlbCIsIkVycm9yIiwiSU5WQUxJRF9KU09OIiwiaXNVbmF1dGhlbnRpY2F0ZWQiLCJTRVNTSU9OX01JU1NJTkciLCJpbmZsYXRlZE9iamVjdCIsInNjaGVtYUNvbnRyb2xsZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhc1RyaWdnZXJzIiwib3AiLCJyZXNwb25zZSIsInJlc3VsdHMiLCJsZW5ndGgiLCJmaXJzdFJlc3VsdCIsImlzTWFzdGVyIiwidXNlciIsImlkIiwiSU5WQUxJRF9TRVNTSU9OX1RPS0VOIiwiY2FjaGVBZGFwdGVyIiwiY2FjaGVDb250cm9sbGVyIiwic2Vzc2lvblRva2VuIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJtYXliZVJ1blRyaWdnZXIiLCJiZWZvcmVEZWxldGUiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiZ2V0VXNlclJvbGVzIiwiZGF0YWJhc2UiLCJsb2FkU2NoZW1hIiwicyIsIm9wdGlvbnMiLCJhY2wiLCJwdXNoIiwiY29uY2F0IiwidXNlclJvbGVzIiwiZGVzdHJveSIsInBlcm1zIiwiZ2V0Q2xhc3NMZXZlbFBlcm1pc3Npb25zIiwib25BZnRlckRlbGV0ZSIsImFmdGVyRGVsZXRlIiwiY2F0Y2giLCJlcnJvciIsImhhbmRsZVNlc3Npb25NaXNzaW5nRXJyb3IiLCJjcmVhdGUiLCJyZXN0T2JqZWN0Iiwid3JpdGUiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJvcmlnaW5hbFJlc3RPYmplY3QiLCJjb2RlIiwiY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzIiwibWV0aG9kIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImluZGV4T2YiLCJpc1JlYWRPbmx5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBRCxDQUFQLENBQXNCRCxLQUFsQzs7QUFFQSxJQUFJRSxTQUFTLEdBQUdELE9BQU8sQ0FBQyxhQUFELENBQXZCOztBQUNBLElBQUlFLFNBQVMsR0FBR0YsT0FBTyxDQUFDLGFBQUQsQ0FBdkI7O0FBQ0EsSUFBSUcsUUFBUSxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF0Qjs7QUFFQSxTQUFTSSxhQUFULENBQXVCQyxTQUF2QixFQUFrQ0MsTUFBbEMsRUFBMENDLEtBQTFDLEVBQWlEO0FBQy9DLFNBQU9BLEtBQUssQ0FBQ0MsSUFBTixDQUFXQyxXQUFXLElBQUk7QUFDL0IsV0FBT04sUUFBUSxDQUFDTyxVQUFULENBQW9CTCxTQUFwQixFQUErQkYsUUFBUSxDQUFDUSxLQUFULENBQWVGLFdBQWYsQ0FBL0IsRUFBNERILE1BQU0sQ0FBQ00sYUFBbkUsQ0FBUDtBQUNELEdBRk0sQ0FBUDtBQUdEOztBQUVELFNBQVNDLGNBQVQsQ0FBd0JSLFNBQXhCLEVBQW1DQyxNQUFuQyxFQUEyQztBQUN6QyxTQUFPQSxNQUFNLENBQUNRLG1CQUFQLElBQThCUixNQUFNLENBQUNRLG1CQUFQLENBQTJCQyxZQUEzQixDQUF3Q1YsU0FBeEMsQ0FBckM7QUFDRCxDLENBRUQ7OztBQUNBLFNBQVNXLElBQVQsQ0FBY1YsTUFBZCxFQUFzQlcsSUFBdEIsRUFBNEJaLFNBQTVCLEVBQXVDYSxTQUF2QyxFQUFrREMsV0FBbEQsRUFBK0RDLFNBQS9ELEVBQTBFQyxPQUExRSxFQUFtRjtBQUNqRkMsRUFBQUEsbUJBQW1CLENBQUMsTUFBRCxFQUFTakIsU0FBVCxFQUFvQlksSUFBcEIsQ0FBbkI7QUFDQSxTQUFPZCxRQUFRLENBQ1pvQixvQkFESSxDQUVIcEIsUUFBUSxDQUFDUSxLQUFULENBQWVhLFVBRlosRUFHSG5CLFNBSEcsRUFJSGEsU0FKRyxFQUtIQyxXQUxHLEVBTUhiLE1BTkcsRUFPSFcsSUFQRyxFQVFISSxPQVJHLEVBVUpJLElBVkksQ0FVQ0MsTUFBTSxJQUFJO0FBQ2RSLElBQUFBLFNBQVMsR0FBR1EsTUFBTSxDQUFDUixTQUFQLElBQW9CQSxTQUFoQztBQUNBQyxJQUFBQSxXQUFXLEdBQUdPLE1BQU0sQ0FBQ1AsV0FBUCxJQUFzQkEsV0FBcEM7QUFDQSxVQUFNUSxLQUFLLEdBQUcsSUFBSTFCLFNBQUosQ0FDWkssTUFEWSxFQUVaVyxJQUZZLEVBR1paLFNBSFksRUFJWmEsU0FKWSxFQUtaQyxXQUxZLEVBTVpDLFNBTlksRUFPWixJQVBZLEVBUVpDLE9BUlksQ0FBZDtBQVVBLFdBQU9NLEtBQUssQ0FBQ0MsT0FBTixFQUFQO0FBQ0QsR0F4QkksQ0FBUDtBQXlCRCxDLENBRUQ7OztBQUNBLE1BQU1DLEdBQUcsR0FBRyxDQUFDdkIsTUFBRCxFQUFTVyxJQUFULEVBQWVaLFNBQWYsRUFBMEJ5QixRQUExQixFQUFvQ1gsV0FBcEMsRUFBaURDLFNBQWpELEVBQTREQyxPQUE1RCxLQUF3RTtBQUNsRixNQUFJSCxTQUFTLEdBQUc7QUFBRVksSUFBQUE7QUFBRixHQUFoQjtBQUNBUixFQUFBQSxtQkFBbUIsQ0FBQyxLQUFELEVBQVFqQixTQUFSLEVBQW1CWSxJQUFuQixDQUFuQjtBQUNBLFNBQU9kLFFBQVEsQ0FDWm9CLG9CQURJLENBRUhwQixRQUFRLENBQUNRLEtBQVQsQ0FBZWEsVUFGWixFQUdIbkIsU0FIRyxFQUlIYSxTQUpHLEVBS0hDLFdBTEcsRUFNSGIsTUFORyxFQU9IVyxJQVBHLEVBUUhJLE9BUkcsRUFTSCxJQVRHLEVBV0pJLElBWEksQ0FXQ0MsTUFBTSxJQUFJO0FBQ2RSLElBQUFBLFNBQVMsR0FBR1EsTUFBTSxDQUFDUixTQUFQLElBQW9CQSxTQUFoQztBQUNBQyxJQUFBQSxXQUFXLEdBQUdPLE1BQU0sQ0FBQ1AsV0FBUCxJQUFzQkEsV0FBcEM7QUFDQSxVQUFNUSxLQUFLLEdBQUcsSUFBSTFCLFNBQUosQ0FDWkssTUFEWSxFQUVaVyxJQUZZLEVBR1paLFNBSFksRUFJWmEsU0FKWSxFQUtaQyxXQUxZLEVBTVpDLFNBTlksRUFPWixJQVBZLEVBUVpDLE9BUlksQ0FBZDtBQVVBLFdBQU9NLEtBQUssQ0FBQ0MsT0FBTixFQUFQO0FBQ0QsR0F6QkksQ0FBUDtBQTBCRCxDQTdCRCxDLENBK0JBOzs7QUFDQSxTQUFTRyxHQUFULENBQWF6QixNQUFiLEVBQXFCVyxJQUFyQixFQUEyQlosU0FBM0IsRUFBc0N5QixRQUF0QyxFQUFnRFQsT0FBaEQsRUFBeUQ7QUFDdkQsTUFBSSxPQUFPUyxRQUFQLEtBQW9CLFFBQXhCLEVBQWtDO0FBQ2hDLFVBQU0sSUFBSS9CLEtBQUssQ0FBQ2lDLEtBQVYsQ0FBZ0JqQyxLQUFLLENBQUNpQyxLQUFOLENBQVlDLFlBQTVCLEVBQTBDLGNBQTFDLENBQU47QUFDRDs7QUFFRCxNQUFJNUIsU0FBUyxLQUFLLE9BQWQsSUFBeUJZLElBQUksQ0FBQ2lCLGlCQUFMLEVBQTdCLEVBQXVEO0FBQ3JELFVBQU0sSUFBSW5DLEtBQUssQ0FBQ2lDLEtBQVYsQ0FBZ0JqQyxLQUFLLENBQUNpQyxLQUFOLENBQVlHLGVBQTVCLEVBQTZDLGtDQUE3QyxDQUFOO0FBQ0Q7O0FBRURiLEVBQUFBLG1CQUFtQixDQUFDLFFBQUQsRUFBV2pCLFNBQVgsRUFBc0JZLElBQXRCLENBQW5CO0FBRUEsTUFBSW1CLGNBQUo7QUFDQSxNQUFJQyxnQkFBSjtBQUVBLFNBQU9DLE9BQU8sQ0FBQ0MsT0FBUixHQUNKZCxJQURJLENBQ0MsTUFBTTtBQUNWLFVBQU1lLFdBQVcsR0FBR3BDLGFBQWEsQ0FBQ0MsU0FBRCxFQUFZQyxNQUFaLEVBQW9CLENBQUMsY0FBRCxFQUFpQixhQUFqQixDQUFwQixDQUFqQztBQUNBLFVBQU1TLFlBQVksR0FBR0YsY0FBYyxDQUFDUixTQUFELEVBQVlDLE1BQVosQ0FBbkM7O0FBQ0EsUUFBSWtDLFdBQVcsSUFBSXpCLFlBQWYsSUFBK0JWLFNBQVMsSUFBSSxVQUFoRCxFQUE0RDtBQUMxRCxhQUFPLElBQUlKLFNBQUosQ0FBY0ssTUFBZCxFQUFzQlcsSUFBdEIsRUFBNEJaLFNBQTVCLEVBQXVDO0FBQUV5QixRQUFBQTtBQUFGLE9BQXZDLEVBQ0pGLE9BREksQ0FDSTtBQUFFYSxRQUFBQSxFQUFFLEVBQUU7QUFBTixPQURKLEVBRUpoQixJQUZJLENBRUNpQixRQUFRLElBQUk7QUFDaEIsWUFBSUEsUUFBUSxJQUFJQSxRQUFRLENBQUNDLE9BQXJCLElBQWdDRCxRQUFRLENBQUNDLE9BQVQsQ0FBaUJDLE1BQXJELEVBQTZEO0FBQzNELGdCQUFNQyxXQUFXLEdBQUdILFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQixDQUFqQixDQUFwQjtBQUNBRSxVQUFBQSxXQUFXLENBQUN4QyxTQUFaLEdBQXdCQSxTQUF4Qjs7QUFDQSxjQUFJQSxTQUFTLEtBQUssVUFBZCxJQUE0QixDQUFDWSxJQUFJLENBQUM2QixRQUF0QyxFQUFnRDtBQUM5QyxnQkFBSSxDQUFDN0IsSUFBSSxDQUFDOEIsSUFBTixJQUFjRixXQUFXLENBQUNFLElBQVosQ0FBaUJqQixRQUFqQixLQUE4QmIsSUFBSSxDQUFDOEIsSUFBTCxDQUFVQyxFQUExRCxFQUE4RDtBQUM1RCxvQkFBTSxJQUFJakQsS0FBSyxDQUFDaUMsS0FBVixDQUFnQmpDLEtBQUssQ0FBQ2lDLEtBQU4sQ0FBWWlCLHFCQUE1QixFQUFtRCx1QkFBbkQsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0QsY0FBSUMsWUFBWSxHQUFHNUMsTUFBTSxDQUFDNkMsZUFBMUI7QUFDQUQsVUFBQUEsWUFBWSxDQUFDSCxJQUFiLENBQWtCaEIsR0FBbEIsQ0FBc0JjLFdBQVcsQ0FBQ08sWUFBbEM7QUFDQWhCLFVBQUFBLGNBQWMsR0FBR3JDLEtBQUssQ0FBQ3NELE1BQU4sQ0FBYUMsUUFBYixDQUFzQlQsV0FBdEIsQ0FBakI7QUFDQSxpQkFBTzFDLFFBQVEsQ0FBQ29ELGVBQVQsQ0FDTHBELFFBQVEsQ0FBQ1EsS0FBVCxDQUFlNkMsWUFEVixFQUVMdkMsSUFGSyxFQUdMbUIsY0FISyxFQUlMLElBSkssRUFLTDlCLE1BTEssRUFNTGUsT0FOSyxDQUFQO0FBUUQ7O0FBQ0QsY0FBTSxJQUFJdEIsS0FBSyxDQUFDaUMsS0FBVixDQUFnQmpDLEtBQUssQ0FBQ2lDLEtBQU4sQ0FBWXlCLGdCQUE1QixFQUE4Qyw4QkFBOUMsQ0FBTjtBQUNELE9BeEJJLENBQVA7QUF5QkQ7O0FBQ0QsV0FBT25CLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0QsR0FoQ0ksRUFpQ0pkLElBakNJLENBaUNDLE1BQU07QUFDVixRQUFJLENBQUNSLElBQUksQ0FBQzZCLFFBQVYsRUFBb0I7QUFDbEIsYUFBTzdCLElBQUksQ0FBQ3lDLFlBQUwsRUFBUDtBQUNELEtBRkQsTUFFTztBQUNMO0FBQ0Q7QUFDRixHQXZDSSxFQXdDSmpDLElBeENJLENBd0NDLE1BQU1uQixNQUFNLENBQUNxRCxRQUFQLENBQWdCQyxVQUFoQixFQXhDUCxFQXlDSm5DLElBekNJLENBeUNDb0MsQ0FBQyxJQUFJO0FBQ1R4QixJQUFBQSxnQkFBZ0IsR0FBR3dCLENBQW5CO0FBQ0EsVUFBTUMsT0FBTyxHQUFHLEVBQWhCOztBQUNBLFFBQUksQ0FBQzdDLElBQUksQ0FBQzZCLFFBQVYsRUFBb0I7QUFDbEJnQixNQUFBQSxPQUFPLENBQUNDLEdBQVIsR0FBYyxDQUFDLEdBQUQsQ0FBZDs7QUFDQSxVQUFJOUMsSUFBSSxDQUFDOEIsSUFBVCxFQUFlO0FBQ2JlLFFBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxJQUFaLENBQWlCL0MsSUFBSSxDQUFDOEIsSUFBTCxDQUFVQyxFQUEzQjtBQUNBYyxRQUFBQSxPQUFPLENBQUNDLEdBQVIsR0FBY0QsT0FBTyxDQUFDQyxHQUFSLENBQVlFLE1BQVosQ0FBbUJoRCxJQUFJLENBQUNpRCxTQUF4QixDQUFkO0FBQ0Q7QUFDRjs7QUFFRCxXQUFPNUQsTUFBTSxDQUFDcUQsUUFBUCxDQUFnQlEsT0FBaEIsQ0FDTDlELFNBREssRUFFTDtBQUNFeUIsTUFBQUEsUUFBUSxFQUFFQTtBQURaLEtBRkssRUFLTGdDLE9BTEssRUFNTHpCLGdCQU5LLENBQVA7QUFRRCxHQTVESSxFQTZESlosSUE3REksQ0E2REMsTUFBTTtBQUNWO0FBQ0EsVUFBTTJDLEtBQUssR0FBRy9CLGdCQUFnQixDQUFDZ0Msd0JBQWpCLENBQTBDaEUsU0FBMUMsQ0FBZDtBQUNBQyxJQUFBQSxNQUFNLENBQUNRLG1CQUFQLENBQTJCd0QsYUFBM0IsQ0FBeUNqRSxTQUF6QyxFQUFvRCtCLGNBQXBELEVBQW9FLElBQXBFLEVBQTBFZ0MsS0FBMUU7QUFDQSxXQUFPakUsUUFBUSxDQUFDb0QsZUFBVCxDQUNMcEQsUUFBUSxDQUFDUSxLQUFULENBQWU0RCxXQURWLEVBRUx0RCxJQUZLLEVBR0xtQixjQUhLLEVBSUwsSUFKSyxFQUtMOUIsTUFMSyxFQU1MZSxPQU5LLENBQVA7QUFRRCxHQXpFSSxFQTBFSm1ELEtBMUVJLENBMEVFQyxLQUFLLElBQUk7QUFDZEMsSUFBQUEseUJBQXlCLENBQUNELEtBQUQsRUFBUXBFLFNBQVIsRUFBbUJZLElBQW5CLENBQXpCO0FBQ0QsR0E1RUksQ0FBUDtBQTZFRCxDLENBRUQ7OztBQUNBLFNBQVMwRCxNQUFULENBQWdCckUsTUFBaEIsRUFBd0JXLElBQXhCLEVBQThCWixTQUE5QixFQUF5Q3VFLFVBQXpDLEVBQXFEeEQsU0FBckQsRUFBZ0VDLE9BQWhFLEVBQXlFO0FBQ3ZFQyxFQUFBQSxtQkFBbUIsQ0FBQyxRQUFELEVBQVdqQixTQUFYLEVBQXNCWSxJQUF0QixDQUFuQjtBQUNBLE1BQUk0RCxLQUFLLEdBQUcsSUFBSTNFLFNBQUosQ0FBY0ksTUFBZCxFQUFzQlcsSUFBdEIsRUFBNEJaLFNBQTVCLEVBQXVDLElBQXZDLEVBQTZDdUUsVUFBN0MsRUFBeUQsSUFBekQsRUFBK0R4RCxTQUEvRCxFQUEwRUMsT0FBMUUsQ0FBWjtBQUNBLFNBQU93RCxLQUFLLENBQUNqRCxPQUFOLEVBQVA7QUFDRCxDLENBRUQ7QUFDQTtBQUNBOzs7QUFDQSxTQUFTa0QsTUFBVCxDQUFnQnhFLE1BQWhCLEVBQXdCVyxJQUF4QixFQUE4QlosU0FBOUIsRUFBeUNhLFNBQXpDLEVBQW9EMEQsVUFBcEQsRUFBZ0V4RCxTQUFoRSxFQUEyRUMsT0FBM0UsRUFBb0Y7QUFDbEZDLEVBQUFBLG1CQUFtQixDQUFDLFFBQUQsRUFBV2pCLFNBQVgsRUFBc0JZLElBQXRCLENBQW5CO0FBRUEsU0FBT3FCLE9BQU8sQ0FBQ0MsT0FBUixHQUNKZCxJQURJLENBQ0MsTUFBTTtBQUNWLFVBQU1lLFdBQVcsR0FBR3BDLGFBQWEsQ0FBQ0MsU0FBRCxFQUFZQyxNQUFaLEVBQW9CLENBQUMsWUFBRCxFQUFlLFdBQWYsQ0FBcEIsQ0FBakM7QUFDQSxVQUFNUyxZQUFZLEdBQUdGLGNBQWMsQ0FBQ1IsU0FBRCxFQUFZQyxNQUFaLENBQW5DOztBQUNBLFFBQUlrQyxXQUFXLElBQUl6QixZQUFuQixFQUFpQztBQUMvQjtBQUNBLGFBQU8sSUFBSWQsU0FBSixDQUNMSyxNQURLLEVBRUxXLElBRkssRUFHTFosU0FISyxFQUlMYSxTQUpLLEVBS0w2RCxTQUxLLEVBTUxBLFNBTkssRUFPTCxLQVBLLEVBUUwxRCxPQVJLLEVBU0xPLE9BVEssQ0FTRztBQUNSYSxRQUFBQSxFQUFFLEVBQUU7QUFESSxPQVRILENBQVA7QUFZRDs7QUFDRCxXQUFPSCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNELEdBcEJJLEVBcUJKZCxJQXJCSSxDQXFCQyxDQUFDO0FBQUVrQixJQUFBQTtBQUFGLEdBQUQsS0FBaUI7QUFDckIsUUFBSXFDLGtCQUFKOztBQUNBLFFBQUlyQyxPQUFPLElBQUlBLE9BQU8sQ0FBQ0MsTUFBdkIsRUFBK0I7QUFDN0JvQyxNQUFBQSxrQkFBa0IsR0FBR3JDLE9BQU8sQ0FBQyxDQUFELENBQTVCO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFJekMsU0FBSixDQUNMSSxNQURLLEVBRUxXLElBRkssRUFHTFosU0FISyxFQUlMYSxTQUpLLEVBS0wwRCxVQUxLLEVBTUxJLGtCQU5LLEVBT0w1RCxTQVBLLEVBUUxDLE9BUkssRUFTTCxRQVRLLEVBVUxPLE9BVkssRUFBUDtBQVdELEdBckNJLEVBc0NKNEMsS0F0Q0ksQ0FzQ0VDLEtBQUssSUFBSTtBQUNkQyxJQUFBQSx5QkFBeUIsQ0FBQ0QsS0FBRCxFQUFRcEUsU0FBUixFQUFtQlksSUFBbkIsQ0FBekI7QUFDRCxHQXhDSSxDQUFQO0FBeUNEOztBQUVELFNBQVN5RCx5QkFBVCxDQUFtQ0QsS0FBbkMsRUFBMENwRSxTQUExQyxFQUFxRFksSUFBckQsRUFBMkQ7QUFDekQ7QUFDQSxNQUFJWixTQUFTLEtBQUssT0FBZCxJQUF5Qm9FLEtBQUssQ0FBQ1EsSUFBTixLQUFlbEYsS0FBSyxDQUFDaUMsS0FBTixDQUFZeUIsZ0JBQXBELElBQXdFLENBQUN4QyxJQUFJLENBQUM2QixRQUFsRixFQUE0RjtBQUMxRixVQUFNLElBQUkvQyxLQUFLLENBQUNpQyxLQUFWLENBQWdCakMsS0FBSyxDQUFDaUMsS0FBTixDQUFZRyxlQUE1QixFQUE2QyxvQkFBN0MsQ0FBTjtBQUNEOztBQUNELFFBQU1zQyxLQUFOO0FBQ0Q7O0FBRUQsTUFBTVMsMkJBQTJCLEdBQUcsQ0FDbEMsWUFEa0MsRUFFbEMsYUFGa0MsRUFHbEMsUUFIa0MsRUFJbEMsZUFKa0MsRUFLbEMsY0FMa0MsRUFNbEMsY0FOa0MsQ0FBcEMsQyxDQVFBOztBQUNBLFNBQVM1RCxtQkFBVCxDQUE2QjZELE1BQTdCLEVBQXFDOUUsU0FBckMsRUFBZ0RZLElBQWhELEVBQXNEO0FBQ3BELE1BQUlaLFNBQVMsS0FBSyxlQUFkLElBQWlDLENBQUNZLElBQUksQ0FBQzZCLFFBQTNDLEVBQXFEO0FBQ25ELFFBQUlxQyxNQUFNLEtBQUssUUFBWCxJQUF1QkEsTUFBTSxLQUFLLE1BQXRDLEVBQThDO0FBQzVDLFlBQU1WLEtBQUssR0FBSSx5Q0FBd0NVLE1BQU8sNENBQTlEO0FBQ0EsWUFBTSxJQUFJcEYsS0FBSyxDQUFDaUMsS0FBVixDQUFnQmpDLEtBQUssQ0FBQ2lDLEtBQU4sQ0FBWW9ELG1CQUE1QixFQUFpRFgsS0FBakQsQ0FBTjtBQUNEO0FBQ0YsR0FObUQsQ0FRcEQ7OztBQUNBLE1BQUlTLDJCQUEyQixDQUFDRyxPQUE1QixDQUFvQ2hGLFNBQXBDLEtBQWtELENBQWxELElBQXVELENBQUNZLElBQUksQ0FBQzZCLFFBQWpFLEVBQTJFO0FBQ3pFLFVBQU0yQixLQUFLLEdBQUkseUNBQXdDVSxNQUFPLHFCQUFvQjlFLFNBQVUsY0FBNUY7QUFDQSxVQUFNLElBQUlOLEtBQUssQ0FBQ2lDLEtBQVYsQ0FBZ0JqQyxLQUFLLENBQUNpQyxLQUFOLENBQVlvRCxtQkFBNUIsRUFBaURYLEtBQWpELENBQU47QUFDRCxHQVptRCxDQWNwRDs7O0FBQ0EsTUFBSXhELElBQUksQ0FBQ3FFLFVBQUwsS0FBb0JILE1BQU0sS0FBSyxRQUFYLElBQXVCQSxNQUFNLEtBQUssUUFBbEMsSUFBOENBLE1BQU0sS0FBSyxRQUE3RSxDQUFKLEVBQTRGO0FBQzFGLFVBQU1WLEtBQUssR0FBSSxvREFBbURVLE1BQU8sYUFBekU7QUFDQSxVQUFNLElBQUlwRixLQUFLLENBQUNpQyxLQUFWLENBQWdCakMsS0FBSyxDQUFDaUMsS0FBTixDQUFZb0QsbUJBQTVCLEVBQWlEWCxLQUFqRCxDQUFOO0FBQ0Q7QUFDRjs7QUFFRGMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCO0FBQ2ZiLEVBQUFBLE1BRGU7QUFFZjVDLEVBQUFBLEdBRmU7QUFHZmYsRUFBQUEsSUFIZTtBQUlmYSxFQUFBQSxHQUplO0FBS2ZpRCxFQUFBQTtBQUxlLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGhlbHBlcnMgZm9yIHJ1bm5pbmcgb3BlcmF0aW9ucyBpbiBSRVNUIGZvcm1hdC5cbi8vIFRoZSBnb2FsIGlzIHRoYXQgaGFuZGxlcnMgdGhhdCBleHBsaWNpdGx5IGhhbmRsZSBhbiBleHByZXNzIHJvdXRlXG4vLyBzaG91bGQganVzdCBiZSBzaGFsbG93IHdyYXBwZXJzIGFyb3VuZCB0aGluZ3MgaW4gdGhpcyBmaWxlLCBidXRcbi8vIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGV4cGxpY2l0bHkgZGVwZW5kIG9uIHRoZSByZXF1ZXN0XG4vLyBvYmplY3QuXG4vLyBUaGlzIG1lYW5zIHRoYXQgb25lIG9mIHRoZXNlIGhhbmRsZXJzIGNhbiBzdXBwb3J0IG11bHRpcGxlXG4vLyByb3V0ZXMuIFRoYXQncyB1c2VmdWwgZm9yIHRoZSByb3V0ZXMgdGhhdCBkbyByZWFsbHkgc2ltaWxhclxuLy8gdGhpbmdzLlxuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbnZhciBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xudmFyIFJlc3RXcml0ZSA9IHJlcXVpcmUoJy4vUmVzdFdyaXRlJyk7XG52YXIgdHJpZ2dlcnMgPSByZXF1aXJlKCcuL3RyaWdnZXJzJyk7XG5cbmZ1bmN0aW9uIGNoZWNrVHJpZ2dlcnMoY2xhc3NOYW1lLCBjb25maWcsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlcy5zb21lKHRyaWdnZXJUeXBlID0+IHtcbiAgICByZXR1cm4gdHJpZ2dlcnMuZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJzLlR5cGVzW3RyaWdnZXJUeXBlXSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tMaXZlUXVlcnkoY2xhc3NOYW1lLCBjb25maWcpIHtcbiAgcmV0dXJuIGNvbmZpZy5saXZlUXVlcnlDb250cm9sbGVyICYmIGNvbmZpZy5saXZlUXVlcnlDb250cm9sbGVyLmhhc0xpdmVRdWVyeShjbGFzc05hbWUpO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYW4gb2JqZWN0IHdpdGggb3B0aW9uYWwga2V5cyAncmVzdWx0cycgYW5kICdjb3VudCcuXG5mdW5jdGlvbiBmaW5kKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPcHRpb25zLCBjbGllbnRTREssIGNvbnRleHQpIHtcbiAgZW5mb3JjZVJvbGVTZWN1cml0eSgnZmluZCcsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0XG4gICAgKVxuICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICByZXN0V2hlcmUgPSByZXN1bHQucmVzdFdoZXJlIHx8IHJlc3RXaGVyZTtcbiAgICAgIHJlc3RPcHRpb25zID0gcmVzdWx0LnJlc3RPcHRpb25zIHx8IHJlc3RPcHRpb25zO1xuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgcmVzdFdoZXJlLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICB0cnVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICB9KTtcbn1cblxuLy8gZ2V0IGlzIGp1c3QgbGlrZSBmaW5kIGJ1dCBvbmx5IHF1ZXJpZXMgYW4gb2JqZWN0SWQuXG5jb25zdCBnZXQgPSAoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG9iamVjdElkLCByZXN0T3B0aW9ucywgY2xpZW50U0RLLCBjb250ZXh0KSA9PiB7XG4gIHZhciByZXN0V2hlcmUgPSB7IG9iamVjdElkIH07XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2dldCcsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHJldHVybiB0cmlnZ2Vyc1xuICAgIC5tYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjb250ZXh0LFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgcmVzdFdoZXJlID0gcmVzdWx0LnJlc3RXaGVyZSB8fCByZXN0V2hlcmU7XG4gICAgICByZXN0T3B0aW9ucyA9IHJlc3VsdC5yZXN0T3B0aW9ucyB8fCByZXN0T3B0aW9ucztcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBhdXRoLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICAgIGNsaWVudFNESyxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeS5leGVjdXRlKCk7XG4gICAgfSk7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGRvZXNuJ3QgcmVzb2x2ZSB0byBhbnkgdXNlZnVsIHZhbHVlLlxuZnVuY3Rpb24gZGVsKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCBvYmplY3RJZCwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIG9iamVjdElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdiYWQgb2JqZWN0SWQnKTtcbiAgfVxuXG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicgJiYgYXV0aC5pc1VuYXV0aGVudGljYXRlZCgpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNFU1NJT05fTUlTU0lORywgJ0luc3VmZmljaWVudCBhdXRoIHRvIGRlbGV0ZSB1c2VyJyk7XG4gIH1cblxuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCdkZWxldGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIGxldCBpbmZsYXRlZE9iamVjdDtcbiAgbGV0IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaGFzVHJpZ2dlcnMgPSBjaGVja1RyaWdnZXJzKGNsYXNzTmFtZSwgY29uZmlnLCBbJ2JlZm9yZURlbGV0ZScsICdhZnRlckRlbGV0ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkgfHwgY2xhc3NOYW1lID09ICdfU2Vzc2lvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN0UXVlcnkoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIHsgb2JqZWN0SWQgfSlcbiAgICAgICAgICAuZXhlY3V0ZSh7IG9wOiAnZGVsZXRlJyB9KVxuICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0c1swXTtcbiAgICAgICAgICAgICAgZmlyc3RSZXN1bHQuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAnX1Nlc3Npb24nICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhdXRoLnVzZXIgfHwgZmlyc3RSZXN1bHQudXNlci5vYmplY3RJZCAhPT0gYXV0aC51c2VyLmlkKSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnSW52YWxpZCBzZXNzaW9uIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBjYWNoZUFkYXB0ZXIgPSBjb25maWcuY2FjaGVDb250cm9sbGVyO1xuICAgICAgICAgICAgICBjYWNoZUFkYXB0ZXIudXNlci5kZWwoZmlyc3RSZXN1bHQuc2Vzc2lvblRva2VuKTtcbiAgICAgICAgICAgICAgaW5mbGF0ZWRPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04oZmlyc3RSZXN1bHQpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJpZ2dlcnMubWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICAgICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgICAgICAgICBhdXRoLFxuICAgICAgICAgICAgICAgIGluZmxhdGVkT2JqZWN0LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT2JqZWN0IG5vdCBmb3VuZCBmb3IgZGVsZXRlLicpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWF1dGguaXNNYXN0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiBjb25maWcuZGF0YWJhc2UubG9hZFNjaGVtYSgpKVxuICAgIC50aGVuKHMgPT4ge1xuICAgICAgc2NoZW1hQ29udHJvbGxlciA9IHM7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICBpZiAoIWF1dGguaXNNYXN0ZXIpIHtcbiAgICAgICAgb3B0aW9ucy5hY2wgPSBbJyonXTtcbiAgICAgICAgaWYgKGF1dGgudXNlcikge1xuICAgICAgICAgIG9wdGlvbnMuYWNsLnB1c2goYXV0aC51c2VyLmlkKTtcbiAgICAgICAgICBvcHRpb25zLmFjbCA9IG9wdGlvbnMuYWNsLmNvbmNhdChhdXRoLnVzZXJSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhYmFzZS5kZXN0cm95KFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3RJZDogb2JqZWN0SWQsXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHNjaGVtYUNvbnRyb2xsZXJcbiAgICAgICk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICAvLyBOb3RpZnkgTGl2ZVF1ZXJ5IHNlcnZlciBpZiBwb3NzaWJsZVxuICAgICAgY29uc3QgcGVybXMgPSBzY2hlbWFDb250cm9sbGVyLmdldENsYXNzTGV2ZWxQZXJtaXNzaW9ucyhjbGFzc05hbWUpO1xuICAgICAgY29uZmlnLmxpdmVRdWVyeUNvbnRyb2xsZXIub25BZnRlckRlbGV0ZShjbGFzc05hbWUsIGluZmxhdGVkT2JqZWN0LCBudWxsLCBwZXJtcyk7XG4gICAgICByZXR1cm4gdHJpZ2dlcnMubWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgaW5mbGF0ZWRPYmplY3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBoYW5kbGVTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yLCBjbGFzc05hbWUsIGF1dGgpO1xuICAgIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSBmb3IgYSB7cmVzcG9uc2UsIHN0YXR1cywgbG9jYXRpb259IG9iamVjdC5cbmZ1bmN0aW9uIGNyZWF0ZShjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgcmVzdE9iamVjdCwgY2xpZW50U0RLLCBjb250ZXh0KSB7XG4gIGVuZm9yY2VSb2xlU2VjdXJpdHkoJ2NyZWF0ZScsIGNsYXNzTmFtZSwgYXV0aCk7XG4gIHZhciB3cml0ZSA9IG5ldyBSZXN0V3JpdGUoY29uZmlnLCBhdXRoLCBjbGFzc05hbWUsIG51bGwsIHJlc3RPYmplY3QsIG51bGwsIGNsaWVudFNESywgY29udGV4dCk7XG4gIHJldHVybiB3cml0ZS5leGVjdXRlKCk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgY29udGFpbnMgdGhlIGZpZWxkcyBvZiB0aGUgdXBkYXRlIHRoYXQgdGhlXG4vLyBSRVNUIEFQSSBpcyBzdXBwb3NlZCB0byByZXR1cm4uXG4vLyBVc3VhbGx5LCB0aGlzIGlzIGp1c3QgdXBkYXRlZEF0LlxuZnVuY3Rpb24gdXBkYXRlKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCByZXN0V2hlcmUsIHJlc3RPYmplY3QsIGNsaWVudFNESywgY29udGV4dCkge1xuICBlbmZvcmNlUm9sZVNlY3VyaXR5KCd1cGRhdGUnLCBjbGFzc05hbWUsIGF1dGgpO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhc1RyaWdnZXJzID0gY2hlY2tUcmlnZ2VycyhjbGFzc05hbWUsIGNvbmZpZywgWydiZWZvcmVTYXZlJywgJ2FmdGVyU2F2ZSddKTtcbiAgICAgIGNvbnN0IGhhc0xpdmVRdWVyeSA9IGNoZWNrTGl2ZVF1ZXJ5KGNsYXNzTmFtZSwgY29uZmlnKTtcbiAgICAgIGlmIChoYXNUcmlnZ2VycyB8fCBoYXNMaXZlUXVlcnkpIHtcbiAgICAgICAgLy8gRG8gbm90IHVzZSBmaW5kLCBhcyBpdCBydW5zIHRoZSBiZWZvcmUgZmluZHNcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN0UXVlcnkoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKS5leGVjdXRlKHtcbiAgICAgICAgICBvcDogJ3VwZGF0ZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSlcbiAgICAudGhlbigoeyByZXN1bHRzIH0pID0+IHtcbiAgICAgIHZhciBvcmlnaW5hbFJlc3RPYmplY3Q7XG4gICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBvcmlnaW5hbFJlc3RPYmplY3QgPSByZXN1bHRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICByZXN0V2hlcmUsXG4gICAgICAgIHJlc3RPYmplY3QsXG4gICAgICAgIG9yaWdpbmFsUmVzdE9iamVjdCxcbiAgICAgICAgY2xpZW50U0RLLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICAndXBkYXRlJ1xuICAgICAgKS5leGVjdXRlKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Vzc2lvbk1pc3NpbmdFcnJvcihlcnJvciwgY2xhc3NOYW1lLCBhdXRoKSB7XG4gIC8vIElmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgYSB1c2VyIHdpdGhvdXQgLyB3aXRoIGJhZCBzZXNzaW9uIHRva2VuXG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicgJiYgZXJyb3IuY29kZSA9PT0gUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCAmJiAhYXV0aC5pc01hc3Rlcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5TRVNTSU9OX01JU1NJTkcsICdJbnN1ZmZpY2llbnQgYXV0aC4nKTtcbiAgfVxuICB0aHJvdyBlcnJvcjtcbn1cblxuY29uc3QgY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzID0gW1xuICAnX0pvYlN0YXR1cycsXG4gICdfUHVzaFN0YXR1cycsXG4gICdfSG9va3MnLFxuICAnX0dsb2JhbENvbmZpZycsXG4gICdfSm9iU2NoZWR1bGUnLFxuICAnX0lkZW1wb3RlbmN5Jyxcbl07XG4vLyBEaXNhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIF9Sb2xlIGNvbGxlY3Rpb24gZXhjZXB0IGJ5IG1hc3RlciBrZXlcbmZ1bmN0aW9uIGVuZm9yY2VSb2xlU2VjdXJpdHkobWV0aG9kLCBjbGFzc05hbWUsIGF1dGgpIHtcbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19JbnN0YWxsYXRpb24nICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgaWYgKG1ldGhvZCA9PT0gJ2RlbGV0ZScgfHwgbWV0aG9kID09PSAnZmluZCcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYENsaWVudHMgYXJlbid0IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgJHttZXRob2R9IG9wZXJhdGlvbiBvbiB0aGUgaW5zdGFsbGF0aW9uIGNvbGxlY3Rpb24uYDtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy9hbGwgdm9sYXRpbGVDbGFzc2VzIGFyZSBtYXN0ZXJLZXkgb25seVxuICBpZiAoY2xhc3Nlc1dpdGhNYXN0ZXJPbmx5QWNjZXNzLmluZGV4T2YoY2xhc3NOYW1lKSA+PSAwICYmICFhdXRoLmlzTWFzdGVyKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgQ2xpZW50cyBhcmVuJ3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoZSAke21ldGhvZH0gb3BlcmF0aW9uIG9uIHRoZSAke2NsYXNzTmFtZX0gY29sbGVjdGlvbi5gO1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcik7XG4gIH1cblxuICAvLyByZWFkT25seSBtYXN0ZXJLZXkgaXMgbm90IGFsbG93ZWRcbiAgaWYgKGF1dGguaXNSZWFkT25seSAmJiAobWV0aG9kID09PSAnZGVsZXRlJyB8fCBtZXRob2QgPT09ICdjcmVhdGUnIHx8IG1ldGhvZCA9PT0gJ3VwZGF0ZScpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBgcmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIHBlcmZvcm0gdGhlICR7bWV0aG9kfSBvcGVyYXRpb24uYDtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgZXJyb3IpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGUsXG4gIGRlbCxcbiAgZmluZCxcbiAgZ2V0LFxuICB1cGRhdGUsXG59O1xuIl19
|