@projectcor/maia-components 2.11.66 → 2.11.67-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +7 -3
  2. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +4 -2
  3. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  5. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +26 -6
  6. package/lib/components/atoms/icons/SkillIcon.js +30 -0
  7. package/lib/components/atoms/icons/SkillsNavIcon.js +27 -0
  8. package/lib/components/atoms/icons/index.js +3 -1
  9. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +14 -1
  10. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +34 -4
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
  12. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  13. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +357 -0
  14. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +145 -0
  15. package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
  16. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  17. package/lib/components/molecules/Sidebar/Sidebar.js +16 -4
  18. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +160 -0
  19. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
  20. package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
  21. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +446 -0
  22. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +98 -0
  23. package/lib/components/organisms/AbmSkillModal/index.js +2 -0
  24. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +8 -1
  25. package/lib/constants/config.js +4 -1
  26. package/lib/constants/permissions/index.js +2 -2
  27. package/lib/constants/permissions/utils.js +4 -1
  28. package/lib/hooks/useChatMessages/useChatMessages.js +4 -2
  29. package/lib/hooks/useContextMentions.js +60 -15
  30. package/lib/hooks/useEntitySearch.js +294 -108
  31. package/lib/hooks/useMentionAllowedTypes.js +45 -10
  32. package/lib/hooks/useMentionPopover.js +54 -48
  33. package/lib/lang/br/index.js +54 -3
  34. package/lib/lang/en/index.js +54 -3
  35. package/lib/lang/es/index.js +54 -3
  36. package/lib/lang/fr/index.js +54 -3
  37. package/lib/services/maia/Agents/getAgents.js +10 -8
  38. package/lib/services/maia/Chats/getChatMessages.js +4 -22
  39. package/lib/services/maia/Skills/createSkill.js +39 -0
  40. package/lib/services/maia/Skills/deleteSkill.js +38 -0
  41. package/lib/services/maia/Skills/generateSkill.js +41 -0
  42. package/lib/services/maia/Skills/getSkills.js +90 -0
  43. package/lib/services/maia/Skills/updateSkill.js +39 -0
  44. package/lib/types/contextMention.js +1 -1
  45. package/lib/types/skill.js +2 -0
  46. package/lib/utils/contextMentionIcons.js +29 -1
  47. package/lib/utils/contextMentionTriggers.js +53 -0
  48. package/lib/utils/corConnectorMentionTypes.js +37 -0
  49. package/lib/utils/normalizeAgentConnectors.js +32 -0
  50. package/lib/utils/renderContextMentions.js +9 -4
  51. package/package.json +1 -1
@@ -1,7 +1,10 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import { useMemo } from 'react';
3
3
  import { useGlobalContext } from '../context/global-context';
4
+ import { canAccessToSkills } from '../constants/permissions';
5
+ import { getCustomAgentCorMentionTypes } from '../utils/corConnectorMentionTypes';
4
6
  var ALL_TYPES = ['client', 'project', 'task', 'user'];
7
+ var SKILL_TYPE = 'skill';
5
8
 
6
9
  /**
7
10
  * Restricción temporal de producto: el popover de @-mentions (COR + MCP) solo aplica a
@@ -14,11 +17,12 @@ var TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY = true;
14
17
  * Deriva del agent activo qué tabs del context mention deben estar disponibles.
15
18
  *
16
19
  * Reglas:
20
+ * - agent.type === 'custom' → según conectores COR/MCP del agente
17
21
  * - agent.entity === 'global' → ninguna (sin @-mentions)
18
22
  * - agent.entity === 'project' → [task, user]
19
23
  * - agent.entity === 'client' → [project, task, user]
20
24
  * - agent.entity === null/otro → todas si el flag temporal está en false (contexto amplio)
21
- * - agent.type !== 'clone' → ninguna (sin @-mentions por ahora)
25
+ * - agent.type !== 'clone' → ninguna (sin @-mentions)
22
26
  *
23
27
  * El `override` (prop `enabledTypes` del componente consumidor) siempre gana.
24
28
  *
@@ -29,9 +33,27 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
29
33
  var _useGlobalContext = useGlobalContext(),
30
34
  agent = _useGlobalContext.agent;
31
35
  return useMemo(function () {
32
- var _agent$connectors$fin, _agent$connectors, _allowedTypes$;
36
+ var _agent$connectors$fin3, _agent$connectors3, _allowedTypes$2;
37
+ // Agentes custom: tabs según entidades en connectors COR (`task`, `project`, `client`).
38
+ if ((agent === null || agent === void 0 ? void 0 : agent.type) === 'custom') {
39
+ var _agent$connectors$fin, _agent$connectors, _agent$connectors$fin2, _agent$connectors2, _allowedTypes$;
40
+ var corSlugs = (_agent$connectors$fin = (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 || (_agent$connectors = _agent$connectors.find(function (c) {
41
+ return c.group === 'COR';
42
+ })) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.slugs) !== null && _agent$connectors$fin !== void 0 ? _agent$connectors$fin : [];
43
+ var corTypes = getCustomAgentCorMentionTypes(corSlugs);
44
+ var _mcpSlugs = (_agent$connectors$fin2 = (_agent$connectors2 = agent.connectors) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.find(function (c) {
45
+ return c.group === 'MCP';
46
+ })) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.slugs) === null || _agent$connectors2 === void 0 ? void 0 : _agent$connectors2.filter(function (s) {
47
+ return typeof s === 'string' && s.trim().length > 0;
48
+ })) !== null && _agent$connectors$fin2 !== void 0 ? _agent$connectors$fin2 : [];
49
+ var _allowedTypes = _mcpSlugs.length > 0 ? [].concat(_toConsumableArray(corTypes), ['mcp']) : corTypes;
50
+ return {
51
+ allowedTypes: _allowedTypes,
52
+ defaultType: (_allowedTypes$ = _allowedTypes[0]) !== null && _allowedTypes$ !== void 0 ? _allowedTypes$ : 'user'
53
+ };
54
+ }
55
+
33
56
  // Las @-mentions (y por ende los fetch de recents) solo aplican a agentes clone.
34
- // Los agentes no-clone (custom, etc.) no las tienen habilitadas por ahora.
35
57
  if ((agent === null || agent === void 0 ? void 0 : agent.type) !== 'clone') {
36
58
  return {
37
59
  allowedTypes: [],
@@ -45,17 +67,27 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
45
67
  defaultType: defaultType
46
68
  };
47
69
  }
70
+ var skillsEnabled = canAccessToSkills();
48
71
  if (TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'project' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'client') {
49
- return {
72
+ // Para agentes sin entidad de proyecto/cliente, solo se expone el tab de skills.
73
+ if (!skillsEnabled) return {
50
74
  allowedTypes: [],
51
75
  defaultType: 'user'
52
76
  };
77
+ return {
78
+ allowedTypes: [SKILL_TYPE],
79
+ defaultType: SKILL_TYPE
80
+ };
53
81
  }
54
82
  if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'global') {
55
- return {
83
+ if (!skillsEnabled) return {
56
84
  allowedTypes: [],
57
85
  defaultType: 'user'
58
86
  };
87
+ return {
88
+ allowedTypes: [SKILL_TYPE],
89
+ defaultType: SKILL_TYPE
90
+ };
59
91
  }
60
92
  var allowedTypes = ALL_TYPES;
61
93
  if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project') {
@@ -70,18 +102,21 @@ export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
70
102
  return type !== 'user';
71
103
  });
72
104
  }
73
- var mcpSlugs = (_agent$connectors$fin = agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 || (_agent$connectors = _agent$connectors.find(function (connector) {
105
+ var mcpSlugs = (_agent$connectors$fin3 = agent === null || agent === void 0 || (_agent$connectors3 = agent.connectors) === null || _agent$connectors3 === void 0 || (_agent$connectors3 = _agent$connectors3.find(function (connector) {
74
106
  return connector.group === 'MCP';
75
- })) === null || _agent$connectors === void 0 || (_agent$connectors = _agent$connectors.slugs) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.filter(function (slug) {
107
+ })) === null || _agent$connectors3 === void 0 || (_agent$connectors3 = _agent$connectors3.slugs) === null || _agent$connectors3 === void 0 ? void 0 : _agent$connectors3.filter(function (slug) {
76
108
  return typeof slug === 'string' && slug.trim().length > 0;
77
- })) !== null && _agent$connectors$fin !== void 0 ? _agent$connectors$fin : [];
109
+ })) !== null && _agent$connectors$fin3 !== void 0 ? _agent$connectors$fin3 : [];
78
110
  if (mcpSlugs.length > 0) {
79
111
  allowedTypes = [].concat(_toConsumableArray(allowedTypes), ['mcp']);
80
112
  }
113
+ if (skillsEnabled) {
114
+ allowedTypes = [].concat(_toConsumableArray(allowedTypes), [SKILL_TYPE]);
115
+ }
81
116
  return {
82
117
  allowedTypes: allowedTypes,
83
- defaultType: (_allowedTypes$ = allowedTypes[0]) !== null && _allowedTypes$ !== void 0 ? _allowedTypes$ : 'user'
118
+ defaultType: (_allowedTypes$2 = allowedTypes[0]) !== null && _allowedTypes$2 !== void 0 ? _allowedTypes$2 : SKILL_TYPE
84
119
  };
85
120
  }, [agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.connectors, override]);
86
121
  };
87
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlR2xvYmFsQ29udGV4dCIsIkFMTF9UWVBFUyIsIlRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWSIsInVzZU1lbnRpb25BbGxvd2VkVHlwZXMiLCJvdmVycmlkZSIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJfYWdlbnQkY29ubmVjdG9ycyRmaW4iLCJfYWdlbnQkY29ubmVjdG9ycyIsIl9hbGxvd2VkVHlwZXMkIiwidHlwZSIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwibGVuZ3RoIiwiZW50aXR5IiwiaW5jbHVkZXMiLCJmaWx0ZXIiLCJtY3BTbHVncyIsImNvbm5lY3RvcnMiLCJmaW5kIiwiY29ubmVjdG9yIiwiZ3JvdXAiLCJzbHVncyIsInNsdWciLCJ0cmltIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG5jb25zdCBBTExfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snLCAndXNlciddXG5cbi8qKlxuICogUmVzdHJpY2Npw7NuIHRlbXBvcmFsIGRlIHByb2R1Y3RvOiBlbCBwb3BvdmVyIGRlIEAtbWVudGlvbnMgKENPUiArIE1DUCkgc29sbyBhcGxpY2EgYVxuICogYWdlbnRlcyBjdXlvIGBlbnRpdHlgIGVzIHByb3llY3RvIG8gY2xpZW50ZSAo4oCcZXNwZWNpYWxpc3Rhc+KAnSBhY290YWRvcykuIEVsIHJlc3RvIG5vIHZlIHRhYnNcbiAqIG5pIE1DUCBhdW5xdWUgdGVuZ2EgY29uZWN0b3JlcyBhY3Rpdm9zLiBQYXNhciBhIGBmYWxzZWAgY3VhbmRvIHNlIGhhYmlsaXRlIGRlIG51ZXZvIGVsXG4gKiBhbGNhbmNlIGFtcGxpbzsgbm8gYm9ycmFyIGVsIGN1ZXJwbyBkZWwgaG9vayBxdWUgcXVlZGEgZGViYWpvLlxuICovXG5jb25zdCBURU1QX0NPTlRFWFRfTUVOVElPTlNfUkVRVUlSRV9QUk9KRUNUX09SX0NMSUVOVF9FTlRJVFkgPSB0cnVlXG5cbmV4cG9ydCB0eXBlIFVzZU1lbnRpb25BbGxvd2VkVHlwZXNSZXN1bHQgPSB7XG4gIGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXVxuICBkZWZhdWx0VHlwZTogQ29udGV4dEVudGl0eVR5cGVcbn1cblxuLyoqXG4gKiBEZXJpdmEgZGVsIGFnZW50IGFjdGl2byBxdcOpIHRhYnMgZGVsIGNvbnRleHQgbWVudGlvbiBkZWJlbiBlc3RhciBkaXNwb25pYmxlcy5cbiAqXG4gKiBSZWdsYXM6XG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJyAg4oaSIG5pbmd1bmEgKHNpbiBALW1lbnRpb25zKVxuICogICAtIGFnZW50LmVudGl0eSA9PT0gJ3Byb2plY3QnIOKGkiBbdGFzaywgdXNlcl1cbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09ICdjbGllbnQnICDihpIgW3Byb2plY3QsIHRhc2ssIHVzZXJdXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSBudWxsL290cm8gIOKGkiB0b2RhcyBzaSBlbCBmbGFnIHRlbXBvcmFsIGVzdMOhIGVuIGZhbHNlIChjb250ZXh0byBhbXBsaW8pXG4gKiAgIC0gYWdlbnQudHlwZSAhPT0gJ2Nsb25lJyAgICAgIOKGkiBuaW5ndW5hIChzaW4gQC1tZW50aW9ucyBwb3IgYWhvcmEpXG4gKlxuICogRWwgYG92ZXJyaWRlYCAocHJvcCBgZW5hYmxlZFR5cGVzYCBkZWwgY29tcG9uZW50ZSBjb25zdW1pZG9yKSBzaWVtcHJlIGdhbmEuXG4gKlxuICogTWllbnRyYXMgYFRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWWAgc2VhIHRydWUsIHRyYXMgZWwgb3ZlcnJpZGVcbiAqIHNvbG8gc2UgcGVybWl0ZSBjb250aW51YXIgc2kgYGFnZW50LmVudGl0eWAgZXMgYHByb2plY3RgIG8gYGNsaWVudGAgKHNpbiBAIHBhcmEgZ2xvYmFsL251bGwvb3Ryb3MpLlxuICovXG5leHBvcnQgY29uc3QgdXNlTWVudGlvbkFsbG93ZWRUeXBlcyA9IChvdmVycmlkZT86IENvbnRleHRFbnRpdHlUeXBlW10pOiBVc2VNZW50aW9uQWxsb3dlZFR5cGVzUmVzdWx0ID0+IHtcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgcmV0dXJuIHVzZU1lbW8oKCk6IFVzZU1lbnRpb25BbGxvd2VkVHlwZXNSZXN1bHQgPT4ge1xuICAgIC8vIExhcyBALW1lbnRpb25zICh5IHBvciBlbmRlIGxvcyBmZXRjaCBkZSByZWNlbnRzKSBzb2xvIGFwbGljYW4gYSBhZ2VudGVzIGNsb25lLlxuICAgIC8vIExvcyBhZ2VudGVzIG5vLWNsb25lIChjdXN0b20sIGV0Yy4pIG5vIGxhcyB0aWVuZW4gaGFiaWxpdGFkYXMgcG9yIGFob3JhLlxuICAgIGlmIChhZ2VudD8udHlwZSAhPT0gJ2Nsb25lJykge1xuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbXSwgZGVmYXVsdFR5cGU6ICd1c2VyJyB9XG4gICAgfVxuXG4gICAgaWYgKG92ZXJyaWRlICYmIG92ZXJyaWRlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID0gb3ZlcnJpZGVbMF1cbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogb3ZlcnJpZGUsIGRlZmF1bHRUeXBlIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBURU1QX0NPTlRFWFRfTUVOVElPTlNfUkVRVUlSRV9QUk9KRUNUX09SX0NMSUVOVF9FTlRJVFkgJiZcbiAgICAgIGFnZW50Py5lbnRpdHkgIT09ICdwcm9qZWN0JyAmJlxuICAgICAgYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCdcbiAgICApIHtcbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogW10sIGRlZmF1bHRUeXBlOiAndXNlcicgfVxuICAgIH1cblxuICAgIGlmIChhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJykge1xuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbXSwgZGVmYXVsdFR5cGU6ICd1c2VyJyB9XG4gICAgfVxuXG4gICAgbGV0IGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSA9IEFMTF9UWVBFU1xuXG4gICAgaWYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0Jykge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWyd1c2VyJywgJ3Rhc2snXVxuICAgIH0gZWxzZSBpZiAoYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGFsbG93ZWRUeXBlcyA9IFsndXNlcicsICd0YXNrJywgJ3Byb2plY3QnXVxuICAgIH1cblxuICAgIC8vIGB1c2VyYCBzw7NsbyBzZSBoYWJpbGl0YSBqdW50byBjb24gYHRhc2tgLlxuICAgIGlmICghYWxsb3dlZFR5cGVzLmluY2x1ZGVzKCd0YXNrJykpIHtcbiAgICAgIGFsbG93ZWRUeXBlcyA9IGFsbG93ZWRUeXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlICE9PSAndXNlcicpXG4gICAgfVxuXG4gICAgY29uc3QgbWNwU2x1Z3MgPVxuICAgICAgYWdlbnQ/LmNvbm5lY3RvcnNcbiAgICAgICAgPy5maW5kKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZ3JvdXAgPT09ICdNQ1AnKVxuICAgICAgICA/LnNsdWdzPy5maWx0ZXIoKHNsdWcpOiBzbHVnIGlzIHN0cmluZyA9PiB0eXBlb2Ygc2x1ZyA9PT0gJ3N0cmluZycgJiYgc2x1Zy50cmltKCkubGVuZ3RoID4gMCkgPz8gW11cbiAgICBpZiAobWNwU2x1Z3MubGVuZ3RoID4gMCkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWy4uLmFsbG93ZWRUeXBlcywgJ21jcCddXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93ZWRUeXBlcyxcbiAgICAgIGRlZmF1bHRUeXBlOiBhbGxvd2VkVHlwZXNbMF0gPz8gJ3VzZXInLFxuICAgIH1cbiAgfSwgW2FnZW50Py5lbnRpdHksIGFnZW50Py50eXBlLCBhZ2VudD8uY29ubmVjdG9ycywgb3ZlcnJpZGVdKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsT0FBTyxRQUFRLE9BQU87QUFDL0IsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBRzVELElBQU1DLFNBQThCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLHNEQUFzRCxHQUFHLElBQUk7QUFPbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJQyxRQUE4QixFQUFtQztFQUN0RyxJQUFBQyxpQkFBQSxHQUFrQkwsZ0JBQWdCLENBQUMsQ0FBQztJQUE1Qk0sS0FBSyxHQUFBRCxpQkFBQSxDQUFMQyxLQUFLO0VBRWIsT0FBT1AsT0FBTyxDQUFDLFlBQW9DO0lBQUEsSUFBQVEscUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsY0FBQTtJQUNqRDtJQUNBO0lBQ0EsSUFBSSxDQUFBSCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUksSUFBSSxNQUFLLE9BQU8sRUFBRTtNQUMzQixPQUFPO1FBQUVDLFlBQVksRUFBRSxFQUFFO1FBQUVDLFdBQVcsRUFBRTtNQUFPLENBQUM7SUFDbEQ7SUFFQSxJQUFJUixRQUFRLElBQUlBLFFB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
122
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlR2xvYmFsQ29udGV4dCIsImNhbkFjY2Vzc1RvU2tpbGxzIiwiZ2V0Q3VzdG9tQWdlbnRDb3JNZW50aW9uVHlwZXMiLCJBTExfVFlQRVMiLCJTS0lMTF9UWVBFIiwiVEVNUF9DT05URVhUX01FTlRJT05TX1JFUVVJUkVfUFJPSkVDVF9PUl9DTElFTlRfRU5USVRZIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsIm92ZXJyaWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsIl9hZ2VudCRjb25uZWN0b3JzJGZpbjMiLCJfYWdlbnQkY29ubmVjdG9yczMiLCJfYWxsb3dlZFR5cGVzJDIiLCJ0eXBlIiwiX2FnZW50JGNvbm5lY3RvcnMkZmluIiwiX2FnZW50JGNvbm5lY3RvcnMiLCJfYWdlbnQkY29ubmVjdG9ycyRmaW4yIiwiX2FnZW50JGNvbm5lY3RvcnMyIiwiX2FsbG93ZWRUeXBlcyQiLCJjb3JTbHVncyIsImNvbm5lY3RvcnMiLCJmaW5kIiwiYyIsImdyb3VwIiwic2x1Z3MiLCJjb3JUeXBlcyIsIm1jcFNsdWdzIiwiZmlsdGVyIiwicyIsInRyaW0iLCJsZW5ndGgiLCJhbGxvd2VkVHlwZXMiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJkZWZhdWx0VHlwZSIsInNraWxsc0VuYWJsZWQiLCJlbnRpdHkiLCJpbmNsdWRlcyIsImNvbm5lY3RvciIsInNsdWciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTWVudGlvbkFsbG93ZWRUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBjYW5BY2Nlc3NUb1NraWxscyB9IGZyb20gJy4uL2NvbnN0YW50cy9wZXJtaXNzaW9ucydcbmltcG9ydCB7IGdldEN1c3RvbUFnZW50Q29yTWVudGlvblR5cGVzIH0gZnJvbSAnLi4vdXRpbHMvY29yQ29ubmVjdG9yTWVudGlvblR5cGVzJ1xuXG5jb25zdCBBTExfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snLCAndXNlciddXG5jb25zdCBTS0lMTF9UWVBFOiBDb250ZXh0RW50aXR5VHlwZSA9ICdza2lsbCdcblxuLyoqXG4gKiBSZXN0cmljY2nDs24gdGVtcG9yYWwgZGUgcHJvZHVjdG86IGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoQ09SICsgTUNQKSBzb2xvIGFwbGljYSBhXG4gKiBhZ2VudGVzIGN1eW8gYGVudGl0eWAgZXMgcHJveWVjdG8gbyBjbGllbnRlICjigJxlc3BlY2lhbGlzdGFz4oCdIGFjb3RhZG9zKS4gRWwgcmVzdG8gbm8gdmUgdGFic1xuICogbmkgTUNQIGF1bnF1ZSB0ZW5nYSBjb25lY3RvcmVzIGFjdGl2b3MuIFBhc2FyIGEgYGZhbHNlYCBjdWFuZG8gc2UgaGFiaWxpdGUgZGUgbnVldm8gZWxcbiAqIGFsY2FuY2UgYW1wbGlvOyBubyBib3JyYXIgZWwgY3VlcnBvIGRlbCBob29rIHF1ZSBxdWVkYSBkZWJham8uXG4gKi9cbmNvbnN0IFRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWSA9IHRydWVcblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9IHtcbiAgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdXG4gIGRlZmF1bHRUeXBlOiBDb250ZXh0RW50aXR5VHlwZVxufVxuXG4vKipcbiAqIERlcml2YSBkZWwgYWdlbnQgYWN0aXZvIHF1w6kgdGFicyBkZWwgY29udGV4dCBtZW50aW9uIGRlYmVuIGVzdGFyIGRpc3BvbmlibGVzLlxuICpcbiAqIFJlZ2xhczpcbiAqICAgLSBhZ2VudC50eXBlID09PSAnY3VzdG9tJyDihpIgc2Vnw7puIGNvbmVjdG9yZXMgQ09SL01DUCBkZWwgYWdlbnRlXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJyAg4oaSIG5pbmd1bmEgKHNpbiBALW1lbnRpb25zKVxuICogICAtIGFnZW50LmVudGl0eSA9PT0gJ3Byb2plY3QnIOKGkiBbdGFzaywgdXNlcl1cbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09ICdjbGllbnQnICDihpIgW3Byb2plY3QsIHRhc2ssIHVzZXJdXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSBudWxsL290cm8gIOKGkiB0b2RhcyBzaSBlbCBmbGFnIHRlbXBvcmFsIGVzdMOhIGVuIGZhbHNlIChjb250ZXh0byBhbXBsaW8pXG4gKiAgIC0gYWdlbnQudHlwZSAhPT0gJ2Nsb25lJyAgICAgIOKGkiBuaW5ndW5hIChzaW4gQC1tZW50aW9ucylcbiAqXG4gKiBFbCBgb3ZlcnJpZGVgIChwcm9wIGBlbmFibGVkVHlwZXNgIGRlbCBjb21wb25lbnRlIGNvbnN1bWlkb3IpIHNpZW1wcmUgZ2FuYS5cbiAqXG4gKiBNaWVudHJhcyBgVEVNUF9DT05URVhUX01FTlRJT05TX1JFUVVJUkVfUFJPSkVDVF9PUl9DTElFTlRfRU5USVRZYCBzZWEgdHJ1ZSwgdHJhcyBlbCBvdmVycmlkZVxuICogc29sbyBzZSBwZXJtaXRlIGNvbnRpbnVhciBzaSBgYWdlbnQuZW50aXR5YCBlcyBgcHJvamVjdGAgbyBgY2xpZW50YCAoc2luIEAgcGFyYSBnbG9iYWwvbnVsbC9vdHJvcykuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VNZW50aW9uQWxsb3dlZFR5cGVzID0gKG92ZXJyaWRlPzogQ29udGV4dEVudGl0eVR5cGVbXSk6IFVzZU1lbnRpb25BbGxvd2VkVHlwZXNSZXN1bHQgPT4ge1xuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICByZXR1cm4gdXNlTWVtbygoKTogVXNlTWVudGlvbkFsbG93ZWRUeXBlc1Jlc3VsdCA9PiB7XG4gICAgLy8gQWdlbnRlcyBjdXN0b206IHRhYnMgc2Vnw7puIGVudGlkYWRlcyBlbiBjb25uZWN0b3JzIENPUiAoYHRhc2tgLCBgcHJvamVjdGAsIGBjbGllbnRgKS5cbiAgICBpZiAoYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBjb25zdCBjb3JTbHVncyA9IGFnZW50LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnQ09SJyk/LnNsdWdzID8/IFtdXG4gICAgICBjb25zdCBjb3JUeXBlcyA9IGdldEN1c3RvbUFnZW50Q29yTWVudGlvblR5cGVzKGNvclNsdWdzKVxuXG4gICAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICAgIGFnZW50LmNvbm5lY3RvcnNcbiAgICAgICAgICA/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJylcbiAgICAgICAgICA/LnNsdWdzPy5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcy50cmltKCkubGVuZ3RoID4gMCkgPz8gW11cbiAgICAgIGNvbnN0IGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSA9IG1jcFNsdWdzLmxlbmd0aCA+IDAgPyBbLi4uY29yVHlwZXMsICdtY3AnXSA6IGNvclR5cGVzXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93ZWRUeXBlcyxcbiAgICAgICAgZGVmYXVsdFR5cGU6IGFsbG93ZWRUeXBlc1swXSA/PyAndXNlcicsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzIEAtbWVudGlvbnMgKHkgcG9yIGVuZGUgbG9zIGZldGNoIGRlIHJlY2VudHMpIHNvbG8gYXBsaWNhbiBhIGFnZW50ZXMgY2xvbmUuXG4gICAgaWYgKGFnZW50Py50eXBlICE9PSAnY2xvbmUnKSB7XG4gICAgICByZXR1cm4geyBhbGxvd2VkVHlwZXM6IFtdLCBkZWZhdWx0VHlwZTogJ3VzZXInIH1cbiAgICB9XG5cbiAgICBpZiAob3ZlcnJpZGUgJiYgb3ZlcnJpZGUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPSBvdmVycmlkZVswXVxuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBvdmVycmlkZSwgZGVmYXVsdFR5cGUgfVxuICAgIH1cblxuICAgIGNvbnN0IHNraWxsc0VuYWJsZWQgPSBjYW5BY2Nlc3NUb1NraWxscygpXG5cbiAgICBpZiAoXG4gICAgICBURU1QX0NPTlRFWFRfTUVOVElPTlNfUkVRVUlSRV9QUk9KRUNUX09SX0NMSUVOVF9FTlRJVFkgJiZcbiAgICAgIGFnZW50Py5lbnRpdHkgIT09ICdwcm9qZWN0JyAmJlxuICAgICAgYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCdcbiAgICApIHtcbiAgICAgIC8vIFBhcmEgYWdlbnRlcyBzaW4gZW50aWRhZCBkZSBwcm95ZWN0by9jbGllbnRlLCBzb2xvIHNlIGV4cG9uZSBlbCB0YWIgZGUgc2tpbGxzLlxuICAgICAgaWYgKCFza2lsbHNFbmFibGVkKSByZXR1cm4geyBhbGxvd2VkVHlwZXM6IFtdLCBkZWZhdWx0VHlwZTogJ3VzZXInIH1cbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogW1NLSUxMX1RZUEVdLCBkZWZhdWx0VHlwZTogU0tJTExfVFlQRSB9XG4gICAgfVxuXG4gICAgaWYgKGFnZW50Py5lbnRpdHkgPT09ICdnbG9iYWwnKSB7XG4gICAgICBpZiAoIXNraWxsc0VuYWJsZWQpIHJldHVybiB7IGFsbG93ZWRUeXBlczogW10sIGRlZmF1bHRUeXBlOiAndXNlcicgfVxuICAgICAgcmV0dXJuIHsgYWxsb3dlZFR5cGVzOiBbU0tJTExfVFlQRV0sIGRlZmF1bHRUeXBlOiBTS0lMTF9UWVBFIH1cbiAgICB9XG5cbiAgICBsZXQgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdID0gQUxMX1RZUEVTXG5cbiAgICBpZiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbJ3VzZXInLCAndGFzayddXG4gICAgfSBlbHNlIGlmIChhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50Jykge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWyd1c2VyJywgJ3Rhc2snLCAncHJvamVjdCddXG4gICAgfVxuXG4gICAgLy8gYHVzZXJgIHPDs2xvIHNlIGhhYmlsaXRhIGp1bnRvIGNvbiBgdGFza2AuXG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoJ3Rhc2snKSkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gYWxsb3dlZFR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUgIT09ICd1c2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICBhZ2VudD8uY29ubmVjdG9yc1xuICAgICAgICA/LmZpbmQoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5ncm91cCA9PT0gJ01DUCcpXG4gICAgICAgID8uc2x1Z3M/LmZpbHRlcigoc2x1Zyk6IHNsdWcgaXMgc3RyaW5nID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKSA/PyBbXVxuICAgIGlmIChtY3BTbHVncy5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbLi4uYWxsb3dlZFR5cGVzLCAnbWNwJ11cbiAgICB9XG5cbiAgICBpZiAoc2tpbGxzRW5hYmxlZCkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gWy4uLmFsbG93ZWRUeXBlcywgU0tJTExfVFlQRV1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsb3dlZFR5cGVzLFxuICAgICAgZGVmYXVsdFR5cGU6IGFsbG93ZWRUeXBlc1swXSA/PyBTS0lMTF9UWVBFLFxuICAgIH1cbiAgfSwgW2FnZW50Py5lbnRpdHksIGFnZW50Py50eXBlLCBhZ2VudD8uY29ubmVjdG9ycywgb3ZlcnJpZGVdKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsT0FBTyxRQUFRLE9BQU87QUFDL0IsU0FBU0MsZ0JBQWdCLFFB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RTtNQUNyQ0wsWUFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7SUFDNUM7O0lBRUE7SUFDQSxJQUFJLENBQUNBLFlBQVksQ0FBQ00sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQ2xDTixZQUFZLEdBQUdBLFlBQVksQ0FBQ0osTUFBTSxDQUFDLFVBQUFkLElBQUk7UUFBQSxPQUFJQSxJQUFJLEtBQUssTUFBTTtNQUFBLEVBQUM7SUFDN0Q7SUFFQSxJQUFNYSxRQUFRLElBQUFoQixzQkFBQSxHQUNaRCxLQUFLLGFBQUxBLEtBQUssZ0JBQUFFLGtCQUFBLEdBQUxGLEtBQUssQ0FBRVcsVUFBVSxjQUFBVCxrQkFBQSxnQkFBQUEsa0JBQUEsR0FBakJBLGtCQUFBLENBQ0lVLElBQUksQ0FBQyxVQUFBaUIsU0FBUztNQUFBLE9BQUlBLFNBQVMsQ0FBQ2YsS0FBSyxLQUFLLEtBQUs7SUFBQSxFQUFDLGNBQUFaLGtCQUFBLGdCQUFBQSxrQkFBQSxHQURoREEsa0JBQUEsQ0FFSWEsS0FBSyxjQUFBYixrQkFBQSx1QkFGVEEsa0JBQUEsQ0FFV2dCLE1BQU0sQ0FBQyxVQUFDWSxJQUFJO01BQUEsT0FBcUIsT0FBT0EsSUFBSSxLQUFLLFFBQVEsSUFBSUEsSUFBSSxDQUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDQyxNQUFNLEdBQUcsQ0FBQztJQUFBLEVBQUMsY0FBQXBCLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksRUFBRTtJQUN2RyxJQUFJZ0IsUUFBUSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3ZCQyxZQUFZLE1BQUFDLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBT0YsWUFBWSxJQUFFLEtBQUssRUFBQztJQUN6QztJQUVBLElBQUlJLGFBQWEsRUFBRTtNQUNqQkosWUFBWSxNQUFBQyxNQUFBLENBQUFDLGtCQUFBLENBQU9GLFlBQVksSUFBRTNCLFVBQVUsRUFBQztJQUM5QztJQUVBLE9BQU87TUFDTDJCLFlBQVksRUFBWkEsWUFBWTtNQUNaRyxXQUFXLEdBQUF0QixlQUFBLEdBQUVtQixZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQUFuQixlQUFBLGNBQUFBLGVBQUEsR0FBSVI7SUFDbEMsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDSyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTJCLE1BQU0sRUFBRTNCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFSSxJQUFJLEVBQUVKLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFVyxVQUFVLEVBQUViLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
6
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
@@ -13,40 +13,17 @@ import { useEntitySearch } from './useEntitySearch';
13
13
  import { useMentionAllowedTypes } from './useMentionAllowedTypes';
14
14
  import { useCaretPosition } from './useCaretPosition';
15
15
  import { EVENTS, useEvent } from './useEvent';
16
+ import { getAtRunTabTypes, getTriggerSequenceFromType, getTypeFromTriggerSequence } from '../utils/contextMentionTriggers';
16
17
  import { jsx as _jsx } from "react/jsx-runtime";
17
- var TYPE_TO_TRIGGER_SEQUENCE = {
18
- user: 1,
19
- task: 2,
20
- project: 3
21
- };
22
- var getTypeFromTriggerSequence = function getTypeFromTriggerSequence(atRunLength, allowedTypes, defaultType) {
23
- var _Object$entries$find$, _Object$entries$find, _allowedTypes$tabIdx;
24
- var normalized = Math.max(1, Math.floor(atRunLength));
25
- var mappedType = (_Object$entries$find$ = (_Object$entries$find = Object.entries(TYPE_TO_TRIGGER_SEQUENCE).find(function (_ref) {
26
- var _ref2 = _slicedToArray(_ref, 2),
27
- len = _ref2[1];
28
- return len === normalized;
29
- })) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[0]) !== null && _Object$entries$find$ !== void 0 ? _Object$entries$find$ : null;
30
- if (mappedType && allowedTypes.includes(mappedType)) return mappedType;
31
- var tabIdx = Math.min(Math.max(0, normalized - 1), allowedTypes.length - 1);
32
- return (_allowedTypes$tabIdx = allowedTypes[tabIdx]) !== null && _allowedTypes$tabIdx !== void 0 ? _allowedTypes$tabIdx : defaultType;
33
- };
34
- var getTriggerSequenceFromType = function getTriggerSequenceFromType(type, allowedTypes) {
35
- var mapped = TYPE_TO_TRIGGER_SEQUENCE[type];
36
- if (mapped) return mapped;
37
- var idx = allowedTypes.indexOf(type);
38
- return idx >= 0 ? idx + 1 : 1;
39
- };
40
-
41
18
  /**
42
19
  * Deriva clientId, projectId, agentEntity y MCP desde el contexto global (incl.
43
20
  * `entityValues` y `chipsProject`) para filtrar recents y búsqueda GraphQL.
44
21
  */
45
22
  var useDerivedScope = function useDerivedScope() {
46
- var _ref3, _ctx$client$id, _ctx$client, _ctx$entityValues, _ref4, _ref5, _ctx$project$id, _ctx$project, _ctx$entityValues2, _ctx$chipsProject, _ctx$agent$entity, _ctx$agent, _ctx$agent$connectors, _ctx$agent2;
23
+ var _ref, _ctx$client$id, _ctx$client, _ctx$entityValues, _ref2, _ref3, _ctx$project$id, _ctx$project, _ctx$entityValues2, _ctx$chipsProject, _ctx$agent$entity, _ctx$agent, _ctx$agent$connectors, _ctx$agent2;
47
24
  var ctx = useGlobalContext();
48
- var clientId = (_ref3 = (_ctx$client$id = (_ctx$client = ctx.client) === null || _ctx$client === void 0 ? void 0 : _ctx$client.id) !== null && _ctx$client$id !== void 0 ? _ctx$client$id : (_ctx$entityValues = ctx.entityValues) === null || _ctx$entityValues === void 0 ? void 0 : _ctx$entityValues.clientId) !== null && _ref3 !== void 0 ? _ref3 : null;
49
- var projectId = (_ref4 = (_ref5 = (_ctx$project$id = (_ctx$project = ctx.project) === null || _ctx$project === void 0 ? void 0 : _ctx$project.id) !== null && _ctx$project$id !== void 0 ? _ctx$project$id : (_ctx$entityValues2 = ctx.entityValues) === null || _ctx$entityValues2 === void 0 ? void 0 : _ctx$entityValues2.projectId) !== null && _ref5 !== void 0 ? _ref5 : (_ctx$chipsProject = ctx.chipsProject) === null || _ctx$chipsProject === void 0 ? void 0 : _ctx$chipsProject.projectId) !== null && _ref4 !== void 0 ? _ref4 : null;
25
+ var clientId = (_ref = (_ctx$client$id = (_ctx$client = ctx.client) === null || _ctx$client === void 0 ? void 0 : _ctx$client.id) !== null && _ctx$client$id !== void 0 ? _ctx$client$id : (_ctx$entityValues = ctx.entityValues) === null || _ctx$entityValues === void 0 ? void 0 : _ctx$entityValues.clientId) !== null && _ref !== void 0 ? _ref : null;
26
+ var projectId = (_ref2 = (_ref3 = (_ctx$project$id = (_ctx$project = ctx.project) === null || _ctx$project === void 0 ? void 0 : _ctx$project.id) !== null && _ctx$project$id !== void 0 ? _ctx$project$id : (_ctx$entityValues2 = ctx.entityValues) === null || _ctx$entityValues2 === void 0 ? void 0 : _ctx$entityValues2.projectId) !== null && _ref3 !== void 0 ? _ref3 : (_ctx$chipsProject = ctx.chipsProject) === null || _ctx$chipsProject === void 0 ? void 0 : _ctx$chipsProject.projectId) !== null && _ref2 !== void 0 ? _ref2 : null;
50
27
  var agentEntity = (_ctx$agent$entity = (_ctx$agent = ctx.agent) === null || _ctx$agent === void 0 ? void 0 : _ctx$agent.entity) !== null && _ctx$agent$entity !== void 0 ? _ctx$agent$entity : null;
51
28
  var mcpSlugsKey = ((_ctx$agent$connectors = (_ctx$agent2 = ctx.agent) === null || _ctx$agent2 === void 0 || (_ctx$agent2 = _ctx$agent2.connectors) === null || _ctx$agent2 === void 0 || (_ctx$agent2 = _ctx$agent2.find(function (c) {
52
29
  return c.group === 'MCP';
@@ -67,7 +44,8 @@ var useDerivedScope = function useDerivedScope() {
67
44
  mcpSlugs: mcpSlugs,
68
45
  agentEntity: agentEntity
69
46
  };
70
- }, [clientId, projectId, mcpSlugs, agentEntity]);
47
+ }, [clientId, projectId, mcpSlugs, agentEntity] // skills se inyecta en useMentionPopover
48
+ );
71
49
  };
72
50
 
73
51
  /**
@@ -76,11 +54,12 @@ var useDerivedScope = function useDerivedScope() {
76
54
  * Los filtros de búsqueda usan `useDerivedScope`: especialista proyecto acota tareas
77
55
  * al `projectId` del contexto; especialista cliente, proyectos al `clientId` (en `extra` de search).
78
56
  */
79
- export var useMentionPopover = function useMentionPopover(_ref6) {
80
- var editorRef = _ref6.editorRef,
81
- popoverAnchorRef = _ref6.popoverAnchorRef,
82
- enabledTypes = _ref6.enabledTypes,
83
- onMentionAdded = _ref6.onMentionAdded;
57
+ export var useMentionPopover = function useMentionPopover(_ref4) {
58
+ var editorRef = _ref4.editorRef,
59
+ popoverAnchorRef = _ref4.popoverAnchorRef,
60
+ enabledTypes = _ref4.enabledTypes,
61
+ skills = _ref4.skills,
62
+ onMentionAdded = _ref4.onMentionAdded;
84
63
  var _useT = useT(),
85
64
  t = _useT.t;
86
65
  var event = useEvent();
@@ -115,7 +94,12 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
115
94
  var hasEmittedOpen = useRef(false);
116
95
  var popoverRef = useRef(null);
117
96
  var getCaretRect = useCaretPosition();
118
- var scope = useDerivedScope();
97
+ var derivedScope = useDerivedScope();
98
+ var scope = useMemo(function () {
99
+ return skills ? _objectSpread(_objectSpread({}, derivedScope), {}, {
100
+ skills: skills
101
+ }) : derivedScope;
102
+ }, [derivedScope, skills]);
119
103
  var _useEntitySearch = useEntitySearch(activeType, scope),
120
104
  items = _useEntitySearch.items,
121
105
  loading = _useEntitySearch.loading,
@@ -125,7 +109,8 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
125
109
  isLoadingMore = _useEntitySearch.isLoadingMore,
126
110
  loadMore = _useEntitySearch.loadMore,
127
111
  searchValue = _useEntitySearch.searchValue,
128
- updateSearchValue = _useEntitySearch.updateSearchValue;
112
+ updateSearchValue = _useEntitySearch.updateSearchValue,
113
+ skillsCatalogEmpty = _useEntitySearch.skillsCatalogEmpty;
129
114
  useEffect(function () {
130
115
  if (!allowedTypes.includes(activeType)) {
131
116
  setActiveType(defaultType);
@@ -174,13 +159,26 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
174
159
  return;
175
160
  }
176
161
  if (trigger.active) {
177
- // Si hay más `@` que tabs (p. ej. agente proyecto: `@` usuario, `@@` tarea → `@@@`),
178
- // se usa la última tab y los `@` de más pasan al texto de búsqueda (`@@@` ⇒ tab tarea + query `@`).
179
- // Con ≥3 tabs (cliente), `@@@` coincide con la 3.er tab (`project`).
180
- var overflowAtCount = Math.max(0, trigger.atRunLength - allowedTypes.length);
181
- var effectiveAtRunLength = Math.min(trigger.atRunLength, allowedTypes.length);
182
- var effectiveQuery = "".concat('@'.repeat(overflowAtCount)).concat(trigger.query);
183
- var typeFromAt = getTypeFromTriggerSequence(effectiveAtRunLength, allowedTypes, defaultType);
162
+ var isSkillTrigger = allowedTypes.includes('skill') && trigger.atRunLength === 1 && trigger.query.startsWith('/');
163
+ var atRunTabTypes = getAtRunTabTypes(allowedTypes);
164
+ var atRunTypesOrAll = atRunTabTypes.length > 0 ? atRunTabTypes : allowedTypes.filter(function (t) {
165
+ return t !== 'skill';
166
+ });
167
+ var isSlashTrigger = trigger.atRunLength < 0;
168
+ var typeFromAt;
169
+ var effectiveQuery;
170
+ if (isSkillTrigger) {
171
+ typeFromAt = 'skill';
172
+ effectiveQuery = trigger.query.slice(1);
173
+ } else if (isSlashTrigger) {
174
+ typeFromAt = getTypeFromTriggerSequence(trigger.atRunLength, allowedTypes, defaultType);
175
+ effectiveQuery = trigger.query;
176
+ } else {
177
+ var overflowAtCount = Math.max(0, trigger.atRunLength - atRunTabTypes.length);
178
+ var effectiveAtRunLength = Math.min(trigger.atRunLength, atRunTypesOrAll.length);
179
+ effectiveQuery = "".concat('@'.repeat(overflowAtCount)).concat(trigger.query);
180
+ typeFromAt = getTypeFromTriggerSequence(effectiveAtRunLength, atRunTypesOrAll, defaultType);
181
+ }
184
182
  if (!popoverOpen) {
185
183
  setPopoverOpen(true);
186
184
  setActiveType(typeFromAt);
@@ -229,10 +227,17 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
229
227
  close();
230
228
  }, [editorRef, onMentionAdded, event, close]);
231
229
  var handleTypeChange = useCallback(function (type) {
232
- var _editorRef$current3;
233
230
  setActiveType(type);
234
- var nextRunLength = getTriggerSequenceFromType(type, allowedTypes);
235
- (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.syncTriggerAtRunLength(nextRunLength);
231
+ if (type === 'skill') {
232
+ var _editorRef$current3;
233
+ (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.syncSkillTrigger();
234
+ } else {
235
+ var _editorRef$current4;
236
+ var nextRunLength = getTriggerSequenceFromType(type, allowedTypes.filter(function (entityType) {
237
+ return entityType !== 'skill';
238
+ }));
239
+ (_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.syncTriggerAtRunLength(nextRunLength);
240
+ }
236
241
  event(EVENTS.aiChatMentionTypeSwitch, {
237
242
  type: type
238
243
  });
@@ -333,6 +338,7 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
333
338
  loading: loading,
334
339
  error: error,
335
340
  hideRecentsLabel: hideRecentsLabel,
341
+ skillsCatalogEmpty: skillsCatalogEmpty,
336
342
  hasMore: hasMore,
337
343
  isLoadingMore: isLoadingMore,
338
344
  onReachListEnd: loadMore,
@@ -349,7 +355,7 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
349
355
  }
350
356
  })
351
357
  }));
352
- }, [popoverOpen, popoverPos, mentionPopoverZIndex, allowedTypes, activeType, handleTypeChange, items, loading, error, hideRecentsLabel, hasMore, isLoadingMore, loadMore, searchValue, insertSelectedItem, activeIndex, isKeyboardNavActive]);
358
+ }, [popoverOpen, popoverPos, mentionPopoverZIndex, allowedTypes, activeType, handleTypeChange, items, loading, error, hideRecentsLabel, skillsCatalogEmpty, hasMore, isLoadingMore, loadMore, searchValue, insertSelectedItem, activeIndex, isKeyboardNavActive]);
353
359
  return {
354
360
  popoverOpen: popoverOpen,
355
361
  resetMentionOpenTracking: resetMentionOpenTracking,
@@ -359,4 +365,4 @@ export var useMentionPopover = function useMentionPopover(_ref6) {
359
365
  close: close
360
366
  };
361
367
  };
362
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsInVzZUNhcmV0UG9zaXRpb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImpzeCIsIl9qc3giLCJUWVBFX1RPX1RSSUdHRVJfU0VRVUVOQ0UiLCJ1c2VyIiwidGFzayIsInByb2plY3QiLCJnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZSIsImF0UnVuTGVuZ3RoIiwiYWxsb3dlZFR5cGVzIiwiZGVmYXVsdFR5cGUiLCJfT2JqZWN0JGVudHJpZXMkZmluZCQiLCJfT2JqZWN0JGVudHJpZXMkZmluZCIsIl9hbGxvd2VkVHlwZXMkdGFiSWR4Iiwibm9ybWFsaXplZCIsIk1hdGgiLCJtYXgiLCJmbG9vciIsIm1hcHBlZFR5cGUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmluZCIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5IiwibGVuIiwiaW5jbHVkZXMiLCJ0YWJJZHgiLCJtaW4iLCJsZW5ndGgiLCJnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSIsInR5cGUiLCJtYXBwZWQiLCJpZHgiLCJpbmRleE9mIiwidXNlRGVyaXZlZFNjb3BlIiwiX3JlZjMiLCJfY3R4JGNsaWVudCRpZCIsIl9jdHgkY2xpZW50IiwiX2N0eCRlbnRpdHlWYWx1ZXMiLCJfcmVmNCIsIl9yZWY1IiwiX2N0eCRwcm9qZWN0JGlkIiwiX2N0eCRwcm9qZWN0IiwiX2N0eCRlbnRpdHlWYWx1ZXMyIiwiX2N0eCRjaGlwc1Byb2plY3QiLCJfY3R4JGFnZW50JGVudGl0eSIsIl9jdHgkYWdlbnQiLCJfY3R4JGFnZW50JGNvbm5lY3RvcnMiLCJfY3R4JGFnZW50MiIsImN0eCIsImNsaWVudElkIiwiY2xpZW50IiwiaWQiLCJlbnRpdHlWYWx1ZXMiLCJwcm9qZWN0SWQiLCJjaGlwc1Byb2plY3QiLCJhZ2VudEVudGl0eSIsImFnZW50IiwiZW50aXR5IiwibWNwU2x1Z3NLZXkiLCJjb25uZWN0b3JzIiwiYyIsImdyb3VwIiwic2x1Z3MiLCJqb2luIiwibWNwU2x1Z3MiLCJfY3R4JGFnZW50JGNvbm5lY3RvcnMyIiwiX2N0eCRhZ2VudDMiLCJyYXciLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJTZXQiLCJmaWx0ZXIiLCJzIiwidHJpbSIsInNvcnQiLCJ1c2VNZW50aW9uUG9wb3ZlciIsIl9yZWY2IiwiZWRpdG9yUmVmIiwicG9wb3ZlckFuY2hvclJlZiIsImVuYWJsZWRUeXBlcyIsIm9uTWVudGlvbkFkZGVkIiwiX3VzZVQiLCJ0IiwiZXZlbnQiLCJfdXNlTWVudGlvbkFsbG93ZWRUeXAiLCJtZW50aW9uUG9wb3ZlclpJbmRleCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicG9wb3Zlck9wZW4iLCJzZXRQb3BvdmVyT3BlbiIsIl91c2VTdGF0ZTUiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJfdXNlU3RhdGU2IiwicG9wb3ZlclBvcyIsInNldFBvcG92ZXJQb3MiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImFjdGl2ZUluZGV4Iiwic2V0QWN0aXZlSW5kZXgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImlzS2V5Ym9hcmROYXZBY3RpdmUiLCJzZXRJc0tleWJvYXJkTmF2QWN0aXZlIiwiaGFzRW1pdHRlZE9wZW4iLCJwb3BvdmVyUmVmIiwiZ2V0Q2FyZXRSZWN0Iiwic2NvcGUiLCJfdXNlRW50aXR5U2VhcmNoIiwiaXRlbXMiLCJsb2FkaW5nIiwiZXJyb3IiLCJoaWRlUmVjZW50c0xhYmVsIiwiaGFzTW9yZSIsImlzTG9hZGluZ01vcmUiLCJsb2FkTW9yZSIsInNlYXJjaFZhbHVlIiwidXBkYXRlU2VhcmNoVmFsdWUiLCJwb3NpdGlvblBvcG92ZXIiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UyIiwiZnJvbUFuY2hvciIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJmcm9tRWRpdG9yIiwiZ2V0RWRpdG9yQ2xpZW50UmVjdCIsImNhbGwiLCJyZWN0IiwiY2FyZXQiLCJ2aWV3cG9ydEgiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsInZpZXdwb3J0VyIsImlubmVyV2lkdGgiLCJmYWxsYmFja1ciLCJ0b3AiLCJyZXNldE1lbnRpb25PcGVuVHJhY2tpbmciLCJjbG9zZSIsImhhbmRsZVRyaWdnZXIiLCJ0cmlnZ2VyIiwiYWN0aXZlIiwib3ZlcmZsb3dBdENvdW50IiwiZWZmZWN0aXZlQXRSdW5MZW5ndGgiLCJlZmZlY3RpdmVRdWVyeSIsImNvbmNhdCIsInJlcGVhdCIsInF1ZXJ5IiwidHlwZUZyb21BdCIsImFpQ2hhdE1lbnRpb25PcGVuIiwiaW5zZXJ0U2VsZWN0ZWRJdGVtIiwiaXRlbSIsIl9pdGVtJHJhdyRjbGllbnRJZCIsIl9pdGVtJHJhdyRjbGllbnROYW1lIiwiX2l0ZW0kcmF3JHByb2plY3ROYW1lIiwiX2l0ZW0kcmF3JGZlZUlkIiwiX2l0ZW0kcmF3JGZhdGhlcklkIiwiX2l0ZW0kcmF3JGZhdGhlclRpdGxlIiwiX2l0ZW0kcmF3JHRvdGFsUHJveWVjIiwiX2l0ZW0kcmF3JG5hbWUiLCJfaXRlbSRyYXckcGljdHVyZSIsIl9pdGVtJHJhdyRwb3NpdGlvbk5hbSIsIl9pdGVtJHJhdyRlbWFpbCIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJtZW50aW9uIiwibGFiZWwiLCJwcmltYXJ5IiwibWV0YWRhdGEiLCJjbGllbnROYW1lIiwicHJvamVjdE5hbWUiLCJmZWVJZCIsImZhdGhlcklkIiwiZmF0aGVyVGl0bGUiLCJ0b3RhbFByb3llY3RvcyIsIm5hbWUiLCJwaWN0dXJlIiwicG9zaXRpb25OYW1lIiwiZW1haWwiLCJpbnNlcnRNZW50aW9uIiwiYWlDaGF0TWVudGlvblNlbGVjdCIsIlN0cmluZyIsImhhbmRsZVR5cGVDaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwibmV4dFJ1bkxlbmd0aCIsInN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgiLCJhaUNoYXRNZW50aW9uVHlwZVN3aXRjaCIsImhhbmRsZUtleURvd24iLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJtZXRhS2V5IiwiYWx0S2V5IiwiZGVsdGEiLCJuZXh0SWR4IiwicHJldiIsInVuZGVmaW5lZCIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSIsIm1vdXNlRXZlbnQiLCJfcG9wb3ZlclJlZiRjdXJyZW50IiwiX3BvcG92ZXJBbmNob3JSZWYkY3VyMiIsInRhcmdldCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJwcmV2SXNMb2FkaW5nTW9yZVJlZiIsInBvcG92ZXJOb2RlIiwiX29iamVjdFNwcmVhZCIsInJlZiIsIl9kZWZpbmVQcm9wZXJ0eSIsIiRib3R0b20iLCIkbGVmdCIsIiR3aWR0aCIsIiR6SW5kZXgiLCJvbk1vdXNlRG93biIsInN0b3BQcm9wYWdhdGlvbiIsImNoaWxkcmVuIiwib25UeXBlQ2hhbmdlIiwib25SZWFjaExpc3RFbmQiLCJrZXlib2FyZEhpbnQiLCJkZWZhdWx0VmFsdWUiLCJvbkl0ZW1TZWxlY3RlZCIsIm9uQWN0aXZlSW5kZXhDaGFuZ2UiLCJvbk1vdXNlTW92ZUluTGlzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VNZW50aW9uUG9wb3Zlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5Ym9hcmRFdmVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7XG4gIENvbnRleHRNZW50aW9uUG9wb3ZlcixcbiAgTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUixcbiAgU0NNUEFuY2hvcixcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgRW50aXR5U2VhcmNoU2NvcGUsIHVzZUVudGl0eVNlYXJjaCB9IGZyb20gJy4vdXNlRW50aXR5U2VhcmNoJ1xuaW1wb3J0IHsgdXNlTWVudGlvbkFsbG93ZWRUeXBlcyB9IGZyb20gJy4vdXNlTWVudGlvbkFsbG93ZWRUeXBlcydcbmltcG9ydCB7IHVzZUNhcmV0UG9zaXRpb24gfSBmcm9tICcuL3VzZUNhcmV0UG9zaXRpb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi91c2VFdmVudCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lbnRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmV4cG9ydCB0eXBlIFVzZU1lbnRpb25Qb3BvdmVyT3B0aW9ucyA9IHtcbiAgZWRpdG9yUmVmOiBSZWZPYmplY3Q8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+XG4gIC8qKlxuICAgKiBOb2RvIGN1eW8gYW5jaG8geSBib3JkZSBzdXBlcmlvciBkZWZpbmVuIGVsIHBvcG92ZXIgKHAuIGVqLiB3cmFwcGVyIGRlbCBpbnB1dCBlbiBNQUlBKS5cbiAgICogU2kgbm8gc2UgcGFzYSwgc2UgdXNhIGVsIHJlY3QgZGVsIGNvbnRlbnRlZGl0YWJsZSAoYGdldEVkaXRvckNsaWVudFJlY3RgKS5cbiAgICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogT3ZlcnJpZGUgZGVsIHNldCBkZSB0YWJzIHBlcm1pdGlkYXM7IHNpIG5vIHNlIHBhc2Egc2UgZGVyaXZhIGRlbCBhZ2VudC4gKi9cbiAgZW5hYmxlZFR5cGVzPzogQ29udGV4dEVudGl0eVR5cGVbXVxuICAvKiogQ2FsbGJhY2sgY3VhbmRvIGVsIHVzdWFyaW8gaW5zZXJ0YSB1bmEgbWVudGlvbiB2w61hIGNsaWNrL3RlY2xhZG8uICovXG4gIG9uTWVudGlvbkFkZGVkPzogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIFVzZU1lbnRpb25Qb3BvdmVyUmV0dXJuID0ge1xuICBwb3BvdmVyT3BlbjogYm9vbGVhblxuICAvKipcbiAgICogUmVpbmljaWEgZWwgdHJhY2tpbmcgZGUgYEFJX0NIQVRfTUVOVElPTl9PUEVOYCAocHJpbWVyYSBhcGVydHVyYSBwb3IgbWVuc2FqZSkuXG4gICAqIExsYW1hciB0cmFzIGVudmlhciBlbCBtZW5zYWplIG8gYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuLlxuICAgKi9cbiAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nOiAoKSA9PiB2b2lkXG4gIC8qKiBQcm9jZXNhIGVsIHRyaWdnZXIgcHJvdmVuaWVudGUgZGVsIGBDb250ZXh0TWVudGlvbkVkaXRvci5vbklucHV0YC4gKi9cbiAgaGFuZGxlVHJpZ2dlcjogKHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH0pID0+IHZvaWRcbiAgLyoqXG4gICAqIE1hbmVqbyBkZSB0ZWNsYXMgcmVsYXRpdmFzIGFsIHBvcG92ZXIgKG5hdmVnYWNpw7NuLCBzZWxlY2Npw7NuLCBjYW1iaW8gZGVcbiAgICogdGFiIHkgZXNjYXBlKS4gRGV2dWVsdmUgYHRydWVgIHNpIGNvbnN1bWnDsyBsYSBrZXksIHBhcmEgcXVlIGVsIGNvbnN1bWVyXG4gICAqIHB1ZWRhIGRlY2lkaXIgc2kgc2VndWlyIHByb2Nlc2FuZG8gb3RyYXMgdGVjbGFzIChwLmVqLiBFbnRlciBwYXJhIGVudmlhcikuXG4gICAqL1xuICBoYW5kbGVLZXlEb3duOiAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IGJvb2xlYW5cbiAgLyoqIE5vZG8gZGVsIHBvcG92ZXI7IGVsIGNvbnN1bWVyIGRlYmUgcG9ydGFybG8gY29uIGBjcmVhdGVQb3J0YWxgLiAqL1xuICBwb3BvdmVyTm9kZTogUmVhY3ROb2RlIHwgbnVsbFxuICAvKiogQ2llcnJhIGVsIHBvcG92ZXIgeSBsaW1waWEgZWwgcXVlcnkuICovXG4gIGNsb3NlOiAoKSA9PiB2b2lkXG59XG5cbmNvbnN0IFRZUEVfVE9fVFJJR0dFUl9TRVFVRU5DRTogUGFydGlhbDxSZWNvcmQ8Q29udGV4dEVudGl0eVR5cGUsIG51bWJlcj4+ID0ge1xuICB1c2VyOiAxLFxuICB0YXNrOiAyLFxuICBwcm9qZWN0OiAzLFxufVxuXG5jb25zdCBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZSA9IChcbiAgYXRSdW5MZW5ndGg6IG51bWJlcixcbiAgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdLFxuICBkZWZhdWx0VHlwZTogQ29udGV4dEVudGl0eVR5cGVcbik6IENvbnRleHRFbnRpdHlUeXBlID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoYXRSdW5MZW5ndGgpKVxuICBjb25zdCBtYXBwZWRUeXBlID0gKE9iamVjdC5lbnRyaWVzKFRZUEVfVE9fVFJJR0dFUl9TRVFVRU5DRSkuZmluZCgoWywgbGVuXSkgPT4gbGVuID09PSBub3JtYWxpemVkKT8uWzBdID8/XG4gICAgbnVsbCkgYXMgQ29udGV4dEVudGl0eVR5cGUgfCBudWxsXG4gIGlmIChtYXBwZWRUeXBlICYmIGFsbG93ZWRUeXBlcy5pbmNsdWRlcyhtYXBwZWRUeXBlKSkgcmV0dXJuIG1hcHBlZFR5cGVcbiAgY29uc3QgdGFiSWR4ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgbm9ybWFsaXplZCAtIDEpLCBhbGxvd2VkVHlwZXMubGVuZ3RoIC0gMSlcbiAgcmV0dXJuIGFsbG93ZWRUeXBlc1t0YWJJZHhdID8/IGRlZmF1bHRUeXBlXG59XG5cbmNvbnN0IGdldFRyaWdnZXJTZXF1ZW5jZUZyb21UeXBlID0gKHR5cGU6IENvbnRleHRFbnRpdHlUeXBlLCBhbGxvd2VkVHlwZXM6IENvbnRleHRFbnRpdHlUeXBlW10pOiBudW1iZXIgPT4ge1xuICBjb25zdCBtYXBwZWQgPSBUWVBFX1RPX1RSSUdHRVJfU0VRVUVOQ0VbdHlwZV1cbiAgaWYgKG1hcHBlZCkgcmV0dXJuIG1hcHBlZFxuICBjb25zdCBpZHggPSBhbGxvd2VkVHlwZXMuaW5kZXhPZih0eXBlKVxuICByZXR1cm4gaWR4ID49IDAgPyBpZHggKyAxIDogMVxufVxuXG4vKipcbiAqIERlcml2YSBjbGllbnRJZCwgcHJvamVjdElkLCBhZ2VudEVudGl0eSB5IE1DUCBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwgKGluY2wuXG4gKiBgZW50aXR5VmFsdWVzYCB5IGBjaGlwc1Byb2plY3RgKSBwYXJhIGZpbHRyYXIgcmVjZW50cyB5IGLDunNxdWVkYSBHcmFwaFFMLlxuICovXG5jb25zdCB1c2VEZXJpdmVkU2NvcGUgPSAoKTogRW50aXR5U2VhcmNoU2NvcGUgPT4ge1xuICBjb25zdCBjdHggPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgY2xpZW50SWQgPSBjdHguY2xpZW50Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5jbGllbnRJZCA/PyBudWxsXG4gIGNvbnN0IHByb2plY3RJZCA9IGN0eC5wcm9qZWN0Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5wcm9qZWN0SWQgPz8gY3R4LmNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/IG51bGxcbiAgY29uc3QgYWdlbnRFbnRpdHkgPSBjdHguYWdlbnQ/LmVudGl0eSA/PyBudWxsXG4gIGNvbnN0IG1jcFNsdWdzS2V5ID0gKGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuXG4gIGNvbnN0IG1jcFNsdWdzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gY3R4LmFnZW50Py5jb25uZWN0b3JzPy5maW5kKGMgPT4gYy5ncm91cCA9PT0gJ01DUCcpPy5zbHVncyA/PyBbXVxuICAgIHJldHVybiBbLi4ubmV3IFNldChyYXcuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gdHlwZW9mIHMgPT09ICdzdHJpbmcnICYmIHMudHJpbSgpLmxlbmd0aCA+IDApKV0uc29ydCgpXG4gIH0sIFttY3BTbHVnc0tleV0pXG5cbiAgcmV0dXJuIHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7IGNsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eSB9KSxcbiAgICBbY2xpZW50SWQsIHByb2plY3RJZCwgbWNwU2x1Z3MsIGFnZW50RW50aXR5XVxuICApXG59XG5cbi8qKlxuICogRW5jYXBzdWxhIGxhIGzDs2dpY2EgZGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoZXN0YWRvLCBmZXRjaCBwb3IgdGFiLCBhbmFseXRpY3MsXG4gKiBwb3NpY2lvbmFtaWVudG8pLiBFbCBjb25zdW1lciBtYW50aWVuZSBlbCBlZGl0b3IgeSBlbCBlbnbDrW8gZGVsIG1lbnNhamUuXG4gKiBMb3MgZmlsdHJvcyBkZSBiw7pzcXVlZGEgdXNhbiBgdXNlRGVyaXZlZFNjb3BlYDogZXNwZWNpYWxpc3RhIHByb3llY3RvIGFjb3RhIHRhcmVhc1xuICogYWwgYHByb2plY3RJZGAgZGVsIGNvbnRleHRvOyBlc3BlY2lhbGlzdGEgY2xpZW50ZSwgcHJveWVjdG9zIGFsIGBjbGllbnRJZGAgKGVuIGBleHRyYWAgZGUgc2VhcmNoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1lbnRpb25Qb3BvdmVyID0gKHtcbiAgZWRpdG9yUmVmLFxuICBwb3BvdmVyQW5jaG9yUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIG9uTWVudGlvbkFkZGVkLFxufTogVXNlTWVudGlvblBvcG92ZXJPcHRpb25zKTogVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlIH0gPSB1c2VNZW50aW9uQWxsb3dlZFR5cGVzKGVuYWJsZWRUeXBlcylcbiAgY29uc3QgbWVudGlvblBvcG92ZXJaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcbiAgY29uc3QgW2FjdGl2ZVR5cGUsIHNldEFjdGl2ZVR5cGVdID0gdXNlU3RhdGU8Q29udGV4dEVudGl0eVR5cGU+KGRlZmF1bHRUeXBlKVxuICBjb25zdCBbcG9wb3Zlck9wZW4sIHNldFBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcG9wb3ZlclBvcywgc2V0UG9wb3ZlclBvc10gPSB1c2VTdGF0ZTx7IGJvdHRvbTogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHdpZHRoOiBudW1iZXIgfT4oe1xuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHdpZHRoOiAwLFxuICB9KVxuICBjb25zdCBbYWN0aXZlSW5kZXgsIHNldEFjdGl2ZUluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0tleWJvYXJkTmF2QWN0aXZlLCBzZXRJc0tleWJvYXJkTmF2QWN0aXZlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBoYXNFbWl0dGVkT3BlbiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcG9wb3ZlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGdldENhcmV0UmVjdCA9IHVzZUNhcmV0UG9zaXRpb24oKVxuXG4gIGNvbnN0IHNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3QgeyBpdGVtcywgbG9hZGluZywgZXJyb3IsIGhpZGVSZWNlbnRzTGFiZWwsIGhhc01vcmUsIGlzTG9hZGluZ01vcmUsIGxvYWRNb3JlLCBzZWFyY2hWYWx1ZSwgdXBkYXRlU2VhcmNoVmFsdWUgfSA9XG4gICAgdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHJlY3QgPSBmcm9tQW5jaG9yID8/IGZyb21FZGl0b3JcbiAgICBpZiAoIXJlY3QgfHwgcmVjdC53aWR0aCA8PSAwKSB7XG4gICAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgpXG4gICAgICBpZiAoIWNhcmV0KSByZXR1cm5cbiAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgIGNvbnN0IGZhbGxiYWNrVyA9IDMyMFxuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIGZhbGxiYWNrVyAtIDgsIGNhcmV0LmxlZnQpKVxuICAgICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICAgIHdpZHRoOiBmYWxsYmFja1csXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gY2FyZXQudG9wICsgNCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCByZWN0LmxlZnQpKVxuICAgIC8qKiBQb3BvdmVyIHNpZW1wcmUgYXJyaWJhIGRlbCBpbnB1dDogYm9yZGUgaW5mZXJpb3IgZGVsIHBvcG92ZXIgfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZWwgYW5jbGEuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgNCxcbiAgICB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgZWRpdG9yUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIGNvbnN0IHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKFxuICAgICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB7XG4gICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocG9wb3Zlck9wZW4pIGNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyLmFjdGl2ZSkge1xuICAgICAgICAvLyBTaSBoYXkgbcOhcyBgQGAgcXVlIHRhYnMgKHAuIGVqLiBhZ2VudGUgcHJveWVjdG86IGBAYCB1c3VhcmlvLCBgQEBgIHRhcmVhIOKGkiBgQEBAYCksXG4gICAgICAgIC8vIHNlIHVzYSBsYSDDumx0aW1hIHRhYiB5IGxvcyBgQGAgZGUgbcOhcyBwYXNhbiBhbCB0ZXh0byBkZSBiw7pzcXVlZGEgKGBAQEBgIOKHkiB0YWIgdGFyZWEgKyBxdWVyeSBgQGApLlxuICAgICAgICAvLyBDb24g4omlMyB0YWJzIChjbGllbnRlKSwgYEBAQGAgY29pbmNpZGUgY29uIGxhIDMuZXIgdGFiIChgcHJvamVjdGApLlxuICAgICAgICBjb25zdCBvdmVyZmxvd0F0Q291bnQgPSBNYXRoLm1heCgwLCB0cmlnZ2VyLmF0UnVuTGVuZ3RoIC0gYWxsb3dlZFR5cGVzLmxlbmd0aClcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQXRSdW5MZW5ndGggPSBNYXRoLm1pbih0cmlnZ2VyLmF0UnVuTGVuZ3RoLCBhbGxvd2VkVHlwZXMubGVuZ3RoKVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVRdWVyeSA9IGAkeydAJy5yZXBlYXQob3ZlcmZsb3dBdENvdW50KX0ke3RyaWdnZXIucXVlcnl9YFxuICAgICAgICBjb25zdCB0eXBlRnJvbUF0ID0gZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UoZWZmZWN0aXZlQXRSdW5MZW5ndGgsIGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUpXG5cbiAgICAgICAgaWYgKCFwb3BvdmVyT3Blbikge1xuICAgICAgICAgIHNldFBvcG92ZXJPcGVuKHRydWUpXG4gICAgICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlRnJvbUF0KVxuICAgICAgICAgIHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgICAgICAgaWYgKCFoYXNFbWl0dGVkT3Blbi5jdXJyZW50KSB7XG4gICAgICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvbk9wZW4sIHsgdHlwZTogdHlwZUZyb21BdCB9KVxuICAgICAgICAgICAgaGFzRW1pdHRlZE9wZW4uY3VycmVudCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlRnJvbUF0KVxuICAgICAgICAgIHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2VhcmNoVmFsdWUoZWZmZWN0aXZlUXVlcnkpXG4gICAgICB9IGVsc2UgaWYgKHBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlLCBwb3BvdmVyT3BlbiwgcG9zaXRpb25Qb3BvdmVyLCB1cGRhdGVTZWFyY2hWYWx1ZSwgZXZlbnQsIGNsb3NlXVxuICApXG5cbiAgY29uc3QgaW5zZXJ0U2VsZWN0ZWRJdGVtID0gdXNlQ2FsbGJhY2soXG4gICAgKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3QgbWVudGlvbjogQ29udGV4dE1lbnRpb24gPSB7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgIGxhYmVsOiBpdGVtLnByaW1hcnksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY2xpZW50SWQ6IGl0ZW0ucmF3LmNsaWVudElkID8/IG51bGwsXG4gICAgICAgICAgY2xpZW50TmFtZTogaXRlbS5yYXcuY2xpZW50TmFtZSA/PyBudWxsLFxuICAgICAgICAgIHByb2plY3ROYW1lOiBpdGVtLnJhdy5wcm9qZWN0TmFtZSA/PyBudWxsLFxuICAgICAgICAgIGZlZUlkOiBpdGVtLnJhdy5mZWVJZCA/PyBudWxsLFxuICAgICAgICAgIGZhdGhlcklkOiBpdGVtLnJhdy5mYXRoZXJJZCA/PyBudWxsLFxuICAgICAgICAgIGZhdGhlclRpdGxlOiBpdGVtLnJhdy5mYXRoZXJUaXRsZSA/PyBudWxsLFxuICAgICAgICAgIHRvdGFsUHJveWVjdG9zOiBpdGVtLnJhdy50b3RhbFByb3llY3RvcyA/PyBudWxsLFxuICAgICAgICAgIG5hbWU6IGl0ZW0ucmF3Lm5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBwaWN0dXJlOiBpdGVtLnJhdy5waWN0dXJlID8/IG51bGwsXG4gICAgICAgICAgcG9zaXRpb25OYW1lOiBpdGVtLnJhdy5wb3NpdGlvbk5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBlbWFpbDogaXRlbS5yYXcuZW1haWwgPz8gbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRNZW50aW9uKG1lbnRpb24pXG4gICAgICBvbk1lbnRpb25BZGRlZD8uKG1lbnRpb24pXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvblNlbGVjdCwgeyB0eXBlOiBtZW50aW9uLnR5cGUsIGlkOiBTdHJpbmcobWVudGlvbi5pZCkgfSlcbiAgICAgIGNsb3NlKClcbiAgICB9LFxuICAgIFtlZGl0b3JSZWYsIG9uTWVudGlvbkFkZGVkLCBldmVudCwgY2xvc2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVUeXBlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHR5cGU6IENvbnRleHRFbnRpdHlUeXBlKSA9PiB7XG4gICAgICBzZXRBY3RpdmVUeXBlKHR5cGUpXG4gICAgICBjb25zdCBuZXh0UnVuTGVuZ3RoID0gZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUodHlwZSwgYWxsb3dlZFR5cGVzKVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgobmV4dFJ1bkxlbmd0aClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uVHlwZVN3aXRjaCwgeyB0eXBlIH0pXG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBlZGl0b3JSZWYsIGV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFwb3BvdmVyT3BlbiB8fCBhbGxvd2VkVHlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY2xvc2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdBcnJvd0xlZnQnKSAmJiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgaWR4ID0gYWxsb3dlZFR5cGVzLmluZGV4T2YoYWN0aXZlVHlwZSlcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmtleSA9PT0gJ0Fycm93UmlnaHQnID8gMSA6IC0xXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSAoaWR4ICsgZGVsdGEgKyBhbGxvd2VkVHlwZXMubGVuZ3RoKSAlIGFsbG93ZWRUeXBlcy5sZW5ndGhcbiAgICAgICAgaGFuZGxlVHlwZUNoYW5nZShhbGxvd2VkVHlwZXNbbmV4dElkeF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gKGl0ZW1zLmxlbmd0aCA+IDAgPyBNYXRoLm1pbihwcmV2ICsgMSwgaXRlbXMubGVuZ3RoIC0gMSkgOiAwKSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gTWF0aC5tYXgocHJldiAtIDEsIDApKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnVGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaW5zZXJ0U2VsZWN0ZWRJdGVtKGl0ZW1zW2FjdGl2ZUluZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW3BvcG92ZXJPcGVuLCBpdGVtcywgYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBhY3RpdmVJbmRleCwgaW5zZXJ0U2VsZWN0ZWRJdGVtLCBjbG9zZSwgaGFuZGxlVHlwZUNoYW5nZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3BvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIE5vZGUgfCBudWxsXG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgICBpZiAocG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW3BvcG92ZXJPcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZl0pXG5cbiAgY29uc3QgcHJldklzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHByZXZJc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlXG4gICAgfVxuICB9LCBbaXNMb2FkaW5nTW9yZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldklzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgfSwgW2l0ZW1zLmxlbmd0aCwgYWN0aXZlVHlwZV0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8U0NNUEFuY2hvclxuICAgICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9wb3ZlclBvcy5ib3R0b219XG4gICAgICAgICRsZWZ0PXtwb3BvdmVyUG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9wb3ZlclBvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17bWVudGlvblBvcG92ZXJaSW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17aGFuZGxlVHlwZUNoYW5nZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBrZXlib2FyZEhpbnQ9e3QoJ2NvbnRleHRNZW50aW9uLmtleWJvYXJkSGludCcsIHtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ05hdmVnYWNpw7NuIGVudHJlIHBlc3Rhw7FhczogQCwgQEAsIEBAQOKApiBlbiBvcmRlbi4gVGFtYmnDqW4gQWx0L0NtZCArIOKGkC/ihpInLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG9uSXRlbVNlbGVjdGVkPXtpbnNlcnRTZWxlY3RlZEl0ZW19XG4gICAgICAgICAgYWN0aXZlSW5kZXg9e2FjdGl2ZUluZGV4fVxuICAgICAgICAgIG9uQWN0aXZlSW5kZXhDaGFuZ2U9e3NldEFjdGl2ZUluZGV4fVxuICAgICAgICAgIGlzS2V5Ym9hcmROYXZBY3RpdmU9e2lzS2V5Ym9hcmROYXZBY3RpdmV9XG4gICAgICAgICAgb25Nb3VzZU1vdmVJbkxpc3Q9eygpID0+IHNldElzS2V5Ym9hcmROYXZBY3RpdmUoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgPC9TQ01QQW5jaG9yPlxuICAgIClcbiAgfSwgW1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHBvcG92ZXJQb3MsXG4gICAgbWVudGlvblBvcG92ZXJaSW5kZXgsXG4gICAgYWxsb3dlZFR5cGVzLFxuICAgIGFjdGl2ZVR5cGUsXG4gICAgaGFuZGxlVHlwZUNoYW5nZSxcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIGluc2VydFNlbGVjdGVkSXRlbSxcbiAgICBhY3RpdmVJbmRleCxcbiAgICBpc0tleWJvYXJkTmF2QWN0aXZlLFxuICBdKVxuXG4gIHJldHVybiB7IHBvcG92ZXJPcGVuLCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGhhbmRsZVRyaWdnZXIsIGhhbmRsZUtleURvd24sIHBvcG92ZXJOb2RlLCBjbG9zZSB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsU0FBOENBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFFOUcsU0FDRUMscUJBQXFCLEVBQ3JCQyw0QkFBNEIsRUFDNUJDLFVBQVUsUUFDTCwyQ0FBMkM7QUFDbEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLDJCQUEyQjtBQUM1RCxTQUFTQyxJQUFJLFFBQVEsUUFBUTtBQUM3QjtBQUNBLFNBQTRCQyxlQUFlLFFBQVEsbUJBQW1CO0FBQ3RFLFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEsWUFBWTtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQTtBQXFDN0MsSUFBTUMsd0JBQW9FLEdBQUc7RUFDM0VDLElBQUksRUFBRSxDQUFDO0VBQ1BDLElBQUksRUFBRSxDQUFDO0VBQ1BDLE9BQU8sRUFBRTtBQUNYLENBQUM7QUFFRCxJQUFNQywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUM5QkMsV0FBbUIsRUFDbkJDLFlBQWlDLEVBQ2pDQyxXQUE4QixFQUNSO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsb0JBQUEsRUFBQUMsb0JBQUE7RUFDdEIsSUFBTUMsVUFBVSxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUVELElBQUks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
368
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsInVzZUNhcmV0UG9zaXRpb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldEF0UnVuVGFiVHlwZXMiLCJnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSIsImdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlIiwianN4IiwiX2pzeCIsInVzZURlcml2ZWRTY29wZSIsIl9yZWYiLCJfY3R4JGNsaWVudCRpZCIsIl9jdHgkY2xpZW50IiwiX2N0eCRlbnRpdHlWYWx1ZXMiLCJfcmVmMiIsIl9yZWYzIiwiX2N0eCRwcm9qZWN0JGlkIiwiX2N0eCRwcm9qZWN0IiwiX2N0eCRlbnRpdHlWYWx1ZXMyIiwiX2N0eCRjaGlwc1Byb2plY3QiLCJfY3R4JGFnZW50JGVudGl0eSIsIl9jdHgkYWdlbnQiLCJfY3R4JGFnZW50JGNvbm5lY3RvcnMiLCJfY3R4JGFnZW50MiIsImN0eCIsImNsaWVudElkIiwiY2xpZW50IiwiaWQiLCJlbnRpdHlWYWx1ZXMiLCJwcm9qZWN0SWQiLCJwcm9qZWN0IiwiY2hpcHNQcm9qZWN0IiwiYWdlbnRFbnRpdHkiLCJhZ2VudCIsImVudGl0eSIsIm1jcFNsdWdzS2V5IiwiY29ubmVjdG9ycyIsImZpbmQiLCJjIiwiZ3JvdXAiLCJzbHVncyIsImpvaW4iLCJtY3BTbHVncyIsIl9jdHgkYWdlbnQkY29ubmVjdG9yczIiLCJfY3R4JGFnZW50MyIsInJhdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIlNldCIsImZpbHRlciIsInMiLCJ0cmltIiwibGVuZ3RoIiwic29ydCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiX3JlZjQiLCJlZGl0b3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwiZW5hYmxlZFR5cGVzIiwic2tpbGxzIiwib25NZW50aW9uQWRkZWQiLCJfdXNlVCIsInQiLCJldmVudCIsIl91c2VNZW50aW9uQWxsb3dlZFR5cCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwibWVudGlvblBvcG92ZXJaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicG9wb3Zlck9wZW4iLCJzZXRQb3BvdmVyT3BlbiIsIl91c2VTdGF0ZTUiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJfdXNlU3RhdGU2IiwicG9wb3ZlclBvcyIsInNldFBvcG92ZXJQb3MiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImFjdGl2ZUluZGV4Iiwic2V0QWN0aXZlSW5kZXgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImlzS2V5Ym9hcmROYXZBY3RpdmUiLCJzZXRJc0tleWJvYXJkTmF2QWN0aXZlIiwiaGFzRW1pdHRlZE9wZW4iLCJwb3BvdmVyUmVmIiwiZ2V0Q2FyZXRSZWN0IiwiZGVyaXZlZFNjb3BlIiwic2NvcGUiLCJfb2JqZWN0U3ByZWFkIiwiX3VzZUVudGl0eVNlYXJjaCIsIml0ZW1zIiwibG9hZGluZyIsImVycm9yIiwiaGlkZVJlY2VudHNMYWJlbCIsImhhc01vcmUiLCJpc0xvYWRpbmdNb3JlIiwibG9hZE1vcmUiLCJzZWFyY2hWYWx1ZSIsInVwZGF0ZVNlYXJjaFZhbHVlIiwic2tpbGxzQ2F0YWxvZ0VtcHR5IiwiaW5jbHVkZXMiLCJwb3NpdGlvblBvcG92ZXIiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UyIiwiZnJvbUFuY2hvciIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJmcm9tRWRpdG9yIiwiZ2V0RWRpdG9yQ2xpZW50UmVjdCIsImNhbGwiLCJyZWN0IiwiY2FyZXQiLCJ2aWV3cG9ydEgiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsInZpZXdwb3J0VyIsImlubmVyV2lkdGgiLCJmYWxsYmFja1ciLCJNYXRoIiwibWF4IiwibWluIiwidG9wIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiY2xvc2UiLCJoYW5kbGVUcmlnZ2VyIiwidHJpZ2dlciIsImFjdGl2ZSIsImlzU2tpbGxUcmlnZ2VyIiwiYXRSdW5MZW5ndGgiLCJxdWVyeSIsInN0YXJ0c1dpdGgiLCJhdFJ1blRhYlR5cGVzIiwiYXRSdW5UeXBlc09yQWxsIiwiaXNTbGFzaFRyaWdnZXIiLCJ0eXBlRnJvbUF0IiwiZWZmZWN0aXZlUXVlcnkiLCJzbGljZSIsIm92ZXJmbG93QXRDb3VudCIsImVmZmVjdGl2ZUF0UnVuTGVuZ3RoIiwiY29uY2F0IiwicmVwZWF0IiwiYWlDaGF0TWVudGlvbk9wZW4iLCJ0eXBlIiwiaW5zZXJ0U2VsZWN0ZWRJdGVtIiwiaXRlbSIsIl9pdGVtJHJhdyRjbGllbnRJZCIsIl9pdGVtJHJhdyRjbGllbnROYW1lIiwiX2l0ZW0kcmF3JHByb2plY3ROYW1lIiwiX2l0ZW0kcmF3JGZlZUlkIiwiX2l0ZW0kcmF3JGZhdGhlcklkIiwiX2l0ZW0kcmF3JGZhdGhlclRpdGxlIiwiX2l0ZW0kcmF3JHRvdGFsUHJveWVjIiwiX2l0ZW0kcmF3JG5hbWUiLCJfaXRlbSRyYXckcGljdHVyZSIsIl9pdGVtJHJhdyRwb3NpdGlvbk5hbSIsIl9pdGVtJHJhdyRlbWFpbCIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJtZW50aW9uIiwibGFiZWwiLCJwcmltYXJ5IiwibWV0YWRhdGEiLCJjbGllbnROYW1lIiwicHJvamVjdE5hbWUiLCJmZWVJZCIsImZhdGhlcklkIiwiZmF0aGVyVGl0bGUiLCJ0b3RhbFByb3llY3RvcyIsIm5hbWUiLCJwaWN0dXJlIiwicG9zaXRpb25OYW1lIiwiZW1haWwiLCJpbnNlcnRNZW50aW9uIiwiYWlDaGF0TWVudGlvblNlbGVjdCIsIlN0cmluZyIsImhhbmRsZVR5cGVDaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwic3luY1NraWxsVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDQiLCJuZXh0UnVuTGVuZ3RoIiwiZW50aXR5VHlwZSIsInN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgiLCJhaUNoYXRNZW50aW9uVHlwZVN3aXRjaCIsImhhbmRsZUtleURvd24iLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJtZXRhS2V5IiwiYWx0S2V5IiwiaWR4IiwiaW5kZXhPZiIsImRlbHRhIiwibmV4dElkeCIsInByZXYiLCJ1bmRlZmluZWQiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJSZWYkY3VycmVudCIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1cjIiLCJ0YXJnZXQiLCJjb250YWlucyIsImRvY3VtZW50IiwicHJldklzTG9hZGluZ01vcmVSZWYiLCJwb3BvdmVyTm9kZSIsInJlZiIsIl9kZWZpbmVQcm9wZXJ0eSIsIiRib3R0b20iLCIkbGVmdCIsIiR3aWR0aCIsIiR6SW5kZXgiLCJvbk1vdXNlRG93biIsInN0b3BQcm9wYWdhdGlvbiIsImNoaWxkcmVuIiwib25UeXBlQ2hhbmdlIiwib25SZWFjaExpc3RFbmQiLCJrZXlib2FyZEhpbnQiLCJkZWZhdWx0VmFsdWUiLCJvbkl0ZW1TZWxlY3RlZCIsIm9uQWN0aXZlSW5kZXhDaGFuZ2UiLCJvbk1vdXNlTW92ZUluTGlzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VNZW50aW9uUG9wb3Zlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5Ym9hcmRFdmVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7XG4gIENvbnRleHRNZW50aW9uUG9wb3ZlcixcbiAgTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUixcbiAgU0NNUEFuY2hvcixcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgRW50aXR5U2VhcmNoU2NvcGUsIHVzZUVudGl0eVNlYXJjaCB9IGZyb20gJy4vdXNlRW50aXR5U2VhcmNoJ1xuaW1wb3J0IHsgdXNlTWVudGlvbkFsbG93ZWRUeXBlcyB9IGZyb20gJy4vdXNlTWVudGlvbkFsbG93ZWRUeXBlcydcbmltcG9ydCB7IHVzZUNhcmV0UG9zaXRpb24gfSBmcm9tICcuL3VzZUNhcmV0UG9zaXRpb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi91c2VFdmVudCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lbnRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgdHlwZSB7IFNraWxsIH0gZnJvbSAnLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQge1xuICBnZXRBdFJ1blRhYlR5cGVzLFxuICBnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSxcbiAgZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UsXG59IGZyb20gJy4uL3V0aWxzL2NvbnRleHRNZW50aW9uVHJpZ2dlcnMnXG5cbmV4cG9ydCB0eXBlIFVzZU1lbnRpb25Qb3BvdmVyT3B0aW9ucyA9IHtcbiAgZWRpdG9yUmVmOiBSZWZPYmplY3Q8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+XG4gIC8qKlxuICAgKiBOb2RvIGN1eW8gYW5jaG8geSBib3JkZSBzdXBlcmlvciBkZWZpbmVuIGVsIHBvcG92ZXIgKHAuIGVqLiB3cmFwcGVyIGRlbCBpbnB1dCBlbiBNQUlBKS5cbiAgICogU2kgbm8gc2UgcGFzYSwgc2UgdXNhIGVsIHJlY3QgZGVsIGNvbnRlbnRlZGl0YWJsZSAoYGdldEVkaXRvckNsaWVudFJlY3RgKS5cbiAgICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogT3ZlcnJpZGUgZGVsIHNldCBkZSB0YWJzIHBlcm1pdGlkYXM7IHNpIG5vIHNlIHBhc2Egc2UgZGVyaXZhIGRlbCBhZ2VudC4gKi9cbiAgZW5hYmxlZFR5cGVzPzogQ29udGV4dEVudGl0eVR5cGVbXVxuICAvKiogU2tpbGxzIGlueWVjdGFkYXMgZGlyZWN0YW1lbnRlIChkZXYvdGVzdGluZykuIFNpIHNlIHByb3ZlZW4sIHNlIG9taXRlIGVsIGZldGNoIFJFU1QuICovXG4gIHNraWxscz86IFNraWxsW11cbiAgLyoqIENhbGxiYWNrIGN1YW5kbyBlbCB1c3VhcmlvIGluc2VydGEgdW5hIG1lbnRpb24gdsOtYSBjbGljay90ZWNsYWRvLiAqL1xuICBvbk1lbnRpb25BZGRlZD86IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9IHtcbiAgcG9wb3Zlck9wZW46IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJlaW5pY2lhIGVsIHRyYWNraW5nIGRlIGBBSV9DSEFUX01FTlRJT05fT1BFTmAgKHByaW1lcmEgYXBlcnR1cmEgcG9yIG1lbnNhamUpLlxuICAgKiBMbGFtYXIgdHJhcyBlbnZpYXIgZWwgbWVuc2FqZSBvIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbi5cbiAgICovXG4gIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZzogKCkgPT4gdm9pZFxuICAvKiogUHJvY2VzYSBlbCB0cmlnZ2VyIHByb3ZlbmllbnRlIGRlbCBgQ29udGV4dE1lbnRpb25FZGl0b3Iub25JbnB1dGAuICovXG4gIGhhbmRsZVRyaWdnZXI6ICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgdGVjbGFzIHJlbGF0aXZhcyBhbCBwb3BvdmVyIChuYXZlZ2FjacOzbiwgc2VsZWNjacOzbiwgY2FtYmlvIGRlXG4gICAqIHRhYiB5IGVzY2FwZSkuIERldnVlbHZlIGB0cnVlYCBzaSBjb25zdW1pw7MgbGEga2V5LCBwYXJhIHF1ZSBlbCBjb25zdW1lclxuICAgKiBwdWVkYSBkZWNpZGlyIHNpIHNlZ3VpciBwcm9jZXNhbmRvIG90cmFzIHRlY2xhcyAocC5lai4gRW50ZXIgcGFyYSBlbnZpYXIpLlxuICAgKi9cbiAgaGFuZGxlS2V5RG93bjogKGU6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiBib29sZWFuXG4gIC8qKiBOb2RvIGRlbCBwb3BvdmVyOyBlbCBjb25zdW1lciBkZWJlIHBvcnRhcmxvIGNvbiBgY3JlYXRlUG9ydGFsYC4gKi9cbiAgcG9wb3Zlck5vZGU6IFJlYWN0Tm9kZSB8IG51bGxcbiAgLyoqIENpZXJyYSBlbCBwb3BvdmVyIHkgbGltcGlhIGVsIHF1ZXJ5LiAqL1xuICBjbG9zZTogKCkgPT4gdm9pZFxufVxuXG4vKipcbiAqIERlcml2YSBjbGllbnRJZCwgcHJvamVjdElkLCBhZ2VudEVudGl0eSB5IE1DUCBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwgKGluY2wuXG4gKiBgZW50aXR5VmFsdWVzYCB5IGBjaGlwc1Byb2plY3RgKSBwYXJhIGZpbHRyYXIgcmVjZW50cyB5IGLDunNxdWVkYSBHcmFwaFFMLlxuICovXG5jb25zdCB1c2VEZXJpdmVkU2NvcGUgPSAoKTogRW50aXR5U2VhcmNoU2NvcGUgPT4ge1xuICBjb25zdCBjdHggPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgY2xpZW50SWQgPSBjdHguY2xpZW50Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5jbGllbnRJZCA/PyBudWxsXG4gIGNvbnN0IHByb2plY3RJZCA9IGN0eC5wcm9qZWN0Py5pZCA/PyBjdHguZW50aXR5VmFsdWVzPy5wcm9qZWN0SWQgPz8gY3R4LmNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/IG51bGxcbiAgY29uc3QgYWdlbnRFbnRpdHkgPSBjdHguYWdlbnQ/LmVudGl0eSA/PyBudWxsXG4gIGNvbnN0IG1jcFNsdWdzS2V5ID0gKGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuXG4gIGNvbnN0IG1jcFNsdWdzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gY3R4LmFnZW50Py5jb25uZWN0b3JzPy5maW5kKGMgPT4gYy5ncm91cCA9PT0gJ01DUCcpPy5zbHVncyA/PyBbXVxuICAgIHJldHVybiBbLi4ubmV3IFNldChyYXcuZmlsdGVyKChzKTogcyBpcyBzdHJpbmcgPT4gdHlwZW9mIHMgPT09ICdzdHJpbmcnICYmIHMudHJpbSgpLmxlbmd0aCA+IDApKV0uc29ydCgpXG4gIH0sIFttY3BTbHVnc0tleV0pXG5cbiAgcmV0dXJuIHVzZU1lbW88RW50aXR5U2VhcmNoU2NvcGU+KFxuICAgICgpID0+ICh7IGNsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eSB9KSxcbiAgICBbY2xpZW50SWQsIHByb2plY3RJZCwgbWNwU2x1Z3MsIGFnZW50RW50aXR5XSAvLyBza2lsbHMgc2UgaW55ZWN0YSBlbiB1c2VNZW50aW9uUG9wb3ZlclxuICApXG59XG5cbi8qKlxuICogRW5jYXBzdWxhIGxhIGzDs2dpY2EgZGVsIHBvcG92ZXIgZGUgQC1tZW50aW9ucyAoZXN0YWRvLCBmZXRjaCBwb3IgdGFiLCBhbmFseXRpY3MsXG4gKiBwb3NpY2lvbmFtaWVudG8pLiBFbCBjb25zdW1lciBtYW50aWVuZSBlbCBlZGl0b3IgeSBlbCBlbnbDrW8gZGVsIG1lbnNhamUuXG4gKiBMb3MgZmlsdHJvcyBkZSBiw7pzcXVlZGEgdXNhbiBgdXNlRGVyaXZlZFNjb3BlYDogZXNwZWNpYWxpc3RhIHByb3llY3RvIGFjb3RhIHRhcmVhc1xuICogYWwgYHByb2plY3RJZGAgZGVsIGNvbnRleHRvOyBlc3BlY2lhbGlzdGEgY2xpZW50ZSwgcHJveWVjdG9zIGFsIGBjbGllbnRJZGAgKGVuIGBleHRyYWAgZGUgc2VhcmNoKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1lbnRpb25Qb3BvdmVyID0gKHtcbiAgZWRpdG9yUmVmLFxuICBwb3BvdmVyQW5jaG9yUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIHNraWxscyxcbiAgb25NZW50aW9uQWRkZWQsXG59OiBVc2VNZW50aW9uUG9wb3Zlck9wdGlvbnMpOiBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUgfSA9IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMoZW5hYmxlZFR5cGVzKVxuICBjb25zdCBtZW50aW9uUG9wb3ZlclpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTIwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oZGVmYXVsdFR5cGUpXG4gIGNvbnN0IFtwb3BvdmVyT3Blbiwgc2V0UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwb3BvdmVyUG9zLCBzZXRQb3BvdmVyUG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gIH0pXG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzS2V5Ym9hcmROYXZBY3RpdmUsIHNldElzS2V5Ym9hcmROYXZBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGhhc0VtaXR0ZWRPcGVuID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBwb3BvdmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ2V0Q2FyZXRSZWN0ID0gdXNlQ2FyZXRQb3NpdGlvbigpXG5cbiAgY29uc3QgZGVyaXZlZFNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3Qgc2NvcGUgPSB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoc2tpbGxzID8geyAuLi5kZXJpdmVkU2NvcGUsIHNraWxscyB9IDogZGVyaXZlZFNjb3BlKSxcbiAgICBbZGVyaXZlZFNjb3BlLCBza2lsbHNdXG4gIClcbiAgY29uc3Qge1xuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUsXG4gICAgc2tpbGxzQ2F0YWxvZ0VtcHR5LFxuICB9ID0gdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHJlY3QgPSBmcm9tQW5jaG9yID8/IGZyb21FZGl0b3JcbiAgICBpZiAoIXJlY3QgfHwgcmVjdC53aWR0aCA8PSAwKSB7XG4gICAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgpXG4gICAgICBpZiAoIWNhcmV0KSByZXR1cm5cbiAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgIGNvbnN0IGZhbGxiYWNrVyA9IDMyMFxuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIGZhbGxiYWNrVyAtIDgsIGNhcmV0LmxlZnQpKVxuICAgICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICAgIHdpZHRoOiBmYWxsYmFja1csXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gY2FyZXQudG9wICsgNCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCByZWN0LmxlZnQpKVxuICAgIC8qKiBQb3BvdmVyIHNpZW1wcmUgYXJyaWJhIGRlbCBpbnB1dDogYm9yZGUgaW5mZXJpb3IgZGVsIHBvcG92ZXIgfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZWwgYW5jbGEuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgNCxcbiAgICB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgZWRpdG9yUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIGNvbnN0IHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKFxuICAgICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB7XG4gICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocG9wb3Zlck9wZW4pIGNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyLmFjdGl2ZSkge1xuICAgICAgICBjb25zdCBpc1NraWxsVHJpZ2dlciA9XG4gICAgICAgICAgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKCdza2lsbCcpICYmIHRyaWdnZXIuYXRSdW5MZW5ndGggPT09IDEgJiYgdHJpZ2dlci5xdWVyeS5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgY29uc3QgYXRSdW5UYWJUeXBlcyA9IGdldEF0UnVuVGFiVHlwZXMoYWxsb3dlZFR5cGVzKVxuICAgICAgICBjb25zdCBhdFJ1blR5cGVzT3JBbGwgPSBhdFJ1blRhYlR5cGVzLmxlbmd0aCA+IDAgPyBhdFJ1blRhYlR5cGVzIDogYWxsb3dlZFR5cGVzLmZpbHRlcih0ID0+IHQgIT09ICdza2lsbCcpXG4gICAgICAgIGNvbnN0IGlzU2xhc2hUcmlnZ2VyID0gdHJpZ2dlci5hdFJ1bkxlbmd0aCA8IDBcblxuICAgICAgICBsZXQgdHlwZUZyb21BdDogQ29udGV4dEVudGl0eVR5cGVcbiAgICAgICAgbGV0IGVmZmVjdGl2ZVF1ZXJ5OiBzdHJpbmdcblxuICAgICAgICBpZiAoaXNTa2lsbFRyaWdnZXIpIHtcbiAgICAgICAgICB0eXBlRnJvbUF0ID0gJ3NraWxsJ1xuICAgICAgICAgIGVmZmVjdGl2ZVF1ZXJ5ID0gdHJpZ2dlci5xdWVyeS5zbGljZSgxKVxuICAgICAgICB9IGVsc2UgaWYgKGlzU2xhc2hUcmlnZ2VyKSB7XG4gICAgICAgICAgdHlwZUZyb21BdCA9IGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlKHRyaWdnZXIuYXRSdW5MZW5ndGgsIGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUpXG4gICAgICAgICAgZWZmZWN0aXZlUXVlcnkgPSB0cmlnZ2VyLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3ZlcmZsb3dBdENvdW50ID0gTWF0aC5tYXgoMCwgdHJpZ2dlci5hdFJ1bkxlbmd0aCAtIGF0UnVuVGFiVHlwZXMubGVuZ3RoKVxuICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0UnVuTGVuZ3RoID0gTWF0aC5taW4odHJpZ2dlci5hdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLmxlbmd0aClcbiAgICAgICAgICBlZmZlY3RpdmVRdWVyeSA9IGAkeydAJy5yZXBlYXQob3ZlcmZsb3dBdENvdW50KX0ke3RyaWdnZXIucXVlcnl9YFxuICAgICAgICAgIHR5cGVGcm9tQXQgPSBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZShlZmZlY3RpdmVBdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLCBkZWZhdWx0VHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICBzZXRQb3BvdmVyT3Blbih0cnVlKVxuICAgICAgICAgIHNldEFjdGl2ZVR5cGUodHlwZUZyb21BdClcbiAgICAgICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgICAgIGlmICghaGFzRW1pdHRlZE9wZW4uY3VycmVudCkge1xuICAgICAgICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25PcGVuLCB7IHR5cGU6IHR5cGVGcm9tQXQgfSlcbiAgICAgICAgICAgIGhhc0VtaXR0ZWRPcGVuLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFjdGl2ZVR5cGUodHlwZUZyb21BdClcbiAgICAgICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNlYXJjaFZhbHVlKGVmZmVjdGl2ZVF1ZXJ5KVxuICAgICAgfSBlbHNlIGlmIChwb3BvdmVyT3Blbikge1xuICAgICAgICBjbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBkZWZhdWx0VHlwZSwgcG9wb3Zlck9wZW4sIHBvc2l0aW9uUG9wb3ZlciwgdXBkYXRlU2VhcmNoVmFsdWUsIGV2ZW50LCBjbG9zZV1cbiAgKVxuXG4gIGNvbnN0IGluc2VydFNlbGVjdGVkSXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgICBsYWJlbDogaXRlbS5wcmltYXJ5LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNsaWVudElkOiBpdGVtLnJhdy5jbGllbnRJZCA/PyBudWxsLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGl0ZW0ucmF3LmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogaXRlbS5yYXcucHJvamVjdE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBmZWVJZDogaXRlbS5yYXcuZmVlSWQgPz8gbnVsbCxcbiAgICAgICAgICBmYXRoZXJJZDogaXRlbS5yYXcuZmF0aGVySWQgPz8gbnVsbCxcbiAgICAgICAgICBmYXRoZXJUaXRsZTogaXRlbS5yYXcuZmF0aGVyVGl0bGUgPz8gbnVsbCxcbiAgICAgICAgICB0b3RhbFByb3llY3RvczogaXRlbS5yYXcudG90YWxQcm95ZWN0b3MgPz8gbnVsbCxcbiAgICAgICAgICBuYW1lOiBpdGVtLnJhdy5uYW1lID8/IG51bGwsXG4gICAgICAgICAgcGljdHVyZTogaXRlbS5yYXcucGljdHVyZSA/PyBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uTmFtZTogaXRlbS5yYXcucG9zaXRpb25OYW1lID8/IG51bGwsXG4gICAgICAgICAgZW1haWw6IGl0ZW0ucmF3LmVtYWlsID8/IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvbihtZW50aW9uKVxuICAgICAgb25NZW50aW9uQWRkZWQ/LihtZW50aW9uKVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25TZWxlY3QsIHsgdHlwZTogbWVudGlvbi50eXBlLCBpZDogU3RyaW5nKG1lbnRpb24uaWQpIH0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbZWRpdG9yUmVmLCBvbk1lbnRpb25BZGRlZCwgZXZlbnQsIGNsb3NlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlVHlwZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSkgPT4ge1xuICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlKVxuICAgICAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNTa2lsbFRyaWdnZXIoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFJ1bkxlbmd0aCA9IGdldFRyaWdnZXJTZXF1ZW5jZUZyb21UeXBlKFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWxsb3dlZFR5cGVzLmZpbHRlcihlbnRpdHlUeXBlID0+IGVudGl0eVR5cGUgIT09ICdza2lsbCcpXG4gICAgICAgIClcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgobmV4dFJ1bkxlbmd0aClcbiAgICAgIH1cbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uVHlwZVN3aXRjaCwgeyB0eXBlIH0pXG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBlZGl0b3JSZWYsIGV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFwb3BvdmVyT3BlbiB8fCBhbGxvd2VkVHlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY2xvc2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdBcnJvd0xlZnQnKSAmJiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgaWR4ID0gYWxsb3dlZFR5cGVzLmluZGV4T2YoYWN0aXZlVHlwZSlcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmtleSA9PT0gJ0Fycm93UmlnaHQnID8gMSA6IC0xXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSAoaWR4ICsgZGVsdGEgKyBhbGxvd2VkVHlwZXMubGVuZ3RoKSAlIGFsbG93ZWRUeXBlcy5sZW5ndGhcbiAgICAgICAgaGFuZGxlVHlwZUNoYW5nZShhbGxvd2VkVHlwZXNbbmV4dElkeF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gKGl0ZW1zLmxlbmd0aCA+IDAgPyBNYXRoLm1pbihwcmV2ICsgMSwgaXRlbXMubGVuZ3RoIC0gMSkgOiAwKSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gTWF0aC5tYXgocHJldiAtIDEsIDApKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnVGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaW5zZXJ0U2VsZWN0ZWRJdGVtKGl0ZW1zW2FjdGl2ZUluZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW3BvcG92ZXJPcGVuLCBpdGVtcywgYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBhY3RpdmVJbmRleCwgaW5zZXJ0U2VsZWN0ZWRJdGVtLCBjbG9zZSwgaGFuZGxlVHlwZUNoYW5nZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3BvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIE5vZGUgfCBudWxsXG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgICBpZiAocG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW3BvcG92ZXJPcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZl0pXG5cbiAgY29uc3QgcHJldklzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHByZXZJc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlXG4gICAgfVxuICB9LCBbaXNMb2FkaW5nTW9yZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldklzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgfSwgW2l0ZW1zLmxlbmd0aCwgYWN0aXZlVHlwZV0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8U0NNUEFuY2hvclxuICAgICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9wb3ZlclBvcy5ib3R0b219XG4gICAgICAgICRsZWZ0PXtwb3BvdmVyUG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9wb3ZlclBvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17bWVudGlvblBvcG92ZXJaSW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17aGFuZGxlVHlwZUNoYW5nZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBza2lsbHNDYXRhbG9nRW1wdHk9e3NraWxsc0NhdGFsb2dFbXB0eX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBrZXlib2FyZEhpbnQ9e3QoJ2NvbnRleHRNZW50aW9uLmtleWJvYXJkSGludCcsIHtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ05hdmVnYWNpw7NuIGVudHJlIHBlc3Rhw7FhczogQCwgQEAsIEBAQOKApiBlbiBvcmRlbi4gVGFtYmnDqW4gQWx0L0NtZCArIOKGkC/ihpInLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG9uSXRlbVNlbGVjdGVkPXtpbnNlcnRTZWxlY3RlZEl0ZW19XG4gICAgICAgICAgYWN0aXZlSW5kZXg9e2FjdGl2ZUluZGV4fVxuICAgICAgICAgIG9uQWN0aXZlSW5kZXhDaGFuZ2U9e3NldEFjdGl2ZUluZGV4fVxuICAgICAgICAgIGlzS2V5Ym9hcmROYXZBY3RpdmU9e2lzS2V5Ym9hcmROYXZBY3RpdmV9XG4gICAgICAgICAgb25Nb3VzZU1vdmVJbkxpc3Q9eygpID0+IHNldElzS2V5Ym9hcmROYXZBY3RpdmUoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgPC9TQ01QQW5jaG9yPlxuICAgIClcbiAgfSwgW1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHBvcG92ZXJQb3MsXG4gICAgbWVudGlvblBvcG92ZXJaSW5kZXgsXG4gICAgYWxsb3dlZFR5cGVzLFxuICAgIGFjdGl2ZVR5cGUsXG4gICAgaGFuZGxlVHlwZUNoYW5nZSxcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgc2tpbGxzQ2F0YWxvZ0VtcHR5LFxuICAgIGhhc01vcmUsXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBsb2FkTW9yZSxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICBpbnNlcnRTZWxlY3RlZEl0ZW0sXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgaXNLZXlib2FyZE5hdkFjdGl2ZSxcbiAgXSlcblxuICByZXR1cm4geyBwb3BvdmVyT3BlbiwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLCBoYW5kbGVUcmlnZ2VyLCBoYW5kbGVLZXlEb3duLCBwb3BvdmVyTm9kZSwgY2xvc2UgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFNBQThDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBRTlHLFNBQ0VDLHFCQUFxQixFQUNyQkMsNEJBQTRCLEVBQzVCQyxVQUFVLFFBQ0wsMkNBQTJDO0FBQ2xELFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFDNUQsU0FBU0MsSUFBSSxRQUFRLFFBQVE7QUFDN0I7QUFDQSxTQUE0QkMsZUFBZSxRQUFRLG1CQUFtQjtBQUN0RSxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEs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