parse-server 7.4.0 → 8.0.0-alpha.10
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 +25 -32
- package/lib/Adapters/AdapterLoader.js +3 -16
- package/lib/Adapters/Auth/index.js +2 -2
- package/lib/Adapters/Auth/mfa.js +4 -6
- package/lib/Adapters/PubSub/RedisPubSub.js +9 -12
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +15 -18
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +19 -21
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +8 -8
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +23 -18
- package/lib/Auth.js +8 -12
- package/lib/Config.js +2 -3
- package/lib/Controllers/DatabaseController.js +35 -31
- package/lib/Controllers/ParseGraphQLController.js +44 -57
- package/lib/Controllers/SchemaController.js +12 -12
- package/lib/Controllers/UserController.js +7 -13
- package/lib/Controllers/index.js +8 -9
- package/lib/Deprecator/Deprecations.js +2 -2
- package/lib/GraphQL/helpers/objectsQueries.js +2 -1
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +8 -9
- package/lib/GraphQL/loaders/defaultRelaySchema.js +5 -9
- package/lib/GraphQL/loaders/filesMutations.js +4 -7
- package/lib/GraphQL/loaders/functionsMutations.js +3 -7
- package/lib/GraphQL/loaders/parseClassMutations.js +18 -17
- package/lib/GraphQL/loaders/parseClassTypes.js +62 -52
- package/lib/GraphQL/loaders/schemaDirectives.js +3 -5
- package/lib/GraphQL/loaders/usersMutations.js +4 -8
- package/lib/GraphQL/transformers/mutation.js +6 -9
- package/lib/GraphQL/transformers/query.js +18 -18
- package/lib/GraphQL/transformers/schemaFields.js +10 -12
- package/lib/LiveQuery/ParseLiveQueryServer.js +7 -9
- package/lib/LiveQuery/QueryTools.js +2 -3
- package/lib/Options/Definitions.js +29 -4
- package/lib/Options/docs.js +8 -3
- package/lib/Options/index.js +1 -1
- package/lib/ParseServer.js +18 -17
- package/lib/ParseServerRESTController.js +4 -8
- package/lib/RestWrite.js +5 -9
- package/lib/Routers/ClassesRouter.js +2 -3
- package/lib/Routers/FeaturesRouter.js +2 -3
- package/lib/Routers/FilesRouter.js +3 -5
- package/lib/Routers/PublicAPIRouter.js +9 -1
- package/lib/Routers/SchemasRouter.js +2 -3
- package/lib/Routers/UsersRouter.js +15 -16
- package/lib/SchemaMigrations/DefinedSchemas.js +4 -7
- package/lib/StatusHandler.js +10 -9
- package/lib/Utils.js +5 -8
- package/lib/cli/utils/commander.js +5 -2
- package/lib/cloud-code/Parse.Cloud.js +22 -22
- package/lib/logger.js +1 -1
- package/lib/middlewares.js +7 -12
- package/lib/triggers.js +12 -12
- package/lib/vendor/mongodbUrl.js +2 -2
- package/package.json +36 -32
- package/types/index.d.ts +0 -0
- package/types/logger.d.ts +2 -0
- package/types/tsconfig.json +18 -0
|
@@ -6,17 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _MongoCollection = _interopRequireDefault(require("./MongoCollection"));
|
|
8
8
|
var _node = _interopRequireDefault(require("parse/node"));
|
|
9
|
-
const _excluded = ["type", "targetClass"];
|
|
10
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
function _objectDestructuringEmpty(t) { if (null == t) throw new TypeError("Cannot destructure " + t); }
|
|
12
|
-
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
13
|
-
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
14
|
-
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
|
|
15
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
17
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
18
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
19
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
20
10
|
function mongoFieldToParseSchemaField(type) {
|
|
21
11
|
if (type[0] === '*') {
|
|
22
12
|
return {
|
|
@@ -139,10 +129,15 @@ function mongoSchemaToParseSchema(mongoSchema) {
|
|
|
139
129
|
let indexes = {};
|
|
140
130
|
if (mongoSchema._metadata) {
|
|
141
131
|
if (mongoSchema._metadata.class_permissions) {
|
|
142
|
-
clps =
|
|
132
|
+
clps = {
|
|
133
|
+
...emptyCLPS,
|
|
134
|
+
...mongoSchema._metadata.class_permissions
|
|
135
|
+
};
|
|
143
136
|
}
|
|
144
137
|
if (mongoSchema._metadata.indexes) {
|
|
145
|
-
indexes =
|
|
138
|
+
indexes = {
|
|
139
|
+
...mongoSchema._metadata.indexes
|
|
140
|
+
};
|
|
146
141
|
}
|
|
147
142
|
}
|
|
148
143
|
return {
|
|
@@ -271,10 +266,10 @@ class MongoSchemaCollection {
|
|
|
271
266
|
throw error;
|
|
272
267
|
}).then(() => {
|
|
273
268
|
const {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
269
|
+
type,
|
|
270
|
+
targetClass,
|
|
271
|
+
...fieldOptions
|
|
272
|
+
} = fieldType;
|
|
278
273
|
// We use $exists and $set to avoid overwriting the field type if it
|
|
279
274
|
// already exists. (it could have added inbetween the last query and the update)
|
|
280
275
|
if (fieldOptions && Object.keys(fieldOptions).length > 0) {
|
|
@@ -308,7 +303,9 @@ class MongoSchemaCollection {
|
|
|
308
303
|
});
|
|
309
304
|
}
|
|
310
305
|
async updateFieldOptions(className, fieldName, fieldType) {
|
|
311
|
-
const
|
|
306
|
+
const {
|
|
307
|
+
...fieldOptions
|
|
308
|
+
} = fieldType;
|
|
312
309
|
delete fieldOptions.type;
|
|
313
310
|
delete fieldOptions.targetClass;
|
|
314
311
|
await this.upsertSchema(className, {
|
|
@@ -328,4 +325,4 @@ class MongoSchemaCollection {
|
|
|
328
325
|
MongoSchemaCollection._TESTmongoSchemaToParseSchema = mongoSchemaToParseSchema;
|
|
329
326
|
MongoSchemaCollection.parseFieldTypeToMongoFieldType = parseFieldTypeToMongoFieldType;
|
|
330
327
|
var _default = exports.default = MongoSchemaCollection;
|
|
331
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfTW9uZ29Db2xsZWN0aW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbm9kZSIsIl9leGNsdWRlZCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHkiLCJ0IiwiVHlwZUVycm9yIiwiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJiaW5kIiwibiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInIiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm8iLCJpIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm93bktleXMiLCJrZXlzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIm1vbmdvRmllbGRUb1BhcnNlU2NoZW1hRmllbGQiLCJ0eXBlIiwidGFyZ2V0Q2xhc3MiLCJzbGljZSIsInN0YXJ0c1dpdGgiLCJub25GaWVsZFNjaGVtYUtleXMiLCJtb25nb1NjaGVtYUZpZWxkc1RvUGFyc2VTY2hlbWFGaWVsZHMiLCJzY2hlbWEiLCJmaWVsZE5hbWVzIiwia2V5IiwiaW5kZXhPZiIsInJlc3BvbnNlIiwicmVkdWNlIiwib2JqIiwiZmllbGROYW1lIiwiX21ldGFkYXRhIiwiZmllbGRzX29wdGlvbnMiLCJBQ0wiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJvYmplY3RJZCIsImVtcHR5Q0xQUyIsImZyZWV6ZSIsImZpbmQiLCJjb3VudCIsImdldCIsImNyZWF0ZSIsInVwZGF0ZSIsImRlbGV0ZSIsImFkZEZpZWxkIiwicHJvdGVjdGVkRmllbGRzIiwiZGVmYXVsdENMUFMiLCJtb25nb1NjaGVtYVRvUGFyc2VTY2hlbWEiLCJtb25nb1NjaGVtYSIsImNscHMiLCJpbmRleGVzIiwiY2xhc3NfcGVybWlzc2lvbnMiLCJjbGFzc05hbWUiLCJfaWQiLCJmaWVsZHMiLCJjbGFzc0xldmVsUGVybWlzc2lvbnMiLCJfbW9uZ29TY2hlbWFRdWVyeUZyb21OYW1lUXVlcnkiLCJuYW1lIiwicXVlcnkiLCJvYmplY3QiLCJwYXJzZUZpZWxkVHlwZVRvTW9uZ29GaWVsZFR5cGUiLCJNb25nb1NjaGVtYUNvbGxlY3Rpb24iLCJjb25zdHJ1Y3RvciIsImNvbGxlY3Rpb24iLCJfY29sbGVjdGlvbiIsIl9mZXRjaEFsbFNjaGVtYXNGcm9tX1NDSEVNQSIsIl9yYXdGaW5kIiwidGhlbiIsInNjaGVtYXMiLCJtYXAiLCJfZmV0Y2hPbmVTY2hlbWFGcm9tX1NDSEVNQSIsImxpbWl0IiwicmVzdWx0cyIsInVuZGVmaW5lZCIsImZpbmRBbmREZWxldGVTY2hlbWEiLCJfbW9uZ29Db2xsZWN0aW9uIiwiZmluZE9uZUFuZERlbGV0ZSIsImluc2VydFNjaGVtYSIsImluc2VydE9uZSIsImNhdGNoIiwiZXJyb3IiLCJjb2RlIiwiUGFyc2UiLCJFcnJvciIsIkRVUExJQ0FURV9WQUxVRSIsInVwZGF0ZVNjaGVtYSIsInVwZGF0ZU9uZSIsInVwc2VydFNjaGVtYSIsInVwc2VydE9uZSIsImFkZEZpZWxkSWZOb3RFeGlzdHMiLCJmaWVsZFR5cGUiLCJzb21lIiwiZXhpc3RpbmdGaWVsZCIsIklOQ09SUkVDVF9UWVBFIiwiZmllbGRPcHRpb25zIiwiJGV4aXN0cyIsIiRzZXQiLCJ1cGRhdGVGaWVsZE9wdGlvbnMiLCJfVEVTVG1vbmdvU2NoZW1hVG9QYXJzZVNjaGVtYSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU2NoZW1hQ29sbGVjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTW9uZ29Db2xsZWN0aW9uIGZyb20gJy4vTW9uZ29Db2xsZWN0aW9uJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcblxuZnVuY3Rpb24gbW9uZ29GaWVsZFRvUGFyc2VTY2hlbWFGaWVsZCh0eXBlKSB7XG4gIGlmICh0eXBlWzBdID09PSAnKicpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1BvaW50ZXInLFxuICAgICAgdGFyZ2V0Q2xhc3M6IHR5cGUuc2xpY2UoMSksXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZS5zdGFydHNXaXRoKCdyZWxhdGlvbjwnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmVsYXRpb24nLFxuICAgICAgdGFyZ2V0Q2xhc3M6IHR5cGUuc2xpY2UoJ3JlbGF0aW9uPCcubGVuZ3RoLCB0eXBlLmxlbmd0aCAtIDEpLFxuICAgIH07XG4gIH1cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdOdW1iZXInIH07XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdTdHJpbmcnIH07XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4geyB0eXBlOiAnQm9vbGVhbicgfTtcbiAgICBjYXNlICdkYXRlJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdEYXRlJyB9O1xuICAgIGNhc2UgJ21hcCc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdPYmplY3QnIH07XG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ0FycmF5JyB9O1xuICAgIGNhc2UgJ2dlb3BvaW50JzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdHZW9Qb2ludCcgfTtcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdGaWxlJyB9O1xuICAgIGNhc2UgJ2J5dGVzJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdCeXRlcycgfTtcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdQb2x5Z29uJyB9O1xuICB9XG59XG5cbmNvbnN0IG5vbkZpZWxkU2NoZW1hS2V5cyA9IFsnX2lkJywgJ19tZXRhZGF0YScsICdfY2xpZW50X3Blcm1pc3Npb25zJ107XG5mdW5jdGlvbiBtb25nb1NjaGVtYUZpZWxkc1RvUGFyc2VTY2hlbWFGaWVsZHMoc2NoZW1hKSB7XG4gIHZhciBmaWVsZE5hbWVzID0gT2JqZWN0LmtleXMoc2NoZW1hKS5maWx0ZXIoa2V5ID0+IG5vbkZpZWxkU2NoZW1hS2V5cy5pbmRleE9mKGtleSkgPT09IC0xKTtcbiAgdmFyIHJlc3BvbnNlID0gZmllbGROYW1lcy5yZWR1Y2UoKG9iaiwgZmllbGROYW1lKSA9PiB7XG4gICAgb2JqW2ZpZWxkTmFtZV0gPSBtb25nb0ZpZWxkVG9QYXJzZVNjaGVtYUZpZWxkKHNjaGVtYVtmaWVsZE5hbWVdKTtcbiAgICBpZiAoXG4gICAgICBzY2hlbWEuX21ldGFkYXRhICYmXG4gICAgICBzY2hlbWEuX21ldGFkYXRhLmZpZWxkc19vcHRpb25zICYmXG4gICAgICBzY2hlbWEuX21ldGFkYXRhLmZpZWxkc19vcHRpb25zW2ZpZWxkTmFtZV1cbiAgICApIHtcbiAgICAgIG9ialtmaWVsZE5hbWVdID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIG9ialtmaWVsZE5hbWVdLFxuICAgICAgICBzY2hlbWEuX21ldGFkYXRhLmZpZWxkc19vcHRpb25zW2ZpZWxkTmFtZV1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sIHt9KTtcbiAgcmVzcG9uc2UuQUNMID0geyB0eXBlOiAnQUNMJyB9O1xuICByZXNwb25zZS5jcmVhdGVkQXQgPSB7IHR5cGU6ICdEYXRlJyB9O1xuICByZXNwb25zZS51cGRhdGVkQXQgPSB7IHR5cGU6ICdEYXRlJyB9O1xuICByZXNwb25zZS5vYmplY3RJZCA9IHsgdHlwZTogJ1N0cmluZycgfTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG5jb25zdCBlbXB0eUNMUFMgPSBPYmplY3QuZnJlZXplKHtcbiAgZmluZDoge30sXG4gIGNvdW50OiB7fSxcbiAgZ2V0OiB7fSxcbiAgY3JlYXRlOiB7fSxcbiAgdXBkYXRlOiB7fSxcbiAgZGVsZXRlOiB7fSxcbiAgYWRkRmllbGQ6IHt9LFxuICBwcm90ZWN0ZWRGaWVsZHM6IHt9LFxufSk7XG5cbmNvbnN0IGRlZmF1bHRDTFBTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGZpbmQ6IHsgJyonOiB0cnVlIH0sXG4gIGNvdW50OiB7ICcqJzogdHJ1ZSB9LFxuICBnZXQ6IHsgJyonOiB0cnVlIH0sXG4gIGNyZWF0ZTogeyAnKic6IHRydWUgfSxcbiAgdXBkYXRlOiB7ICcqJzogdHJ1ZSB9LFxuICBkZWxldGU6IHsgJyonOiB0cnVlIH0sXG4gIGFkZEZpZWxkOiB7ICcqJzogdHJ1ZSB9LFxuICBwcm90ZWN0ZWRGaWVsZHM6IHsgJyonOiBbXSB9LFxufSk7XG5cbmZ1bmN0aW9uIG1vbmdvU2NoZW1hVG9QYXJzZVNjaGVtYShtb25nb1NjaGVtYSkge1xuICBsZXQgY2xwcyA9IGRlZmF1bHRDTFBTO1xuICBsZXQgaW5kZXhlcyA9IHt9O1xuICBpZiAobW9uZ29TY2hlbWEuX21ldGFkYXRhKSB7XG4gICAgaWYgKG1vbmdvU2NoZW1hLl9tZXRhZGF0YS5jbGFzc19wZXJtaXNzaW9ucykge1xuICAgICAgY2xwcyA9IHsgLi4uZW1wdHlDTFBTLCAuLi5tb25nb1NjaGVtYS5fbWV0YWRhdGEuY2xhc3NfcGVybWlzc2lvbnMgfTtcbiAgICB9XG4gICAgaWYgKG1vbmdvU2NoZW1hLl9tZXRhZGF0YS5pbmRleGVzKSB7XG4gICAgICBpbmRleGVzID0geyAuLi5tb25nb1NjaGVtYS5fbWV0YWRhdGEuaW5kZXhlcyB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGNsYXNzTmFtZTogbW9uZ29TY2hlbWEuX2lkLFxuICAgIGZpZWxkczogbW9uZ29TY2hlbWFGaWVsZHNUb1BhcnNlU2NoZW1hRmllbGRzKG1vbmdvU2NoZW1hKSxcbiAgICBjbGFzc0xldmVsUGVybWlzc2lvbnM6IGNscHMsXG4gICAgaW5kZXhlczogaW5kZXhlcyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX21vbmdvU2NoZW1hUXVlcnlGcm9tTmFtZVF1ZXJ5KG5hbWU6IHN0cmluZywgcXVlcnkpIHtcbiAgY29uc3Qgb2JqZWN0ID0geyBfaWQ6IG5hbWUgfTtcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgT2JqZWN0LmtleXMocXVlcnkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gcXVlcnlba2V5XTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBSZXR1cm5zIGEgdHlwZSBzdWl0YWJsZSBmb3IgaW5zZXJ0aW5nIGludG8gbW9uZ28gX1NDSEVNQSBjb2xsZWN0aW9uLlxuLy8gRG9lcyBubyB2YWxpZGF0aW9uLiBUaGF0IGlzIGV4cGVjdGVkIHRvIGJlIGRvbmUgaW4gUGFyc2UgU2VydmVyLlxuZnVuY3Rpb24gcGFyc2VGaWVsZFR5cGVUb01vbmdvRmllbGRUeXBlKHsgdHlwZSwgdGFyZ2V0Q2xhc3MgfSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdQb2ludGVyJzpcbiAgICAgIHJldHVybiBgKiR7dGFyZ2V0Q2xhc3N9YDtcbiAgICBjYXNlICdSZWxhdGlvbic6XG4gICAgICByZXR1cm4gYHJlbGF0aW9uPCR7dGFyZ2V0Q2xhc3N9PmA7XG4gICAgY2FzZSAnTnVtYmVyJzpcbiAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICBjYXNlICdBcnJheSc6XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICBjYXNlICdHZW9Qb2ludCc6XG4gICAgICByZXR1cm4gJ2dlb3BvaW50JztcbiAgICBjYXNlICdGaWxlJzpcbiAgICAgIHJldHVybiAnZmlsZSc7XG4gICAgY2FzZSAnQnl0ZXMnOlxuICAgICAgcmV0dXJuICdieXRlcyc7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICByZXR1cm4gJ3BvbHlnb24nO1xuICB9XG59XG5cbmNsYXNzIE1vbmdvU2NoZW1hQ29sbGVjdGlvbiB7XG4gIF9jb2xsZWN0aW9uOiBNb25nb0NvbGxlY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29sbGVjdGlvbjogTW9uZ29Db2xsZWN0aW9uKSB7XG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IGNvbGxlY3Rpb247XG4gIH1cblxuICBfZmV0Y2hBbGxTY2hlbWFzRnJvbV9TQ0hFTUEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb24uX3Jhd0ZpbmQoe30pLnRoZW4oc2NoZW1hcyA9PiBzY2hlbWFzLm1hcChtb25nb1NjaGVtYVRvUGFyc2VTY2hlbWEpKTtcbiAgfVxuXG4gIF9mZXRjaE9uZVNjaGVtYUZyb21fU0NIRU1BKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uXG4gICAgICAuX3Jhd0ZpbmQoX21vbmdvU2NoZW1hUXVlcnlGcm9tTmFtZVF1ZXJ5KG5hbWUpLCB7IGxpbWl0OiAxIH0pXG4gICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG1vbmdvU2NoZW1hVG9QYXJzZVNjaGVtYShyZXN1bHRzWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQXRvbWljYWxseSBmaW5kIGFuZCBkZWxldGUgYW4gb2JqZWN0IGJhc2VkIG9uIHF1ZXJ5LlxuICBmaW5kQW5kRGVsZXRlU2NoZW1hKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uLl9tb25nb0NvbGxlY3Rpb24uZmluZE9uZUFuZERlbGV0ZShfbW9uZ29TY2hlbWFRdWVyeUZyb21OYW1lUXVlcnkobmFtZSkpO1xuICB9XG5cbiAgaW5zZXJ0U2NoZW1hKHNjaGVtYTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb25cbiAgICAgIC5pbnNlcnRPbmUoc2NoZW1hKVxuICAgICAgLnRoZW4oKCkgPT4gbW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hKHNjaGVtYSkpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gMTEwMDApIHtcbiAgICAgICAgICAvL01vbmdvJ3MgZHVwbGljYXRlIGtleSBlcnJvclxuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5EVVBMSUNBVEVfVkFMVUUsICdDbGFzcyBhbHJlYWR5IGV4aXN0cy4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVTY2hlbWEobmFtZTogc3RyaW5nLCB1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbi51cGRhdGVPbmUoX21vbmdvU2NoZW1hUXVlcnlGcm9tTmFtZVF1ZXJ5KG5hbWUpLCB1cGRhdGUpO1xuICB9XG5cbiAgdXBzZXJ0U2NoZW1hKG5hbWU6IHN0cmluZywgcXVlcnk6IHN0cmluZywgdXBkYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb24udXBzZXJ0T25lKF9tb25nb1NjaGVtYVF1ZXJ5RnJvbU5hbWVRdWVyeShuYW1lLCBxdWVyeSksIHVwZGF0ZSk7XG4gIH1cblxuICAvLyBBZGQgYSBmaWVsZCB0byB0aGUgc2NoZW1hLiBJZiBkYXRhYmFzZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmaWVsZFxuICAvLyB0eXBlIChlLmcuIG1vbmdvIGRvZXNuJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIEdlb1BvaW50IGluIGEgY2xhc3MpIHJlamVjdCB3aXRoIGFuIFwiSW5jb3JyZWN0IFR5cGVcIlxuICAvLyBQYXJzZSBlcnJvciB3aXRoIGEgZGVzY2lwdGl2ZSBtZXNzYWdlLiBJZiB0aGUgZmllbGQgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gbXVzdFxuICAvLyBub3QgbW9kaWZ5IHRoZSBzY2hlbWEsIGFuZCBtdXN0IHJlamVjdCB3aXRoIERVUExJQ0FURV9WQUxVRSBlcnJvci5cbiAgLy8gSWYgdGhpcyBpcyBjYWxsZWQgZm9yIGEgY2xhc3MgdGhhdCBkb2Vzbid0IGV4aXN0LCB0aGlzIGZ1bmN0aW9uIG11c3QgY3JlYXRlIHRoYXQgY2xhc3MuXG5cbiAgLy8gVE9ETzogdGhyb3cgYW4gZXJyb3IgaWYgYW4gdW5zdXBwb3J0ZWQgZmllbGQgdHlwZSBpcyBwYXNzZWQuIERlY2lkaW5nIHdoZXRoZXIgYSB0eXBlIGlzIHN1cHBvcnRlZFxuICAvLyBzaG91bGQgYmUgdGhlIGpvYiBvZiB0aGUgYWRhcHRlci4gU29tZSBhZGFwdGVycyBtYXkgbm90IHN1cHBvcnQgR2VvUG9pbnQgYXQgYWxsLiBPdGhlcnMgbWF5XG4gIC8vIFN1cHBvcnQgYWRkaXRpb25hbCB0eXBlcyB0aGF0IE1vbmdvIGRvZXNuJ3QsIGxpa2UgTW9uZXksIG9yIHNvbWV0aGluZy5cblxuICAvLyBUT0RPOiBkb24ndCBzcGVuZCBhbiBleHRyYSBxdWVyeSBvbiBmaW5kaW5nIHRoZSBzY2hlbWEgaWYgdGhlIHR5cGUgd2UgYXJlIHRyeWluZyB0byBhZGQgaXNuJ3QgYSBHZW9Qb2ludC5cbiAgYWRkRmllbGRJZk5vdEV4aXN0cyhjbGFzc05hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoT25lU2NoZW1hRnJvbV9TQ0hFTUEoY2xhc3NOYW1lKVxuICAgICAgLnRoZW4oXG4gICAgICAgIHNjaGVtYSA9PiB7XG4gICAgICAgICAgLy8gSWYgYSBmaWVsZCB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSBoYW5kbGVkIGVsc2V3aGVyZS5cbiAgICAgICAgICBpZiAoc2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhlIHNjaGVtYSBleGlzdHMuIENoZWNrIGZvciBleGlzdGluZyBHZW9Qb2ludHMuXG4gICAgICAgICAgaWYgKGZpZWxkVHlwZS50eXBlID09PSAnR2VvUG9pbnQnKSB7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vdCBvdGhlciBnZW9wb2ludCBmaWVsZHNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc2NoZW1hLmZpZWxkcykuc29tZShcbiAgICAgICAgICAgICAgICBleGlzdGluZ0ZpZWxkID0+IHNjaGVtYS5maWVsZHNbZXhpc3RpbmdGaWVsZF0udHlwZSA9PT0gJ0dlb1BvaW50J1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLklOQ09SUkVDVF9UWVBFLFxuICAgICAgICAgICAgICAgICdNb25nb0RCIG9ubHkgc3VwcG9ydHMgb25lIEdlb1BvaW50IGZpZWxkIGluIGEgY2xhc3MuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAvLyBJZiBlcnJvciBpcyB1bmRlZmluZWQsIHRoZSBzY2hlbWEgZG9lc24ndCBleGlzdCwgYW5kIHdlIGNhbiBjcmVhdGUgdGhlIHNjaGVtYSB3aXRoIHRoZSBmaWVsZC5cbiAgICAgICAgICAvLyBJZiBzb21lIG90aGVyIGVycm9yLCByZWplY3Qgd2l0aCBpdC5cbiAgICAgICAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHR5cGUsIHRhcmdldENsYXNzLCAuLi5maWVsZE9wdGlvbnMgfSA9IGZpZWxkVHlwZTtcbiAgICAgICAgLy8gV2UgdXNlICRleGlzdHMgYW5kICRzZXQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGZpZWxkIHR5cGUgaWYgaXRcbiAgICAgICAgLy8gYWxyZWFkeSBleGlzdHMuIChpdCBjb3VsZCBoYXZlIGFkZGVkIGluYmV0d2VlbiB0aGUgbGFzdCBxdWVyeSBhbmQgdGhlIHVwZGF0ZSlcbiAgICAgICAgaWYgKGZpZWxkT3B0aW9ucyAmJiBPYmplY3Qua2V5cyhmaWVsZE9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51cHNlcnRTY2hlbWEoXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICB7IFtmaWVsZE5hbWVdOiB7ICRleGlzdHM6IGZhbHNlIH0gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJHNldDoge1xuICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVdOiBwYXJzZUZpZWxkVHlwZVRvTW9uZ29GaWVsZFR5cGUoe1xuICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgIHRhcmdldENsYXNzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIFtgX21ldGFkYXRhLmZpZWxkc19vcHRpb25zLiR7ZmllbGROYW1lfWBdOiBmaWVsZE9wdGlvbnMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51cHNlcnRTY2hlbWEoXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICB7IFtmaWVsZE5hbWVdOiB7ICRleGlzdHM6IGZhbHNlIH0gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJHNldDoge1xuICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVdOiBwYXJzZUZpZWxkVHlwZVRvTW9uZ29GaWVsZFR5cGUoe1xuICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgIHRhcmdldENsYXNzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmllbGRPcHRpb25zKGNsYXNzTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgZmllbGRUeXBlOiBhbnkpIHtcbiAgICBjb25zdCB7IC4uLmZpZWxkT3B0aW9ucyB9ID0gZmllbGRUeXBlO1xuICAgIGRlbGV0ZSBmaWVsZE9wdGlvbnMudHlwZTtcbiAgICBkZWxldGUgZmllbGRPcHRpb25zLnRhcmdldENsYXNzO1xuXG4gICAgYXdhaXQgdGhpcy51cHNlcnRTY2hlbWEoXG4gICAgICBjbGFzc05hbWUsXG4gICAgICB7IFtmaWVsZE5hbWVdOiB7ICRleGlzdHM6IHRydWUgfSB9LFxuICAgICAge1xuICAgICAgICAkc2V0OiB7XG4gICAgICAgICAgW2BfbWV0YWRhdGEuZmllbGRzX29wdGlvbnMuJHtmaWVsZE5hbWV9YF06IGZpZWxkT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbi8vIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHJlYXNvbnMgYW5kIGJlY2F1c2Ugd2UgaGF2ZW4ndCBtb3ZlZCBhbGwgbW9uZ28gc2NoZW1hIGZvcm1hdFxuLy8gcmVsYXRlZCBsb2dpYyBpbnRvIHRoZSBkYXRhYmFzZSBhZGFwdGVyIHlldC5cbk1vbmdvU2NoZW1hQ29sbGVjdGlvbi5fVEVTVG1vbmdvU2NoZW1hVG9QYXJzZVNjaGVtYSA9IG1vbmdvU2NoZW1hVG9QYXJzZVNjaGVtYTtcbk1vbmdvU2NoZW1hQ29sbGVjdGlvbi5wYXJzZUZpZWxkVHlwZVRvTW9uZ29GaWVsZFR5cGUgPSBwYXJzZUZpZWxkVHlwZVRvTW9uZ29GaWVsZFR5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IE1vbmdvU2NoZW1hQ29sbGVjdGlvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUErQixNQUFBRSxTQUFBO0FBQUEsU0FBQUgsdUJBQUFJLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBRywwQkFBQUMsQ0FBQSxnQkFBQUEsQ0FBQSxZQUFBQyxTQUFBLHlCQUFBRCxDQUFBO0FBQUEsU0FBQUUsU0FBQSxXQUFBQSxRQUFBLEdBQUFDLE1BQUEsQ0FBQUMsTUFBQSxHQUFBRCxNQUFBLENBQUFDLE1BQUEsQ0FBQUMsSUFBQSxlQUFBQyxDQUFBLGFBQUFWLENBQUEsTUFBQUEsQ0FBQSxHQUFBVyxTQUFBLENBQUFDLE1BQUEsRUFBQVosQ0FBQSxVQUFBSSxDQUFBLEdBQUFPLFNBQUEs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
|
|
328
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfTW9uZ29Db2xsZWN0aW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbm9kZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vbmdvRmllbGRUb1BhcnNlU2NoZW1hRmllbGQiLCJ0eXBlIiwidGFyZ2V0Q2xhc3MiLCJzbGljZSIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJub25GaWVsZFNjaGVtYUtleXMiLCJtb25nb1NjaGVtYUZpZWxkc1RvUGFyc2VTY2hlbWFGaWVsZHMiLCJzY2hlbWEiLCJmaWVsZE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsImluZGV4T2YiLCJyZXNwb25zZSIsInJlZHVjZSIsIm9iaiIsImZpZWxkTmFtZSIsIl9tZXRhZGF0YSIsImZpZWxkc19vcHRpb25zIiwiYXNzaWduIiwiQUNMIiwiY3JlYXRlZEF0IiwidXBkYXRlZEF0Iiwib2JqZWN0SWQiLCJlbXB0eUNMUFMiLCJmcmVlemUiLCJmaW5kIiwiY291bnQiLCJnZXQiLCJjcmVhdGUiLCJ1cGRhdGUiLCJkZWxldGUiLCJhZGRGaWVsZCIsInByb3RlY3RlZEZpZWxkcyIsImRlZmF1bHRDTFBTIiwibW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hIiwibW9uZ29TY2hlbWEiLCJjbHBzIiwiaW5kZXhlcyIsImNsYXNzX3Blcm1pc3Npb25zIiwiY2xhc3NOYW1lIiwiX2lkIiwiZmllbGRzIiwiY2xhc3NMZXZlbFBlcm1pc3Npb25zIiwiX21vbmdvU2NoZW1hUXVlcnlGcm9tTmFtZVF1ZXJ5IiwibmFtZSIsInF1ZXJ5Iiwib2JqZWN0IiwiZm9yRWFjaCIsInBhcnNlRmllbGRUeXBlVG9Nb25nb0ZpZWxkVHlwZSIsIk1vbmdvU2NoZW1hQ29sbGVjdGlvbiIsImNvbnN0cnVjdG9yIiwiY29sbGVjdGlvbiIsIl9jb2xsZWN0aW9uIiwiX2ZldGNoQWxsU2NoZW1hc0Zyb21fU0NIRU1BIiwiX3Jhd0ZpbmQiLCJ0aGVuIiwic2NoZW1hcyIsIm1hcCIsIl9mZXRjaE9uZVNjaGVtYUZyb21fU0NIRU1BIiwibGltaXQiLCJyZXN1bHRzIiwidW5kZWZpbmVkIiwiZmluZEFuZERlbGV0ZVNjaGVtYSIsIl9tb25nb0NvbGxlY3Rpb24iLCJmaW5kT25lQW5kRGVsZXRlIiwiaW5zZXJ0U2NoZW1hIiwiaW5zZXJ0T25lIiwiY2F0Y2giLCJlcnJvciIsImNvZGUiLCJQYXJzZSIsIkVycm9yIiwiRFVQTElDQVRFX1ZBTFVFIiwidXBkYXRlU2NoZW1hIiwidXBkYXRlT25lIiwidXBzZXJ0U2NoZW1hIiwidXBzZXJ0T25lIiwiYWRkRmllbGRJZk5vdEV4aXN0cyIsImZpZWxkVHlwZSIsInNvbWUiLCJleGlzdGluZ0ZpZWxkIiwiSU5DT1JSRUNUX1RZUEUiLCJmaWVsZE9wdGlvbnMiLCIkZXhpc3RzIiwiJHNldCIsInVwZGF0ZUZpZWxkT3B0aW9ucyIsIl9URVNUbW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL1N0b3JhZ2UvTW9uZ28vTW9uZ29TY2hlbWFDb2xsZWN0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNb25nb0NvbGxlY3Rpb24gZnJvbSAnLi9Nb25nb0NvbGxlY3Rpb24nO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuXG5mdW5jdGlvbiBtb25nb0ZpZWxkVG9QYXJzZVNjaGVtYUZpZWxkKHR5cGUpIHtcbiAgaWYgKHR5cGVbMF0gPT09ICcqJykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUG9pbnRlcicsXG4gICAgICB0YXJnZXRDbGFzczogdHlwZS5zbGljZSgxKSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ3JlbGF0aW9uPCcpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSZWxhdGlvbicsXG4gICAgICB0YXJnZXRDbGFzczogdHlwZS5zbGljZSgncmVsYXRpb248Jy5sZW5ndGgsIHR5cGUubGVuZ3RoIC0gMSksXG4gICAgfTtcbiAgfVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ051bWJlcicgfTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ1N0cmluZycgfTtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdCb29sZWFuJyB9O1xuICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ0RhdGUnIH07XG4gICAgY2FzZSAnbWFwJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ09iamVjdCcgfTtcbiAgICBjYXNlICdhcnJheSc6XG4gICAgICByZXR1cm4geyB0eXBlOiAnQXJyYXknIH07XG4gICAgY2FzZSAnZ2VvcG9pbnQnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ0dlb1BvaW50JyB9O1xuICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ0ZpbGUnIH07XG4gICAgY2FzZSAnYnl0ZXMnOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ0J5dGVzJyB9O1xuICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ1BvbHlnb24nIH07XG4gIH1cbn1cblxuY29uc3Qgbm9uRmllbGRTY2hlbWFLZXlzID0gWydfaWQnLCAnX21ldGFkYXRhJywgJ19jbGllbnRfcGVybWlzc2lvbnMnXTtcbmZ1bmN0aW9uIG1vbmdvU2NoZW1hRmllbGRzVG9QYXJzZVNjaGVtYUZpZWxkcyhzY2hlbWEpIHtcbiAgdmFyIGZpZWxkTmFtZXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4gbm9uRmllbGRTY2hlbWFLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICB2YXIgcmVzcG9uc2UgPSBmaWVsZE5hbWVzLnJlZHVjZSgob2JqLCBmaWVsZE5hbWUpID0+IHtcbiAgICBvYmpbZmllbGROYW1lXSA9IG1vbmdvRmllbGRUb1BhcnNlU2NoZW1hRmllbGQoc2NoZW1hW2ZpZWxkTmFtZV0pO1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fbWV0YWRhdGEgJiZcbiAgICAgIHNjaGVtYS5fbWV0YWRhdGEuZmllbGRzX29wdGlvbnMgJiZcbiAgICAgIHNjaGVtYS5fbWV0YWRhdGEuZmllbGRzX29wdGlvbnNbZmllbGROYW1lXVxuICAgICkge1xuICAgICAgb2JqW2ZpZWxkTmFtZV0gPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgb2JqW2ZpZWxkTmFtZV0sXG4gICAgICAgIHNjaGVtYS5fbWV0YWRhdGEuZmllbGRzX29wdGlvbnNbZmllbGROYW1lXVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xuICByZXNwb25zZS5BQ0wgPSB7IHR5cGU6ICdBQ0wnIH07XG4gIHJlc3BvbnNlLmNyZWF0ZWRBdCA9IHsgdHlwZTogJ0RhdGUnIH07XG4gIHJlc3BvbnNlLnVwZGF0ZWRBdCA9IHsgdHlwZTogJ0RhdGUnIH07XG4gIHJlc3BvbnNlLm9iamVjdElkID0geyB0eXBlOiAnU3RyaW5nJyB9O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmNvbnN0IGVtcHR5Q0xQUyA9IE9iamVjdC5mcmVlemUoe1xuICBmaW5kOiB7fSxcbiAgY291bnQ6IHt9LFxuICBnZXQ6IHt9LFxuICBjcmVhdGU6IHt9LFxuICB1cGRhdGU6IHt9LFxuICBkZWxldGU6IHt9LFxuICBhZGRGaWVsZDoge30sXG4gIHByb3RlY3RlZEZpZWxkczoge30sXG59KTtcblxuY29uc3QgZGVmYXVsdENMUFMgPSBPYmplY3QuZnJlZXplKHtcbiAgZmluZDogeyAnKic6IHRydWUgfSxcbiAgY291bnQ6IHsgJyonOiB0cnVlIH0sXG4gIGdldDogeyAnKic6IHRydWUgfSxcbiAgY3JlYXRlOiB7ICcqJzogdHJ1ZSB9LFxuICB1cGRhdGU6IHsgJyonOiB0cnVlIH0sXG4gIGRlbGV0ZTogeyAnKic6IHRydWUgfSxcbiAgYWRkRmllbGQ6IHsgJyonOiB0cnVlIH0sXG4gIHByb3RlY3RlZEZpZWxkczogeyAnKic6IFtdIH0sXG59KTtcblxuZnVuY3Rpb24gbW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hKG1vbmdvU2NoZW1hKSB7XG4gIGxldCBjbHBzID0gZGVmYXVsdENMUFM7XG4gIGxldCBpbmRleGVzID0ge307XG4gIGlmIChtb25nb1NjaGVtYS5fbWV0YWRhdGEpIHtcbiAgICBpZiAobW9uZ29TY2hlbWEuX21ldGFkYXRhLmNsYXNzX3Blcm1pc3Npb25zKSB7XG4gICAgICBjbHBzID0geyAuLi5lbXB0eUNMUFMsIC4uLm1vbmdvU2NoZW1hLl9tZXRhZGF0YS5jbGFzc19wZXJtaXNzaW9ucyB9O1xuICAgIH1cbiAgICBpZiAobW9uZ29TY2hlbWEuX21ldGFkYXRhLmluZGV4ZXMpIHtcbiAgICAgIGluZGV4ZXMgPSB7IC4uLm1vbmdvU2NoZW1hLl9tZXRhZGF0YS5pbmRleGVzIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY2xhc3NOYW1lOiBtb25nb1NjaGVtYS5faWQsXG4gICAgZmllbGRzOiBtb25nb1NjaGVtYUZpZWxkc1RvUGFyc2VTY2hlbWFGaWVsZHMobW9uZ29TY2hlbWEpLFxuICAgIGNsYXNzTGV2ZWxQZXJtaXNzaW9uczogY2xwcyxcbiAgICBpbmRleGVzOiBpbmRleGVzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBfbW9uZ29TY2hlbWFRdWVyeUZyb21OYW1lUXVlcnkobmFtZTogc3RyaW5nLCBxdWVyeSkge1xuICBjb25zdCBvYmplY3QgPSB7IF9pZDogbmFtZSB9O1xuICBpZiAocXVlcnkpIHtcbiAgICBPYmplY3Qua2V5cyhxdWVyeSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgb2JqZWN0W2tleV0gPSBxdWVyeVtrZXldO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8vIFJldHVybnMgYSB0eXBlIHN1aXRhYmxlIGZvciBpbnNlcnRpbmcgaW50byBtb25nbyBfU0NIRU1BIGNvbGxlY3Rpb24uXG4vLyBEb2VzIG5vIHZhbGlkYXRpb24uIFRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgZG9uZSBpbiBQYXJzZSBTZXJ2ZXIuXG5mdW5jdGlvbiBwYXJzZUZpZWxkVHlwZVRvTW9uZ29GaWVsZFR5cGUoeyB0eXBlLCB0YXJnZXRDbGFzcyB9KSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1BvaW50ZXInOlxuICAgICAgcmV0dXJuIGAqJHt0YXJnZXRDbGFzc31gO1xuICAgIGNhc2UgJ1JlbGF0aW9uJzpcbiAgICAgIHJldHVybiBgcmVsYXRpb248JHt0YXJnZXRDbGFzc30+YDtcbiAgICBjYXNlICdOdW1iZXInOlxuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgY2FzZSAnQm9vbGVhbic6XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgcmV0dXJuICdkYXRlJztcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIGNhc2UgJ0dlb1BvaW50JzpcbiAgICAgIHJldHVybiAnZ2VvcG9pbnQnO1xuICAgIGNhc2UgJ0ZpbGUnOlxuICAgICAgcmV0dXJuICdmaWxlJztcbiAgICBjYXNlICdCeXRlcyc6XG4gICAgICByZXR1cm4gJ2J5dGVzJztcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgIHJldHVybiAncG9seWdvbic7XG4gIH1cbn1cblxuY2xhc3MgTW9uZ29TY2hlbWFDb2xsZWN0aW9uIHtcbiAgX2NvbGxlY3Rpb246IE1vbmdvQ29sbGVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb2xsZWN0aW9uOiBNb25nb0NvbGxlY3Rpb24pIHtcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgfVxuXG4gIF9mZXRjaEFsbFNjaGVtYXNGcm9tX1NDSEVNQSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbi5fcmF3RmluZCh7fSkudGhlbihzY2hlbWFzID0+IHNjaGVtYXMubWFwKG1vbmdvU2NoZW1hVG9QYXJzZVNjaGVtYSkpO1xuICB9XG5cbiAgX2ZldGNoT25lU2NoZW1hRnJvbV9TQ0hFTUEobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb25cbiAgICAgIC5fcmF3RmluZChfbW9uZ29TY2hlbWFRdWVyeUZyb21OYW1lUXVlcnkobmFtZSksIHsgbGltaXQ6IDEgfSlcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hKHJlc3VsdHNbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvLyBBdG9taWNhbGx5IGZpbmQgYW5kIGRlbGV0ZSBhbiBvYmplY3QgYmFzZWQgb24gcXVlcnkuXG4gIGZpbmRBbmREZWxldGVTY2hlbWEobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb24uX21vbmdvQ29sbGVjdGlvbi5maW5kT25lQW5kRGVsZXRlKF9tb25nb1NjaGVtYVF1ZXJ5RnJvbU5hbWVRdWVyeShuYW1lKSk7XG4gIH1cblxuICBpbnNlcnRTY2hlbWEoc2NoZW1hOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvblxuICAgICAgLmluc2VydE9uZShzY2hlbWEpXG4gICAgICAudGhlbigoKSA9PiBtb25nb1NjaGVtYVRvUGFyc2VTY2hlbWEoc2NoZW1hKSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAxMTAwMCkge1xuICAgICAgICAgIC8vTW9uZ28ncyBkdXBsaWNhdGUga2V5IGVycm9yXG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSwgJ0NsYXNzIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVNjaGVtYShuYW1lOiBzdHJpbmcsIHVwZGF0ZSkge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uLnVwZGF0ZU9uZShfbW9uZ29TY2hlbWFRdWVyeUZyb21OYW1lUXVlcnkobmFtZSksIHVwZGF0ZSk7XG4gIH1cblxuICB1cHNlcnRTY2hlbWEobmFtZTogc3RyaW5nLCBxdWVyeTogc3RyaW5nLCB1cGRhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbi51cHNlcnRPbmUoX21vbmdvU2NoZW1hUXVlcnlGcm9tTmFtZVF1ZXJ5KG5hbWUsIHF1ZXJ5KSwgdXBkYXRlKTtcbiAgfVxuXG4gIC8vIEFkZCBhIGZpZWxkIHRvIHRoZSBzY2hlbWEuIElmIGRhdGFiYXNlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpZWxkXG4gIC8vIHR5cGUgKGUuZy4gbW9uZ28gZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgR2VvUG9pbnQgaW4gYSBjbGFzcykgcmVqZWN0IHdpdGggYW4gXCJJbmNvcnJlY3QgVHlwZVwiXG4gIC8vIFBhcnNlIGVycm9yIHdpdGggYSBkZXNjaXB0aXZlIG1lc3NhZ2UuIElmIHRoZSBmaWVsZCBhbHJlYWR5IGV4aXN0cywgdGhpcyBmdW5jdGlvbiBtdXN0XG4gIC8vIG5vdCBtb2RpZnkgdGhlIHNjaGVtYSwgYW5kIG11c3QgcmVqZWN0IHdpdGggRFVQTElDQVRFX1ZBTFVFIGVycm9yLlxuICAvLyBJZiB0aGlzIGlzIGNhbGxlZCBmb3IgYSBjbGFzcyB0aGF0IGRvZXNuJ3QgZXhpc3QsIHRoaXMgZnVuY3Rpb24gbXVzdCBjcmVhdGUgdGhhdCBjbGFzcy5cblxuICAvLyBUT0RPOiB0aHJvdyBhbiBlcnJvciBpZiBhbiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlIGlzIHBhc3NlZC4gRGVjaWRpbmcgd2hldGhlciBhIHR5cGUgaXMgc3VwcG9ydGVkXG4gIC8vIHNob3VsZCBiZSB0aGUgam9iIG9mIHRoZSBhZGFwdGVyLiBTb21lIGFkYXB0ZXJzIG1heSBub3Qgc3VwcG9ydCBHZW9Qb2ludCBhdCBhbGwuIE90aGVycyBtYXlcbiAgLy8gU3VwcG9ydCBhZGRpdGlvbmFsIHR5cGVzIHRoYXQgTW9uZ28gZG9lc24ndCwgbGlrZSBNb25leSwgb3Igc29tZXRoaW5nLlxuXG4gIC8vIFRPRE86IGRvbid0IHNwZW5kIGFuIGV4dHJhIHF1ZXJ5IG9uIGZpbmRpbmcgdGhlIHNjaGVtYSBpZiB0aGUgdHlwZSB3ZSBhcmUgdHJ5aW5nIHRvIGFkZCBpc24ndCBhIEdlb1BvaW50LlxuICBhZGRGaWVsZElmTm90RXhpc3RzKGNsYXNzTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgZmllbGRUeXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZmV0Y2hPbmVTY2hlbWFGcm9tX1NDSEVNQShjbGFzc05hbWUpXG4gICAgICAudGhlbihcbiAgICAgICAgc2NoZW1hID0+IHtcbiAgICAgICAgICAvLyBJZiBhIGZpZWxkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIGhhbmRsZWQgZWxzZXdoZXJlLlxuICAgICAgICAgIGlmIChzY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUaGUgc2NoZW1hIGV4aXN0cy4gQ2hlY2sgZm9yIGV4aXN0aW5nIEdlb1BvaW50cy5cbiAgICAgICAgICBpZiAoZmllbGRUeXBlLnR5cGUgPT09ICdHZW9Qb2ludCcpIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm90IG90aGVyIGdlb3BvaW50IGZpZWxkc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzY2hlbWEuZmllbGRzKS5zb21lKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nRmllbGQgPT4gc2NoZW1hLmZpZWxkc1tleGlzdGluZ0ZpZWxkXS50eXBlID09PSAnR2VvUG9pbnQnXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuSU5DT1JSRUNUX1RZUEUsXG4gICAgICAgICAgICAgICAgJ01vbmdvREIgb25seSBzdXBwb3J0cyBvbmUgR2VvUG9pbnQgZmllbGQgaW4gYSBjbGFzcy4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIElmIGVycm9yIGlzIHVuZGVmaW5lZCwgdGhlIHNjaGVtYSBkb2Vzbid0IGV4aXN0LCBhbmQgd2UgY2FuIGNyZWF0ZSB0aGUgc2NoZW1hIHdpdGggdGhlIGZpZWxkLlxuICAgICAgICAgIC8vIElmIHNvbWUgb3RoZXIgZXJyb3IsIHJlamVjdCB3aXRoIGl0LlxuICAgICAgICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICApXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdHlwZSwgdGFyZ2V0Q2xhc3MsIC4uLmZpZWxkT3B0aW9ucyB9ID0gZmllbGRUeXBlO1xuICAgICAgICAvLyBXZSB1c2UgJGV4aXN0cyBhbmQgJHNldCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUgZmllbGQgdHlwZSBpZiBpdFxuICAgICAgICAvLyBhbHJlYWR5IGV4aXN0cy4gKGl0IGNvdWxkIGhhdmUgYWRkZWQgaW5iZXR3ZWVuIHRoZSBsYXN0IHF1ZXJ5IGFuZCB0aGUgdXBkYXRlKVxuICAgICAgICBpZiAoZmllbGRPcHRpb25zICYmIE9iamVjdC5rZXlzKGZpZWxkT3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVwc2VydFNjaGVtYShcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHsgW2ZpZWxkTmFtZV06IHsgJGV4aXN0czogZmFsc2UgfSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAkc2V0OiB7XG4gICAgICAgICAgICAgICAgW2ZpZWxkTmFtZV06IHBhcnNlRmllbGRUeXBlVG9Nb25nb0ZpZWxkVHlwZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgW2BfbWV0YWRhdGEuZmllbGRzX29wdGlvbnMuJHtmaWVsZE5hbWV9YF06IGZpZWxkT3B0aW9ucyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVwc2VydFNjaGVtYShcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHsgW2ZpZWxkTmFtZV06IHsgJGV4aXN0czogZmFsc2UgfSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAkc2V0OiB7XG4gICAgICAgICAgICAgICAgW2ZpZWxkTmFtZV06IHBhcnNlRmllbGRUeXBlVG9Nb25nb0ZpZWxkVHlwZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWVsZE9wdGlvbnMoY2xhc3NOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFR5cGU6IGFueSkge1xuICAgIGNvbnN0IHsgLi4uZmllbGRPcHRpb25zIH0gPSBmaWVsZFR5cGU7XG4gICAgZGVsZXRlIGZpZWxkT3B0aW9ucy50eXBlO1xuICAgIGRlbGV0ZSBmaWVsZE9wdGlvbnMudGFyZ2V0Q2xhc3M7XG5cbiAgICBhd2FpdCB0aGlzLnVwc2VydFNjaGVtYShcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHsgW2ZpZWxkTmFtZV06IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICB7XG4gICAgICAgICRzZXQ6IHtcbiAgICAgICAgICBbYF9tZXRhZGF0YS5maWVsZHNfb3B0aW9ucy4ke2ZpZWxkTmFtZX1gXTogZmllbGRPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuLy8gRXhwb3J0ZWQgZm9yIHRlc3RpbmcgcmVhc29ucyBhbmQgYmVjYXVzZSB3ZSBoYXZlbid0IG1vdmVkIGFsbCBtb25nbyBzY2hlbWEgZm9ybWF0XG4vLyByZWxhdGVkIGxvZ2ljIGludG8gdGhlIGRhdGFiYXNlIGFkYXB0ZXIgeWV0LlxuTW9uZ29TY2hlbWFDb2xsZWN0aW9uLl9URVNUbW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hID0gbW9uZ29TY2hlbWFUb1BhcnNlU2NoZW1hO1xuTW9uZ29TY2hlbWFDb2xsZWN0aW9uLnBhcnNlRmllbGRUeXBlVG9Nb25nb0ZpZWxkVHlwZSA9IHBhcnNlRmllbGRUeXBlVG9Nb25nb0ZpZWxkVHlwZTtcblxuZXhwb3J0IGRlZmF1bHQgTW9uZ29TY2hlbWFDb2xsZWN0aW9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxnQkFBQSxHQUFBQyxzQkFBQSxD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
|