@dollhousemcp/mcp-server 2.0.26 → 2.0.27-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,6 +54,19 @@ function extractReason(result) {
54
54
  }
55
55
  return extractString(result, ['reason', 'message'], '');
56
56
  }
57
+ function buildPermissionRateLimitLogContext(toolName, platform, sessionId, input) {
58
+ const inputFields = input
59
+ ? Object.keys(input)
60
+ .sort((left, right) => left.localeCompare(right))
61
+ .slice(0, 12)
62
+ : [];
63
+ return {
64
+ ...(toolName ? { tool_name: toolName } : {}),
65
+ platform,
66
+ ...(sessionId ? { session_id: sessionId } : {}),
67
+ input_fields: inputFields,
68
+ };
69
+ }
57
70
  function shouldNormalizeClaudeHook(platform) {
58
71
  return platform !== undefined && CLAUDE_COMPATIBLE_HOOK_PLATFORMS.has(platform);
59
72
  }
@@ -237,14 +250,15 @@ export function registerPermissionRoutes(router, handler, options = {}) {
237
250
  await selfHealLatestPermissionPortFile(req.socket.localPort);
238
251
  const body = req.body;
239
252
  const platform = typeof body.platform === 'string' ? body.platform.normalize('NFC') : 'claude_code';
253
+ const tool_name = typeof body.tool_name === 'string' ? body.tool_name.normalize('NFC') : undefined;
254
+ const session_id = typeof body.session_id === 'string' ? body.session_id.normalize('NFC') : undefined;
255
+ const input = body.input;
240
256
  if (!permissionLimiter.tryAcquire()) {
257
+ logger.warn('[WebUI/Gateway] evaluate_permission rate limit exceeded; failing open', buildPermissionRateLimitLogContext(tool_name, platform, session_id, input));
241
258
  res.json(formatPermissionResponse('allow', platform, {})); // fail open on rate limit
242
259
  return;
243
260
  }
244
261
  // Unicode normalization (NFC) on string inputs to prevent homograph attacks
245
- const tool_name = typeof body.tool_name === 'string' ? body.tool_name.normalize('NFC') : undefined;
246
- const session_id = typeof body.session_id === 'string' ? body.session_id.normalize('NFC') : undefined;
247
- const input = body.input;
248
262
  if (!tool_name) {
249
263
  res.json(formatPermissionResponse('allow', platform, input || {})); // fail open on bad input
250
264
  return;
@@ -425,4 +439,4 @@ function normalizeAuthorityMode(value) {
425
439
  function asStringArray(value) {
426
440
  return Array.isArray(value) ? value.filter((entry) => typeof entry === 'string') : [];
427
441
  }
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvblJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93ZWIvcm91dGVzL3Blcm1pc3Npb25Sb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sT0FBbUIsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUdMLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLDBCQUEwQixHQUMzQixNQUFNLG9DQUFvQyxDQUFDO0FBK0I1QyxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxNQUFNLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQWFqQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDNUUsTUFBTSxpQ0FBaUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUc1RSwwRUFBMEU7QUFDMUUsU0FBUyxhQUFhLENBQUMsR0FBNEIsRUFBRSxJQUFjLEVBQUUsUUFBZ0I7SUFDbkYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixN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LEtBQWdDO1FBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFjO0lBQzVDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxLQUFnQyxDQUFDO1FBQ3ZHLENBQUMsQ0FBQyxLQUFnQztRQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN6RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJtaXNzaW9uIGV2YWx1YXRpb24gSFRUUCByb3V0ZXMgYW5kIGRlY2lzaW9uIHRyYWNraW5nLlxuICpcbiAqIFByb3ZpZGVzOlxuICogLSBQT1NUIC9ldmFsdWF0ZV9wZXJtaXNzaW9uIOKAlCBldmFsdWF0ZXMgdG9vbCBwZXJtaXNzaW9ucyB2aWEgTUNQLUFRTFxuICogLSBHRVQgL3Blcm1pc3Npb25zL3N0YXR1cyDigJQgcmV0dXJucyBjdXJyZW50IHBvbGljaWVzIGFuZCByZWNlbnQgZGVjaXNpb25zXG4gKiAtIERlY2lzaW9uIHRyYWNraW5nIHJpbmcgYnVmZmVyIGZvciB0aGUgbGl2ZSBkYXNoYm9hcmQgZmVlZFxuICovXG5cbmltcG9ydCBleHByZXNzLCB7IFJvdXRlciB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgeyBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL2V2YWx1YXRlUGVybWlzc2lvbi5qcyc7XG5pbXBvcnQgeyBlbnN1cmVMYXRlc3RQb3J0RmlsZSB9IGZyb20gJy4uL3BvcnREaXNjb3ZlcnkuanMnO1xuaW1wb3J0IHsgZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXNBc3luYyB9IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25Ib29rcy5qcyc7XG5cbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uLy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFBlcm1pc3Npb25BdXRob3JpdHlIb3N0LFxuICB0eXBlIFBlcm1pc3Npb25BdXRob3JpdHlNb2RlLFxuICBQRVJNSVNTSU9OX0FVVEhPUklUWV9IT1NUUyxcbiAgUEVSTUlTU0lPTl9BVVRIT1JJVFlfTU9ERVMsXG4gIHJlYWRQZXJtaXNzaW9uQXV0aG9yaXR5U3RhdGUsXG4gIHNldFBlcm1pc3Npb25BdXRob3JpdHlNb2RlLFxufSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uQXV0aG9yaXR5LmpzJztcblxuLy8g4pSA4pSAIFBlcm1pc3Npb24gRGVjaXNpb24gVHJhY2tpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBSaW5nIGJ1ZmZlciBvZiByZWNlbnQgcGVybWlzc2lvbiBkZWNpc2lvbnMgZm9yIHRoZSBsaXZlIGRhc2hib2FyZCBmZWVkLlxuXG5pbnRlcmZhY2UgUGVybWlzc2lvbkRlY2lzaW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHNlc3Npb25faWQ/OiBzdHJpbmc7XG4gIHRvb2xfbmFtZTogc3RyaW5nO1xuICBjb21tYW5kPzogc3RyaW5nO1xuICBkZWNpc2lvbjogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHBsYXRmb3JtPzogc3RyaW5nO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIHRhcmdldExhYmVsPzogc3RyaW5nO1xuICBkZXRhaWxzPzogUGVybWlzc2lvbkRlY2lzaW9uRGV0YWlsW107XG59XG5cbmludGVyZmFjZSBQZXJtaXNzaW9uRGVjaXNpb25EZXRhaWwge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBtb25vc3BhY2U/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgS25vd25Qb2xpY3lTZXNzaW9uIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHNvdXJjZTogJ3BvbGljeSc7XG59XG5cbmNvbnN0IFBFUk1JU1NJT05fUk9VVEVfUkFURV9MSU1JVF9SRVFVRVNUUyA9IDEyMDtcbmNvbnN0IFBFUk1JU1NJT05fUk9VVEVfUkFURV9MSU1JVF9XSU5ET1dfTVMgPSA2MF8wMDA7XG5jb25zdCBERUNJU0lPTl9CVUZGRVJfU0laRSA9IDIwMDtcblxuaW50ZXJmYWNlIFBlcm1pc3Npb25EZWNpc2lvblRyYWNrZXIge1xuICB0cmFja0RlY2lzaW9uKFxuICAgIHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcGxhdGZvcm06IHN0cmluZyxcbiAgKTogdm9pZDtcbiAgZ2V0UmVjZW50RGVjaXNpb25zKCk6IFBlcm1pc3Npb25EZWNpc2lvbltdO1xufVxuXG5jb25zdCBDTEFVREVfQ09NUEFUSUJMRV9IT09LX1BMQVRGT1JNUyA9IG5ldyBTZXQoWydjbGF1ZGVfY29kZScsICd2c2NvZGUnXSk7XG5jb25zdCBOT1JNQUxJWkFCTEVfUEVSTUlTU0lPTl9ERUNJU0lPTlMgPSBuZXcgU2V0KFsnYWxsb3cnLCAnZGVueScsICdhc2snXSk7XG50eXBlIE5vcm1hbGl6YWJsZVBlcm1pc3Npb25EZWNpc2lvbiA9ICdhbGxvdycgfCAnZGVueScgfCAnYXNrJztcblxuLyoqIEV4dHJhY3QgYSBzdHJpbmcgZmllbGQgZnJvbSBhIHJlY29yZCwgdHJ5aW5nIG11bHRpcGxlIGtleXMgaW4gb3JkZXIgKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdHJpbmcob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5czogc3RyaW5nW10sIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsID0gb2JqPy5ba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gIH1cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVjaXNpb24ocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGNvbnN0IG5lc3RlZCA9IHJlc3VsdC5ob29rU3BlY2lmaWNPdXRwdXQ7XG4gIGlmIChuZXN0ZWQgJiYgdHlwZW9mIG5lc3RlZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobmVzdGVkKSkge1xuICAgIGNvbnN0IG5lc3RlZERlY2lzaW9uID0gKG5lc3RlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikucGVybWlzc2lvbkRlY2lzaW9uO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkRGVjaXNpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gbmVzdGVkRGVjaXNpb247XG4gIH1cblxuICBpZiAodHlwZW9mIHJlc3VsdC5wZXJtaXNzaW9uID09PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdC5wZXJtaXNzaW9uO1xuICBpZiAodHlwZW9mIHJlc3VsdC5kZWNpc2lvbiA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQuZGVjaXNpb247XG4gIGlmICh0eXBlb2YgcmVzdWx0LmJlaGF2aW9yID09PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdC5iZWhhdmlvcjtcbiAgaWYgKHR5cGVvZiByZXN1bHQuYWxsb3dlZCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmVzdWx0LmFsbG93ZWQgPyAnYWxsb3cnIDogJ2RlbnknO1xuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UmVhc29uKHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBjb25zdCBuZXN0ZWQgPSByZXN1bHQuaG9va1NwZWNpZmljT3V0cHV0O1xuICBpZiAobmVzdGVkICYmIHR5cGVvZiBuZXN0ZWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5lc3RlZCkpIHtcbiAgICBjb25zdCBuZXN0ZWRSZWFzb24gPSAobmVzdGVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5wZXJtaXNzaW9uRGVjaXNpb25SZWFzb247XG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRSZWFzb24gPT09ICdzdHJpbmcnKSByZXR1cm4gbmVzdGVkUmVhc29uO1xuICB9XG5cbiAgcmV0dXJuIGV4dHJhY3RTdHJpbmcocmVzdWx0LCBbJ3JlYXNvbicsICdtZXNzYWdlJ10sICcnKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkTm9ybWFsaXplQ2xhdWRlSG9vayhwbGF0Zm9ybTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBwbGF0Zm9ybSAhPT0gdW5kZWZpbmVkICYmIENMQVVERV9DT01QQVRJQkxFX0hPT0tfUExBVEZPUk1TLmhhcyhwbGF0Zm9ybSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBlcm1pc3Npb25SZXNwb25zZUZvclBsYXRmb3JtKFxuICBwbGF0Zm9ybTogc3RyaW5nLFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICghc2hvdWxkTm9ybWFsaXplQ2xhdWRlSG9vayhwbGF0Zm9ybSkpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgbmVzdGVkID0gcmVzdWx0Lmhvb2tTcGVjaWZpY091dHB1dDtcbiAgaWYgKG5lc3RlZCAmJiB0eXBlb2YgbmVzdGVkID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShuZXN0ZWQpKSB7XG4gICAgY29uc3QgbmVzdGVkRGVjaXNpb24gPSAobmVzdGVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5wZXJtaXNzaW9uRGVjaXNpb247XG4gICAgaWYgKHR5cGVvZiBuZXN0ZWREZWNpc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVjaXNpb24gPSBleHRyYWN0RGVjaXNpb24ocmVzdWx0KTtcbiAgaWYgKE5PUk1BTElaQUJMRV9QRVJNSVNTSU9OX0RFQ0lTSU9OUy5oYXMoZGVjaXNpb24pKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZShcbiAgICAgIGRlY2lzaW9uIGFzIE5vcm1hbGl6YWJsZVBlcm1pc3Npb25EZWNpc2lvbixcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgaW5wdXQsXG4gICAgICBleHRyYWN0UmVhc29uKHJlc3VsdCksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbn1cblxuZnVuY3Rpb24gYnVpbGREZWNpc2lvbkRldGFpbHMoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcGxhdGZvcm06IHN0cmluZyxcbik6IHsgdGFyZ2V0Pzogc3RyaW5nOyB0YXJnZXRMYWJlbD86IHN0cmluZzsgZGV0YWlsczogUGVybWlzc2lvbkRlY2lzaW9uRGV0YWlsW10gfSB7XG4gIGNvbnN0IGRldGFpbHM6IFBlcm1pc3Npb25EZWNpc2lvbkRldGFpbFtdID0gW107XG5cbiAgaWYgKHBsYXRmb3JtKSB7XG4gICAgZGV0YWlscy5wdXNoKHsgbGFiZWw6ICdQbGF0Zm9ybScsIHZhbHVlOiBwbGF0Zm9ybSwgbW9ub3NwYWNlOiB0cnVlIH0pO1xuICB9XG5cbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIGlucHV0LmNvbW1hbmQgPT09ICdzdHJpbmcnICYmIGlucHV0LmNvbW1hbmQgIT09ICcnKSB7XG4gICAgZGV0YWlscy5wdXNoKHsgbGFiZWw6ICdDb21tYW5kJywgdmFsdWU6IGlucHV0LmNvbW1hbmQsIG1vbm9zcGFjZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldERlc2NyaXB0b3JzOiBBcnJheTx7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBtb25vc3BhY2U/OiBib29sZWFuIH0+ID0gW1xuICAgIHsga2V5OiAnZmlsZV9wYXRoJywgbGFiZWw6ICdGaWxlJywgbW9ub3NwYWNlOiB0cnVlIH0sXG4gICAgeyBrZXk6ICdwYXRoJywgbGFiZWw6ICdQYXRoJywgbW9ub3NwYWNlOiB0cnVlIH0sXG4gICAgeyBrZXk6ICd1cmwnLCBsYWJlbDogJ1VSTCcgfSxcbiAgICB7IGtleTogJ3BhdHRlcm4nLCBsYWJlbDogJ1BhdHRlcm4nLCBtb25vc3BhY2U6IHRydWUgfSxcbiAgICB7IGtleTogJ3F1ZXJ5JywgbGFiZWw6ICdRdWVyeScgfSxcbiAgICB7IGtleTogJ2VsZW1lbnRfbmFtZScsIGxhYmVsOiAnRWxlbWVudCcsIG1vbm9zcGFjZTogdHJ1ZSB9LFxuICAgIHsga2V5OiAncmVxdWVzdF9pZCcsIGxhYmVsOiAnUmVxdWVzdCcsIG1vbm9zcGFjZTogdHJ1ZSB9LFxuICBdO1xuXG4gIGxldCB0YXJnZXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHRhcmdldExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIHRhcmdldERlc2NyaXB0b3JzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dFtkZXNjcmlwdG9yLmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB0YXJnZXQgPSB2YWx1ZTtcbiAgICB0YXJnZXRMYWJlbCA9IGRlc2NyaXB0b3IubGFiZWw7XG4gICAgZGV0YWlscy5wdXNoKHsgbGFiZWw6IGRlc2NyaXB0b3IubGFiZWwsIHZhbHVlLCBtb25vc3BhY2U6IGRlc2NyaXB0b3IubW9ub3NwYWNlIH0pO1xuICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlZFBhdHRlcm4gPSBleHRyYWN0U3RyaW5nKHJlc3VsdCwgWydtYXRjaGVkX3BhdHRlcm4nLCAnbWF0Y2hlZFBhdHRlcm4nXSwgJycpO1xuICBpZiAobWF0Y2hlZFBhdHRlcm4gIT09ICcnKSB7XG4gICAgZGV0YWlscy5wdXNoKHsgbGFiZWw6ICdNYXRjaGVkIFBhdHRlcm4nLCB2YWx1ZTogbWF0Y2hlZFBhdHRlcm4sIG1vbm9zcGFjZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHBvbGljeVNvdXJjZSA9IGV4dHJhY3RTdHJpbmcocmVzdWx0LCBbJ3BvbGljeV9zb3VyY2UnLCAncG9saWN5U291cmNlJ10sICcnKTtcbiAgaWYgKHBvbGljeVNvdXJjZSAhPT0gJycpIHtcbiAgICBkZXRhaWxzLnB1c2goeyBsYWJlbDogJ1BvbGljeSBTb3VyY2UnLCB2YWx1ZTogcG9saWN5U291cmNlLCBtb25vc3BhY2U6IHRydWUgfSk7XG4gIH1cblxuICByZXR1cm4geyB0YXJnZXQsIHRhcmdldExhYmVsLCBkZXRhaWxzIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBlcm1pc3Npb25EZWNpc2lvblRyYWNrZXIoYnVmZmVyU2l6ZSA9IERFQ0lTSU9OX0JVRkZFUl9TSVpFKTogUGVybWlzc2lvbkRlY2lzaW9uVHJhY2tlciB7XG4gIGNvbnN0IHJlY2VudERlY2lzaW9uczogUGVybWlzc2lvbkRlY2lzaW9uW10gPSBbXTtcbiAgbGV0IGRlY2lzaW9uQ291bnRlciA9IDA7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFja0RlY2lzaW9uKFxuICAgICAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICB0b29sTmFtZTogc3RyaW5nLFxuICAgICAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgKTogdm9pZCB7XG4gICAgICBjb25zdCBkZXRhaWxTdGF0ZSA9IGJ1aWxkRGVjaXNpb25EZXRhaWxzKHRvb2xOYW1lLCBpbnB1dCwgcmVzdWx0LCBwbGF0Zm9ybSk7XG4gICAgICBjb25zdCBlbnRyeTogUGVybWlzc2lvbkRlY2lzaW9uID0ge1xuICAgICAgICBpZDogYGQtJHsrK2RlY2lzaW9uQ291bnRlcn1gLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgLi4uKHNlc3Npb25JZCA/IHsgc2Vzc2lvbl9pZDogc2Vzc2lvbklkIH0gOiB7fSksXG4gICAgICAgIHRvb2xfbmFtZTogdG9vbE5hbWUsXG4gICAgICAgIGNvbW1hbmQ6IHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIGlucHV0Py5jb21tYW5kID09PSAnc3RyaW5nJyA/IGlucHV0LmNvbW1hbmQgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlY2lzaW9uOiBleHRyYWN0RGVjaXNpb24ocmVzdWx0KSxcbiAgICAgICAgcmVhc29uOiBleHRyYWN0UmVhc29uKHJlc3VsdCksXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICB0YXJnZXQ6IGRldGFpbFN0YXRlLnRhcmdldCxcbiAgICAgICAgdGFyZ2V0TGFiZWw6IGRldGFpbFN0YXRlLnRhcmdldExhYmVsLFxuICAgICAgICBkZXRhaWxzOiBkZXRhaWxTdGF0ZS5kZXRhaWxzLFxuICAgICAgfTtcbiAgICAgIHJlY2VudERlY2lzaW9ucy51bnNoaWZ0KGVudHJ5KTtcbiAgICAgIGlmIChyZWNlbnREZWNpc2lvbnMubGVuZ3RoID4gYnVmZmVyU2l6ZSkge1xuICAgICAgICByZWNlbnREZWNpc2lvbnMubGVuZ3RoID0gYnVmZmVyU2l6ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFJlY2VudERlY2lzaW9ucygpOiBQZXJtaXNzaW9uRGVjaXNpb25bXSB7XG4gICAgICByZXR1cm4gcmVjZW50RGVjaXNpb25zO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlUnVsZUFycmF5cyguLi5zb3VyY2VzOiB1bmtub3duW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG1lcmdlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZSkpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc291cmNlKSB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiBlbnRyeSAhPT0gJycpIHtcbiAgICAgICAgbWVyZ2VkLmFkZChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKG1lcmdlZCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBvbGljeUVsZW1lbnRzKGVsZW1lbnRzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICByZXR1cm4gZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiAoe1xuICAgIC4uLmVsZW1lbnQsXG4gICAgZWxlbWVudF9uYW1lOiByZXNvbHZlRWxlbWVudE5hbWUoZWxlbWVudCksXG4gICAgYWxsb3dSdWxlczogbWVyZ2VSdWxlQXJyYXlzKGVsZW1lbnQuYWxsb3dQYXR0ZXJucywgZWxlbWVudC5hbGxvd09wZXJhdGlvbnMpLFxuICAgIGNvbmZpcm1SdWxlczogbWVyZ2VSdWxlQXJyYXlzKGVsZW1lbnQuY29uZmlybVBhdHRlcm5zLCBlbGVtZW50LmNvbmZpcm1PcGVyYXRpb25zKSxcbiAgICBkZW55UnVsZXM6IG1lcmdlUnVsZUFycmF5cyhlbGVtZW50LmRlbnlQYXR0ZXJucywgZWxlbWVudC5kZW55T3BlcmF0aW9ucyksXG4gICAgaW52YWxpZEdhdGVrZWVwZXJQb2xpY3k6ICEhZWxlbWVudC5pbnZhbGlkR2F0ZWtlZXBlclBvbGljeSxcbiAgICBpbnZhbGlkR2F0ZWtlZXBlck1lc3NhZ2U6IHR5cGVvZiBlbGVtZW50LmludmFsaWRHYXRla2VlcGVyTWVzc2FnZSA9PT0gJ3N0cmluZycgPyBlbGVtZW50LmludmFsaWRHYXRla2VlcGVyTWVzc2FnZSA6IHVuZGVmaW5lZCxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRWxlbWVudE5hbWUoZWxlbWVudDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGVsZW1lbnQuZWxlbWVudF9uYW1lID09PSAnc3RyaW5nJykgcmV0dXJuIGVsZW1lbnQuZWxlbWVudF9uYW1lO1xuICBpZiAodHlwZW9mIGVsZW1lbnQubmFtZSA9PT0gJ3N0cmluZycpIHJldHVybiBlbGVtZW50Lm5hbWU7XG4gIHJldHVybiAnJztcbn1cblxuLyoqIEhlbHBlciB0byBleHRyYWN0IHNpbmdsZSByZXN1bHQgZnJvbSBNQ1AtQVFMIGJhdGNoIHJlc3BvbnNlICovXG5mdW5jdGlvbiBhc1NpbmdsZVJlc3VsdChyZXN1bHRzOiB1bmtub3duKTogeyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSByZXR1cm4gcmVzdWx0c1swXSB8fCB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VtcHR5IHJlc3VsdCcgfTtcbiAgcmV0dXJuIHJlc3VsdHMgYXMgeyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogdW5rbm93bjsgZXJyb3I/OiBzdHJpbmcgfTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEtub3duUG9saWN5U2Vzc2lvbnMoZWxlbWVudHM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IEtub3duUG9saWN5U2Vzc2lvbltdIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBrbm93blNlc3Npb25zOiBLbm93blBvbGljeVNlc3Npb25bXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHNlc3Npb25JZHMgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuc2Vzc2lvbklkcykgPyBlbGVtZW50LnNlc3Npb25JZHMgOiBbXTtcbiAgICBmb3IgKGNvbnN0IHNlc3Npb25JZCBvZiBzZXNzaW9uSWRzKSB7XG4gICAgICBpZiAodHlwZW9mIHNlc3Npb25JZCAhPT0gJ3N0cmluZycgfHwgc2Vzc2lvbklkID09PSAnJyB8fCBzZWVuLmhhcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzZWVuLmFkZChzZXNzaW9uSWQpO1xuICAgICAga25vd25TZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbklkLFxuICAgICAgICBzb3VyY2U6ICdwb2xpY3knLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGtub3duU2Vzc2lvbnMuc29ydCgoYSwgYikgPT4gYS5zZXNzaW9uSWQubG9jYWxlQ29tcGFyZShiLnNlc3Npb25JZCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxmSGVhbExhdGVzdFBlcm1pc3Npb25Qb3J0RmlsZShwb3J0OiBudW1iZXIgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHR5cGVvZiBwb3J0ICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihwb3J0KSB8fCBwb3J0IDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGVuc3VyZUxhdGVzdFBvcnRGaWxlKHBvcnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tXZWJVSS9HYXRld2F5XSBDb3VsZCBub3QgcmVmcmVzaCBwZXJtaXNzaW9uLXNlcnZlci5wb3J0Jywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIHBvcnQsXG4gICAgfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlZFBlcm1pc3Npb25BdXRob3JpdHlIb3N0cyhcbiAgaG9tZURpcjogc3RyaW5nLFxuICBhdXRob3JpdHlTdGF0ZTogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkUGVybWlzc2lvbkF1dGhvcml0eVN0YXRlPj4sXG4pOiBQcm9taXNlPFBlcm1pc3Npb25BdXRob3JpdHlIb3N0W10+IHtcbiAgY29uc3QgaW5zdGFsbGVkU3RhdHVzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBQRVJNSVNTSU9OX0FVVEhPUklUWV9IT1NUUy5tYXAoYXN5bmMgKGhvc3QpID0+ICh7XG4gICAgICBob3N0LFxuICAgICAgc3RhdHVzOiBhd2FpdCBnZXRQZXJtaXNzaW9uSG9va1N0YXR1c0FzeW5jKGhvbWVEaXIsIGhvc3QpLFxuICAgIH0pKSxcbiAgKTtcblxuICBjb25zdCBpbnN0YWxsZWRIb3N0cyA9IGluc3RhbGxlZFN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmluc3RhbGxlZClcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG5cbiAgY29uc3QgcGVyc2lzdGVkSG9zdHMgPSBPYmplY3Qua2V5cyhhdXRob3JpdHlTdGF0ZS5ob3N0cyB8fCB7fSkuZmlsdGVyKChob3N0KTogaG9zdCBpcyBQZXJtaXNzaW9uQXV0aG9yaXR5SG9zdCA9PlxuICAgIChQRVJNSVNTSU9OX0FVVEhPUklUWV9IT1NUUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoaG9zdCksXG4gICk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChpbnN0YWxsZWRIb3N0cy5jb25jYXQocGVyc2lzdGVkSG9zdHMpKSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgcGVybWlzc2lvbi1yZWxhdGVkIHJvdXRlcyBvbiBhIGdhdGV3YXkgcm91dGVyLlxuICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgTUNQLUFRTCBoYW5kbGVyIGZvciBwb2xpY3kgZXZhbHVhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclBlcm1pc3Npb25Sb3V0ZXNPcHRpb25zIHtcbiAgaG9tZURpcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyUGVybWlzc2lvblJvdXRlcyhcbiAgcm91dGVyOiBSb3V0ZXIsXG4gIGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIsXG4gIG9wdGlvbnM6IFJlZ2lzdGVyUGVybWlzc2lvblJvdXRlc09wdGlvbnMgPSB7fSxcbik6IHZvaWQge1xuICBjb25zdCBhdXRob3JpdHlIb21lRGlyID0gb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKTtcbiAgY29uc3QgZGVjaXNpb25UcmFja2VyID0gY3JlYXRlUGVybWlzc2lvbkRlY2lzaW9uVHJhY2tlcigpO1xuICAvKipcbiAgICogUE9TVCAvYXBpL2V2YWx1YXRlX3Blcm1pc3Npb25cbiAgICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGVuZHBvaW50IGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICAgKiBSb3V0ZXMgdGhyb3VnaCBldmFsdWF0ZV9wZXJtaXNzaW9uIE1DUC1BUUwgUkVBRCBvcGVyYXRpb24uXG4gICAqIEZhaWwtb3BlbjogcmV0dXJucyBhbGxvdyBvbiBhbnkgZXJyb3IgdG8gYXZvaWQgYmxvY2tpbmcgdGhlIHVzZXIuXG4gICAqL1xuICBjb25zdCBwZXJtaXNzaW9uTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoXG4gICAgUEVSTUlTU0lPTl9ST1VURV9SQVRFX0xJTUlUX1JFUVVFU1RTLFxuICAgIFBFUk1JU1NJT05fUk9VVEVfUkFURV9MSU1JVF9XSU5ET1dfTVMsXG4gICk7XG4gIHJvdXRlci5wb3N0KCcvZXZhbHVhdGVfcGVybWlzc2lvbicsIGV4cHJlc3MuanNvbigpLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBhd2FpdCBzZWxmSGVhbExhdGVzdFBlcm1pc3Npb25Qb3J0RmlsZShyZXEuc29ja2V0LmxvY2FsUG9ydCk7XG5cbiAgICBjb25zdCBib2R5ID0gcmVxLmJvZHkgYXMge1xuICAgICAgdG9vbF9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHBsYXRmb3JtPzogc3RyaW5nO1xuICAgICAgc2Vzc2lvbl9pZD86IHN0cmluZztcbiAgICB9O1xuICAgIGNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIGJvZHkucGxhdGZvcm0gPT09ICdzdHJpbmcnID8gYm9keS5wbGF0Zm9ybS5ub3JtYWxpemUoJ05GQycpIDogJ2NsYXVkZV9jb2RlJztcblxuICAgIGlmICghcGVybWlzc2lvbkxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuanNvbihmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIHt9KSk7IC8vIGZhaWwgb3BlbiBvbiByYXRlIGxpbWl0XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIChORkMpIG9uIHN0cmluZyBpbnB1dHMgdG8gcHJldmVudCBob21vZ3JhcGggYXR0YWNrc1xuICAgIGNvbnN0IHRvb2xfbmFtZSA9IHR5cGVvZiBib2R5LnRvb2xfbmFtZSA9PT0gJ3N0cmluZycgPyBib2R5LnRvb2xfbmFtZS5ub3JtYWxpemUoJ05GQycpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlc3Npb25faWQgPSB0eXBlb2YgYm9keS5zZXNzaW9uX2lkID09PSAnc3RyaW5nJyA/IGJvZHkuc2Vzc2lvbl9pZC5ub3JtYWxpemUoJ05GQycpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlucHV0ID0gYm9keS5pbnB1dDtcblxuICAgIGlmICghdG9vbF9uYW1lKSB7XG4gICAgICByZXMuanNvbihmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0IHx8IHt9KSk7IC8vIGZhaWwgb3BlbiBvbiBiYWQgaW5wdXRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydE1zID0gRGF0ZS5ub3coKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3BSZXN1bHQgPSBhc1NpbmdsZVJlc3VsdChhd2FpdCBoYW5kbGVyLmhhbmRsZVJlYWQoe1xuICAgICAgICBvcGVyYXRpb246ICdldmFsdWF0ZV9wZXJtaXNzaW9uJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgdG9vbF9uYW1lLFxuICAgICAgICAgIGlucHV0OiBpbnB1dCB8fCB7fSxcbiAgICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgICAuLi4oc2Vzc2lvbl9pZCA/IHsgc2Vzc2lvbl9pZCB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuICAgICAgY29uc3QgZWxhcHNlZE1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0TXM7XG5cbiAgICAgIGlmICghb3BSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIud2FybihgW1dlYlVJL0dhdGV3YXldIGV2YWx1YXRlX3Blcm1pc3Npb24gZmFpbGVkICgke2VsYXBzZWRNc31tcyk6ICR7b3BSZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgIHJlcy5qc29uKGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwgaW5wdXQgfHwge30pKTsgLy8gZmFpbCBvcGVuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmF3UmVzdWx0ID0gb3BSZXN1bHQuZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IG5vcm1hbGl6ZVBlcm1pc3Npb25SZXNwb25zZUZvclBsYXRmb3JtKFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgaW5wdXQgfHwge30sXG4gICAgICAgIHJhd1Jlc3VsdCxcbiAgICAgICk7XG4gICAgICBjb25zdCB0cmFja2VkUmVzdWx0ID0geyAuLi5yYXdSZXN1bHQsIC4uLnJlc3BvbnNlRGF0YSB9O1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBleHRyYWN0RGVjaXNpb24ocmVzcG9uc2VEYXRhKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1dlYlVJL0dhdGV3YXldIGV2YWx1YXRlX3Blcm1pc3Npb246ICR7dG9vbF9uYW1lfSDihpIgJHtkZWNpc2lvbn0gKCR7ZWxhcHNlZE1zfW1zKWApO1xuXG4gICAgICAvLyBUcmFjayBkZWNpc2lvbiBmb3IgbGl2ZSBkYXNoYm9hcmQgZmVlZFxuICAgICAgZGVjaXNpb25UcmFja2VyLnRyYWNrRGVjaXNpb24oc2Vzc2lvbl9pZCwgdG9vbF9uYW1lLCBpbnB1dCB8fCB7fSwgdHJhY2tlZFJlc3VsdCwgcGxhdGZvcm0pO1xuXG4gICAgICByZXMuanNvbihyZXNwb25zZURhdGEpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZWxhcHNlZE1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0TXM7XG4gICAgICBsb2dnZXIuZXJyb3IoYFtXZWJVSS9HYXRld2F5XSBldmFsdWF0ZV9wZXJtaXNzaW9uIGVycm9yICgke2VsYXBzZWRNc31tcyk6YCwgZXJyKTtcbiAgICAgIHJlcy5qc29uKGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwgaW5wdXQgfHwge30pKTsgLy8gZmFpbCBvcGVuXG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogR0VUIC9hcGkvcGVybWlzc2lvbnMvc3RhdHVzXG4gICAqIFJldHVybnMgY3VycmVudCBwZXJtaXNzaW9uIHBvbGljaWVzIGFuZCByZWNlbnQgZGVjaXNpb25zXG4gICAqIGZvciB0aGUgbGl2ZSBwZXJtaXNzaW9ucyBkYXNoYm9hcmQuXG4gICAqL1xuICByb3V0ZXIuZ2V0KCcvcGVybWlzc2lvbnMvc3RhdHVzJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbGZIZWFsTGF0ZXN0UGVybWlzc2lvblBvcnRGaWxlKHJlcS5zb2NrZXQubG9jYWxQb3J0KTtcblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdHlwZW9mIHJlcS5xdWVyeVsnc2Vzc2lvbklkJ10gPT09ICdzdHJpbmcnICYmIHJlcS5xdWVyeVsnc2Vzc2lvbklkJ11cbiAgICAgICAgPyByZXEucXVlcnlbJ3Nlc3Npb25JZCddXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBvcFJlc3VsdCA9IGFzU2luZ2xlUmVzdWx0KGF3YWl0IGhhbmRsZXIuaGFuZGxlUmVhZCh7XG4gICAgICAgIG9wZXJhdGlvbjogJ2dldF9lZmZlY3RpdmVfY2xpX3BvbGljaWVzJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcmVwb3J0aW5nX3Njb3BlOiAnZGFzaGJvYXJkJyxcbiAgICAgICAgICAuLi4oc2Vzc2lvbklkID8geyBzZXNzaW9uX2lkOiBzZXNzaW9uSWQgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKCFvcFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IG9wUmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IHBvbGljaWVzJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gb3BSZXN1bHQuZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IGF1dGhvcml0eVN0YXRlID0gYXdhaXQgcmVhZFBlcm1pc3Npb25BdXRob3JpdHlTdGF0ZShhdXRob3JpdHlIb21lRGlyKTtcbiAgICAgIGNvbnN0IGluc3RhbGxlZEF1dGhvcml0eUhvc3RzID0gYXdhaXQgcmVzb2x2ZUluc3RhbGxlZFBlcm1pc3Npb25BdXRob3JpdHlIb3N0cyhhdXRob3JpdHlIb21lRGlyLCBhdXRob3JpdHlTdGF0ZSk7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IG5vcm1hbGl6ZVBvbGljeUVsZW1lbnRzKChkYXRhLmVsZW1lbnRzIHx8IFtdKSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuXG4gICAgICBjb25zdCBkZW55UGF0dGVybnMgPSAoZGF0YS5jb21iaW5lZERlbnlQYXR0ZXJucyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZCkgPz8gW107XG4gICAgICBjb25zdCBhbGxvd1BhdHRlcm5zID0gKGRhdGEuY29tYmluZWRBbGxvd1BhdHRlcm5zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IGNvbmZpcm1QYXR0ZXJucyA9IChkYXRhLmNvbWJpbmVkQ29uZmlybVBhdHRlcm5zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IGRlbnlPcGVyYXRpb25zID0gKGRhdGEuY29tYmluZWREZW55T3BlcmF0aW9ucyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZCkgPz8gW107XG4gICAgICBjb25zdCBhbGxvd09wZXJhdGlvbnMgPSAoZGF0YS5jb21iaW5lZEFsbG93T3BlcmF0aW9ucyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZCkgPz8gW107XG4gICAgICBjb25zdCBjb25maXJtT3BlcmF0aW9ucyA9IChkYXRhLmNvbWJpbmVkQ29uZmlybU9wZXJhdGlvbnMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQpID8/IFtdO1xuXG4gICAgICByZXMuanNvbih7XG4gICAgICAgIC4uLihzZXNzaW9uSWQgPyB7IHNlc3Npb25JZCB9IDoge30pLFxuICAgICAgICBhY3RpdmVFbGVtZW50Q291bnQ6IGRhdGEuYWN0aXZlRWxlbWVudENvdW50LFxuICAgICAgICBoYXNBbGxvd2xpc3Q6IGRhdGEuaGFzQWxsb3dsaXN0LFxuICAgICAgICBkZW55UGF0dGVybnMsXG4gICAgICAgIGFsbG93UGF0dGVybnMsXG4gICAgICAgIGNvbmZpcm1QYXR0ZXJucyxcbiAgICAgICAgZGVueU9wZXJhdGlvbnMsXG4gICAgICAgIGFsbG93T3BlcmF0aW9ucyxcbiAgICAgICAgY29uZmlybU9wZXJhdGlvbnMsXG4gICAgICAgIGRlbnlSdWxlczogbWVyZ2VSdWxlQXJyYXlzKGRlbnlQYXR0ZXJucywgZGVueU9wZXJhdGlvbnMpLFxuICAgICAgICBhbGxvd1J1bGVzOiBtZXJnZVJ1bGVBcnJheXMoYWxsb3dQYXR0ZXJucywgYWxsb3dPcGVyYXRpb25zKSxcbiAgICAgICAgY29uZmlybVJ1bGVzOiBtZXJnZVJ1bGVBcnJheXMoY29uZmlybVBhdHRlcm5zLCBjb25maXJtT3BlcmF0aW9ucyksXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBrbm93blNlc3Npb25zOiBleHRyYWN0S25vd25Qb2xpY3lTZXNzaW9ucyhlbGVtZW50cyksXG4gICAgICAgIHBlcm1pc3Npb25Qcm9tcHRBY3RpdmU6IGRhdGEucGVybWlzc2lvblByb21wdEFjdGl2ZSxcbiAgICAgICAgaG9va0luc3RhbGxlZDogZGF0YS5ob29rSW5zdGFsbGVkLFxuICAgICAgICBob29rSG9zdDogZGF0YS5ob29rSG9zdCxcbiAgICAgICAgYXV0aG9yaXR5OiBhdXRob3JpdHlTdGF0ZSxcbiAgICAgICAgYXV0aG9yaXR5U3VwcG9ydGVkSG9zdHM6IGluc3RhbGxlZEF1dGhvcml0eUhvc3RzLFxuICAgICAgICBhdXRob3JpdHlTdXBwb3J0ZWRNb2RlczogWy4uLlBFUk1JU1NJT05fQVVUSE9SSVRZX01PREVTXSxcbiAgICAgICAgYXV0aG9yaXR5QWlNdXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZW5mb3JjZW1lbnRSZWFkeTogZGF0YS5lbmZvcmNlbWVudFJlYWR5LFxuICAgICAgICBpbnZhbGlkUG9saWN5RWxlbWVudENvdW50OiBkYXRhLmludmFsaWRQb2xpY3lFbGVtZW50Q291bnQgPz8gMCxcbiAgICAgICAgYWR2aXNvcnk6IGRhdGEuYWR2aXNvcnksXG4gICAgICAgIHJlY2VudERlY2lzaW9uczogZGVjaXNpb25UcmFja2VyLmdldFJlY2VudERlY2lzaW9ucygpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSS9HYXRld2F5XSBwZXJtaXNzaW9ucy9zdGF0dXMgZXJyb3I6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHBlcm1pc3Npb24gc3RhdHVzJyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5nZXQoJy9wZXJtaXNzaW9ucy9hdXRob3JpdHknLCBhc3luYyAoX3JlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGF1dGhvcml0eVN0YXRlID0gYXdhaXQgcmVhZFBlcm1pc3Npb25BdXRob3JpdHlTdGF0ZShhdXRob3JpdHlIb21lRGlyKTtcbiAgICAgIGNvbnN0IGluc3RhbGxlZEF1dGhvcml0eUhvc3RzID0gYXdhaXQgcmVzb2x2ZUluc3RhbGxlZFBlcm1pc3Npb25BdXRob3JpdHlIb3N0cyhhdXRob3JpdHlIb21lRGlyLCBhdXRob3JpdHlTdGF0ZSk7XG4gICAgICByZXMuanNvbih7XG4gICAgICAgIC4uLmF1dGhvcml0eVN0YXRlLFxuICAgICAgICBzdXBwb3J0ZWRIb3N0czogaW5zdGFsbGVkQXV0aG9yaXR5SG9zdHMsXG4gICAgICAgIHN1cHBvcnRlZE1vZGVzOiBbLi4uUEVSTUlTU0lPTl9BVVRIT1JJVFlfTU9ERVNdLFxuICAgICAgICBhaU11dGFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tXZWJVSS9HYXRld2F5XSBwZXJtaXNzaW9ucy9hdXRob3JpdHkgZXJyb3I6JywgZXJyKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gZ2V0IHBlcm1pc3Npb24gYXV0aG9yaXR5JyB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJvdXRlci5wb3N0KCcvcGVybWlzc2lvbnMvYXV0aG9yaXR5JywgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBob3N0ID0gbm9ybWFsaXplQXV0aG9yaXR5SG9zdChyZXEuYm9keT8uaG9zdCk7XG4gICAgICBjb25zdCBtb2RlID0gbm9ybWFsaXplQXV0aG9yaXR5TW9kZShyZXEuYm9keT8ubW9kZSk7XG4gICAgICBjb25zdCByZWFzb24gPSB0eXBlb2YgcmVxLmJvZHk/LnJlYXNvbiA9PT0gJ3N0cmluZycgJiYgcmVxLmJvZHkucmVhc29uLnRyaW0oKSAhPT0gJydcbiAgICAgICAgPyByZXEuYm9keS5yZWFzb24udHJpbSgpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIWhvc3QgfHwgIW1vZGUpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgICAgIGVycm9yOiAnaG9zdCBhbmQgbW9kZSBhcmUgcmVxdWlyZWQnLFxuICAgICAgICAgIHN1cHBvcnRlZEhvc3RzOiBbLi4uUEVSTUlTU0lPTl9BVVRIT1JJVFlfSE9TVFNdLFxuICAgICAgICAgIHN1cHBvcnRlZE1vZGVzOiBbLi4uUEVSTUlTU0lPTl9BVVRIT1JJVFlfTU9ERVNdLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcG9saWNpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG1vZGUgPT09ICdhdXRob3JpdGF0aXZlJykge1xuICAgICAgICBjb25zdCBwb2xpY3lSZXN1bHQgPSBhc1NpbmdsZVJlc3VsdChhd2FpdCBoYW5kbGVyLmhhbmRsZVJlYWQoe1xuICAgICAgICAgIG9wZXJhdGlvbjogJ2dldF9lZmZlY3RpdmVfY2xpX3BvbGljaWVzJyxcbiAgICAgICAgICBwYXJhbXM6IHsgcmVwb3J0aW5nX3Njb3BlOiAnZGFzaGJvYXJkJyB9LFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKCFwb2xpY3lSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IHBvbGljeVJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIGZldGNoIGVmZmVjdGl2ZSBwb2xpY2llcycgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9saWNpZXMgPSBwb2xpY3lSZXN1bHQuZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXV0aG9yaXR5U3RhdGUgPSBhd2FpdCBzZXRQZXJtaXNzaW9uQXV0aG9yaXR5TW9kZSh7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHJlYXNvbixcbiAgICAgICAgaG9tZURpcjogYXV0aG9yaXR5SG9tZURpcixcbiAgICAgICAgcG9saWNpZXM6IG1vZGUgPT09ICdhdXRob3JpdGF0aXZlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgY29tYmluZWRBbGxvd1BhdHRlcm5zOiBhc1N0cmluZ0FycmF5KHBvbGljaWVzPy5jb21iaW5lZEFsbG93UGF0dGVybnMpLFxuICAgICAgICAgICAgY29tYmluZWRDb25maXJtUGF0dGVybnM6IGFzU3RyaW5nQXJyYXkocG9saWNpZXM/LmNvbWJpbmVkQ29uZmlybVBhdHRlcm5zKSxcbiAgICAgICAgICAgIGNvbWJpbmVkRGVueVBhdHRlcm5zOiBhc1N0cmluZ0FycmF5KHBvbGljaWVzPy5jb21iaW5lZERlbnlQYXR0ZXJucyksXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgYXV0aG9yaXR5OiBhdXRob3JpdHlTdGF0ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgYFtXZWJVSS9HYXRld2F5XSBwZXJtaXNzaW9ucy9hdXRob3JpdHkgdXBkYXRlIGVycm9yIChob3N0PSR7U3RyaW5nKHJlcS5ib2R5Py5ob3N0ID8/ICcnKX0sIG1vZGU9JHtTdHJpbmcocmVxLmJvZHk/Lm1vZGUgPz8gJycpfSk6YCxcbiAgICAgICAgZXJyLFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIHVwZGF0ZSBwZXJtaXNzaW9uIGF1dGhvcml0eScsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBdXRob3JpdHlIb3N0KHZhbHVlOiB1bmtub3duKTogUGVybWlzc2lvbkF1dGhvcml0eUhvc3QgfCBudWxsIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgUEVSTUlTU0lPTl9BVVRIT1JJVFlfSE9TVFMuaW5jbHVkZXModmFsdWUgYXMgUGVybWlzc2lvbkF1dGhvcml0eUhvc3QpXG4gICAgPyB2YWx1ZSBhcyBQZXJtaXNzaW9uQXV0aG9yaXR5SG9zdFxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQXV0aG9yaXR5TW9kZSh2YWx1ZTogdW5rbm93bik6IFBlcm1pc3Npb25BdXRob3JpdHlNb2RlIHwgbnVsbCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFBFUk1JU1NJT05fQVVUSE9SSVRZX01PREVTLmluY2x1ZGVzKHZhbHVlIGFzIFBlcm1pc3Npb25BdXRob3JpdHlNb2RlKVxuICAgID8gdmFsdWUgYXMgUGVybWlzc2lvbkF1dGhvcml0eU1vZGVcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmZpbHRlcigoZW50cnkpOiBlbnRyeSBpcyBzdHJpbmcgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgOiBbXTtcbn1cbiJdfQ==
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvblJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93ZWIvcm91dGVzL3Blcm1pc3Npb25Sb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sT0FBbUIsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUdMLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLDBCQUEwQixHQUMzQixNQUFNLG9DQUFvQyxDQUFDO0FBK0I1QyxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxNQUFNLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQW9CakMsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFHNUUsMEVBQTBFO0FBQzFFLFNBQVMsYUFBYSxDQUFDLEdBQTRCLEVBQUUsSUFBYyxFQUFFLFFBQWdCO0lBQ25GLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIs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SyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDekcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIEhUVFAgcm91dGVzIGFuZCBkZWNpc2lvbiB0cmFja2luZy5cbiAqXG4gKiBQcm92aWRlczpcbiAqIC0gUE9TVCAvZXZhbHVhdGVfcGVybWlzc2lvbiDigJQgZXZhbHVhdGVzIHRvb2wgcGVybWlzc2lvbnMgdmlhIE1DUC1BUUxcbiAqIC0gR0VUIC9wZXJtaXNzaW9ucy9zdGF0dXMg4oCUIHJldHVybnMgY3VycmVudCBwb2xpY2llcyBhbmQgcmVjZW50IGRlY2lzaW9uc1xuICogLSBEZWNpc2lvbiB0cmFja2luZyByaW5nIGJ1ZmZlciBmb3IgdGhlIGxpdmUgZGFzaGJvYXJkIGZlZWRcbiAqL1xuXG5pbXBvcnQgZXhwcmVzcywgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IE1DUEFRTEhhbmRsZXIgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL01DUEFRTEhhbmRsZXIuanMnO1xuaW1wb3J0IHsgZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9ldmFsdWF0ZVBlcm1pc3Npb24uanMnO1xuaW1wb3J0IHsgZW5zdXJlTGF0ZXN0UG9ydEZpbGUgfSBmcm9tICcuLi9wb3J0RGlzY292ZXJ5LmpzJztcbmltcG9ydCB7IGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5pbXBvcnQgeyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9TbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBQZXJtaXNzaW9uQXV0aG9yaXR5SG9zdCxcbiAgdHlwZSBQZXJtaXNzaW9uQXV0aG9yaXR5TW9kZSxcbiAgUEVSTUlTU0lPTl9BVVRIT1JJVFlfSE9TVFMsXG4gIFBFUk1JU1NJT05fQVVUSE9SSVRZX01PREVTLFxuICByZWFkUGVybWlzc2lvbkF1dGhvcml0eVN0YXRlLFxuICBzZXRQZXJtaXNzaW9uQXV0aG9yaXR5TW9kZSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbkF1dGhvcml0eS5qcyc7XG5cbi8vIOKUgOKUgCBQZXJtaXNzaW9uIERlY2lzaW9uIFRyYWNraW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmluZyBidWZmZXIgb2YgcmVjZW50IHBlcm1pc3Npb24gZGVjaXNpb25zIGZvciB0aGUgbGl2ZSBkYXNoYm9hcmQgZmVlZC5cblxuaW50ZXJmYWNlIFBlcm1pc3Npb25EZWNpc2lvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBzZXNzaW9uX2lkPzogc3RyaW5nO1xuICB0b29sX25hbWU6IHN0cmluZztcbiAgY29tbWFuZD86IHN0cmluZztcbiAgZGVjaXNpb246IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICBwbGF0Zm9ybT86IHN0cmluZztcbiAgdGFyZ2V0Pzogc3RyaW5nO1xuICB0YXJnZXRMYWJlbD86IHN0cmluZztcbiAgZGV0YWlscz86IFBlcm1pc3Npb25EZWNpc2lvbkRldGFpbFtdO1xufVxuXG5pbnRlcmZhY2UgUGVybWlzc2lvbkRlY2lzaW9uRGV0YWlsIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgbW9ub3NwYWNlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEtub3duUG9saWN5U2Vzc2lvbiB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzb3VyY2U6ICdwb2xpY3knO1xufVxuXG5jb25zdCBQRVJNSVNTSU9OX1JPVVRFX1JBVEVfTElNSVRfUkVRVUVTVFMgPSAxMjA7XG5jb25zdCBQRVJNSVNTSU9OX1JPVVRFX1JBVEVfTElNSVRfV0lORE9XX01TID0gNjBfMDAwO1xuY29uc3QgREVDSVNJT05fQlVGRkVSX1NJWkUgPSAyMDA7XG5cbmludGVyZmFjZSBQZXJtaXNzaW9uRGVjaXNpb25UcmFja2VyIHtcbiAgdHJhY2tEZWNpc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0b29sTmFtZTogc3RyaW5nLFxuICAgIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICk6IHZvaWQ7XG4gIGdldFJlY2VudERlY2lzaW9ucygpOiBQZXJtaXNzaW9uRGVjaXNpb25bXTtcbn1cblxuaW50ZXJmYWNlIFBlcm1pc3Npb25SYXRlTGltaXRMb2dDb250ZXh0IHtcbiAgdG9vbF9uYW1lPzogc3RyaW5nO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBzZXNzaW9uX2lkPzogc3RyaW5nO1xuICBpbnB1dF9maWVsZHM6IHN0cmluZ1tdO1xufVxuXG5jb25zdCBDTEFVREVfQ09NUEFUSUJMRV9IT09LX1BMQVRGT1JNUyA9IG5ldyBTZXQoWydjbGF1ZGVfY29kZScsICd2c2NvZGUnXSk7XG5jb25zdCBOT1JNQUxJWkFCTEVfUEVSTUlTU0lPTl9ERUNJU0lPTlMgPSBuZXcgU2V0KFsnYWxsb3cnLCAnZGVueScsICdhc2snXSk7XG50eXBlIE5vcm1hbGl6YWJsZVBlcm1pc3Npb25EZWNpc2lvbiA9ICdhbGxvdycgfCAnZGVueScgfCAnYXNrJztcblxuLyoqIEV4dHJhY3QgYSBzdHJpbmcgZmllbGQgZnJvbSBhIHJlY29yZCwgdHJ5aW5nIG11bHRpcGxlIGtleXMgaW4gb3JkZXIgKi9cbmZ1bmN0aW9uIGV4dHJhY3RTdHJpbmcob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5czogc3RyaW5nW10sIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgdmFsID0gb2JqPy5ba2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gIH1cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVjaXNpb24ocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGNvbnN0IG5lc3RlZCA9IHJlc3VsdC5ob29rU3BlY2lmaWNPdXRwdXQ7XG4gIGlmIChuZXN0ZWQgJiYgdHlwZW9mIG5lc3RlZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobmVzdGVkKSkge1xuICAgIGNvbnN0IG5lc3RlZERlY2lzaW9uID0gKG5lc3RlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikucGVybWlzc2lvbkRlY2lzaW9uO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkRGVjaXNpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gbmVzdGVkRGVjaXNpb247XG4gIH1cblxuICBpZiAodHlwZW9mIHJlc3VsdC5wZXJtaXNzaW9uID09PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdC5wZXJtaXNzaW9uO1xuICBpZiAodHlwZW9mIHJlc3VsdC5kZWNpc2lvbiA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQuZGVjaXNpb247XG4gIGlmICh0eXBlb2YgcmVzdWx0LmJlaGF2aW9yID09PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdC5iZWhhdmlvcjtcbiAgaWYgKHR5cGVvZiByZXN1bHQuYWxsb3dlZCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gcmVzdWx0LmFsbG93ZWQgPyAnYWxsb3cnIDogJ2RlbnknO1xuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0UmVhc29uKHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBjb25zdCBuZXN0ZWQgPSByZXN1bHQuaG9va1NwZWNpZmljT3V0cHV0O1xuICBpZiAobmVzdGVkICYmIHR5cGVvZiBuZXN0ZWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5lc3RlZCkpIHtcbiAgICBjb25zdCBuZXN0ZWRSZWFzb24gPSAobmVzdGVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5wZXJtaXNzaW9uRGVjaXNpb25SZWFzb247XG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRSZWFzb24gPT09ICdzdHJpbmcnKSByZXR1cm4gbmVzdGVkUmVhc29uO1xuICB9XG5cbiAgcmV0dXJuIGV4dHJhY3RTdHJpbmcocmVzdWx0LCBbJ3JlYXNvbicsICdtZXNzYWdlJ10sICcnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQZXJtaXNzaW9uUmF0ZUxpbWl0TG9nQ29udGV4dChcbiAgdG9vbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcGxhdGZvcm06IHN0cmluZyxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbik6IFBlcm1pc3Npb25SYXRlTGltaXRMb2dDb250ZXh0IHtcbiAgY29uc3QgaW5wdXRGaWVsZHMgPSBpbnB1dFxuICAgID8gT2JqZWN0LmtleXMoaW5wdXQpXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpXG4gICAgICAuc2xpY2UoMCwgMTIpXG4gICAgOiBbXTtcbiAgcmV0dXJuIHtcbiAgICAuLi4odG9vbE5hbWUgPyB7IHRvb2xfbmFtZTogdG9vbE5hbWUgfSA6IHt9KSxcbiAgICBwbGF0Zm9ybSxcbiAgICAuLi4oc2Vzc2lvbklkID8geyBzZXNzaW9uX2lkOiBzZXNzaW9uSWQgfSA6IHt9KSxcbiAgICBpbnB1dF9maWVsZHM6IGlucHV0RmllbGRzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzaG91bGROb3JtYWxpemVDbGF1ZGVIb29rKHBsYXRmb3JtOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBsYXRmb3JtICE9PSB1bmRlZmluZWQgJiYgQ0xBVURFX0NPTVBBVElCTEVfSE9PS19QTEFURk9STVMuaGFzKHBsYXRmb3JtKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGVybWlzc2lvblJlc3BvbnNlRm9yUGxhdGZvcm0oXG4gIHBsYXRmb3JtOiBzdHJpbmcsXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFzaG91bGROb3JtYWxpemVDbGF1ZGVIb29rKHBsYXRmb3JtKSkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCBuZXN0ZWQgPSByZXN1bHQuaG9va1NwZWNpZmljT3V0cHV0O1xuICBpZiAobmVzdGVkICYmIHR5cGVvZiBuZXN0ZWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KG5lc3RlZCkpIHtcbiAgICBjb25zdCBuZXN0ZWREZWNpc2lvbiA9IChuZXN0ZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnBlcm1pc3Npb25EZWNpc2lvbjtcbiAgICBpZiAodHlwZW9mIG5lc3RlZERlY2lzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZWNpc2lvbiA9IGV4dHJhY3REZWNpc2lvbihyZXN1bHQpO1xuICBpZiAoTk9STUFMSVpBQkxFX1BFUk1JU1NJT05fREVDSVNJT05TLmhhcyhkZWNpc2lvbikpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKFxuICAgICAgZGVjaXNpb24gYXMgTm9ybWFsaXphYmxlUGVybWlzc2lvbkRlY2lzaW9uLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBpbnB1dCxcbiAgICAgIGV4dHJhY3RSZWFzb24ocmVzdWx0KSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwgaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBidWlsZERlY2lzaW9uRGV0YWlscyhcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBwbGF0Zm9ybTogc3RyaW5nLFxuKTogeyB0YXJnZXQ/OiBzdHJpbmc7IHRhcmdldExhYmVsPzogc3RyaW5nOyBkZXRhaWxzOiBQZXJtaXNzaW9uRGVjaXNpb25EZXRhaWxbXSB9IHtcbiAgY29uc3QgZGV0YWlsczogUGVybWlzc2lvbkRlY2lzaW9uRGV0YWlsW10gPSBbXTtcblxuICBpZiAocGxhdGZvcm0pIHtcbiAgICBkZXRhaWxzLnB1c2goeyBsYWJlbDogJ1BsYXRmb3JtJywgdmFsdWU6IHBsYXRmb3JtLCBtb25vc3BhY2U6IHRydWUgfSk7XG4gIH1cblxuICBpZiAodG9vbE5hbWUgPT09ICdCYXNoJyAmJiB0eXBlb2YgaW5wdXQuY29tbWFuZCA9PT0gJ3N0cmluZycgJiYgaW5wdXQuY29tbWFuZCAhPT0gJycpIHtcbiAgICBkZXRhaWxzLnB1c2goeyBsYWJlbDogJ0NvbW1hbmQnLCB2YWx1ZTogaW5wdXQuY29tbWFuZCwgbW9ub3NwYWNlOiB0cnVlIH0pO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0RGVzY3JpcHRvcnM6IEFycmF5PHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IG1vbm9zcGFjZT86IGJvb2xlYW4gfT4gPSBbXG4gICAgeyBrZXk6ICdmaWxlX3BhdGgnLCBsYWJlbDogJ0ZpbGUnLCBtb25vc3BhY2U6IHRydWUgfSxcbiAgICB7IGtleTogJ3BhdGgnLCBsYWJlbDogJ1BhdGgnLCBtb25vc3BhY2U6IHRydWUgfSxcbiAgICB7IGtleTogJ3VybCcsIGxhYmVsOiAnVVJMJyB9LFxuICAgIHsga2V5OiAncGF0dGVybicsIGxhYmVsOiAnUGF0dGVybicsIG1vbm9zcGFjZTogdHJ1ZSB9LFxuICAgIHsga2V5OiAncXVlcnknLCBsYWJlbDogJ1F1ZXJ5JyB9LFxuICAgIHsga2V5OiAnZWxlbWVudF9uYW1lJywgbGFiZWw6ICdFbGVtZW50JywgbW9ub3NwYWNlOiB0cnVlIH0sXG4gICAgeyBrZXk6ICdyZXF1ZXN0X2lkJywgbGFiZWw6ICdSZXF1ZXN0JywgbW9ub3NwYWNlOiB0cnVlIH0sXG4gIF07XG5cbiAgbGV0IHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgdGFyZ2V0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgdGFyZ2V0RGVzY3JpcHRvcnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0W2Rlc2NyaXB0b3Iua2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRhcmdldCA9IHZhbHVlO1xuICAgIHRhcmdldExhYmVsID0gZGVzY3JpcHRvci5sYWJlbDtcbiAgICBkZXRhaWxzLnB1c2goeyBsYWJlbDogZGVzY3JpcHRvci5sYWJlbCwgdmFsdWUsIG1vbm9zcGFjZTogZGVzY3JpcHRvci5tb25vc3BhY2UgfSk7XG4gICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBtYXRjaGVkUGF0dGVybiA9IGV4dHJhY3RTdHJpbmcocmVzdWx0LCBbJ21hdGNoZWRfcGF0dGVybicsICdtYXRjaGVkUGF0dGVybiddLCAnJyk7XG4gIGlmIChtYXRjaGVkUGF0dGVybiAhPT0gJycpIHtcbiAgICBkZXRhaWxzLnB1c2goeyBsYWJlbDogJ01hdGNoZWQgUGF0dGVybicsIHZhbHVlOiBtYXRjaGVkUGF0dGVybiwgbW9ub3NwYWNlOiB0cnVlIH0pO1xuICB9XG5cbiAgY29uc3QgcG9saWN5U291cmNlID0gZXh0cmFjdFN0cmluZyhyZXN1bHQsIFsncG9saWN5X3NvdXJjZScsICdwb2xpY3lTb3VyY2UnXSwgJycpO1xuICBpZiAocG9saWN5U291cmNlICE9PSAnJykge1xuICAgIGRldGFpbHMucHVzaCh7IGxhYmVsOiAnUG9saWN5IFNvdXJjZScsIHZhbHVlOiBwb2xpY3lTb3VyY2UsIG1vbm9zcGFjZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJldHVybiB7IHRhcmdldCwgdGFyZ2V0TGFiZWwsIGRldGFpbHMgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbkRlY2lzaW9uVHJhY2tlcihidWZmZXJTaXplID0gREVDSVNJT05fQlVGRkVSX1NJWkUpOiBQZXJtaXNzaW9uRGVjaXNpb25UcmFja2VyIHtcbiAgY29uc3QgcmVjZW50RGVjaXNpb25zOiBQZXJtaXNzaW9uRGVjaXNpb25bXSA9IFtdO1xuICBsZXQgZGVjaXNpb25Db3VudGVyID0gMDtcblxuICByZXR1cm4ge1xuICAgIHRyYWNrRGVjaXNpb24oXG4gICAgICBzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgcGxhdGZvcm06IHN0cmluZyxcbiAgICApOiB2b2lkIHtcbiAgICAgIGNvbnN0IGRldGFpbFN0YXRlID0gYnVpbGREZWNpc2lvbkRldGFpbHModG9vbE5hbWUsIGlucHV0LCByZXN1bHQsIHBsYXRmb3JtKTtcbiAgICAgIGNvbnN0IGVudHJ5OiBQZXJtaXNzaW9uRGVjaXNpb24gPSB7XG4gICAgICAgIGlkOiBgZC0keysrZGVjaXNpb25Db3VudGVyfWAsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAuLi4oc2Vzc2lvbklkID8geyBzZXNzaW9uX2lkOiBzZXNzaW9uSWQgfSA6IHt9KSxcbiAgICAgICAgdG9vbF9uYW1lOiB0b29sTmFtZSxcbiAgICAgICAgY29tbWFuZDogdG9vbE5hbWUgPT09ICdCYXNoJyAmJiB0eXBlb2YgaW5wdXQ/LmNvbW1hbmQgPT09ICdzdHJpbmcnID8gaW5wdXQuY29tbWFuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVjaXNpb246IGV4dHJhY3REZWNpc2lvbihyZXN1bHQpLFxuICAgICAgICByZWFzb246IGV4dHJhY3RSZWFzb24ocmVzdWx0KSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHRhcmdldDogZGV0YWlsU3RhdGUudGFyZ2V0LFxuICAgICAgICB0YXJnZXRMYWJlbDogZGV0YWlsU3RhdGUudGFyZ2V0TGFiZWwsXG4gICAgICAgIGRldGFpbHM6IGRldGFpbFN0YXRlLmRldGFpbHMsXG4gICAgICB9O1xuICAgICAgcmVjZW50RGVjaXNpb25zLnVuc2hpZnQoZW50cnkpO1xuICAgICAgaWYgKHJlY2VudERlY2lzaW9ucy5sZW5ndGggPiBidWZmZXJTaXplKSB7XG4gICAgICAgIHJlY2VudERlY2lzaW9ucy5sZW5ndGggPSBidWZmZXJTaXplO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UmVjZW50RGVjaXNpb25zKCk6IFBlcm1pc3Npb25EZWNpc2lvbltdIHtcbiAgICAgIHJldHVybiByZWNlbnREZWNpc2lvbnM7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VSdWxlQXJyYXlzKC4uLnNvdXJjZXM6IHVua25vd25bXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc291cmNlKSkgY29udGludWU7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBzb3VyY2UpIHtcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIGVudHJ5ICE9PSAnJykge1xuICAgICAgICBtZXJnZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20obWVyZ2VkKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUG9saWN5RWxlbWVudHMoZWxlbWVudHM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIHJldHVybiBlbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+ICh7XG4gICAgLi4uZWxlbWVudCxcbiAgICBlbGVtZW50X25hbWU6IHJlc29sdmVFbGVtZW50TmFtZShlbGVtZW50KSxcbiAgICBhbGxvd1J1bGVzOiBtZXJnZVJ1bGVBcnJheXMoZWxlbWVudC5hbGxvd1BhdHRlcm5zLCBlbGVtZW50LmFsbG93T3BlcmF0aW9ucyksXG4gICAgY29uZmlybVJ1bGVzOiBtZXJnZVJ1bGVBcnJheXMoZWxlbWVudC5jb25maXJtUGF0dGVybnMsIGVsZW1lbnQuY29uZmlybU9wZXJhdGlvbnMpLFxuICAgIGRlbnlSdWxlczogbWVyZ2VSdWxlQXJyYXlzKGVsZW1lbnQuZGVueVBhdHRlcm5zLCBlbGVtZW50LmRlbnlPcGVyYXRpb25zKSxcbiAgICBpbnZhbGlkR2F0ZWtlZXBlclBvbGljeTogISFlbGVtZW50LmludmFsaWRHYXRla2VlcGVyUG9saWN5LFxuICAgIGludmFsaWRHYXRla2VlcGVyTWVzc2FnZTogdHlwZW9mIGVsZW1lbnQuaW52YWxpZEdhdGVrZWVwZXJNZXNzYWdlID09PSAnc3RyaW5nJyA/IGVsZW1lbnQuaW52YWxpZEdhdGVrZWVwZXJNZXNzYWdlIDogdW5kZWZpbmVkLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVFbGVtZW50TmFtZShlbGVtZW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZWxlbWVudC5lbGVtZW50X25hbWUgPT09ICdzdHJpbmcnKSByZXR1cm4gZWxlbWVudC5lbGVtZW50X25hbWU7XG4gIGlmICh0eXBlb2YgZWxlbWVudC5uYW1lID09PSAnc3RyaW5nJykgcmV0dXJuIGVsZW1lbnQubmFtZTtcbiAgcmV0dXJuICcnO1xufVxuXG4vKiogSGVscGVyIHRvIGV4dHJhY3Qgc2luZ2xlIHJlc3VsdCBmcm9tIE1DUC1BUUwgYmF0Y2ggcmVzcG9uc2UgKi9cbmZ1bmN0aW9uIGFzU2luZ2xlUmVzdWx0KHJlc3VsdHM6IHVua25vd24pOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGRhdGE/OiB1bmtub3duOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHJldHVybiByZXN1bHRzWzBdIHx8IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRW1wdHkgcmVzdWx0JyB9O1xuICByZXR1cm4gcmVzdWx0cyBhcyB7IHN1Y2Nlc3M6IGJvb2xlYW47IGRhdGE/OiB1bmtub3duOyBlcnJvcj86IHN0cmluZyB9O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0S25vd25Qb2xpY3lTZXNzaW9ucyhlbGVtZW50czogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogS25vd25Qb2xpY3lTZXNzaW9uW10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGtub3duU2Vzc2lvbnM6IEtub3duUG9saWN5U2Vzc2lvbltdID0gW107XG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkcyA9IEFycmF5LmlzQXJyYXkoZWxlbWVudC5zZXNzaW9uSWRzKSA/IGVsZW1lbnQuc2Vzc2lvbklkcyA6IFtdO1xuICAgIGZvciAoY29uc3Qgc2Vzc2lvbklkIG9mIHNlc3Npb25JZHMpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2Vzc2lvbklkICE9PSAnc3RyaW5nJyB8fCBzZXNzaW9uSWQgPT09ICcnIHx8IHNlZW4uaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNlZW4uYWRkKHNlc3Npb25JZCk7XG4gICAgICBrbm93blNlc3Npb25zLnB1c2goe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uSWQsXG4gICAgICAgIHNvdXJjZTogJ3BvbGljeScsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ga25vd25TZXNzaW9ucy5zb3J0KChhLCBiKSA9PiBhLnNlc3Npb25JZC5sb2NhbGVDb21wYXJlKGIuc2Vzc2lvbklkKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGZIZWFsTGF0ZXN0UGVybWlzc2lvblBvcnRGaWxlKHBvcnQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHlwZW9mIHBvcnQgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHBvcnQpIHx8IHBvcnQgPD0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZW5zdXJlTGF0ZXN0UG9ydEZpbGUocG9ydCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1dlYlVJL0dhdGV3YXldIENvdWxkIG5vdCByZWZyZXNoIHBlcm1pc3Npb24tc2VydmVyLnBvcnQnLCB7XG4gICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlSW5zdGFsbGVkUGVybWlzc2lvbkF1dGhvcml0eUhvc3RzKFxuICBob21lRGlyOiBzdHJpbmcsXG4gIGF1dGhvcml0eVN0YXRlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHJlYWRQZXJtaXNzaW9uQXV0aG9yaXR5U3RhdGU+Pixcbik6IFByb21pc2U8UGVybWlzc2lvbkF1dGhvcml0eUhvc3RbXT4ge1xuICBjb25zdCBpbnN0YWxsZWRTdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIFBFUk1JU1NJT05fQVVUSE9SSVRZX0hPU1RTLm1hcChhc3luYyAoaG9zdCkgPT4gKHtcbiAgICAgIGhvc3QsXG4gICAgICBzdGF0dXM6IGF3YWl0IGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMoaG9tZURpciwgaG9zdCksXG4gICAgfSkpLFxuICApO1xuXG4gIGNvbnN0IGluc3RhbGxlZEhvc3RzID0gaW5zdGFsbGVkU3RhdHVzZXNcbiAgICAuZmlsdGVyKCh7IHN0YXR1cyB9KSA9PiBzdGF0dXMuaW5zdGFsbGVkKVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcblxuICBjb25zdCBwZXJzaXN0ZWRIb3N0cyA9IE9iamVjdC5rZXlzKGF1dGhvcml0eVN0YXRlLmhvc3RzIHx8IHt9KS5maWx0ZXIoKGhvc3QpOiBob3N0IGlzIFBlcm1pc3Npb25BdXRob3JpdHlIb3N0ID0+XG4gICAgKFBFUk1JU1NJT05fQVVUSE9SSVRZX0hPU1RTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhob3N0KSxcbiAgKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGluc3RhbGxlZEhvc3RzLmNvbmNhdChwZXJzaXN0ZWRIb3N0cykpKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBwZXJtaXNzaW9uLXJlbGF0ZWQgcm91dGVzIG9uIGEgZ2F0ZXdheSByb3V0ZXIuXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBNQ1AtQVFMIGhhbmRsZXIgZm9yIHBvbGljeSBldmFsdWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyUGVybWlzc2lvblJvdXRlc09wdGlvbnMge1xuICBob21lRGlyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzKFxuICByb3V0ZXI6IFJvdXRlcixcbiAgaGFuZGxlcjogTUNQQVFMSGFuZGxlcixcbiAgb3B0aW9uczogUmVnaXN0ZXJQZXJtaXNzaW9uUm91dGVzT3B0aW9ucyA9IHt9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGF1dGhvcml0eUhvbWVEaXIgPSBvcHRpb25zLmhvbWVEaXIgPz8gaG9tZWRpcigpO1xuICBjb25zdCBkZWNpc2lvblRyYWNrZXIgPSBjcmVhdGVQZXJtaXNzaW9uRGVjaXNpb25UcmFja2VyKCk7XG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvZXZhbHVhdGVfcGVybWlzc2lvblxuICAgKiBQZXJtaXNzaW9uIGV2YWx1YXRpb24gZW5kcG9pbnQgZm9yIFByZVRvb2xVc2UgaG9va3MuXG4gICAqIFJvdXRlcyB0aHJvdWdoIGV2YWx1YXRlX3Blcm1pc3Npb24gTUNQLUFRTCBSRUFEIG9wZXJhdGlvbi5cbiAgICogRmFpbC1vcGVuOiByZXR1cm5zIGFsbG93IG9uIGFueSBlcnJvciB0byBhdm9pZCBibG9ja2luZyB0aGUgdXNlci5cbiAgICovXG4gIGNvbnN0IHBlcm1pc3Npb25MaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcihcbiAgICBQRVJNSVNTSU9OX1JPVVRFX1JBVEVfTElNSVRfUkVRVUVTVFMsXG4gICAgUEVSTUlTU0lPTl9ST1VURV9SQVRFX0xJTUlUX1dJTkRPV19NUyxcbiAgKTtcbiAgcm91dGVyLnBvc3QoJy9ldmFsdWF0ZV9wZXJtaXNzaW9uJywgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIGF3YWl0IHNlbGZIZWFsTGF0ZXN0UGVybWlzc2lvblBvcnRGaWxlKHJlcS5zb2NrZXQubG9jYWxQb3J0KTtcblxuICAgIGNvbnN0IGJvZHkgPSByZXEuYm9keSBhcyB7XG4gICAgICB0b29sX25hbWU/OiBzdHJpbmc7XG4gICAgICBpbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcGxhdGZvcm0/OiBzdHJpbmc7XG4gICAgICBzZXNzaW9uX2lkPzogc3RyaW5nO1xuICAgIH07XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgYm9keS5wbGF0Zm9ybSA9PT0gJ3N0cmluZycgPyBib2R5LnBsYXRmb3JtLm5vcm1hbGl6ZSgnTkZDJykgOiAnY2xhdWRlX2NvZGUnO1xuICAgIGNvbnN0IHRvb2xfbmFtZSA9IHR5cGVvZiBib2R5LnRvb2xfbmFtZSA9PT0gJ3N0cmluZycgPyBib2R5LnRvb2xfbmFtZS5ub3JtYWxpemUoJ05GQycpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlc3Npb25faWQgPSB0eXBlb2YgYm9keS5zZXNzaW9uX2lkID09PSAnc3RyaW5nJyA/IGJvZHkuc2Vzc2lvbl9pZC5ub3JtYWxpemUoJ05GQycpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlucHV0ID0gYm9keS5pbnB1dDtcblxuICAgIGlmICghcGVybWlzc2lvbkxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgJ1tXZWJVSS9HYXRld2F5XSBldmFsdWF0ZV9wZXJtaXNzaW9uIHJhdGUgbGltaXQgZXhjZWVkZWQ7IGZhaWxpbmcgb3BlbicsXG4gICAgICAgIGJ1aWxkUGVybWlzc2lvblJhdGVMaW1pdExvZ0NvbnRleHQodG9vbF9uYW1lLCBwbGF0Zm9ybSwgc2Vzc2lvbl9pZCwgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIHJlcy5qc29uKGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwge30pKTsgLy8gZmFpbCBvcGVuIG9uIHJhdGUgbGltaXRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVbmljb2RlIG5vcm1hbGl6YXRpb24gKE5GQykgb24gc3RyaW5nIGlucHV0cyB0byBwcmV2ZW50IGhvbW9ncmFwaCBhdHRhY2tzXG4gICAgaWYgKCF0b29sX25hbWUpIHtcbiAgICAgIHJlcy5qc29uKGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnYWxsb3cnLCBwbGF0Zm9ybSwgaW5wdXQgfHwge30pKTsgLy8gZmFpbCBvcGVuIG9uIGJhZCBpbnB1dFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0TXMgPSBEYXRlLm5vdygpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcFJlc3VsdCA9IGFzU2luZ2xlUmVzdWx0KGF3YWl0IGhhbmRsZXIuaGFuZGxlUmVhZCh7XG4gICAgICAgIG9wZXJhdGlvbjogJ2V2YWx1YXRlX3Blcm1pc3Npb24nLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICB0b29sX25hbWUsXG4gICAgICAgICAgaW5wdXQ6IGlucHV0IHx8IHt9LFxuICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgIC4uLihzZXNzaW9uX2lkID8geyBzZXNzaW9uX2lkIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRNcztcblxuICAgICAgaWYgKCFvcFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbV2ViVUkvR2F0ZXdheV0gZXZhbHVhdGVfcGVybWlzc2lvbiBmYWlsZWQgKCR7ZWxhcHNlZE1zfW1zKTogJHtvcFJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgcmVzLmpzb24oZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCB8fCB7fSkpOyAvLyBmYWlsIG9wZW5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByYXdSZXN1bHQgPSBvcFJlc3VsdC5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gbm9ybWFsaXplUGVybWlzc2lvblJlc3BvbnNlRm9yUGxhdGZvcm0oXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBpbnB1dCB8fCB7fSxcbiAgICAgICAgcmF3UmVzdWx0LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRyYWNrZWRSZXN1bHQgPSB7IC4uLnJhd1Jlc3VsdCwgLi4ucmVzcG9uc2VEYXRhIH07XG4gICAgICBjb25zdCBkZWNpc2lvbiA9IGV4dHJhY3REZWNpc2lvbihyZXNwb25zZURhdGEpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbV2ViVUkvR2F0ZXdheV0gZXZhbHVhdGVfcGVybWlzc2lvbjogJHt0b29sX25hbWV9IOKGkiAke2RlY2lzaW9ufSAoJHtlbGFwc2VkTXN9bXMpYCk7XG5cbiAgICAgIC8vIFRyYWNrIGRlY2lzaW9uIGZvciBsaXZlIGRhc2hib2FyZCBmZWVkXG4gICAgICBkZWNpc2lvblRyYWNrZXIudHJhY2tEZWNpc2lvbihzZXNzaW9uX2lkLCB0b29sX25hbWUsIGlucHV0IHx8IHt9LCB0cmFja2VkUmVzdWx0LCBwbGF0Zm9ybSk7XG5cbiAgICAgIHJlcy5qc29uKHJlc3BvbnNlRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlbGFwc2VkTXMgPSBEYXRlLm5vdygpIC0gc3RhcnRNcztcbiAgICAgIGxvZ2dlci5lcnJvcihgW1dlYlVJL0dhdGV3YXldIGV2YWx1YXRlX3Blcm1pc3Npb24gZXJyb3IgKCR7ZWxhcHNlZE1zfW1zKTpgLCBlcnIpO1xuICAgICAgcmVzLmpzb24oZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCB8fCB7fSkpOyAvLyBmYWlsIG9wZW5cbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9wZXJtaXNzaW9ucy9zdGF0dXNcbiAgICogUmV0dXJucyBjdXJyZW50IHBlcm1pc3Npb24gcG9saWNpZXMgYW5kIHJlY2VudCBkZWNpc2lvbnNcbiAgICogZm9yIHRoZSBsaXZlIHBlcm1pc3Npb25zIGRhc2hib2FyZC5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9wZXJtaXNzaW9ucy9zdGF0dXMnLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VsZkhlYWxMYXRlc3RQZXJtaXNzaW9uUG9ydEZpbGUocmVxLnNvY2tldC5sb2NhbFBvcnQpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSB0eXBlb2YgcmVxLnF1ZXJ5WydzZXNzaW9uSWQnXSA9PT0gJ3N0cmluZycgJiYgcmVxLnF1ZXJ5WydzZXNzaW9uSWQnXVxuICAgICAgICA/IHJlcS5xdWVyeVsnc2Vzc2lvbklkJ11cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IG9wUmVzdWx0ID0gYXNTaW5nbGVSZXN1bHQoYXdhaXQgaGFuZGxlci5oYW5kbGVSZWFkKHtcbiAgICAgICAgb3BlcmF0aW9uOiAnZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXMnLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICByZXBvcnRpbmdfc2NvcGU6ICdkYXNoYm9hcmQnLFxuICAgICAgICAgIC4uLihzZXNzaW9uSWQgPyB7IHNlc3Npb25faWQ6IHNlc3Npb25JZCB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoIW9wUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogb3BSZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgcG9saWNpZXMnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBvcFJlc3VsdC5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3QgYXV0aG9yaXR5U3RhdGUgPSBhd2FpdCByZWFkUGVybWlzc2lvbkF1dGhvcml0eVN0YXRlKGF1dGhvcml0eUhvbWVEaXIpO1xuICAgICAgY29uc3QgaW5zdGFsbGVkQXV0aG9yaXR5SG9zdHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVkUGVybWlzc2lvbkF1dGhvcml0eUhvc3RzKGF1dGhvcml0eUhvbWVEaXIsIGF1dGhvcml0eVN0YXRlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gbm9ybWFsaXplUG9saWN5RWxlbWVudHMoKGRhdGEuZWxlbWVudHMgfHwgW10pIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik7XG5cbiAgICAgIGNvbnN0IGRlbnlQYXR0ZXJucyA9IChkYXRhLmNvbWJpbmVkRGVueVBhdHRlcm5zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSAoZGF0YS5jb21iaW5lZEFsbG93UGF0dGVybnMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQpID8/IFtdO1xuICAgICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gKGRhdGEuY29tYmluZWRDb25maXJtUGF0dGVybnMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQpID8/IFtdO1xuICAgICAgY29uc3QgZGVueU9wZXJhdGlvbnMgPSAoZGF0YS5jb21iaW5lZERlbnlPcGVyYXRpb25zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IGFsbG93T3BlcmF0aW9ucyA9IChkYXRhLmNvbWJpbmVkQWxsb3dPcGVyYXRpb25zIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IGNvbmZpcm1PcGVyYXRpb25zID0gKGRhdGEuY29tYmluZWRDb25maXJtT3BlcmF0aW9ucyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZCkgPz8gW107XG5cbiAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgLi4uKHNlc3Npb25JZCA/IHsgc2Vzc2lvbklkIH0gOiB7fSksXG4gICAgICAgIGFjdGl2ZUVsZW1lbnRDb3VudDogZGF0YS5hY3RpdmVFbGVtZW50Q291bnQsXG4gICAgICAgIGhhc0FsbG93bGlzdDogZGF0YS5oYXNBbGxvd2xpc3QsXG4gICAgICAgIGRlbnlQYXR0ZXJucyxcbiAgICAgICAgYWxsb3dQYXR0ZXJucyxcbiAgICAgICAgY29uZmlybVBhdHRlcm5zLFxuICAgICAgICBkZW55T3BlcmF0aW9ucyxcbiAgICAgICAgYWxsb3dPcGVyYXRpb25zLFxuICAgICAgICBjb25maXJtT3BlcmF0aW9ucyxcbiAgICAgICAgZGVueVJ1bGVzOiBtZXJnZVJ1bGVBcnJheXMoZGVueVBhdHRlcm5zLCBkZW55T3BlcmF0aW9ucyksXG4gICAgICAgIGFsbG93UnVsZXM6IG1lcmdlUnVsZUFycmF5cyhhbGxvd1BhdHRlcm5zLCBhbGxvd09wZXJhdGlvbnMpLFxuICAgICAgICBjb25maXJtUnVsZXM6IG1lcmdlUnVsZUFycmF5cyhjb25maXJtUGF0dGVybnMsIGNvbmZpcm1PcGVyYXRpb25zKSxcbiAgICAgICAgZWxlbWVudHMsXG4gICAgICAgIGtub3duU2Vzc2lvbnM6IGV4dHJhY3RLbm93blBvbGljeVNlc3Npb25zKGVsZW1lbnRzKSxcbiAgICAgICAgcGVybWlzc2lvblByb21wdEFjdGl2ZTogZGF0YS5wZXJtaXNzaW9uUHJvbXB0QWN0aXZlLFxuICAgICAgICBob29rSW5zdGFsbGVkOiBkYXRhLmhvb2tJbnN0YWxsZWQsXG4gICAgICAgIGhvb2tIb3N0OiBkYXRhLmhvb2tIb3N0LFxuICAgICAgICBhdXRob3JpdHk6IGF1dGhvcml0eVN0YXRlLFxuICAgICAgICBhdXRob3JpdHlTdXBwb3J0ZWRIb3N0czogaW5zdGFsbGVkQXV0aG9yaXR5SG9zdHMsXG4gICAgICAgIGF1dGhvcml0eVN1cHBvcnRlZE1vZGVzOiBbLi4uUEVSTUlTU0lPTl9BVVRIT1JJVFlfTU9ERVNdLFxuICAgICAgICBhdXRob3JpdHlBaU11dGFibGU6IGZhbHNlLFxuICAgICAgICBlbmZvcmNlbWVudFJlYWR5OiBkYXRhLmVuZm9yY2VtZW50UmVhZHksXG4gICAgICAgIGludmFsaWRQb2xpY3lFbGVtZW50Q291bnQ6IGRhdGEuaW52YWxpZFBvbGljeUVsZW1lbnRDb3VudCA/PyAwLFxuICAgICAgICBhZHZpc29yeTogZGF0YS5hZHZpc29yeSxcbiAgICAgICAgcmVjZW50RGVjaXNpb25zOiBkZWNpc2lvblRyYWNrZXIuZ2V0UmVjZW50RGVjaXNpb25zKCksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1dlYlVJL0dhdGV3YXldIHBlcm1pc3Npb25zL3N0YXR1cyBlcnJvcjonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBnZXQgcGVybWlzc2lvbiBzdGF0dXMnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnL3Blcm1pc3Npb25zL2F1dGhvcml0eScsIGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXV0aG9yaXR5U3RhdGUgPSBhd2FpdCByZWFkUGVybWlzc2lvbkF1dGhvcml0eVN0YXRlKGF1dGhvcml0eUhvbWVEaXIpO1xuICAgICAgY29uc3QgaW5zdGFsbGVkQXV0aG9yaXR5SG9zdHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVkUGVybWlzc2lvbkF1dGhvcml0eUhvc3RzKGF1dGhvcml0eUhvbWVEaXIsIGF1dGhvcml0eVN0YXRlKTtcbiAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgLi4uYXV0aG9yaXR5U3RhdGUsXG4gICAgICAgIHN1cHBvcnRlZEhvc3RzOiBpbnN0YWxsZWRBdXRob3JpdHlIb3N0cyxcbiAgICAgICAgc3VwcG9ydGVkTW9kZXM6IFsuLi5QRVJNSVNTSU9OX0FVVEhPUklUWV9NT0RFU10sXG4gICAgICAgIGFpTXV0YWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1dlYlVJL0dhdGV3YXldIHBlcm1pc3Npb25zL2F1dGhvcml0eSBlcnJvcjonLCBlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBnZXQgcGVybWlzc2lvbiBhdXRob3JpdHknIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcm91dGVyLnBvc3QoJy9wZXJtaXNzaW9ucy9hdXRob3JpdHknLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBub3JtYWxpemVBdXRob3JpdHlIb3N0KHJlcS5ib2R5Py5ob3N0KTtcbiAgICAgIGNvbnN0IG1vZGUgPSBub3JtYWxpemVBdXRob3JpdHlNb2RlKHJlcS5ib2R5Py5tb2RlKTtcbiAgICAgIGNvbnN0IHJlYXNvbiA9IHR5cGVvZiByZXEuYm9keT8ucmVhc29uID09PSAnc3RyaW5nJyAmJiByZXEuYm9keS5yZWFzb24udHJpbSgpICE9PSAnJ1xuICAgICAgICA/IHJlcS5ib2R5LnJlYXNvbi50cmltKClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICghaG9zdCB8fCAhbW9kZSkge1xuICAgICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICAgICAgZXJyb3I6ICdob3N0IGFuZCBtb2RlIGFyZSByZXF1aXJlZCcsXG4gICAgICAgICAgc3VwcG9ydGVkSG9zdHM6IFsuLi5QRVJNSVNTSU9OX0FVVEhPUklUWV9IT1NUU10sXG4gICAgICAgICAgc3VwcG9ydGVkTW9kZXM6IFsuLi5QRVJNSVNTSU9OX0FVVEhPUklUWV9NT0RFU10sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBwb2xpY2llczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobW9kZSA9PT0gJ2F1dGhvcml0YXRpdmUnKSB7XG4gICAgICAgIGNvbnN0IHBvbGljeVJlc3VsdCA9IGFzU2luZ2xlUmVzdWx0KGF3YWl0IGhhbmRsZXIuaGFuZGxlUmVhZCh7XG4gICAgICAgICAgb3BlcmF0aW9uOiAnZ2V0X2VmZmVjdGl2ZV9jbGlfcG9saWNpZXMnLFxuICAgICAgICAgIHBhcmFtczogeyByZXBvcnRpbmdfc2NvcGU6ICdkYXNoYm9hcmQnIH0sXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAoIXBvbGljeVJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogcG9saWN5UmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gZmV0Y2ggZWZmZWN0aXZlIHBvbGljaWVzJyB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwb2xpY2llcyA9IHBvbGljeVJlc3VsdC5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhdXRob3JpdHlTdGF0ZSA9IGF3YWl0IHNldFBlcm1pc3Npb25BdXRob3JpdHlNb2RlKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgICBob21lRGlyOiBhdXRob3JpdHlIb21lRGlyLFxuICAgICAgICBwb2xpY2llczogbW9kZSA9PT0gJ2F1dGhvcml0YXRpdmUnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBjb21iaW5lZEFsbG93UGF0dGVybnM6IGFzU3RyaW5nQXJyYXkocG9saWNpZXM/LmNvbWJpbmVkQWxsb3dQYXR0ZXJucyksXG4gICAgICAgICAgICBjb21iaW5lZENvbmZpcm1QYXR0ZXJuczogYXNTdHJpbmdBcnJheShwb2xpY2llcz8uY29tYmluZWRDb25maXJtUGF0dGVybnMpLFxuICAgICAgICAgICAgY29tYmluZWREZW55UGF0dGVybnM6IGFzU3RyaW5nQXJyYXkocG9saWNpZXM/LmNvbWJpbmVkRGVueVBhdHRlcm5zKSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcblxuICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBhdXRob3JpdHk6IGF1dGhvcml0eVN0YXRlIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgW1dlYlVJL0dhdGV3YXldIHBlcm1pc3Npb25zL2F1dGhvcml0eSB1cGRhdGUgZXJyb3IgKGhvc3Q9JHtTdHJpbmcocmVxLmJvZHk/Lmhvc3QgPz8gJycpfSwgbW9kZT0ke1N0cmluZyhyZXEuYm9keT8ubW9kZSA/PyAnJyl9KTpgLFxuICAgICAgICBlcnIsXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdGYWlsZWQgdG8gdXBkYXRlIHBlcm1pc3Npb24gYXV0aG9yaXR5JyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUF1dGhvcml0eUhvc3QodmFsdWU6IHVua25vd24pOiBQZXJtaXNzaW9uQXV0aG9yaXR5SG9zdCB8IG51bGwge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBQRVJNSVNTSU9OX0FVVEhPUklUWV9IT1NUUy5pbmNsdWRlcyh2YWx1ZSBhcyBQZXJtaXNzaW9uQXV0aG9yaXR5SG9zdClcbiAgICA/IHZhbHVlIGFzIFBlcm1pc3Npb25BdXRob3JpdHlIb3N0XG4gICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBdXRob3JpdHlNb2RlKHZhbHVlOiB1bmtub3duKTogUGVybWlzc2lvbkF1dGhvcml0eU1vZGUgfCBudWxsIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgUEVSTUlTU0lPTl9BVVRIT1JJVFlfTU9ERVMuaW5jbHVkZXModmFsdWUgYXMgUGVybWlzc2lvbkF1dGhvcml0eU1vZGUpXG4gICAgPyB2YWx1ZSBhcyBQZXJtaXNzaW9uQXV0aG9yaXR5TW9kZVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gYXNTdHJpbmdBcnJheSh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSA6IFtdO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAkDnE,qEAAqE;AACrE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,SAAS,EAAE,MAAM,EAAE,CAAC;IAC/C;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9E,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,qBAAqB,EAAE,cAAc,KAAK,IAAI,CAAC;IACrF,yCAAyC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,cAAc,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwPxF;AA6DD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AA2DtG;;;;;;;;;;;;GAYG;AACH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAoDD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4BlG"}