parse-server 9.10.1-alpha.13 → 9.10.1-alpha.14

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.
@@ -69,18 +69,29 @@ const IntrospectionControlPlugin = publicIntrospection => ({
69
69
  if (isMasterOrMaintenance) {
70
70
  return;
71
71
  }
72
- const query = requestContext.request.query;
72
+
73
+ // Apollo resolves the operation text into `requestContext.source` before this hook
74
+ // runs and guarantees it is set here. It is NOT the same as `request.query`: on an
75
+ // automatic persisted query cache hit the text comes from the persisted-query cache
76
+ // and `request.query` is never populated, so reading `request.query` would leave
77
+ // nothing to inspect and silently skip both guards below. Apollo enables automatic
78
+ // persisted queries by default, so that path is reachable on every deployment. Fall
79
+ // back to `request.query` only for robustness, and fail closed when neither is a
80
+ // string so that an operation which cannot be inspected is never allowed through.
81
+ const query = requestContext.source ?? requestContext.request.query;
73
82
 
74
83
  // Fast path: simple string check for __schema
75
84
  // This avoids parsing the query in most cases
76
- if (query?.includes('__schema')) {
85
+ // An operation text that is not a string cannot be inspected at all, so it is denied
86
+ // for the same reason: this guard must never let an operation through uninspected.
87
+ if (typeof query !== 'string' || query.includes('__schema')) {
77
88
  return throwIntrospectionError();
78
89
  }
79
90
 
80
91
  // Smart check for __type: only parse if the string is present
81
92
  // This avoids false positives (e.g., "__type" in strings or comments)
82
93
  // while still being efficient for the common case
83
- if (query?.includes('__type') && hasTypeIntrospection(query)) {
94
+ if (query.includes('__type') && hasTypeIntrospection(query)) {
84
95
  return throwIntrospectionError();
85
96
  }
86
97
  }
@@ -208,7 +219,12 @@ const SchemaSuggestionsControlPlugin = publicIntrospection => ({
208
219
  }
209
220
  const body = requestContext.response?.body;
210
221
  const errors = body?.kind === 'single' ? body.singleResult.errors : body?.kind === 'incremental' ? body.initialResult.errors : undefined;
211
- const operationText = requestContext.request?.query;
222
+ // Same as in `IntrospectionControlPlugin`: `requestContext.source` carries the
223
+ // operation text for every request, including an automatic persisted query cache hit
224
+ // where `request.query` is undefined. Reading `request.query` alone would make the
225
+ // allowlist below empty on those requests and redact type names the caller wrote
226
+ // themselves.
227
+ const operationText = requestContext.source ?? requestContext.request?.query;
212
228
  errors?.forEach(error => {
213
229
  error.message = stripSchemaIdentifiers(error.message, operationText);
214
230
  if (Array.isArray(error.extensions?.stacktrace)) {
@@ -371,4 +387,4 @@ class ParseGraphQLServer {
371
387
  }
372
388
  }
373
389
  exports.ParseGraphQLServer = ParseGraphQLServer;
374
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZXJ2ZXIiLCJfZXhwcmVzcyIsIl9kaXNhYmxlZCIsIl9leHByZXNzMiIsIl9ncmFwaHFsIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfZGVmYXVsdEdyYXBoUUxUeXBlcyIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVlcnlDb21wbGV4aXR5IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiY2hlY2tTZWxlY3Rpb25zIiwic2VsZWN0aW9ucyIsInNlbGVjdGlvbiIsImtpbmQiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWxlY3Rpb25TZXQiLCJkZWZpbml0aW9uIiwiZGVmaW5pdGlvbnMiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsInN0cmlwU2NoZW1hU3VnZ2VzdGlvbiIsIm1lc3NhZ2UiLCJyZXBsYWNlIiwic3RyaXBTY2hlbWFDb2VyY2lvbklkZW50aWZpZXJzIiwiTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUyIsIlNldCIsIlJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyIsIlJFQURfUFJFRkVSRU5DRSIsInN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzIiwib3BlcmF0aW9uVGV4dCIsInJlZmVyZW5jZWRUb2tlbnMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzaG91bGRLZWVwVHlwZU5hbWUiLCJ0eXBlTmFtZSIsImJhcmVUeXBlTmFtZSIsIm1hdGNoIiwiZmllbGROYW1lIiwicGFyZW50VHlwZSIsImZyYWdUeXBlIiwicGFyZW50IiwiZnJhZyIsImFyZ05hbWUiLCJzdHJpcFNjaGVtYUlkZW50aWZpZXJzIiwiU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luIiwid2lsbFNlbmRSZXNwb25zZSIsImJvZHkiLCJyZXNwb25zZSIsImVycm9ycyIsInNpbmdsZVJlc3VsdCIsImluaXRpYWxSZXN1bHQiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwiZXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJzdGFja3RyYWNlIiwibWFwIiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiY29uc3RydWN0b3IiLCJwYXJzZVNlcnZlciIsImNvbmZpZyIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImFwb2xsbyIsIkFwb2xsb1NlcnZlciIsImNzcmZQcmV2ZW50aW9uIiwicmVxdWVzdEhlYWRlcnMiLCJpbnRyb3NwZWN0aW9uIiwicGx1Z2lucyIsIkFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiIsInJlcXVlc3RDb21wbGV4aXR5Iiwic3RhcnQiLCJleHByZXNzTWlkZGxld2FyZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJ1bml0TWFwIiwia2IiLCJtYiIsImdiIiwiTnVtYmVyIiwic2xpY2UiLCJNYXRoIiwicG93IiwidG9Mb3dlckNhc2UiLCJhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsImFwaSIsIm9wdGlvbnMiLCJyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUiLCJFcnJvciIsInVzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsImFsbG93Q3Jvc3NEb21haW4iLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsInJlcyIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJzZXRHcmFwaFFMQ29uZmlnIiwiZ3JhcGhRTENvbmZpZyIsInVwZGF0ZUdyYXBoUUxDb25maWciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0dyYXBoUUwvUGFyc2VHcmFwaFFMU2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBncmFwaHFsVXBsb2FkRXhwcmVzcyBmcm9tICdncmFwaHFsLXVwbG9hZC9ncmFwaHFsVXBsb2FkRXhwcmVzcy5qcyc7XG5pbXBvcnQgeyBBcG9sbG9TZXJ2ZXIgfSBmcm9tICdAYXBvbGxvL3NlcnZlcic7XG5pbXBvcnQgeyBleHByZXNzTWlkZGxld2FyZSB9IGZyb20gJ0Bhcy1pbnRlZ3JhdGlvbnMvZXhwcmVzczUnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9wbHVnaW4vZGlzYWJsZWQnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBHcmFwaFFMRXJyb3IsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBhbGxvd0Nyb3NzRG9tYWluLCBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSwgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IHsgUkVBRF9QUkVGRVJFTkNFIH0gZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMVHlwZXMnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgeyBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiB9IGZyb20gJy4vaGVscGVycy9xdWVyeUNvbXBsZXhpdHknO1xuXG5cbmNvbnN0IGhhc1R5cGVJbnRyb3NwZWN0aW9uID0gKHF1ZXJ5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UocXVlcnkpO1xuICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9ucyA9IChzZWxlY3Rpb25zKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25zKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZpZWxkJyAmJiBzZWxlY3Rpb24ubmFtZS52YWx1ZSA9PT0gJ19fdHlwZScpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLmFyZ3VtZW50cyAmJiBzZWxlY3Rpb24uYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICAgIGlmIChjaGVja1NlbGVjdGlvbnMoc2VsZWN0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgYXN0LmRlZmluaXRpb25zKSB7XG4gICAgICBpZiAoZGVmaW5pdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgaWYgKGNoZWNrU2VsZWN0aW9ucyhkZWZpbml0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCB0aHJvd0ludHJvc3BlY3Rpb25FcnJvciA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcignSW50cm9zcGVjdGlvbiBpcyBub3QgYWxsb3dlZCcsIHtcbiAgICBleHRlbnNpb25zOiB7XG4gICAgICBodHRwOiB7XG4gICAgICAgIHN0YXR1czogNDAzLFxuICAgICAgfSxcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4gPSAocHVibGljSW50cm9zcGVjdGlvbikgPT4gKHtcblxuXG4gIHJlcXVlc3REaWRTdGFydDogKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuXG4gICAgZGlkUmVzb2x2ZU9wZXJhdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSWYgcHVibGljIGludHJvc3BlY3Rpb24gaXMgZW5hYmxlZCwgd2UgYWxsb3cgYWxsIGludHJvc3BlY3Rpb24gcXVlcmllc1xuICAgICAgaWYgKHB1YmxpY0ludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01hc3Rlck9yTWFpbnRlbmFuY2UgPSByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYXN0ZXIgfHwgcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFpbnRlbmFuY2VcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeSA9IHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk7XG5cblxuICAgICAgLy8gRmFzdCBwYXRoOiBzaW1wbGUgc3RyaW5nIGNoZWNrIGZvciBfX3NjaGVtYVxuICAgICAgLy8gVGhpcyBhdm9pZHMgcGFyc2luZyB0aGUgcXVlcnkgaW4gbW9zdCBjYXNlc1xuICAgICAgaWYgKHF1ZXJ5Py5pbmNsdWRlcygnX19zY2hlbWEnKSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU21hcnQgY2hlY2sgZm9yIF9fdHlwZTogb25seSBwYXJzZSBpZiB0aGUgc3RyaW5nIGlzIHByZXNlbnRcbiAgICAgIC8vIFRoaXMgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyAoZS5nLiwgXCJfX3R5cGVcIiBpbiBzdHJpbmdzIG9yIGNvbW1lbnRzKVxuICAgICAgLy8gd2hpbGUgc3RpbGwgYmVpbmcgZWZmaWNpZW50IGZvciB0aGUgY29tbW9uIGNhc2VcbiAgICAgIGlmIChxdWVyeT8uaW5jbHVkZXMoJ19fdHlwZScpICYmIGhhc1R5cGVJbnRyb3NwZWN0aW9uKHF1ZXJ5KSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIH0pXG5cbn0pO1xuXG4vLyBncmFwaHFsLWpzIGVtYmVkcyBcIkRpZCB5b3UgbWVhbiAuLi4/XCIgaGludHMgc291cmNlZCBmcm9tIHRoZSBsaXZlIHNjaGVtYSBpblxuLy8gaXRzIGVycm9yIG1lc3NhZ2VzLiBUaGV5IGFyZSBwcm9kdWNlZCBpbiB0d28gZGlzdGluY3QgcGhhc2VzOlxuLy8gICAtIHZhbGlkYXRpb24gcnVsZXMgKEZpZWxkc09uQ29ycmVjdFR5cGVSdWxlLCBLbm93bkFyZ3VtZW50TmFtZXNSdWxlLFxuLy8gICAgIEtub3duVHlwZU5hbWVzUnVsZSwgLi4uKSwgYW5kXG4vLyAgIC0gdmFyaWFibGUgY29lcmNpb24gKHVua25vd24gZW51bSB2YWx1ZXMsIHVua25vd24gaW5wdXQtb2JqZWN0IGZpZWxkcyksXG4vLyAgICAgd2hpY2ggcnVucyBkdXJpbmcgZXhlY3V0aW9uLCBhZnRlciB2YWxpZGF0aW9uLlxuLy8gQWxsIG9mIHRoZXNlIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGFuZCBkaXNjbG9zZSBzY2hlbWEgaWRlbnRpZmllcnMgKENsb3VkXG4vLyBDb2RlIGZ1bmN0aW9uIG5hbWVzLCBjbGFzcyBhbmQgZmllbGQgbmFtZXMpIHRoYXQgdGhlIGludHJvc3BlY3Rpb24gZ3VhcmQgaXNcbi8vIG1lYW50IHRvIGhpZGUuIFN0cmlwIHRoZSBoaW50IHN1ZmZpeCBmcm9tIGV2ZXJ5IHJldHVybmVkIGVycm9yIOKAlCBpbmNsdWRpbmcgdGhlXG4vLyBjb3B5IGdyYXBocWwtanMgZHVwbGljYXRlcyBpbnRvIGV4dGVuc2lvbnMuc3RhY2t0cmFjZSBpbiBub24tcHJvZHVjdGlvbiDigJQgZm9yXG4vLyBjYWxsZXJzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIHRvIGludHJvc3BlY3QuXG5jb25zdCBzdHJpcFNjaGVtYVN1Z2dlc3Rpb24gPSBtZXNzYWdlID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UucmVwbGFjZSgvID9EaWQgeW91IG1lYW4oLis/KVxcPyQvLCAnJykgOiBtZXNzYWdlO1xuXG4vLyBncmFwaHFsLWpzIGFsc28gZW1pdHMgYSBiYXNlIGlucHV0LWNvZXJjaW9uIG1lc3NhZ2UgdGhhdCBuYW1lcyBhIHNjaGVtYVxuLy8gaWRlbnRpZmllciBXSVRIT1VUIGEgXCJEaWQgeW91IG1lYW5cIiBjbGF1c2UsIHNvIHRoZSBzdWdnZXN0aW9uIHN0cmlwIGFib3ZlXG4vLyBjYW5ub3QgcmVhY2ggaXQ6IHdoZW4gYSByZXF1aXJlZCBjdXN0b20gaW5wdXQgZmllbGQgaXMgb21pdHRlZCwgY29lcmNlSW5wdXRWYWx1ZVxuLy8gcmV0dXJucyAnRmllbGQgXCI8bmFtZT5cIiBvZiByZXF1aXJlZCB0eXBlIFwiPHR5cGU+XCIgd2FzIG5vdCBwcm92aWRlZC4nLCBkaXNjbG9zaW5nXG4vLyBhIGZpZWxkIG5hbWUgdGhlIGNhbGxlciBuZXZlciBzdXBwbGllZC4gUmVkYWN0IHRoZSBxdW90ZWQgaWRlbnRpZmllcnMgZnJvbSB0aGlzXG4vLyB0ZW1wbGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBlcnJvciBzaGFwZSwgZm9yIGNhbGxlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG9cbi8vIGludHJvc3BlY3QuIFRoZSBzaWJsaW5nIGNvZXJjaW9uIG1lc3NhZ2VzICgnLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IHR5cGUgXCI8dHlwZT5cIi4nLFxuLy8gJ0V4cGVjdGVkIHR5cGUgXCI8dHlwZT5cIiB0byBiZSBhbiBvYmplY3QuJykgYXJlIGludGVudGlvbmFsbHkgbGVmdCBpbnRhY3Q6IHRoZXlcbi8vIG9ubHkgZWNobyBhbiBpbnB1dCB0eXBlIG5hbWUgdGhlIGNhbGxlciBhbHJlYWR5IHJlZmVyZW5jZWQgaW4gdGhlIG9wZXJhdGlvbiwgc29cbi8vIHRoZXkgZGlzY2xvc2Ugbm90aGluZyB0aGUgY2FsbGVyIGRpZCBub3QgYWxyZWFkeSBwcm92aWRlLlxuY29uc3Qgc3RyaXBTY2hlbWFDb2VyY2lvbklkZW50aWZpZXJzID0gbWVzc2FnZSA9PlxuICB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZydcbiAgICA/IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgIC9GaWVsZCBcIlteXCJdKlwiIG9mIHJlcXVpcmVkIHR5cGUgXCJbXlwiXSpcIiB3YXMgbm90IHByb3ZpZGVkXFwuL2csXG4gICAgICAnRmllbGQgb2YgcmVxdWlyZWQgdHlwZSB3YXMgbm90IHByb3ZpZGVkLidcbiAgICApXG4gICAgOiBtZXNzYWdlO1xuXG4vLyBUeXBlIG5hbWVzIHRoYXQgcmV2ZWFsIG5vdGhpbmcgYWJvdXQgVEhJUyBhcHBsaWNhdGlvbidzIHNjaGVtYSwgc28gcmVkYWN0aW5nIHRoZW0gd291bGQgY29zdFxuLy8gbWVzc2FnZSBxdWFsaXR5IGZvciBubyBzZWN1cml0eSBnYWluLiBgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTYCBjb3ZlcnMgdGhlIG5hbWVzIHRoZSBzY2hlbWFcbi8vIGJ1aWxkZXIgcmVmdXNlcyB0byBsZXQgYSBjbGFzcyBnZW5lcmF0ZSwgYnV0IFBhcnNlIHJlZ2lzdGVycyBidWlsdC1pbiB0eXBlcyBvdXRzaWRlIHRoYXQgbGlzdFxuLy8gdG9vLiBPZiB0aG9zZSwgb25seSBhbiBFTlVNIGNhbiByZWFjaCB0aGUgZW51bSB0ZW1wbGF0ZXMgYmVsb3csIGFuZCB0aGUgR3JhcGhRTCBsYXllciBkZWZpbmVzXG4vLyBleGFjdGx5IHRocmVlIGVudW1zOiBgQ2xvdWRDb2RlRnVuY3Rpb25gIChyZXNlcnZlZCksIHRoZSBwZXItY2xhc3MgYDxDbGFzcz5PcmRlcmAgKHRoZVxuLy8gZGlzY2xvc3VyZSB0aGVzZSB0ZW1wbGF0ZXMgZXhpc3QgdG8gcmVkYWN0KSBhbmQgYFJlYWRQcmVmZXJlbmNlYC4gSW5jbHVkZSB0aGUgbGFzdCBvbmUgc28gdGhhdFxuLy8gYW4gaW52YWxpZCBgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZWAgdmFsdWUgc3RpbGwgbmFtZXMgaXRzIGVudW0sIGp1c3QgYXMgYENsb3VkQ29kZUZ1bmN0aW9uYFxuLy8gZG9lcyDigJQgaXQgaXMgaWRlbnRpY2FsIG9uIGV2ZXJ5IGRlcGxveW1lbnQgYW5kIHJlYWNoYWJsZSBmcm9tIGV2ZXJ5IGdlbmVyYXRlZCBmaW5kIHF1ZXJ5LlxuY29uc3QgTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUyA9IG5ldyBTZXQoWy4uLlJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUywgUkVBRF9QUkVGRVJFTkNFLm5hbWVdKTtcblxuLy8gZ3JhcGhxbC1qcyBhbHNvIGVtaXRzIGJhc2UgY29lcmNpb24gLyB2YWxpZGF0aW9uIG1lc3NhZ2VzIHRoYXQgbmFtZSBhIG5lc3RlZCBpbnB1dFxuLy8gVFlQRSB3aXRob3V0IGEgXCJEaWQgeW91IG1lYW5cIiBjbGF1c2UsIHNvIG5laXRoZXIgc3RyaXAgYWJvdmUgcmVhY2hlcyB0aGVtLiBGb3IgYVxuLy8gUG9pbnRlciBvciBSZWxhdGlvbiBmaWVsZCB0aGUgZ2VuZXJhdGVkIGlucHV0IHR5cGUgbmFtZSBlbWJlZHMgdGhlIHBvaW50ZXIncyBUQVJHRVRcbi8vIGNsYXNzIChgPFRhcmdldD5Qb2ludGVySW5wdXRgLCBgPFRhcmdldD5SZWxhdGlvbldoZXJlSW5wdXRgLCBgQ3JlYXRlPFRhcmdldD5GaWVsZHNJbnB1dGApXG4vLyDigJQgYSBjbGFzcyB0aGUgY2FsbGVyIG5ldmVyIHJlZmVyZW5jZWQgYW5kIGNhbm5vdCBkZXJpdmUgZnJvbSB0aGUgZmllbGQgbmFtZSB0aGV5XG4vLyBzdXBwbGllZCDigJQgc28gdGhlc2UgdGVtcGxhdGVzIGRpc2Nsb3NlIGEgc2NoZW1hIGNsYXNzIG5hbWUgdG8gYSBjYWxsZXIgd2hvIGhhcyBvbmx5IHRoZVxuLy8gcHVibGljIGFwcGxpY2F0aW9uIGlkLiBSZWRhY3QgdGhlIHF1b3RlZCB0eXBlIGlkZW50aWZpZXIgZnJvbSB0aG9zZSB0ZW1wbGF0ZXMgVU5MRVNTIHRoZVxuLy8gY2FsbGVyIHJlZmVyZW5jZWQgaXQgaW4gdGhlIG9wZXJhdGlvbiB0ZXh0OiBhIHR5cGUgbmFtZSB0aGUgY2FsbGVyIHdyb3RlIGluIHRoZSBvcGVyYXRpb25cbi8vIChlLmcuIGAkd2hlcmU6IFVzZXJXaGVyZUlucHV0YCkgaXMgbm90IGEgZGlzY2xvc3VyZSwgYW5kIHByZXNlcnZpbmcgaXQga2VlcHMgdGhlIG1lc3NhZ2Vcbi8vICgnLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IHR5cGUgXCJVc2VyV2hlcmVJbnB1dFwiLicpIHVzZWZ1bC4gV2hlbiB0aGUgb3BlcmF0aW9uIHRleHQgaXNcbi8vIHVuYXZhaWxhYmxlIHRoZSBpZGVudGlmaWVyIGlzIHJlZGFjdGVkIChmYWlsIGNsb3NlZCkuXG5jb25zdCBzdHJpcFNjaGVtYVR5cGVJZGVudGlmaWVycyA9IChtZXNzYWdlLCBvcGVyYXRpb25UZXh0KSA9PiB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgcmV0dXJuIG1lc3NhZ2U7IH1cbiAgLy8gQSBnZW5lcmF0ZWQgdHlwZSBpZGVudGlmaWVyIGlzIGtlcHQgKGl0IGlzIG5vdCBhIGRpc2Nsb3N1cmUpIGlmIHRoZSBjYWxsZXIgd3JvdGUgaXQgYXMgYVxuICAvLyB3aG9sZSB0b2tlbiBpbiB0aGUgb3BlcmF0aW9uIHRleHQsIG9yIGlmIGl0IGlzIGEgbm9uLWRpc2Nsb3NpbmcgbmFtZSAoYWJvdmUpLiBUb2tlbml6ZSB0aGVcbiAgLy8gb3BlcmF0aW9uIG9uIG5vbi1pZGVudGlmaWVyIGNoYXJhY3RlcnMgYW5kIGNvbXBhcmUgZXhhY3QgdG9rZW5zIHJhdGhlciB0aGFuIGJ1aWxkaW5nIGFcbiAgLy8gUmVnRXhwIGZyb20gdGhlIGNhcHR1cmVkIG5hbWU6IHRoaXMgYXZvaWRzIHN1YnN0cmluZyBmYWxzZS1tYXRjaGVzIChlLmcuIHByZXNlcnZpbmdcbiAgLy8gXCJBdXRob3JQb2ludGVySW5wdXRcIiBiZWNhdXNlIHRoZSBvcGVyYXRpb24gY29udGFpbnMgXCJTZWNyZXRBdXRob3JQb2ludGVySW5wdXRcIikgYW5kIGFueVxuICAvLyByZWdleCBpbmplY3Rpb24vUmVEb1MgZnJvbSBhbiB1bnVzdWFsIGNhcHR1cmVkIG5hbWUuIEdyYXBoUUwgbGlzdC9ub24tbnVsbCB3cmFwcGVycyAoXCJbXCIsXG4gIC8vIFwiXVwiLCBcIiFcIikgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGNhcHR1cmVkIG5hbWUgc28gZS5nLiBcIlNlY3JldEF1dGhvclBvaW50ZXJJbnB1dCFcIiBzdGlsbFxuICAvLyBtYXRjaGVzIFwiJHg6IFNlY3JldEF1dGhvclBvaW50ZXJJbnB1dCFcIi4gV2hlbiB0aGUgb3BlcmF0aW9uIHRleHQgaXMgdW5hdmFpbGFibGUgdGhlIHR5cGUgaXNcbiAgLy8gdHJlYXRlZCBhcyBub3QgcmVmZXJlbmNlZCAoZmFpbCBjbG9zZWQpLlxuICBjb25zdCByZWZlcmVuY2VkVG9rZW5zID1cbiAgICB0eXBlb2Ygb3BlcmF0aW9uVGV4dCA9PT0gJ3N0cmluZydcbiAgICAgID8gbmV3IFNldChvcGVyYXRpb25UZXh0LnNwbGl0KC9bXl9BLVphLXowLTldKy8pLmZpbHRlcihCb29sZWFuKSlcbiAgICAgIDogbmV3IFNldCgpO1xuICAvLyBBIG5vbi1kaXNjbG9zaW5nIHR5cGUgbmFtZSAoYENsb3VkQ29kZUZ1bmN0aW9uYCwgYFJlYWRQcmVmZXJlbmNlYCwgYFZpZXdlcmAsIGBQYWdlSW5mb2AsIHRoZVxuICAvLyBidWlsdC1pbiBzY2FsYXJzLCAuLi4pIGlzIGlkZW50aWNhbCBvbiBldmVyeSBQYXJzZSBTZXJ2ZXIgZGVwbG95bWVudCBhbmQgY2Fubm90IGNvbGxpZGUgd2l0aFxuICAvLyBhIHVzZXIgY2xhc3MsIHNpbmNlIGBQYXJzZUdyYXBoUUxTY2hlbWFgIHJlamVjdHMgY2xhc3MgbmFtZXMgdGhhdCB3b3VsZCBwcm9kdWNlIG9uZS4gRWNob2luZ1xuICAvLyBvbmUgdGhlcmVmb3JlIGRpc2Nsb3NlcyBub3RoaW5nIGFib3V0IFRISVMgYXBwbGljYXRpb24ncyBzY2hlbWEsIHNvIGl0IGlzIHByZXNlcnZlZCBsaWtlIGFcbiAgLy8gY2FsbGVyLXJlZmVyZW5jZWQgbmFtZSBhbmQgdGhlIG1lc3NhZ2Ugc3RheXMgdXNlZnVsLlxuICBjb25zdCBzaG91bGRLZWVwVHlwZU5hbWUgPSB0eXBlTmFtZSA9PiB7XG4gICAgY29uc3QgYmFyZVR5cGVOYW1lID0gdHlwZU5hbWUucmVwbGFjZSgvW1tcXF0hXS9nLCAnJyk7XG4gICAgcmV0dXJuIE5PTl9ESVNDTE9TSU5HX1RZUEVfTkFNRVMuaGFzKGJhcmVUeXBlTmFtZSkgfHwgcmVmZXJlbmNlZFRva2Vucy5oYXMoYmFyZVR5cGVOYW1lKTtcbiAgfTtcbiAgcmV0dXJuIG1lc3NhZ2VcbiAgICAvLyBJbnB1dCBjb2VyY2lvbiAvIFZhbHVlc09mQ29ycmVjdFR5cGVSdWxlICh2YXJpYWJsZXMgYW5kIGlubGluZSBsaXRlcmFscykuXG4gICAgLnJlcGxhY2UoL0V4cGVjdGVkIHZhbHVlIG9mIHR5cGUgXCIoW15cIl0rKVwiL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnRXhwZWN0ZWQgdmFsdWUgb2YgdGhlIGNvcnJlY3QgdHlwZSdcbiAgICApXG4gICAgLnJlcGxhY2UoL0V4cGVjdGVkIHR5cGUgXCIoW15cIl0rKVwiIHRvIGJlIGFuIG9iamVjdFxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJ0V4cGVjdGVkIGFuIG9iamVjdC4nXG4gICAgKVxuICAgIC5yZXBsYWNlKC9FeHBlY3RlZCBub24tbnVsbGFibGUgdHlwZSBcIihbXlwiXSspXCIgbm90IHRvIGJlIG51bGxcXC4vZywgKG1hdGNoLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6ICdFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlLidcbiAgICApXG4gICAgLnJlcGxhY2UoLyBpcyBub3QgZGVmaW5lZCBieSB0eXBlIFwiKFteXCJdKylcIlxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJyBpcyBub3QgZGVmaW5lZC4nXG4gICAgKVxuICAgIC8vIFZhcmlhYmxlc0luQWxsb3dlZFBvc2l0aW9uUnVsZTogdGhlIHBvc2l0aW9uIHR5cGUgaXMgdGhlIHBvaW50ZXIvcmVsYXRpb24gdGFyZ2V0XG4gICAgLy8gaW5wdXQgdHlwZTsgdGhlIGNhbGxlciBvbmx5IHdyb3RlIHRoZWlyIG93biB2YXJpYWJsZSdzIGRlY2xhcmVkIHR5cGUuXG4gICAgLnJlcGxhY2UoLyB1c2VkIGluIHBvc2l0aW9uIGV4cGVjdGluZyB0eXBlIFwiKFteXCJdKylcIlxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJyB1c2VkIGluIHBvc2l0aW9uIGV4cGVjdGluZyBhIGRpZmZlcmVudCB0eXBlLidcbiAgICApXG4gICAgLy8gRmllbGRzT25Db3JyZWN0VHlwZVJ1bGU6IGRlc2NlbmRpbmcgaW50byBhIFBvaW50ZXIvUmVsYXRpb24gb3V0cHV0IGZpZWxkIG5hbWVzIGl0c1xuICAgIC8vIHRhcmdldCBvdXRwdXQgb2JqZWN0IHR5cGUuXG4gICAgLnJlcGxhY2UoL0Nhbm5vdCBxdWVyeSBmaWVsZCAoXCJbXlwiXSpcIikgb24gdHlwZSBcIihbXlwiXSspXCJcXC4vZywgKG1hdGNoLCBmaWVsZE5hbWUsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogYENhbm5vdCBxdWVyeSBmaWVsZCAke2ZpZWxkTmFtZX0uYFxuICAgIClcbiAgICAvLyBTY2FsYXJMZWFmc1J1bGU6IHNlbGVjdGluZyBhIFBvaW50ZXIvUmVsYXRpb24gb3V0cHV0IGZpZWxkIHdpdGggbm8gc3ViLXNlbGVjdGlvbiBuYW1lc1xuICAgIC8vIGl0cyB0YXJnZXQgb3V0cHV0IG9iamVjdCB0eXBlLlxuICAgIC5yZXBsYWNlKFxuICAgICAgL0ZpZWxkIChcIlteXCJdKlwiKSBvZiB0eXBlIFwiKFteXCJdKylcIiBtdXN0IGhhdmUgYSBzZWxlY3Rpb24gb2Ygc3ViZmllbGRzXFwuL2csXG4gICAgICAobWF0Y2gsIGZpZWxkTmFtZSwgdHlwZU5hbWUpID0+XG4gICAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSlcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBgRmllbGQgJHtmaWVsZE5hbWV9IG11c3QgaGF2ZSBhIHNlbGVjdGlvbiBvZiBzdWJmaWVsZHMuYFxuICAgIClcbiAgICAvLyBQb3NzaWJsZUZyYWdtZW50U3ByZWFkc1J1bGU6IGFuIGlubGluZS9uYW1lZCBmcmFnbWVudCBvbiBhbiBpbmNvbXBhdGlibGUgdHlwZSBpbnNpZGUgYVxuICAgIC8vIFBvaW50ZXIvUmVsYXRpb24gb3V0cHV0IGZpZWxkIG5hbWVzIHRoZSB0YXJnZXQgb3V0cHV0IG9iamVjdCB0eXBlICh0aGUgcGFyZW50IHR5cGUpLlxuICAgIC8vIFJlZGFjdCBlYWNoIHR5cGUgdG9rZW4gdGhlIGNhbGxlciBkaWQgbm90IHJlZmVyZW5jZTsgd2hlbiBib3RoIGFyZSByZWZlcmVuY2VkIHRoZVxuICAgIC8vIHJlY29uc3RydWN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgbWVzc2FnZS5cbiAgICAucmVwbGFjZShcbiAgICAgIC9vYmplY3RzIG9mIHR5cGUgXCIoW15cIl0rKVwiIGNhbiBuZXZlciBiZSBvZiB0eXBlIFwiKFteXCJdKylcIlxcLi9nLFxuICAgICAgKG1hdGNoLCBwYXJlbnRUeXBlLCBmcmFnVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzaG91bGRLZWVwVHlwZU5hbWUocGFyZW50VHlwZSkgPyBgdHlwZSBcIiR7cGFyZW50VHlwZX1cImAgOiAndGhlIHBhcmVudCB0eXBlJztcbiAgICAgICAgY29uc3QgZnJhZyA9IHNob3VsZEtlZXBUeXBlTmFtZShmcmFnVHlwZSkgPyBgdHlwZSBcIiR7ZnJhZ1R5cGV9XCJgIDogJ3RoZSBnaXZlbiB0eXBlJztcbiAgICAgICAgcmV0dXJuIGBvYmplY3RzIG9mICR7cGFyZW50fSBjYW4gbmV2ZXIgYmUgb2YgJHtmcmFnfS5gO1xuICAgICAgfVxuICAgIClcbiAgICAvLyBLbm93bkFyZ3VtZW50TmFtZXNSdWxlOiB0aGUgYXJndW1lbnQncyBwYXJlbnQgT1VUUFVUIHR5cGUuIEluc2lkZSBhIFBvaW50ZXIvUmVsYXRpb25cbiAgICAvLyBzdWItc2VsZWN0aW9uIHRoYXQgcGFyZW50IGlzIHRoZSBUQVJHRVQgY2xhc3MsIHdob3NlIG91dHB1dCB0eXBlIGlzIG5hbWVkIGV4YWN0bHkgdGhlXG4gICAgLy8gY2xhc3MgbmFtZSAoYHBhcnNlQ2xhc3NUeXBlcy5qc2ApLCBzbyBpdCBkaXNjbG9zZXMgYSBjbGFzcyB0aGUgY2FsbGVyIG5ldmVyIHdyb3RlIOKAlCB0aGV5XG4gICAgLy8gb25seSBzdXBwbGllZCB0aGUgcG9pbnRlciBmaWVsZCBuYW1lLiBUaGUgdHlwZSBpcyBlbWJlZGRlZCBpbiBhIGRvdHRlZCBcIjxUeXBlPi48ZmllbGQ+XCJcbiAgICAvLyB0b2tlbjsga2VlcCB0aGUgZmllbGQgbmFtZSAodGhlIGNhbGxlciB3cm90ZSBpdCkgYW5kIHJlZGFjdCBvbmx5IHRoZSB0eXBlIGhhbGYuIE5vdGUgdGhlXG4gICAgLy8gZGlyZWN0aXZlIGZvcm0gKCcuLi4gb24gZGlyZWN0aXZlIFwiQG5hbWVcIi4nKSBjYXJyaWVzIG5vIHR5cGUgYW5kIGlzIGxlZnQgYWxvbmUuXG4gICAgLnJlcGxhY2UoXG4gICAgICAvVW5rbm93biBhcmd1bWVudCAoXCJbXlwiXSpcIikgb24gZmllbGQgXCIoW15cIi5dKylcXC4oW15cIi5dKylcIlxcLi9nLFxuICAgICAgKG1hdGNoLCBhcmdOYW1lLCB0eXBlTmFtZSwgZmllbGROYW1lKSA9PlxuICAgICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogYFVua25vd24gYXJndW1lbnQgJHthcmdOYW1lfSBvbiBmaWVsZCBcIiR7ZmllbGROYW1lfVwiLmBcbiAgICApXG4gICAgLy8gR3JhcGhRTEVudW1UeXBlLnBhcnNlVmFsdWUvcGFyc2VMaXRlcmFsOiBhIFJlbGF0aW9uIGZpZWxkJ3MgYG9yZGVyYCBhcmd1bWVudCBpcyB0eXBlZFxuICAgIC8vIGBbPFRhcmdldD5PcmRlciFdYCAoYHBhcnNlQ2xhc3NUeXBlcy5qc2ApLCBzbyBhbiBpbnZhbGlkIGVudW0gbGl0ZXJhbCBuYW1lcyB0aGUgdGFyZ2V0XG4gICAgLy8gY2xhc3MuIFRoZXNlIG1lc3NhZ2VzIGNvbWUgZnJvbSB0aGUgZW51bSB0eXBlIGl0c2VsZiByYXRoZXIgdGhhbiBmcm9tIGEgdmFsaWRhdGlvbiBydWxlLFxuICAgIC8vIHdoaWNoIGlzIHdoeSB0aGUgVmFsdWVzT2ZDb3JyZWN0VHlwZVJ1bGUgdGVtcGxhdGVzIGFib3ZlIGRvIG5vdCByZWFjaCB0aGVtLiBUaGUgb2ZmZW5kaW5nXG4gICAgLy8gdmFsdWUgaXMgY2FsbGVyLXN1cHBsaWVkIGFuZCBpcyBwcmVzZXJ2ZWQ7IG9ubHkgdGhlIGVudW0gdHlwZSBuYW1lIGlzIHJlZGFjdGVkLlxuICAgIC5yZXBsYWNlKC9WYWx1ZSAoXCJbXlwiXSpcIikgZG9lcyBub3QgZXhpc3QgaW4gXCIoW15cIl0rKVwiIGVudW1cXC4vZywgKG1hdGNoLCB2YWx1ZSwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiBgVmFsdWUgJHt2YWx1ZX0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudW0uYFxuICAgIClcbiAgICAvLyBTaWJsaW5nIGJyYW5jaGVzIG9mIHRoZSBzYW1lIGVudW0gdHlwZSwgcmVhY2hlZCB3aGVuIHRoZSBsaXRlcmFsIGlzIG5vdCBhbiBlbnVtIHZhbHVlIGF0XG4gICAgLy8gYWxsICgnY2Fubm90IHJlcHJlc2VudCBub24tZW51bSB2YWx1ZTogLi4uJywgJ2Nhbm5vdCByZXByZXNlbnQgbm9uLXN0cmluZyB2YWx1ZTogLi4uJyxcbiAgICAvLyAnY2Fubm90IHJlcHJlc2VudCB2YWx1ZTogLi4uJykuIFNhbWUgZGlzY2xvc3VyZSwgc2FtZSByZWRhY3Rpb24uXG4gICAgLnJlcGxhY2UoL0VudW0gXCIoW15cIl0rKVwiIGNhbm5vdCByZXByZXNlbnQgL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnRW51bSBjYW5ub3QgcmVwcmVzZW50ICdcbiAgICApO1xufTtcblxuY29uc3Qgc3RyaXBTY2hlbWFJZGVudGlmaWVycyA9IChtZXNzYWdlLCBvcGVyYXRpb25UZXh0KSA9PlxuICBzdHJpcFNjaGVtYVR5cGVJZGVudGlmaWVycyhcbiAgICBzdHJpcFNjaGVtYUNvZXJjaW9uSWRlbnRpZmllcnMoc3RyaXBTY2hlbWFTdWdnZXN0aW9uKG1lc3NhZ2UpKSxcbiAgICBvcGVyYXRpb25UZXh0XG4gICk7XG5cbmNvbnN0IFNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbiA9IChwdWJsaWNJbnRyb3NwZWN0aW9uKSA9PiAoe1xuICByZXF1ZXN0RGlkU3RhcnQ6IGFzeW5jIChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcbiAgICB3aWxsU2VuZFJlc3BvbnNlOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAocHVibGljSW50cm9zcGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc01hc3Rlck9yTWFpbnRlbmFuY2UgPVxuICAgICAgICByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYXN0ZXIgfHxcbiAgICAgICAgcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFpbnRlbmFuY2U7XG4gICAgICBpZiAoaXNNYXN0ZXJPck1haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSByZXF1ZXN0Q29udGV4dC5yZXNwb25zZT8uYm9keTtcbiAgICAgIGNvbnN0IGVycm9ycyA9XG4gICAgICAgIGJvZHk/LmtpbmQgPT09ICdzaW5nbGUnXG4gICAgICAgICAgPyBib2R5LnNpbmdsZVJlc3VsdC5lcnJvcnNcbiAgICAgICAgICA6IGJvZHk/LmtpbmQgPT09ICdpbmNyZW1lbnRhbCdcbiAgICAgICAgICAgID8gYm9keS5pbml0aWFsUmVzdWx0LmVycm9yc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvcGVyYXRpb25UZXh0ID0gcmVxdWVzdENvbnRleHQucmVxdWVzdD8ucXVlcnk7XG4gICAgICBlcnJvcnM/LmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gc3RyaXBTY2hlbWFJZGVudGlmaWVycyhlcnJvci5tZXNzYWdlLCBvcGVyYXRpb25UZXh0KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3IuZXh0ZW5zaW9ucz8uc3RhY2t0cmFjZSkpIHtcbiAgICAgICAgICBlcnJvci5leHRlbnNpb25zLnN0YWNrdHJhY2UgPSBlcnJvci5leHRlbnNpb25zLnN0YWNrdHJhY2UubWFwKG1lc3NhZ2UgPT5cbiAgICAgICAgICAgIHN0cmlwU2NoZW1hSWRlbnRpZmllcnMobWVzc2FnZSwgb3BlcmF0aW9uVGV4dClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9KSxcbn0pO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTZXJ2ZXIge1xuICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiBQYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnNlU2VydmVyLCBjb25maWcpIHtcbiAgICB0aGlzLnBhcnNlU2VydmVyID0gcGFyc2VTZXJ2ZXIgfHwgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZVNlcnZlciBpbnN0YW5jZSEnKTtcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLmdyYXBoUUxQYXRoKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5ncmFwaFFMUGF0aCEnKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyID0gdGhpcy5wYXJzZVNlcnZlci5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgICB0aGlzLmxvZyA9XG4gICAgICAodGhpcy5wYXJzZVNlcnZlci5jb25maWcgJiYgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubG9nZ2VyQ29udHJvbGxlcikgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYSA9IG5ldyBQYXJzZUdyYXBoUUxTY2hlbWEoe1xuICAgICAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgICAgZGF0YWJhc2VDb250cm9sbGVyOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5kYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzOiB0aGlzLmNvbmZpZy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMsXG4gICAgICBhcHBJZDogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBfZ2V0R3JhcGhRTE9wdGlvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYTogYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpLFxuICAgICAgICBjb250ZXh0OiBhc3luYyAoeyByZXEgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmZvOiByZXEuaW5mbyxcbiAgICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gSXQgbWVhbnMgYSBwYXJhbGxlbCBfZ2V0U2VydmVyIGNhbGwgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLl9zY2hlbWFSZWZNdXRleCA9PT0gbmV3U2NoZW1hUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICAgIH1cbiAgICAvLyBVcGRhdGUgdGhlIHNjaGVtYSByZWYgbXV0ZXggdG8gYXZvaWQgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsc1xuICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbmV3U2NoZW1hUmVmO1xuICAgIGNvbnN0IGNyZWF0ZVNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBjb250ZXh0IH0gPSBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhcG9sbG8gPSBuZXcgQXBvbGxvU2VydmVyKHtcbiAgICAgICAgICBjc3JmUHJldmVudGlvbjoge1xuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3Mvcm91dGVyL2NvbmZpZ3VyYXRpb24vY3NyZi9cbiAgICAgICAgICAgIC8vIG5lZWRlZCBzaW5jZSB3ZSB1c2UgZ3JhcGhxbCB1cGxvYWRcbiAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiBbJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIFdlIG5lZWQgYWx3YXlzIHRydWUgaW50cm9zcGVjdGlvbiBiZWNhdXNlIGFwb2xsbyBzZXJ2ZXIgaGF2ZSBjaGFuZ2luZyBiZWhhdmlvciBiYXNlZCBvbiB0aGUgTk9ERV9FTlYgdmFyaWFibGVcbiAgICAgICAgICAvLyB3ZSBkZWxlZ2F0ZSB0aGUgaW50cm9zcGVjdGlvbiBjb250cm9sIHRvIHRoZSBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpblxuICAgICAgICAgIGludHJvc3BlY3Rpb246IHRydWUsXG4gICAgICAgICAgcGx1Z2luczogW0Fwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkKCksIEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luKHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uKSwgU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luKHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uKSwgY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4oKCkgPT4gdGhpcy5wYXJzZVNlcnZlci5jb25maWcucmVxdWVzdENvbXBsZXhpdHkpXSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBhcG9sbG8uc3RhcnQoKTtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3NNaWRkbGV3YXJlKGFwb2xsbywge1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBSZXNldCBhbGwgbXV0ZXhlcyBhbmQgZm9yd2FyZCB0aGUgZXJyb3JcbiAgICAgICAgdGhpcy5fc2VydmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc2NoZW1hUmVmTXV0ZXggPSBudWxsO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBEbyBub3QgYXdhaXQgc28gcGFyYWxsZWwgcmVxdWVzdCB3aWxsIHdhaXQgdGhlIHNhbWUgcHJvbWlzZSByZWZcbiAgICB0aGlzLl9zZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCB1bml0TWFwID0ge1xuICAgICAga2I6IDEsXG4gICAgICBtYjogMixcbiAgICAgIGdiOiAzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyKG1heFVwbG9hZFNpemUuc2xpY2UoMCwgLTIpKSAqXG4gICAgICBNYXRoLnBvdygxMDI0LCB1bml0TWFwW21heFVwbG9hZFNpemUuc2xpY2UoLTIpLnRvTG93ZXJDYXNlKCldKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBBbGxvdyBkZXZlbG9wZXJzIHRvIGN1c3RvbWl6ZSBlYWNoIHJlcXVlc3Qgd2l0aCBpbnZlcnNpb24gb2YgY29udHJvbC9kZXBlbmRlbmN5IGluamVjdGlvblxuICAgKi9cbiAgYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBpLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgICAgYXBpLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhcGhRTChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLnVzZSkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGFsbG93Q3Jvc3NEb21haW4odGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUhlYWRlcnMpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlU2Vzc2lvbik7XG4gICAgdGhpcy5hcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcHAsIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZShcbiAgICAgIHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgZ3JhcGhxbFVwbG9hZEV4cHJlc3Moe1xuICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWF4VXBsb2FkU2l6ZSB8fCAnMjBtYidcbiAgICAgICAgKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMsIG5leHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG5cbiAgICBhcHAuZ2V0KFxuICAgICAgdGhpcy5jb25maWcucGxheWdyb3VuZFBhdGggfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgYDxkaXYgaWQ9XCJzYW5kYm94XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPjwvZGl2PlxuICAgICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9lbWJlZGRhYmxlLXNhbmRib3guY2RuLmFwb2xsb2dyYXBocWwuY29tL19sYXRlc3QvZW1iZWRkYWJsZS1zYW5kYm94LnVtZC5wcm9kdWN0aW9uLm1pbi5qc1wiPjwvc2NyaXB0PlxuICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIG5ldyB3aW5kb3cuRW1iZWRkZWRTYW5kYm94KHtcbiAgICAgICAgICAgICB0YXJnZXQ6IFwiI3NhbmRib3hcIixcbiAgICAgICAgICAgICBlbmRwb2ludElzRWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgIGluaXRpYWxFbmRwb2ludDogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCl9LFxuICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3Q6IChlbmRwb2ludFVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmV0Y2goZW5kcG9pbnRVcmwsIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpfSxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtTWFzdGVyLUtleSc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5KX0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb25zOiBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3N0dWRpby9leHBsb3Jlci9zYW5kYm94I2VtYmVkZGluZy1zYW5kYm94XG4gICAgICAgICAgPC9zY3JpcHQ+YFxuICAgICAgICApO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldEdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZzogUGFyc2VHcmFwaFFMQ29uZmlnKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlci51cGRhdGVHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWcpO1xuICB9XG59XG5cbmV4cG9ydCB7IFBhcnNlR3JhcGhRTFNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxxQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsU0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLG1CQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxvQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsdUJBQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQUNBLElBQUFhLGdCQUFBLEdBQUFiLE9BQUE7QUFBNkUsU0FBQVksd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFKLHVCQUFBLFlBQUFBLENBQUFFLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFB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
390
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZXJ2ZXIiLCJfZXhwcmVzcyIsIl9kaXNhYmxlZCIsIl9leHByZXNzMiIsIl9ncmFwaHFsIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfZGVmYXVsdEdyYXBoUUxUeXBlcyIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVlcnlDb21wbGV4aXR5IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiY2hlY2tTZWxlY3Rpb25zIiwic2VsZWN0aW9ucyIsInNlbGVjdGlvbiIsImtpbmQiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWxlY3Rpb25TZXQiLCJkZWZpbml0aW9uIiwiZGVmaW5pdGlvbnMiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInNvdXJjZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsInN0cmlwU2NoZW1hU3VnZ2VzdGlvbiIsIm1lc3NhZ2UiLCJyZXBsYWNlIiwic3RyaXBTY2hlbWFDb2VyY2lvbklkZW50aWZpZXJzIiwiTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUyIsIlNldCIsIlJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyIsIlJFQURfUFJFRkVSRU5DRSIsInN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzIiwib3BlcmF0aW9uVGV4dCIsInJlZmVyZW5jZWRUb2tlbnMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzaG91bGRLZWVwVHlwZU5hbWUiLCJ0eXBlTmFtZSIsImJhcmVUeXBlTmFtZSIsIm1hdGNoIiwiZmllbGROYW1lIiwicGFyZW50VHlwZSIsImZyYWdUeXBlIiwicGFyZW50IiwiZnJhZyIsImFyZ05hbWUiLCJzdHJpcFNjaGVtYUlkZW50aWZpZXJzIiwiU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luIiwid2lsbFNlbmRSZXNwb25zZSIsImJvZHkiLCJyZXNwb25zZSIsImVycm9ycyIsInNpbmdsZVJlc3VsdCIsImluaXRpYWxSZXN1bHQiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwiZXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJzdGFja3RyYWNlIiwibWFwIiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiY29uc3RydWN0b3IiLCJwYXJzZVNlcnZlciIsImNvbmZpZyIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImFwb2xsbyIsIkFwb2xsb1NlcnZlciIsImNzcmZQcmV2ZW50aW9uIiwicmVxdWVzdEhlYWRlcnMiLCJpbnRyb3NwZWN0aW9uIiwicGx1Z2lucyIsIkFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiIsInJlcXVlc3RDb21wbGV4aXR5Iiwic3RhcnQiLCJleHByZXNzTWlkZGxld2FyZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJ1bml0TWFwIiwia2IiLCJtYiIsImdiIiwiTnVtYmVyIiwic2xpY2UiLCJNYXRoIiwicG93IiwidG9Mb3dlckNhc2UiLCJhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsImFwaSIsIm9wdGlvbnMiLCJyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUiLCJFcnJvciIsInVzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsImFsbG93Q3Jvc3NEb21haW4iLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsInJlcyIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJzZXRHcmFwaFFMQ29uZmlnIiwiZ3JhcGhRTENvbmZpZyIsInVwZGF0ZUdyYXBoUUxDb25maWciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0dyYXBoUUwvUGFyc2VHcmFwaFFMU2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBncmFwaHFsVXBsb2FkRXhwcmVzcyBmcm9tICdncmFwaHFsLXVwbG9hZC9ncmFwaHFsVXBsb2FkRXhwcmVzcy5qcyc7XG5pbXBvcnQgeyBBcG9sbG9TZXJ2ZXIgfSBmcm9tICdAYXBvbGxvL3NlcnZlcic7XG5pbXBvcnQgeyBleHByZXNzTWlkZGxld2FyZSB9IGZyb20gJ0Bhcy1pbnRlZ3JhdGlvbnMvZXhwcmVzczUnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9wbHVnaW4vZGlzYWJsZWQnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBHcmFwaFFMRXJyb3IsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBhbGxvd0Nyb3NzRG9tYWluLCBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSwgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IHsgUkVBRF9QUkVGRVJFTkNFIH0gZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMVHlwZXMnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgeyBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiB9IGZyb20gJy4vaGVscGVycy9xdWVyeUNvbXBsZXhpdHknO1xuXG5cbmNvbnN0IGhhc1R5cGVJbnRyb3NwZWN0aW9uID0gKHF1ZXJ5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UocXVlcnkpO1xuICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9ucyA9IChzZWxlY3Rpb25zKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25zKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZpZWxkJyAmJiBzZWxlY3Rpb24ubmFtZS52YWx1ZSA9PT0gJ19fdHlwZScpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLmFyZ3VtZW50cyAmJiBzZWxlY3Rpb24uYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICAgIGlmIChjaGVja1NlbGVjdGlvbnMoc2VsZWN0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgYXN0LmRlZmluaXRpb25zKSB7XG4gICAgICBpZiAoZGVmaW5pdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgaWYgKGNoZWNrU2VsZWN0aW9ucyhkZWZpbml0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCB0aHJvd0ludHJvc3BlY3Rpb25FcnJvciA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcignSW50cm9zcGVjdGlvbiBpcyBub3QgYWxsb3dlZCcsIHtcbiAgICBleHRlbnNpb25zOiB7XG4gICAgICBodHRwOiB7XG4gICAgICAgIHN0YXR1czogNDAzLFxuICAgICAgfSxcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4gPSAocHVibGljSW50cm9zcGVjdGlvbikgPT4gKHtcblxuXG4gIHJlcXVlc3REaWRTdGFydDogKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuXG4gICAgZGlkUmVzb2x2ZU9wZXJhdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSWYgcHVibGljIGludHJvc3BlY3Rpb24gaXMgZW5hYmxlZCwgd2UgYWxsb3cgYWxsIGludHJvc3BlY3Rpb24gcXVlcmllc1xuICAgICAgaWYgKHB1YmxpY0ludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01hc3Rlck9yTWFpbnRlbmFuY2UgPSByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYXN0ZXIgfHwgcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFpbnRlbmFuY2VcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBcG9sbG8gcmVzb2x2ZXMgdGhlIG9wZXJhdGlvbiB0ZXh0IGludG8gYHJlcXVlc3RDb250ZXh0LnNvdXJjZWAgYmVmb3JlIHRoaXMgaG9va1xuICAgICAgLy8gcnVucyBhbmQgZ3VhcmFudGVlcyBpdCBpcyBzZXQgaGVyZS4gSXQgaXMgTk9UIHRoZSBzYW1lIGFzIGByZXF1ZXN0LnF1ZXJ5YDogb24gYW5cbiAgICAgIC8vIGF1dG9tYXRpYyBwZXJzaXN0ZWQgcXVlcnkgY2FjaGUgaGl0IHRoZSB0ZXh0IGNvbWVzIGZyb20gdGhlIHBlcnNpc3RlZC1xdWVyeSBjYWNoZVxuICAgICAgLy8gYW5kIGByZXF1ZXN0LnF1ZXJ5YCBpcyBuZXZlciBwb3B1bGF0ZWQsIHNvIHJlYWRpbmcgYHJlcXVlc3QucXVlcnlgIHdvdWxkIGxlYXZlXG4gICAgICAvLyBub3RoaW5nIHRvIGluc3BlY3QgYW5kIHNpbGVudGx5IHNraXAgYm90aCBndWFyZHMgYmVsb3cuIEFwb2xsbyBlbmFibGVzIGF1dG9tYXRpY1xuICAgICAgLy8gcGVyc2lzdGVkIHF1ZXJpZXMgYnkgZGVmYXVsdCwgc28gdGhhdCBwYXRoIGlzIHJlYWNoYWJsZSBvbiBldmVyeSBkZXBsb3ltZW50LiBGYWxsXG4gICAgICAvLyBiYWNrIHRvIGByZXF1ZXN0LnF1ZXJ5YCBvbmx5IGZvciByb2J1c3RuZXNzLCBhbmQgZmFpbCBjbG9zZWQgd2hlbiBuZWl0aGVyIGlzIGFcbiAgICAgIC8vIHN0cmluZyBzbyB0aGF0IGFuIG9wZXJhdGlvbiB3aGljaCBjYW5ub3QgYmUgaW5zcGVjdGVkIGlzIG5ldmVyIGFsbG93ZWQgdGhyb3VnaC5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcmVxdWVzdENvbnRleHQuc291cmNlID8/IHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk7XG5cbiAgICAgIC8vIEZhc3QgcGF0aDogc2ltcGxlIHN0cmluZyBjaGVjayBmb3IgX19zY2hlbWFcbiAgICAgIC8vIFRoaXMgYXZvaWRzIHBhcnNpbmcgdGhlIHF1ZXJ5IGluIG1vc3QgY2FzZXNcbiAgICAgIC8vIEFuIG9wZXJhdGlvbiB0ZXh0IHRoYXQgaXMgbm90IGEgc3RyaW5nIGNhbm5vdCBiZSBpbnNwZWN0ZWQgYXQgYWxsLCBzbyBpdCBpcyBkZW5pZWRcbiAgICAgIC8vIGZvciB0aGUgc2FtZSByZWFzb246IHRoaXMgZ3VhcmQgbXVzdCBuZXZlciBsZXQgYW4gb3BlcmF0aW9uIHRocm91Z2ggdW5pbnNwZWN0ZWQuXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5ICE9PSAnc3RyaW5nJyB8fCBxdWVyeS5pbmNsdWRlcygnX19zY2hlbWEnKSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU21hcnQgY2hlY2sgZm9yIF9fdHlwZTogb25seSBwYXJzZSBpZiB0aGUgc3RyaW5nIGlzIHByZXNlbnRcbiAgICAgIC8vIFRoaXMgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyAoZS5nLiwgXCJfX3R5cGVcIiBpbiBzdHJpbmdzIG9yIGNvbW1lbnRzKVxuICAgICAgLy8gd2hpbGUgc3RpbGwgYmVpbmcgZWZmaWNpZW50IGZvciB0aGUgY29tbW9uIGNhc2VcbiAgICAgIGlmIChxdWVyeS5pbmNsdWRlcygnX190eXBlJykgJiYgaGFzVHlwZUludHJvc3BlY3Rpb24ocXVlcnkpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0ludHJvc3BlY3Rpb25FcnJvcigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgfSlcblxufSk7XG5cbi8vIGdyYXBocWwtanMgZW1iZWRzIFwiRGlkIHlvdSBtZWFuIC4uLj9cIiBoaW50cyBzb3VyY2VkIGZyb20gdGhlIGxpdmUgc2NoZW1hIGluXG4vLyBpdHMgZXJyb3IgbWVzc2FnZXMuIFRoZXkgYXJlIHByb2R1Y2VkIGluIHR3byBkaXN0aW5jdCBwaGFzZXM6XG4vLyAgIC0gdmFsaWRhdGlvbiBydWxlcyAoRmllbGRzT25Db3JyZWN0VHlwZVJ1bGUsIEtub3duQXJndW1lbnROYW1lc1J1bGUsXG4vLyAgICAgS25vd25UeXBlTmFtZXNSdWxlLCAuLi4pLCBhbmRcbi8vICAgLSB2YXJpYWJsZSBjb2VyY2lvbiAodW5rbm93biBlbnVtIHZhbHVlcywgdW5rbm93biBpbnB1dC1vYmplY3QgZmllbGRzKSxcbi8vICAgICB3aGljaCBydW5zIGR1cmluZyBleGVjdXRpb24sIGFmdGVyIHZhbGlkYXRpb24uXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgYW5kIGRpc2Nsb3NlIHNjaGVtYSBpZGVudGlmaWVycyAoQ2xvdWRcbi8vIENvZGUgZnVuY3Rpb24gbmFtZXMsIGNsYXNzIGFuZCBmaWVsZCBuYW1lcykgdGhhdCB0aGUgaW50cm9zcGVjdGlvbiBndWFyZCBpc1xuLy8gbWVhbnQgdG8gaGlkZS4gU3RyaXAgdGhlIGhpbnQgc3VmZml4IGZyb20gZXZlcnkgcmV0dXJuZWQgZXJyb3Ig4oCUIGluY2x1ZGluZyB0aGVcbi8vIGNvcHkgZ3JhcGhxbC1qcyBkdXBsaWNhdGVzIGludG8gZXh0ZW5zaW9ucy5zdGFja3RyYWNlIGluIG5vbi1wcm9kdWN0aW9uIOKAlCBmb3Jcbi8vIGNhbGxlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gaW50cm9zcGVjdC5cbmNvbnN0IHN0cmlwU2NoZW1hU3VnZ2VzdGlvbiA9IG1lc3NhZ2UgPT5cbiAgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gbWVzc2FnZS5yZXBsYWNlKC8gP0RpZCB5b3UgbWVhbiguKz8pXFw/JC8sICcnKSA6IG1lc3NhZ2U7XG5cbi8vIGdyYXBocWwtanMgYWxzbyBlbWl0cyBhIGJhc2UgaW5wdXQtY29lcmNpb24gbWVzc2FnZSB0aGF0IG5hbWVzIGEgc2NoZW1hXG4vLyBpZGVudGlmaWVyIFdJVEhPVVQgYSBcIkRpZCB5b3UgbWVhblwiIGNsYXVzZSwgc28gdGhlIHN1Z2dlc3Rpb24gc3RyaXAgYWJvdmVcbi8vIGNhbm5vdCByZWFjaCBpdDogd2hlbiBhIHJlcXVpcmVkIGN1c3RvbSBpbnB1dCBmaWVsZCBpcyBvbWl0dGVkLCBjb2VyY2VJbnB1dFZhbHVlXG4vLyByZXR1cm5zICdGaWVsZCBcIjxuYW1lPlwiIG9mIHJlcXVpcmVkIHR5cGUgXCI8dHlwZT5cIiB3YXMgbm90IHByb3ZpZGVkLicsIGRpc2Nsb3Npbmdcbi8vIGEgZmllbGQgbmFtZSB0aGUgY2FsbGVyIG5ldmVyIHN1cHBsaWVkLiBSZWRhY3QgdGhlIHF1b3RlZCBpZGVudGlmaWVycyBmcm9tIHRoaXNcbi8vIHRlbXBsYXRlIHdoaWxlIHByZXNlcnZpbmcgdGhlIGVycm9yIHNoYXBlLCBmb3IgY2FsbGVycyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0b1xuLy8gaW50cm9zcGVjdC4gVGhlIHNpYmxpbmcgY29lcmNpb24gbWVzc2FnZXMgKCcuLi4gaXMgbm90IGRlZmluZWQgYnkgdHlwZSBcIjx0eXBlPlwiLicsXG4vLyAnRXhwZWN0ZWQgdHlwZSBcIjx0eXBlPlwiIHRvIGJlIGFuIG9iamVjdC4nKSBhcmUgaW50ZW50aW9uYWxseSBsZWZ0IGludGFjdDogdGhleVxuLy8gb25seSBlY2hvIGFuIGlucHV0IHR5cGUgbmFtZSB0aGUgY2FsbGVyIGFscmVhZHkgcmVmZXJlbmNlZCBpbiB0aGUgb3BlcmF0aW9uLCBzb1xuLy8gdGhleSBkaXNjbG9zZSBub3RoaW5nIHRoZSBjYWxsZXIgZGlkIG5vdCBhbHJlYWR5IHByb3ZpZGUuXG5jb25zdCBzdHJpcFNjaGVtYUNvZXJjaW9uSWRlbnRpZmllcnMgPSBtZXNzYWdlID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJ1xuICAgID8gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgL0ZpZWxkIFwiW15cIl0qXCIgb2YgcmVxdWlyZWQgdHlwZSBcIlteXCJdKlwiIHdhcyBub3QgcHJvdmlkZWRcXC4vZyxcbiAgICAgICdGaWVsZCBvZiByZXF1aXJlZCB0eXBlIHdhcyBub3QgcHJvdmlkZWQuJ1xuICAgIClcbiAgICA6IG1lc3NhZ2U7XG5cbi8vIFR5cGUgbmFtZXMgdGhhdCByZXZlYWwgbm90aGluZyBhYm91dCBUSElTIGFwcGxpY2F0aW9uJ3Mgc2NoZW1hLCBzbyByZWRhY3RpbmcgdGhlbSB3b3VsZCBjb3N0XG4vLyBtZXNzYWdlIHF1YWxpdHkgZm9yIG5vIHNlY3VyaXR5IGdhaW4uIGBSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVNgIGNvdmVycyB0aGUgbmFtZXMgdGhlIHNjaGVtYVxuLy8gYnVpbGRlciByZWZ1c2VzIHRvIGxldCBhIGNsYXNzIGdlbmVyYXRlLCBidXQgUGFyc2UgcmVnaXN0ZXJzIGJ1aWx0LWluIHR5cGVzIG91dHNpZGUgdGhhdCBsaXN0XG4vLyB0b28uIE9mIHRob3NlLCBvbmx5IGFuIEVOVU0gY2FuIHJlYWNoIHRoZSBlbnVtIHRlbXBsYXRlcyBiZWxvdywgYW5kIHRoZSBHcmFwaFFMIGxheWVyIGRlZmluZXNcbi8vIGV4YWN0bHkgdGhyZWUgZW51bXM6IGBDbG91ZENvZGVGdW5jdGlvbmAgKHJlc2VydmVkKSwgdGhlIHBlci1jbGFzcyBgPENsYXNzPk9yZGVyYCAodGhlXG4vLyBkaXNjbG9zdXJlIHRoZXNlIHRlbXBsYXRlcyBleGlzdCB0byByZWRhY3QpIGFuZCBgUmVhZFByZWZlcmVuY2VgLiBJbmNsdWRlIHRoZSBsYXN0IG9uZSBzbyB0aGF0XG4vLyBhbiBpbnZhbGlkIGBvcHRpb25zLnJlYWRQcmVmZXJlbmNlYCB2YWx1ZSBzdGlsbCBuYW1lcyBpdHMgZW51bSwganVzdCBhcyBgQ2xvdWRDb2RlRnVuY3Rpb25gXG4vLyBkb2VzIOKAlCBpdCBpcyBpZGVudGljYWwgb24gZXZlcnkgZGVwbG95bWVudCBhbmQgcmVhY2hhYmxlIGZyb20gZXZlcnkgZ2VuZXJhdGVkIGZpbmQgcXVlcnkuXG5jb25zdCBOT05fRElTQ0xPU0lOR19UWVBFX05BTUVTID0gbmV3IFNldChbLi4uUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTLCBSRUFEX1BSRUZFUkVOQ0UubmFtZV0pO1xuXG4vLyBncmFwaHFsLWpzIGFsc28gZW1pdHMgYmFzZSBjb2VyY2lvbiAvIHZhbGlkYXRpb24gbWVzc2FnZXMgdGhhdCBuYW1lIGEgbmVzdGVkIGlucHV0XG4vLyBUWVBFIHdpdGhvdXQgYSBcIkRpZCB5b3UgbWVhblwiIGNsYXVzZSwgc28gbmVpdGhlciBzdHJpcCBhYm92ZSByZWFjaGVzIHRoZW0uIEZvciBhXG4vLyBQb2ludGVyIG9yIFJlbGF0aW9uIGZpZWxkIHRoZSBnZW5lcmF0ZWQgaW5wdXQgdHlwZSBuYW1lIGVtYmVkcyB0aGUgcG9pbnRlcidzIFRBUkdFVFxuLy8gY2xhc3MgKGA8VGFyZ2V0PlBvaW50ZXJJbnB1dGAsIGA8VGFyZ2V0PlJlbGF0aW9uV2hlcmVJbnB1dGAsIGBDcmVhdGU8VGFyZ2V0PkZpZWxkc0lucHV0YClcbi8vIOKAlCBhIGNsYXNzIHRoZSBjYWxsZXIgbmV2ZXIgcmVmZXJlbmNlZCBhbmQgY2Fubm90IGRlcml2ZSBmcm9tIHRoZSBmaWVsZCBuYW1lIHRoZXlcbi8vIHN1cHBsaWVkIOKAlCBzbyB0aGVzZSB0ZW1wbGF0ZXMgZGlzY2xvc2UgYSBzY2hlbWEgY2xhc3MgbmFtZSB0byBhIGNhbGxlciB3aG8gaGFzIG9ubHkgdGhlXG4vLyBwdWJsaWMgYXBwbGljYXRpb24gaWQuIFJlZGFjdCB0aGUgcXVvdGVkIHR5cGUgaWRlbnRpZmllciBmcm9tIHRob3NlIHRlbXBsYXRlcyBVTkxFU1MgdGhlXG4vLyBjYWxsZXIgcmVmZXJlbmNlZCBpdCBpbiB0aGUgb3BlcmF0aW9uIHRleHQ6IGEgdHlwZSBuYW1lIHRoZSBjYWxsZXIgd3JvdGUgaW4gdGhlIG9wZXJhdGlvblxuLy8gKGUuZy4gYCR3aGVyZTogVXNlcldoZXJlSW5wdXRgKSBpcyBub3QgYSBkaXNjbG9zdXJlLCBhbmQgcHJlc2VydmluZyBpdCBrZWVwcyB0aGUgbWVzc2FnZVxuLy8gKCcuLi4gaXMgbm90IGRlZmluZWQgYnkgdHlwZSBcIlVzZXJXaGVyZUlucHV0XCIuJykgdXNlZnVsLiBXaGVuIHRoZSBvcGVyYXRpb24gdGV4dCBpc1xuLy8gdW5hdmFpbGFibGUgdGhlIGlkZW50aWZpZXIgaXMgcmVkYWN0ZWQgKGZhaWwgY2xvc2VkKS5cbmNvbnN0IHN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzID0gKG1lc3NhZ2UsIG9wZXJhdGlvblRleHQpID0+IHtcbiAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJykgeyByZXR1cm4gbWVzc2FnZTsgfVxuICAvLyBBIGdlbmVyYXRlZCB0eXBlIGlkZW50aWZpZXIgaXMga2VwdCAoaXQgaXMgbm90IGEgZGlzY2xvc3VyZSkgaWYgdGhlIGNhbGxlciB3cm90ZSBpdCBhcyBhXG4gIC8vIHdob2xlIHRva2VuIGluIHRoZSBvcGVyYXRpb24gdGV4dCwgb3IgaWYgaXQgaXMgYSBub24tZGlzY2xvc2luZyBuYW1lIChhYm92ZSkuIFRva2VuaXplIHRoZVxuICAvLyBvcGVyYXRpb24gb24gbm9uLWlkZW50aWZpZXIgY2hhcmFjdGVycyBhbmQgY29tcGFyZSBleGFjdCB0b2tlbnMgcmF0aGVyIHRoYW4gYnVpbGRpbmcgYVxuICAvLyBSZWdFeHAgZnJvbSB0aGUgY2FwdHVyZWQgbmFtZTogdGhpcyBhdm9pZHMgc3Vic3RyaW5nIGZhbHNlLW1hdGNoZXMgKGUuZy4gcHJlc2VydmluZ1xuICAvLyBcIkF1dGhvclBvaW50ZXJJbnB1dFwiIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBjb250YWlucyBcIlNlY3JldEF1dGhvclBvaW50ZXJJbnB1dFwiKSBhbmQgYW55XG4gIC8vIHJlZ2V4IGluamVjdGlvbi9SZURvUyBmcm9tIGFuIHVudXN1YWwgY2FwdHVyZWQgbmFtZS4gR3JhcGhRTCBsaXN0L25vbi1udWxsIHdyYXBwZXJzIChcIltcIixcbiAgLy8gXCJdXCIsIFwiIVwiKSBhcmUgc3RyaXBwZWQgZnJvbSB0aGUgY2FwdHVyZWQgbmFtZSBzbyBlLmcuIFwiU2VjcmV0QXV0aG9yUG9pbnRlcklucHV0IVwiIHN0aWxsXG4gIC8vIG1hdGNoZXMgXCIkeDogU2VjcmV0QXV0aG9yUG9pbnRlcklucHV0IVwiLiBXaGVuIHRoZSBvcGVyYXRpb24gdGV4dCBpcyB1bmF2YWlsYWJsZSB0aGUgdHlwZSBpc1xuICAvLyB0cmVhdGVkIGFzIG5vdCByZWZlcmVuY2VkIChmYWlsIGNsb3NlZCkuXG4gIGNvbnN0IHJlZmVyZW5jZWRUb2tlbnMgPVxuICAgIHR5cGVvZiBvcGVyYXRpb25UZXh0ID09PSAnc3RyaW5nJ1xuICAgICAgPyBuZXcgU2V0KG9wZXJhdGlvblRleHQuc3BsaXQoL1teX0EtWmEtejAtOV0rLykuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgOiBuZXcgU2V0KCk7XG4gIC8vIEEgbm9uLWRpc2Nsb3NpbmcgdHlwZSBuYW1lIChgQ2xvdWRDb2RlRnVuY3Rpb25gLCBgUmVhZFByZWZlcmVuY2VgLCBgVmlld2VyYCwgYFBhZ2VJbmZvYCwgdGhlXG4gIC8vIGJ1aWx0LWluIHNjYWxhcnMsIC4uLikgaXMgaWRlbnRpY2FsIG9uIGV2ZXJ5IFBhcnNlIFNlcnZlciBkZXBsb3ltZW50IGFuZCBjYW5ub3QgY29sbGlkZSB3aXRoXG4gIC8vIGEgdXNlciBjbGFzcywgc2luY2UgYFBhcnNlR3JhcGhRTFNjaGVtYWAgcmVqZWN0cyBjbGFzcyBuYW1lcyB0aGF0IHdvdWxkIHByb2R1Y2Ugb25lLiBFY2hvaW5nXG4gIC8vIG9uZSB0aGVyZWZvcmUgZGlzY2xvc2VzIG5vdGhpbmcgYWJvdXQgVEhJUyBhcHBsaWNhdGlvbidzIHNjaGVtYSwgc28gaXQgaXMgcHJlc2VydmVkIGxpa2UgYVxuICAvLyBjYWxsZXItcmVmZXJlbmNlZCBuYW1lIGFuZCB0aGUgbWVzc2FnZSBzdGF5cyB1c2VmdWwuXG4gIGNvbnN0IHNob3VsZEtlZXBUeXBlTmFtZSA9IHR5cGVOYW1lID0+IHtcbiAgICBjb25zdCBiYXJlVHlwZU5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC9bW1xcXSFdL2csICcnKTtcbiAgICByZXR1cm4gTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUy5oYXMoYmFyZVR5cGVOYW1lKSB8fCByZWZlcmVuY2VkVG9rZW5zLmhhcyhiYXJlVHlwZU5hbWUpO1xuICB9O1xuICByZXR1cm4gbWVzc2FnZVxuICAgIC8vIElucHV0IGNvZXJjaW9uIC8gVmFsdWVzT2ZDb3JyZWN0VHlwZVJ1bGUgKHZhcmlhYmxlcyBhbmQgaW5saW5lIGxpdGVyYWxzKS5cbiAgICAucmVwbGFjZSgvRXhwZWN0ZWQgdmFsdWUgb2YgdHlwZSBcIihbXlwiXSspXCIvZywgKG1hdGNoLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6ICdFeHBlY3RlZCB2YWx1ZSBvZiB0aGUgY29ycmVjdCB0eXBlJ1xuICAgIClcbiAgICAucmVwbGFjZSgvRXhwZWN0ZWQgdHlwZSBcIihbXlwiXSspXCIgdG8gYmUgYW4gb2JqZWN0XFwuL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnRXhwZWN0ZWQgYW4gb2JqZWN0LidcbiAgICApXG4gICAgLnJlcGxhY2UoL0V4cGVjdGVkIG5vbi1udWxsYWJsZSB0eXBlIFwiKFteXCJdKylcIiBub3QgdG8gYmUgbnVsbFxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJ0V4cGVjdGVkIGEgbm9uLW51bGwgdmFsdWUuJ1xuICAgIClcbiAgICAucmVwbGFjZSgvIGlzIG5vdCBkZWZpbmVkIGJ5IHR5cGUgXCIoW15cIl0rKVwiXFwuL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnIGlzIG5vdCBkZWZpbmVkLidcbiAgICApXG4gICAgLy8gVmFyaWFibGVzSW5BbGxvd2VkUG9zaXRpb25SdWxlOiB0aGUgcG9zaXRpb24gdHlwZSBpcyB0aGUgcG9pbnRlci9yZWxhdGlvbiB0YXJnZXRcbiAgICAvLyBpbnB1dCB0eXBlOyB0aGUgY2FsbGVyIG9ubHkgd3JvdGUgdGhlaXIgb3duIHZhcmlhYmxlJ3MgZGVjbGFyZWQgdHlwZS5cbiAgICAucmVwbGFjZSgvIHVzZWQgaW4gcG9zaXRpb24gZXhwZWN0aW5nIHR5cGUgXCIoW15cIl0rKVwiXFwuL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnIHVzZWQgaW4gcG9zaXRpb24gZXhwZWN0aW5nIGEgZGlmZmVyZW50IHR5cGUuJ1xuICAgIClcbiAgICAvLyBGaWVsZHNPbkNvcnJlY3RUeXBlUnVsZTogZGVzY2VuZGluZyBpbnRvIGEgUG9pbnRlci9SZWxhdGlvbiBvdXRwdXQgZmllbGQgbmFtZXMgaXRzXG4gICAgLy8gdGFyZ2V0IG91dHB1dCBvYmplY3QgdHlwZS5cbiAgICAucmVwbGFjZSgvQ2Fubm90IHF1ZXJ5IGZpZWxkIChcIlteXCJdKlwiKSBvbiB0eXBlIFwiKFteXCJdKylcIlxcLi9nLCAobWF0Y2gsIGZpZWxkTmFtZSwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiBgQ2Fubm90IHF1ZXJ5IGZpZWxkICR7ZmllbGROYW1lfS5gXG4gICAgKVxuICAgIC8vIFNjYWxhckxlYWZzUnVsZTogc2VsZWN0aW5nIGEgUG9pbnRlci9SZWxhdGlvbiBvdXRwdXQgZmllbGQgd2l0aCBubyBzdWItc2VsZWN0aW9uIG5hbWVzXG4gICAgLy8gaXRzIHRhcmdldCBvdXRwdXQgb2JqZWN0IHR5cGUuXG4gICAgLnJlcGxhY2UoXG4gICAgICAvRmllbGQgKFwiW15cIl0qXCIpIG9mIHR5cGUgXCIoW15cIl0rKVwiIG11c3QgaGF2ZSBhIHNlbGVjdGlvbiBvZiBzdWJmaWVsZHNcXC4vZyxcbiAgICAgIChtYXRjaCwgZmllbGROYW1lLCB0eXBlTmFtZSkgPT5cbiAgICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGBGaWVsZCAke2ZpZWxkTmFtZX0gbXVzdCBoYXZlIGEgc2VsZWN0aW9uIG9mIHN1YmZpZWxkcy5gXG4gICAgKVxuICAgIC8vIFBvc3NpYmxlRnJhZ21lbnRTcHJlYWRzUnVsZTogYW4gaW5saW5lL25hbWVkIGZyYWdtZW50IG9uIGFuIGluY29tcGF0aWJsZSB0eXBlIGluc2lkZSBhXG4gICAgLy8gUG9pbnRlci9SZWxhdGlvbiBvdXRwdXQgZmllbGQgbmFtZXMgdGhlIHRhcmdldCBvdXRwdXQgb2JqZWN0IHR5cGUgKHRoZSBwYXJlbnQgdHlwZSkuXG4gICAgLy8gUmVkYWN0IGVhY2ggdHlwZSB0b2tlbiB0aGUgY2FsbGVyIGRpZCBub3QgcmVmZXJlbmNlOyB3aGVuIGJvdGggYXJlIHJlZmVyZW5jZWQgdGhlXG4gICAgLy8gcmVjb25zdHJ1Y3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBtZXNzYWdlLlxuICAgIC5yZXBsYWNlKFxuICAgICAgL29iamVjdHMgb2YgdHlwZSBcIihbXlwiXSspXCIgY2FuIG5ldmVyIGJlIG9mIHR5cGUgXCIoW15cIl0rKVwiXFwuL2csXG4gICAgICAobWF0Y2gsIHBhcmVudFR5cGUsIGZyYWdUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNob3VsZEtlZXBUeXBlTmFtZShwYXJlbnRUeXBlKSA/IGB0eXBlIFwiJHtwYXJlbnRUeXBlfVwiYCA6ICd0aGUgcGFyZW50IHR5cGUnO1xuICAgICAgICBjb25zdCBmcmFnID0gc2hvdWxkS2VlcFR5cGVOYW1lKGZyYWdUeXBlKSA/IGB0eXBlIFwiJHtmcmFnVHlwZX1cImAgOiAndGhlIGdpdmVuIHR5cGUnO1xuICAgICAgICByZXR1cm4gYG9iamVjdHMgb2YgJHtwYXJlbnR9IGNhbiBuZXZlciBiZSBvZiAke2ZyYWd9LmA7XG4gICAgICB9XG4gICAgKVxuICAgIC8vIEtub3duQXJndW1lbnROYW1lc1J1bGU6IHRoZSBhcmd1bWVudCdzIHBhcmVudCBPVVRQVVQgdHlwZS4gSW5zaWRlIGEgUG9pbnRlci9SZWxhdGlvblxuICAgIC8vIHN1Yi1zZWxlY3Rpb24gdGhhdCBwYXJlbnQgaXMgdGhlIFRBUkdFVCBjbGFzcywgd2hvc2Ugb3V0cHV0IHR5cGUgaXMgbmFtZWQgZXhhY3RseSB0aGVcbiAgICAvLyBjbGFzcyBuYW1lIChgcGFyc2VDbGFzc1R5cGVzLmpzYCksIHNvIGl0IGRpc2Nsb3NlcyBhIGNsYXNzIHRoZSBjYWxsZXIgbmV2ZXIgd3JvdGUg4oCUIHRoZXlcbiAgICAvLyBvbmx5IHN1cHBsaWVkIHRoZSBwb2ludGVyIGZpZWxkIG5hbWUuIFRoZSB0eXBlIGlzIGVtYmVkZGVkIGluIGEgZG90dGVkIFwiPFR5cGU+LjxmaWVsZD5cIlxuICAgIC8vIHRva2VuOyBrZWVwIHRoZSBmaWVsZCBuYW1lICh0aGUgY2FsbGVyIHdyb3RlIGl0KSBhbmQgcmVkYWN0IG9ubHkgdGhlIHR5cGUgaGFsZi4gTm90ZSB0aGVcbiAgICAvLyBkaXJlY3RpdmUgZm9ybSAoJy4uLiBvbiBkaXJlY3RpdmUgXCJAbmFtZVwiLicpIGNhcnJpZXMgbm8gdHlwZSBhbmQgaXMgbGVmdCBhbG9uZS5cbiAgICAucmVwbGFjZShcbiAgICAgIC9Vbmtub3duIGFyZ3VtZW50IChcIlteXCJdKlwiKSBvbiBmaWVsZCBcIihbXlwiLl0rKVxcLihbXlwiLl0rKVwiXFwuL2csXG4gICAgICAobWF0Y2gsIGFyZ05hbWUsIHR5cGVOYW1lLCBmaWVsZE5hbWUpID0+XG4gICAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSlcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBgVW5rbm93biBhcmd1bWVudCAke2FyZ05hbWV9IG9uIGZpZWxkIFwiJHtmaWVsZE5hbWV9XCIuYFxuICAgIClcbiAgICAvLyBHcmFwaFFMRW51bVR5cGUucGFyc2VWYWx1ZS9wYXJzZUxpdGVyYWw6IGEgUmVsYXRpb24gZmllbGQncyBgb3JkZXJgIGFyZ3VtZW50IGlzIHR5cGVkXG4gICAgLy8gYFs8VGFyZ2V0Pk9yZGVyIV1gIChgcGFyc2VDbGFzc1R5cGVzLmpzYCksIHNvIGFuIGludmFsaWQgZW51bSBsaXRlcmFsIG5hbWVzIHRoZSB0YXJnZXRcbiAgICAvLyBjbGFzcy4gVGhlc2UgbWVzc2FnZXMgY29tZSBmcm9tIHRoZSBlbnVtIHR5cGUgaXRzZWxmIHJhdGhlciB0aGFuIGZyb20gYSB2YWxpZGF0aW9uIHJ1bGUsXG4gICAgLy8gd2hpY2ggaXMgd2h5IHRoZSBWYWx1ZXNPZkNvcnJlY3RUeXBlUnVsZSB0ZW1wbGF0ZXMgYWJvdmUgZG8gbm90IHJlYWNoIHRoZW0uIFRoZSBvZmZlbmRpbmdcbiAgICAvLyB2YWx1ZSBpcyBjYWxsZXItc3VwcGxpZWQgYW5kIGlzIHByZXNlcnZlZDsgb25seSB0aGUgZW51bSB0eXBlIG5hbWUgaXMgcmVkYWN0ZWQuXG4gICAgLnJlcGxhY2UoL1ZhbHVlIChcIlteXCJdKlwiKSBkb2VzIG5vdCBleGlzdCBpbiBcIihbXlwiXSspXCIgZW51bVxcLi9nLCAobWF0Y2gsIHZhbHVlLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6IGBWYWx1ZSAke3ZhbHVlfSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZW51bS5gXG4gICAgKVxuICAgIC8vIFNpYmxpbmcgYnJhbmNoZXMgb2YgdGhlIHNhbWUgZW51bSB0eXBlLCByZWFjaGVkIHdoZW4gdGhlIGxpdGVyYWwgaXMgbm90IGFuIGVudW0gdmFsdWUgYXRcbiAgICAvLyBhbGwgKCdjYW5ub3QgcmVwcmVzZW50IG5vbi1lbnVtIHZhbHVlOiAuLi4nLCAnY2Fubm90IHJlcHJlc2VudCBub24tc3RyaW5nIHZhbHVlOiAuLi4nLFxuICAgIC8vICdjYW5ub3QgcmVwcmVzZW50IHZhbHVlOiAuLi4nKS4gU2FtZSBkaXNjbG9zdXJlLCBzYW1lIHJlZGFjdGlvbi5cbiAgICAucmVwbGFjZSgvRW51bSBcIihbXlwiXSspXCIgY2Fubm90IHJlcHJlc2VudCAvZywgKG1hdGNoLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6ICdFbnVtIGNhbm5vdCByZXByZXNlbnQgJ1xuICAgICk7XG59O1xuXG5jb25zdCBzdHJpcFNjaGVtYUlkZW50aWZpZXJzID0gKG1lc3NhZ2UsIG9wZXJhdGlvblRleHQpID0+XG4gIHN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzKFxuICAgIHN0cmlwU2NoZW1hQ29lcmNpb25JZGVudGlmaWVycyhzdHJpcFNjaGVtYVN1Z2dlc3Rpb24obWVzc2FnZSkpLFxuICAgIG9wZXJhdGlvblRleHRcbiAgKTtcblxuY29uc3QgU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG4gIHJlcXVlc3REaWRTdGFydDogYXN5bmMgKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuICAgIHdpbGxTZW5kUmVzcG9uc2U6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTWFzdGVyT3JNYWludGVuYW5jZSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01hc3RlciB8fFxuICAgICAgICByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYWludGVuYW5jZTtcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keSA9IHJlcXVlc3RDb250ZXh0LnJlc3BvbnNlPy5ib2R5O1xuICAgICAgY29uc3QgZXJyb3JzID1cbiAgICAgICAgYm9keT8ua2luZCA9PT0gJ3NpbmdsZSdcbiAgICAgICAgICA/IGJvZHkuc2luZ2xlUmVzdWx0LmVycm9yc1xuICAgICAgICAgIDogYm9keT8ua2luZCA9PT0gJ2luY3JlbWVudGFsJ1xuICAgICAgICAgICAgPyBib2R5LmluaXRpYWxSZXN1bHQuZXJyb3JzXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFNhbWUgYXMgaW4gYEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luYDogYHJlcXVlc3RDb250ZXh0LnNvdXJjZWAgY2FycmllcyB0aGVcbiAgICAgIC8vIG9wZXJhdGlvbiB0ZXh0IGZvciBldmVyeSByZXF1ZXN0LCBpbmNsdWRpbmcgYW4gYXV0b21hdGljIHBlcnNpc3RlZCBxdWVyeSBjYWNoZSBoaXRcbiAgICAgIC8vIHdoZXJlIGByZXF1ZXN0LnF1ZXJ5YCBpcyB1bmRlZmluZWQuIFJlYWRpbmcgYHJlcXVlc3QucXVlcnlgIGFsb25lIHdvdWxkIG1ha2UgdGhlXG4gICAgICAvLyBhbGxvd2xpc3QgYmVsb3cgZW1wdHkgb24gdGhvc2UgcmVxdWVzdHMgYW5kIHJlZGFjdCB0eXBlIG5hbWVzIHRoZSBjYWxsZXIgd3JvdGVcbiAgICAgIC8vIHRoZW1zZWx2ZXMuXG4gICAgICBjb25zdCBvcGVyYXRpb25UZXh0ID0gcmVxdWVzdENvbnRleHQuc291cmNlID8/IHJlcXVlc3RDb250ZXh0LnJlcXVlc3Q/LnF1ZXJ5O1xuICAgICAgZXJyb3JzPy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3IubWVzc2FnZSA9IHN0cmlwU2NoZW1hSWRlbnRpZmllcnMoZXJyb3IubWVzc2FnZSwgb3BlcmF0aW9uVGV4dCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yLmV4dGVuc2lvbnM/LnN0YWNrdHJhY2UpKSB7XG4gICAgICAgICAgZXJyb3IuZXh0ZW5zaW9ucy5zdGFja3RyYWNlID0gZXJyb3IuZXh0ZW5zaW9ucy5zdGFja3RyYWNlLm1hcChtZXNzYWdlID0+XG4gICAgICAgICAgICBzdHJpcFNjaGVtYUlkZW50aWZpZXJzKG1lc3NhZ2UsIG9wZXJhdGlvblRleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfSksXG59KTtcblxuY2xhc3MgUGFyc2VHcmFwaFFMU2VydmVyIHtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcblxuICBjb25zdHJ1Y3RvcihwYXJzZVNlcnZlciwgY29uZmlnKSB7XG4gICAgdGhpcy5wYXJzZVNlcnZlciA9IHBhcnNlU2VydmVyIHx8IHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgcGFyc2VTZXJ2ZXIgaW5zdGFuY2UhJyk7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5ncmFwaFFMUGF0aCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuZ3JhcGhRTFBhdGghJyk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLnBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG4gICAgdGhpcy5sb2cgPVxuICAgICAgKHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnICYmIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEgPSBuZXcgUGFyc2VHcmFwaFFMU2NoZW1hKHtcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlcixcbiAgICAgIGRhdGFiYXNlQ29udHJvbGxlcjogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuZGF0YWJhc2VDb250cm9sbGVyLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGdyYXBoUUxDdXN0b21UeXBlRGVmczogdGhpcy5jb25maWcuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLFxuICAgICAgYXBwSWQ6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX2dldEdyYXBoUUxPcHRpb25zKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWE6IGF3YWl0IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmxvYWQoKSxcbiAgICAgICAgY29udGV4dDogYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgICBhdXRoOiByZXEuYXV0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihlLnN0YWNrIHx8ICh0eXBlb2YgZS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiBlLnRvU3RyaW5nKCkpIHx8IGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZ2V0U2VydmVyKCkge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmdyYXBoUUxTY2hlbWE7XG4gICAgY29uc3QgbmV3U2NoZW1hUmVmID0gYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpO1xuICAgIGlmIChzY2hlbWFSZWYgPT09IG5ld1NjaGVtYVJlZiAmJiB0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIC8vIEl0IG1lYW5zIGEgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiAgICBpZiAodGhpcy5fc2NoZW1hUmVmTXV0ZXggPT09IG5ld1NjaGVtYVJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHRoZSBzY2hlbWEgcmVmIG11dGV4IHRvIGF2b2lkIHBhcmFsbGVsIF9nZXRTZXJ2ZXIgY2FsbHNcbiAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG5ld1NjaGVtYVJlZjtcbiAgICBjb25zdCBjcmVhdGVTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgY29udGV4dCB9ID0gYXdhaXQgdGhpcy5fZ2V0R3JhcGhRTE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYXBvbGxvID0gbmV3IEFwb2xsb1NlcnZlcih7XG4gICAgICAgICAgY3NyZlByZXZlbnRpb246IHtcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3JvdXRlci9jb25maWd1cmF0aW9uL2NzcmYvXG4gICAgICAgICAgICAvLyBuZWVkZWQgc2luY2Ugd2UgdXNlIGdyYXBocWwgdXBsb2FkXG4gICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogWydYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBXZSBuZWVkIGFsd2F5cyB0cnVlIGludHJvc3BlY3Rpb24gYmVjYXVzZSBhcG9sbG8gc2VydmVyIGhhdmUgY2hhbmdpbmcgYmVoYXZpb3IgYmFzZWQgb24gdGhlIE5PREVfRU5WIHZhcmlhYmxlXG4gICAgICAgICAgLy8gd2UgZGVsZWdhdGUgdGhlIGludHJvc3BlY3Rpb24gY29udHJvbCB0byB0aGUgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW5cbiAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIHBsdWdpbnM6IFtBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCgpLCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbih0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbiksIFNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbih0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbiksIGNyZWF0ZUNvbXBsZXhpdHlWYWxpZGF0aW9uUGx1Z2luKCgpID0+IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLnJlcXVlc3RDb21wbGV4aXR5KV0sXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgYXBvbGxvLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiBleHByZXNzTWlkZGxld2FyZShhcG9sbG8sIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmVzZXQgYWxsIG11dGV4ZXMgYW5kIGZvcndhcmQgdGhlIGVycm9yXG4gICAgICAgIHRoaXMuX3NlcnZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRG8gbm90IGF3YWl0IHNvIHBhcmFsbGVsIHJlcXVlc3Qgd2lsbCB3YWl0IHRoZSBzYW1lIHByb21pc2UgcmVmXG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIF90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgdW5pdE1hcCA9IHtcbiAgICAgIGtiOiAxLFxuICAgICAgbWI6IDIsXG4gICAgICBnYjogMyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlcihtYXhVcGxvYWRTaXplLnNsaWNlKDAsIC0yKSkgKlxuICAgICAgTWF0aC5wb3coMTAyNCwgdW5pdE1hcFttYXhVcGxvYWRTaXplLnNsaWNlKC0yKS50b0xvd2VyQ2FzZSgpXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQWxsb3cgZGV2ZWxvcGVycyB0byBjdXN0b21pemUgZWFjaCByZXF1ZXN0IHdpdGggaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICovXG4gIGFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKGFwaSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RDb250ZXh0TWlkZGxld2FyZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGFwaS51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBhbGxvd0Nyb3NzRG9tYWluKHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIHRoaXMuYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBwLCB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VFcnJvcnMpO1xuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxVcGxvYWRFeHByZXNzKHtcbiAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1heFVwbG9hZFNpemUgfHwgJzIwbWInXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgdGhpcy5fZ2V0U2VydmVyKCk7XG4gICAgICByZXR1cm4gc2VydmVyKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UGxheWdyb3VuZChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLmdldCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5wbGF5Z3JvdW5kUGF0aCB0byBhcHBseVBsYXlncm91bmQhJyksXG4gICAgICAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgIGA8ZGl2IGlkPVwic2FuZGJveFwiIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjBcIj48L2Rpdj5cbiAgICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vZW1iZWRkYWJsZS1zYW5kYm94LmNkbi5hcG9sbG9ncmFwaHFsLmNvbS9fbGF0ZXN0L2VtYmVkZGFibGUtc2FuZGJveC51bWQucHJvZHVjdGlvbi5taW4uanNcIj48L3NjcmlwdD5cbiAgICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICBuZXcgd2luZG93LkVtYmVkZGVkU2FuZGJveCh7XG4gICAgICAgICAgICAgdGFyZ2V0OiBcIiNzYW5kYm94XCIsXG4gICAgICAgICAgICAgZW5kcG9pbnRJc0VkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICBpbml0aWFsRW5kcG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgpfSxcbiAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0OiAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkKX0sXG4gICAgICAgICAgICAgICAgICAgICdYLVBhcnNlLU1hc3Rlci1LZXknOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1hc3RlcktleSl9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICB9KTtcbiAgICAgICAgICAgLy8gYWR2YW5jZWQgb3B0aW9uczogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9zdHVkaW8vZXhwbG9yZXIvc2FuZGJveCNlbWJlZGRpbmctc2FuZGJveFxuICAgICAgICAgIDwvc2NyaXB0PmBcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZyk6IFByb21pc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEscUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.10.1-alpha.13",
3
+ "version": "9.10.1-alpha.14",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {