@promptbook/components 0.110.0 → 0.111.0-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 (29) hide show
  1. package/README.md +4 -0
  2. package/esm/index.es.js +2662 -509
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/src/_packages/utils.index.d.ts +12 -0
  5. package/esm/typings/src/book-2.0/agent-source/BookEditable.d.ts +41 -0
  6. package/esm/typings/src/book-2.0/agent-source/CreateAgentModelRequirementsOptions.d.ts +5 -0
  7. package/esm/typings/src/book-components/Chat/Chat/ImagePromptRenderer.d.ts +21 -0
  8. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
  9. package/esm/typings/src/book-components/Chat/LlmChat/defaults.d.ts +9 -0
  10. package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +7 -1
  11. package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +6 -5
  12. package/esm/typings/src/book-components/Chat/save/index.d.ts +3 -3
  13. package/esm/typings/src/book-components/Chat/save/pdf/buildChatPdf.d.ts +11 -0
  14. package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +2 -2
  15. package/esm/typings/src/book-components/Chat/utils/parseImagePrompts.d.ts +42 -0
  16. package/esm/typings/src/book-components/Chat/utils/parseImagePrompts.test.d.ts +1 -0
  17. package/esm/typings/src/commitments/MEMORY/MEMORY.d.ts +67 -0
  18. package/esm/typings/src/commitments/MEMORY/MEMORY.test.d.ts +1 -0
  19. package/esm/typings/src/commitments/_common/toolRuntimeContext.d.ts +49 -0
  20. package/esm/typings/src/constants/streaming.d.ts +20 -0
  21. package/esm/typings/src/llm-providers/openai/utils/buildToolInvocationScript.d.ts +9 -0
  22. package/esm/typings/src/utils/clientVersion.d.ts +51 -0
  23. package/esm/typings/src/utils/knowledge/inlineKnowledgeSource.d.ts +13 -9
  24. package/esm/typings/src/utils/normalization/constructImageFilename.d.ts +18 -0
  25. package/esm/typings/src/utils/normalization/constructImageFilename.test.d.ts +1 -0
  26. package/esm/typings/src/version.d.ts +1 -1
  27. package/package.json +2 -1
  28. package/umd/index.umd.js +2667 -515
  29. package/umd/index.umd.js.map +1 -1
package/umd/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react/jsx-runtime'), require('react'), require('spacetrim'), require('crypto-js'), require('crypto-js/enc-hex'), require('path'), require('crypto'), require('moment'), require('react-dom'), require('@monaco-editor/react'), require('monaco-editor'), require('destroyable'), require('katex'), require('react-dom/client'), require('showdown'), require('rxjs'), require('waitasecond'), require('crypto-js/sha256'), require('mime-types'), require('papaparse'), require('colors'), require('@openai/agents'), require('bottleneck'), require('openai'), require('lucide-react'), require('qrcode')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'react/jsx-runtime', 'react', 'spacetrim', 'crypto-js', 'crypto-js/enc-hex', 'path', 'crypto', 'moment', 'react-dom', '@monaco-editor/react', 'monaco-editor', 'destroyable', 'katex', 'react-dom/client', 'showdown', 'rxjs', 'waitasecond', 'crypto-js/sha256', 'mime-types', 'papaparse', 'colors', '@openai/agents', 'bottleneck', 'openai', 'lucide-react', 'qrcode'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-components"] = {}, global.jsxRuntime, global.react, global.spaceTrim$1, global.cryptoJs, global.hexEncoder, global.path, global.crypto$1, global.moment, global.reactDom, global.Editor, global.monacoEditor, global.destroyable, global.katex, global.client, global.showdown, global.rxjs, global.waitasecond, global.sha256, global.mimeTypes, global.papaparse, global.colors, global.agents, global.Bottleneck, global.OpenAI, global.lucideReact, global.QRCode));
5
- })(this, (function (exports, jsxRuntime, react, spaceTrim$1, cryptoJs, hexEncoder, path, crypto$1, moment, reactDom, Editor, monacoEditor, destroyable, katex, client, showdown, rxjs, waitasecond, sha256, mimeTypes, papaparse, colors, agents, Bottleneck, OpenAI, lucideReact, QRCode) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react/jsx-runtime'), require('react'), require('spacetrim'), require('crypto-js'), require('crypto-js/enc-hex'), require('path'), require('crypto'), require('moment'), require('react-dom'), require('@monaco-editor/react'), require('monaco-editor'), require('destroyable'), require('katex'), require('react-dom/client'), require('showdown'), require('rxjs'), require('jspdf'), require('lucide-react'), require('waitasecond'), require('crypto-js/sha256'), require('mime-types'), require('papaparse'), require('colors'), require('@openai/agents'), require('bottleneck'), require('openai'), require('qrcode')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'react/jsx-runtime', 'react', 'spacetrim', 'crypto-js', 'crypto-js/enc-hex', 'path', 'crypto', 'moment', 'react-dom', '@monaco-editor/react', 'monaco-editor', 'destroyable', 'katex', 'react-dom/client', 'showdown', 'rxjs', 'jspdf', 'lucide-react', 'waitasecond', 'crypto-js/sha256', 'mime-types', 'papaparse', 'colors', '@openai/agents', 'bottleneck', 'openai', 'qrcode'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-components"] = {}, global.jsxRuntime, global.react, global.spaceTrim$1, global.cryptoJs, global.hexEncoder, global.path, global.crypto$1, global.moment, global.reactDom, global.Editor, global.monacoEditor, global.destroyable, global.katex, global.client, global.showdown, global.rxjs, global.jspdf, global.lucideReact, global.waitasecond, global.sha256, global.mimeTypes, global.papaparse, global.colors, global.agents, global.Bottleneck, global.OpenAI, global.QRCode));
5
+ })(this, (function (exports, jsxRuntime, react, spaceTrim$1, cryptoJs, hexEncoder, path, crypto$1, moment, reactDom, Editor, monacoEditor, destroyable, katex, client, showdown, rxjs, jspdf, lucideReact, waitasecond, sha256, mimeTypes, papaparse, colors, agents, Bottleneck, OpenAI, QRCode) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -31,7 +31,7 @@
31
31
  * @generated
32
32
  * @see https://github.com/webgptorg/promptbook
33
33
  */
34
- const PROMPTBOOK_ENGINE_VERSION = '0.110.0';
34
+ const PROMPTBOOK_ENGINE_VERSION = '0.111.0-0';
35
35
  /**
36
36
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
37
37
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -3430,6 +3430,36 @@
3430
3430
  * Note: [💞] Ignore a discrepancy between file name and entity name
3431
3431
  */
3432
3432
 
3433
+ /**
3434
+ * HTTP header used by Promptbook clients to advertise their release version.
3435
+ *
3436
+ * @public exported from `@promptbook/utils`
3437
+ */
3438
+ const CLIENT_VERSION_HEADER = 'x-promptbook-client-version';
3439
+ /**
3440
+ * The latest client (engine) version that the server expects.
3441
+ *
3442
+ * @public exported from `@promptbook/utils`
3443
+ */
3444
+ const CLIENT_LATEST_VERSION = PROMPTBOOK_ENGINE_VERSION;
3445
+ /**
3446
+ * Creates a headers object that includes the client version header.
3447
+ *
3448
+ * @param headers - Optional base headers to clone.
3449
+ * @returns New headers object augmented with `CLIENT_VERSION_HEADER`.
3450
+ *
3451
+ * @public exported from `@promptbook/utils`
3452
+ */
3453
+ function attachClientVersionHeader(headers) {
3454
+ return {
3455
+ ...(headers !== null && headers !== void 0 ? headers : {}),
3456
+ [CLIENT_VERSION_HEADER]: CLIENT_LATEST_VERSION,
3457
+ };
3458
+ }
3459
+ /**
3460
+ * Note: [💞] Ignore a discrepancy between file name and entity name
3461
+ */
3462
+
3433
3463
  /**
3434
3464
  * Detects if the code is running in a browser environment in main thread (Not in a web worker)
3435
3465
  *
@@ -6645,28 +6675,14 @@
6645
6675
  * Note: [💞] Ignore a discrepancy between file name and entity name
6646
6676
  */
6647
6677
 
6648
- /**
6649
- * @@@
6650
- *
6651
- * @private thing of inline knowledge
6652
- */
6678
+ /** @private The default base name for inline knowledge files when the content lacks identifying text */
6653
6679
  const INLINE_KNOWLEDGE_BASE_NAME = 'inline-knowledge';
6654
- /**
6655
- * @@@
6656
- *
6657
- * @private thing of inline knowledge
6658
- */
6680
+ /** @private The default file extension used for inline knowledge uploads */
6659
6681
  const INLINE_KNOWLEDGE_EXTENSION = '.txt';
6660
- /**
6661
- * @@@
6662
- *
6663
- * @private thing of inline knowledge
6664
- */
6682
+ /** @private Prefix that identifies base64 data URLs */
6665
6683
  const DATA_URL_PREFIX = 'data:';
6666
6684
  /**
6667
- * @@@
6668
- *
6669
- * @private thing of inline knowledge
6685
+ * @private Retrieves the first meaningful line from the inline content.
6670
6686
  */
6671
6687
  function getFirstNonEmptyLine(content) {
6672
6688
  const lines = content.split(/\r?\n/);
@@ -6679,9 +6695,7 @@
6679
6695
  return null;
6680
6696
  }
6681
6697
  /**
6682
- * @@@
6683
- *
6684
- * @private thing of inline knowledge
6698
+ * @private Determines the base file name by normalizing the first non-empty line.
6685
6699
  */
6686
6700
  function deriveBaseFilename(content) {
6687
6701
  const firstLine = getFirstNonEmptyLine(content);
@@ -6692,22 +6706,18 @@
6692
6706
  return normalized || INLINE_KNOWLEDGE_BASE_NAME;
6693
6707
  }
6694
6708
  /**
6695
- * Creates a data URL that represents the inline knowledge content as a text file.
6696
- *
6697
- * @private thing of inline knowledge
6709
+ * @private Converts inline knowledge into the internal metadata form used for uploads.
6698
6710
  */
6699
6711
  function createInlineKnowledgeSourceFile(content) {
6700
6712
  const trimmedContent = content.trim();
6701
6713
  const baseName = deriveBaseFilename(trimmedContent);
6702
6714
  const filename = `${baseName}${INLINE_KNOWLEDGE_EXTENSION}`;
6703
6715
  const mimeType = 'text/plain';
6704
- const base64 = Buffer.from(trimmedContent, 'utf-8').toString('base64');
6705
- const encodedFilename = encodeURIComponent(filename);
6706
- const url = `${DATA_URL_PREFIX}${mimeType};name=${encodedFilename};charset=utf-8;base64,${base64}`;
6716
+ const buffer = Buffer.from(trimmedContent, 'utf-8');
6707
6717
  return {
6708
6718
  filename,
6709
6719
  mimeType,
6710
- url,
6720
+ buffer,
6711
6721
  };
6712
6722
  }
6713
6723
  /**
@@ -6718,10 +6728,18 @@
6718
6728
  function isDataUrlKnowledgeSource(source) {
6719
6729
  return typeof source === 'string' && source.startsWith(DATA_URL_PREFIX);
6720
6730
  }
6731
+ /**
6732
+ * @private Converts a stored inline knowledge file into a data URL for backwards compatibility.
6733
+ */
6734
+ function inlineKnowledgeSourceToDataUrl(source) {
6735
+ const base64 = source.buffer.toString('base64');
6736
+ const encodedFilename = encodeURIComponent(source.filename);
6737
+ return `${DATA_URL_PREFIX}${source.mimeType};name=${encodedFilename};charset=utf-8;base64,${base64}`;
6738
+ }
6721
6739
  /**
6722
6740
  * Parses a data URL-based knowledge source into its raw buffer, filename, and MIME type.
6723
6741
  *
6724
- * @private thing of inline knowledge
6742
+ * @private utility of inline knowledge processing
6725
6743
  */
6726
6744
  function parseDataUrlKnowledgeSource(source) {
6727
6745
  if (!isDataUrlKnowledgeSource(source)) {
@@ -6854,6 +6872,7 @@
6854
6872
  `);
6855
6873
  }
6856
6874
  applyToAgentModelRequirements(requirements, content) {
6875
+ var _a;
6857
6876
  const trimmedContent = content.trim();
6858
6877
  if (!trimmedContent) {
6859
6878
  return requirements;
@@ -6874,9 +6893,13 @@
6874
6893
  }
6875
6894
  else {
6876
6895
  const inlineSource = createInlineKnowledgeSourceFile(trimmedContent);
6896
+ const existingInlineSources = (((_a = requirements._metadata) === null || _a === void 0 ? void 0 : _a.inlineKnowledgeSources) || []).slice();
6877
6897
  const updatedRequirements = {
6878
6898
  ...requirements,
6879
- knowledgeSources: [...(requirements.knowledgeSources || []), inlineSource.url],
6899
+ _metadata: {
6900
+ ...requirements._metadata,
6901
+ inlineKnowledgeSources: [...existingInlineSources, inlineSource],
6902
+ },
6880
6903
  };
6881
6904
  const knowledgeInfo = `Knowledge Source Inline: ${inlineSource.filename} (derived from inline content and processed for retrieval during chat)`;
6882
6905
  return this.appendToSystemMessage(updatedRequirements, knowledgeInfo, '\n\n');
@@ -6958,6 +6981,237 @@
6958
6981
  * Note: [💞] Ignore a discrepancy between file name and entity name
6959
6982
  */
6960
6983
 
6984
+ /**
6985
+ * @@@
6986
+ *
6987
+ * @private utility for commitments
6988
+ */
6989
+ function formatOptionalInstructionBlock(label, content) {
6990
+ const trimmedContent = spaceTrim$1.spaceTrim(content);
6991
+ if (!trimmedContent) {
6992
+ return '';
6993
+ }
6994
+ return spaceTrim$1.spaceTrim((block) => `
6995
+ - ${label}:
6996
+ ${block(trimmedContent
6997
+ .split(/\r?\n/)
6998
+ .map((line) => `- ${line}`)
6999
+ .join('\n'))}
7000
+ `);
7001
+ }
7002
+
7003
+ /**
7004
+ * Prompt parameter key used to pass hidden runtime context to tool execution.
7005
+ *
7006
+ * @private internal runtime wiring for commitment tools
7007
+ */
7008
+ const TOOL_RUNTIME_CONTEXT_PARAMETER = 'promptbookToolRuntimeContext';
7009
+ /**
7010
+ * Hidden argument key used to pass runtime context into individual tool calls.
7011
+ *
7012
+ * @private internal runtime wiring for commitment tools
7013
+ */
7014
+ const TOOL_RUNTIME_CONTEXT_ARGUMENT = '__promptbookToolRuntimeContext';
7015
+ /**
7016
+ * Parses unknown runtime context payload into a normalized object.
7017
+ *
7018
+ * @private internal runtime wiring for commitment tools
7019
+ */
7020
+ function parseToolRuntimeContext(rawValue) {
7021
+ if (!rawValue) {
7022
+ return null;
7023
+ }
7024
+ let parsed = rawValue;
7025
+ if (typeof rawValue === 'string') {
7026
+ try {
7027
+ parsed = JSON.parse(rawValue);
7028
+ }
7029
+ catch (_a) {
7030
+ return null;
7031
+ }
7032
+ }
7033
+ if (!parsed || typeof parsed !== 'object') {
7034
+ return null;
7035
+ }
7036
+ return parsed;
7037
+ }
7038
+ /**
7039
+ * Reads runtime context attached to tool call arguments.
7040
+ *
7041
+ * @private internal runtime wiring for commitment tools
7042
+ */
7043
+ function readToolRuntimeContextFromToolArgs(args) {
7044
+ return parseToolRuntimeContext(args[TOOL_RUNTIME_CONTEXT_ARGUMENT]);
7045
+ }
7046
+ /**
7047
+ * Serializes runtime context for prompt parameters.
7048
+ *
7049
+ * @private internal runtime wiring for commitment tools
7050
+ */
7051
+ function serializeToolRuntimeContext(context) {
7052
+ return JSON.stringify(context);
7053
+ }
7054
+ /**
7055
+ * Note: [💞] Ignore a discrepancy between file name and entity name
7056
+ */
7057
+
7058
+ /**
7059
+ * Tool name used to retrieve persisted user memory.
7060
+ *
7061
+ * @private internal MEMORY commitment constant
7062
+ */
7063
+ const RETRIEVE_USER_MEMORY_TOOL_NAME = 'retrieve_user_memory';
7064
+ /**
7065
+ * Tool name used to store persisted user memory.
7066
+ *
7067
+ * @private internal MEMORY commitment constant
7068
+ */
7069
+ const STORE_USER_MEMORY_TOOL_NAME = 'store_user_memory';
7070
+ const UPDATE_USER_MEMORY_TOOL_NAME = 'update_user_memory';
7071
+ const DELETE_USER_MEMORY_TOOL_NAME = 'delete_user_memory';
7072
+ /**
7073
+ * Resolves runtime context from hidden tool arguments.
7074
+ *
7075
+ * @private utility of MEMORY commitment
7076
+ */
7077
+ function resolveMemoryRuntimeContext(args) {
7078
+ const runtimeContext = readToolRuntimeContextFromToolArgs(args);
7079
+ const memoryContext = runtimeContext === null || runtimeContext === void 0 ? void 0 : runtimeContext.memory;
7080
+ return {
7081
+ enabled: (memoryContext === null || memoryContext === void 0 ? void 0 : memoryContext.enabled) === true,
7082
+ userId: memoryContext === null || memoryContext === void 0 ? void 0 : memoryContext.userId,
7083
+ username: memoryContext === null || memoryContext === void 0 ? void 0 : memoryContext.username,
7084
+ agentId: memoryContext === null || memoryContext === void 0 ? void 0 : memoryContext.agentId,
7085
+ agentName: memoryContext === null || memoryContext === void 0 ? void 0 : memoryContext.agentName,
7086
+ isTeamConversation: (memoryContext === null || memoryContext === void 0 ? void 0 : memoryContext.isTeamConversation) === true,
7087
+ };
7088
+ }
7089
+ /**
7090
+ * Builds a disabled memory-tool response payload.
7091
+ *
7092
+ * @private utility of MEMORY commitment
7093
+ */
7094
+ function createDisabledMemoryResult(action, message) {
7095
+ if (action === 'retrieve') {
7096
+ return {
7097
+ action,
7098
+ status: 'disabled',
7099
+ memories: [],
7100
+ message,
7101
+ };
7102
+ }
7103
+ if (action === 'store') {
7104
+ return {
7105
+ action,
7106
+ status: 'disabled',
7107
+ message,
7108
+ };
7109
+ }
7110
+ if (action === 'update') {
7111
+ return {
7112
+ action,
7113
+ status: 'disabled',
7114
+ message,
7115
+ };
7116
+ }
7117
+ if (action === 'delete') {
7118
+ return {
7119
+ action,
7120
+ status: 'disabled',
7121
+ message,
7122
+ };
7123
+ }
7124
+ throw new Error(`Unsupported memory tool action: ${action}`);
7125
+ }
7126
+ /**
7127
+ * Gets the runtime adapter and returns a disabled result when unavailable.
7128
+ *
7129
+ * @private utility of MEMORY commitment
7130
+ */
7131
+ function getRuntimeAdapterOrDisabledResult(action, runtimeContext) {
7132
+ if (!runtimeContext.enabled || runtimeContext.isTeamConversation) {
7133
+ return {
7134
+ adapter: null,
7135
+ disabledResult: createDisabledMemoryResult(action, runtimeContext.isTeamConversation
7136
+ ? 'Memory is disabled for TEAM conversations.'
7137
+ : 'Memory is disabled for unauthenticated users.'),
7138
+ };
7139
+ }
7140
+ {
7141
+ return {
7142
+ adapter: null,
7143
+ disabledResult: createDisabledMemoryResult(action, 'Memory runtime is not available in this environment.'),
7144
+ };
7145
+ }
7146
+ }
7147
+ /**
7148
+ * Parses retrieve memory arguments.
7149
+ *
7150
+ * @private utility of MEMORY commitment
7151
+ */
7152
+ function parseRetrieveMemoryArgs(args) {
7153
+ const query = typeof args.query === 'string' ? args.query.trim() : undefined;
7154
+ const limit = typeof args.limit === 'number' && Number.isFinite(args.limit) ? Math.floor(args.limit) : undefined;
7155
+ return {
7156
+ query: query && query.length > 0 ? query : undefined,
7157
+ limit: limit && limit > 0 ? Math.min(limit, 20) : undefined,
7158
+ };
7159
+ }
7160
+ /**
7161
+ * Parses store memory arguments.
7162
+ *
7163
+ * @private utility of MEMORY commitment
7164
+ */
7165
+ function parseStoreMemoryArgs(args) {
7166
+ const content = typeof args.content === 'string' ? args.content.trim() : '';
7167
+ if (!content) {
7168
+ throw new Error('Memory content is required.');
7169
+ }
7170
+ return {
7171
+ content,
7172
+ isGlobal: args.isGlobal === true,
7173
+ };
7174
+ }
7175
+ /**
7176
+ * Parses a memory identifier argument shared across MEMORY tools.
7177
+ *
7178
+ * @private utility of MEMORY commitment
7179
+ */
7180
+ function parseMemoryIdArg(value) {
7181
+ const memoryId = typeof value === 'string' ? value.trim() : '';
7182
+ if (!memoryId) {
7183
+ throw new Error('Memory id is required.');
7184
+ }
7185
+ return memoryId;
7186
+ }
7187
+ /**
7188
+ * Parses update memory arguments.
7189
+ *
7190
+ * @private utility of MEMORY commitment
7191
+ */
7192
+ function parseUpdateMemoryArgs(args) {
7193
+ const memoryId = parseMemoryIdArg(args.memoryId);
7194
+ const content = typeof args.content === 'string' ? args.content.trim() : '';
7195
+ if (!content) {
7196
+ throw new Error('Memory content is required.');
7197
+ }
7198
+ const isGlobal = typeof args.isGlobal === 'boolean' ? args.isGlobal : undefined;
7199
+ return {
7200
+ memoryId,
7201
+ content,
7202
+ isGlobal,
7203
+ };
7204
+ }
7205
+ /**
7206
+ * Parses delete memory arguments.
7207
+ *
7208
+ * @private utility of MEMORY commitment
7209
+ */
7210
+ function parseDeleteMemoryArgs(args) {
7211
+ return {
7212
+ memoryId: parseMemoryIdArg(args.memoryId),
7213
+ };
7214
+ }
6961
7215
  /**
6962
7216
  * MEMORY commitment definition
6963
7217
  *
@@ -6979,6 +7233,9 @@
6979
7233
  constructor(type = 'MEMORY') {
6980
7234
  super(type);
6981
7235
  }
7236
+ get requiresContent() {
7237
+ return false;
7238
+ }
6982
7239
  /**
6983
7240
  * Short one-line description of MEMORY.
6984
7241
  */
@@ -6998,21 +7255,14 @@
6998
7255
  return spaceTrim$1.spaceTrim(`
6999
7256
  # ${this.type}
7000
7257
 
7001
- Similar to KNOWLEDGE but focuses on remembering past interactions and user preferences. This commitment helps the agent maintain context about the user's history, preferences, and previous conversations.
7258
+ Enables persistent user memory for the current agent. The memory is stored by the runtime and can be retrieved in future conversations.
7002
7259
 
7003
7260
  ## Key aspects
7004
7261
 
7005
- - Both terms work identically and can be used interchangeably.
7006
- - Focuses on user-specific information and interaction history.
7007
- - Helps personalize responses based on past interactions.
7008
- - Maintains continuity across conversations.
7009
-
7010
- ## Differences from KNOWLEDGE
7011
-
7012
- - \`KNOWLEDGE\` is for domain expertise and factual information
7013
- - \`MEMORY\` is for user-specific context and preferences
7014
- - \`MEMORY\` creates more personalized interactions
7015
- - \`MEMORY\` often includes temporal or preference-based information
7262
+ - Both \`MEMORY\` and \`MEMORIES\` work identically.
7263
+ - Stores user-specific details through runtime tools.
7264
+ - Retrieves relevant memories for personalized responses.
7265
+ - Supports optional extra instructions in the commitment content.
7016
7266
 
7017
7267
  ## Examples
7018
7268
 
@@ -7020,10 +7270,7 @@
7020
7270
  Personal Assistant
7021
7271
 
7022
7272
  PERSONA You are a personal productivity assistant
7023
- MEMORY User is a software developer working in JavaScript/React
7024
- MEMORY User prefers morning work sessions and afternoon meetings
7025
- MEMORY Previously helped with project planning for mobile apps
7026
- MEMORY User timezone: UTC-8 (Pacific Time)
7273
+ MEMORY Remember user projects and long-term preferences.
7027
7274
  GOAL Help optimize daily productivity and workflow
7028
7275
  \`\`\`
7029
7276
 
@@ -7031,10 +7278,7 @@
7031
7278
  Learning Companion
7032
7279
 
7033
7280
  PERSONA You are an educational companion for programming students
7034
- MEMORY Student is learning Python as their first programming language
7035
- MEMORY Previous topics covered: variables, loops, functions
7036
- MEMORY Student learns best with practical examples and exercises
7037
- MEMORY Last session: working on list comprehensions
7281
+ MEMORY Remember only the student's learning progress and preferred study style.
7038
7282
  GOAL Provide progressive learning experiences tailored to student's pace
7039
7283
  \`\`\`
7040
7284
 
@@ -7042,41 +7286,263 @@
7042
7286
  Customer Support Agent
7043
7287
 
7044
7288
  PERSONA You are a customer support representative
7045
- MEMORY Customer has premium subscription since 2023
7046
- MEMORY Previous issue: billing question resolved last month
7047
- MEMORY Customer prefers email communication over phone calls
7048
- MEMORY Account shows frequent use of advanced features
7289
+ MEMORY Remember only important support history and communication preferences.
7049
7290
  GOAL Provide personalized support based on customer history
7050
7291
  \`\`\`
7051
7292
  `);
7052
7293
  }
7053
7294
  applyToAgentModelRequirements(requirements, content) {
7054
- const trimmedContent = content.trim();
7055
- if (!trimmedContent) {
7056
- return requirements;
7295
+ const extraInstructions = formatOptionalInstructionBlock('Memory instructions', content);
7296
+ const existingTools = requirements.tools || [];
7297
+ const tools = [...existingTools];
7298
+ if (!tools.some((tool) => tool.name === RETRIEVE_USER_MEMORY_TOOL_NAME)) {
7299
+ tools.push({
7300
+ name: RETRIEVE_USER_MEMORY_TOOL_NAME,
7301
+ description: spaceTrim$1.spaceTrim(`
7302
+ Retrieve previously stored user memories relevant to the current conversation.
7303
+ Use this before responding when user context can improve the answer.
7304
+ `),
7305
+ parameters: {
7306
+ type: 'object',
7307
+ properties: {
7308
+ query: {
7309
+ type: 'string',
7310
+ description: 'Optional query used to filter relevant memories.',
7311
+ },
7312
+ limit: {
7313
+ type: 'integer',
7314
+ description: 'Optional maximum number of memories to return (default 5, max 20).',
7315
+ },
7316
+ },
7317
+ },
7318
+ });
7319
+ }
7320
+ if (!tools.some((tool) => tool.name === STORE_USER_MEMORY_TOOL_NAME)) {
7321
+ tools.push({
7322
+ name: STORE_USER_MEMORY_TOOL_NAME,
7323
+ description: spaceTrim$1.spaceTrim(`
7324
+ Store a durable user memory that should be remembered in future conversations.
7325
+ Store only stable and useful user-specific facts or preferences.
7326
+ `),
7327
+ parameters: {
7328
+ type: 'object',
7329
+ properties: {
7330
+ content: {
7331
+ type: 'string',
7332
+ description: 'Memory text to store.',
7333
+ },
7334
+ isGlobal: {
7335
+ type: 'boolean',
7336
+ description: 'Set true to make this memory global across all user agents.',
7337
+ },
7338
+ },
7339
+ required: ['content'],
7340
+ },
7341
+ });
7342
+ }
7343
+ if (!tools.some((tool) => tool.name === UPDATE_USER_MEMORY_TOOL_NAME)) {
7344
+ tools.push({
7345
+ name: UPDATE_USER_MEMORY_TOOL_NAME,
7346
+ description: spaceTrim$1.spaceTrim(`
7347
+ Update an existing user memory after retrieving it, so the stored fact stays accurate.
7348
+ Always pass the memory id you retrieved along with the new content.
7349
+ `),
7350
+ parameters: {
7351
+ type: 'object',
7352
+ properties: {
7353
+ memoryId: {
7354
+ type: 'string',
7355
+ description: 'Unique identifier of the memory entry to update.',
7356
+ },
7357
+ content: {
7358
+ type: 'string',
7359
+ description: 'Updated memory text.',
7360
+ },
7361
+ isGlobal: {
7362
+ type: 'boolean',
7363
+ description: 'Set true to keep the fact global; omit or false to keep it agent-scoped.',
7364
+ },
7365
+ },
7366
+ required: ['memoryId', 'content'],
7367
+ },
7368
+ });
7369
+ }
7370
+ if (!tools.some((tool) => tool.name === DELETE_USER_MEMORY_TOOL_NAME)) {
7371
+ tools.push({
7372
+ name: DELETE_USER_MEMORY_TOOL_NAME,
7373
+ description: spaceTrim$1.spaceTrim(`
7374
+ Delete a user memory that is no longer relevant. Deletions are soft so the record is hidden from future queries.
7375
+ `),
7376
+ parameters: {
7377
+ type: 'object',
7378
+ properties: {
7379
+ memoryId: {
7380
+ type: 'string',
7381
+ description: 'Unique identifier of the memory entry to delete.',
7382
+ },
7383
+ },
7384
+ required: ['memoryId'],
7385
+ },
7386
+ });
7057
7387
  }
7058
- // Create memory section for system message
7059
- const memorySection = `Memory: ${trimmedContent}`;
7060
- // Memory information is contextual and should be included in the system message
7061
- return this.appendToSystemMessage(requirements, memorySection, '\n\n');
7388
+ return this.appendToSystemMessage({
7389
+ ...requirements,
7390
+ tools,
7391
+ _metadata: {
7392
+ ...requirements._metadata,
7393
+ useMemory: content || true,
7394
+ },
7395
+ }, spaceTrim$1.spaceTrim((block) => `
7396
+ Memory:
7397
+ - Prefer storing agent-scoped memories; only make them global when the fact should apply across all your agents.
7398
+ - You can use persistent user memory tools.
7399
+ - Use "${RETRIEVE_USER_MEMORY_TOOL_NAME}" to load relevant memory before answering.
7400
+ - Use "${STORE_USER_MEMORY_TOOL_NAME}" to save stable user-specific facts that improve future help.
7401
+ - Use "${UPDATE_USER_MEMORY_TOOL_NAME}" to refresh an existing memory when the content changes.
7402
+ - Use "${DELETE_USER_MEMORY_TOOL_NAME}" to delete memories that are no longer accurate (deletions are soft and hidden from future queries).
7403
+ - Store concise memory items and avoid duplicates.
7404
+ - Never claim memory was saved or loaded unless the tool confirms it.
7405
+ ${block(extraInstructions)}
7406
+ `));
7062
7407
  }
7063
- }
7064
- /**
7065
- * Note: [💞] Ignore a discrepancy between file name and entity name
7066
- */
7067
-
7068
- /**
7069
- * AGENT MESSAGE commitment definition
7070
- *
7071
- * The AGENT MESSAGE commitment defines a message from the agent in the conversation history.
7072
- * It is used to pre-fill the chat with a conversation history or to provide few-shot examples.
7073
- *
7074
- * Example usage in agent source:
7075
- *
7076
- * ```book
7077
- * AGENT MESSAGE What seems to be the issue?
7078
- * ```
7079
- *
7408
+ /**
7409
+ * Gets human-readable titles for MEMORY tool functions.
7410
+ */
7411
+ getToolTitles() {
7412
+ return {
7413
+ [RETRIEVE_USER_MEMORY_TOOL_NAME]: 'User memory',
7414
+ [STORE_USER_MEMORY_TOOL_NAME]: 'Store user memory',
7415
+ [UPDATE_USER_MEMORY_TOOL_NAME]: 'Update user memory',
7416
+ [DELETE_USER_MEMORY_TOOL_NAME]: 'Delete user memory',
7417
+ };
7418
+ }
7419
+ /**
7420
+ * Gets MEMORY tool function implementations.
7421
+ */
7422
+ getToolFunctions() {
7423
+ return {
7424
+ async [RETRIEVE_USER_MEMORY_TOOL_NAME](args) {
7425
+ const runtimeContext = resolveMemoryRuntimeContext(args);
7426
+ const { adapter, disabledResult } = getRuntimeAdapterOrDisabledResult('retrieve', runtimeContext);
7427
+ if (!adapter || disabledResult) {
7428
+ return JSON.stringify(disabledResult);
7429
+ }
7430
+ const parsedArgs = parseRetrieveMemoryArgs(args);
7431
+ try {
7432
+ const memories = await adapter.retrieveMemories(parsedArgs, runtimeContext);
7433
+ const result = {
7434
+ action: 'retrieve',
7435
+ status: 'ok',
7436
+ query: parsedArgs.query,
7437
+ memories,
7438
+ };
7439
+ return JSON.stringify(result);
7440
+ }
7441
+ catch (error) {
7442
+ const result = {
7443
+ action: 'retrieve',
7444
+ status: 'error',
7445
+ query: parsedArgs.query,
7446
+ memories: [],
7447
+ message: error instanceof Error ? error.message : String(error),
7448
+ };
7449
+ return JSON.stringify(result);
7450
+ }
7451
+ },
7452
+ async [STORE_USER_MEMORY_TOOL_NAME](args) {
7453
+ const runtimeContext = resolveMemoryRuntimeContext(args);
7454
+ const { adapter, disabledResult } = getRuntimeAdapterOrDisabledResult('store', runtimeContext);
7455
+ if (!adapter || disabledResult) {
7456
+ return JSON.stringify(disabledResult);
7457
+ }
7458
+ try {
7459
+ const parsedArgs = parseStoreMemoryArgs(args);
7460
+ const memory = await adapter.storeMemory(parsedArgs, runtimeContext);
7461
+ const result = {
7462
+ action: 'store',
7463
+ status: 'stored',
7464
+ memory,
7465
+ };
7466
+ return JSON.stringify(result);
7467
+ }
7468
+ catch (error) {
7469
+ const result = {
7470
+ action: 'store',
7471
+ status: 'error',
7472
+ message: error instanceof Error ? error.message : String(error),
7473
+ };
7474
+ return JSON.stringify(result);
7475
+ }
7476
+ },
7477
+ async [UPDATE_USER_MEMORY_TOOL_NAME](args) {
7478
+ const runtimeContext = resolveMemoryRuntimeContext(args);
7479
+ const { adapter, disabledResult } = getRuntimeAdapterOrDisabledResult('update', runtimeContext);
7480
+ if (!adapter || disabledResult) {
7481
+ return JSON.stringify(disabledResult);
7482
+ }
7483
+ try {
7484
+ const parsedArgs = parseUpdateMemoryArgs(args);
7485
+ const memory = await adapter.updateMemory(parsedArgs, runtimeContext);
7486
+ const result = {
7487
+ action: 'update',
7488
+ status: 'updated',
7489
+ memory,
7490
+ };
7491
+ return JSON.stringify(result);
7492
+ }
7493
+ catch (error) {
7494
+ const result = {
7495
+ action: 'update',
7496
+ status: 'error',
7497
+ message: error instanceof Error ? error.message : String(error),
7498
+ };
7499
+ return JSON.stringify(result);
7500
+ }
7501
+ },
7502
+ async [DELETE_USER_MEMORY_TOOL_NAME](args) {
7503
+ const runtimeContext = resolveMemoryRuntimeContext(args);
7504
+ const { adapter, disabledResult } = getRuntimeAdapterOrDisabledResult('delete', runtimeContext);
7505
+ if (!adapter || disabledResult) {
7506
+ return JSON.stringify(disabledResult);
7507
+ }
7508
+ try {
7509
+ const parsedArgs = parseDeleteMemoryArgs(args);
7510
+ const deleted = await adapter.deleteMemory(parsedArgs, runtimeContext);
7511
+ const result = {
7512
+ action: 'delete',
7513
+ status: 'deleted',
7514
+ memoryId: deleted.id,
7515
+ };
7516
+ return JSON.stringify(result);
7517
+ }
7518
+ catch (error) {
7519
+ const result = {
7520
+ action: 'delete',
7521
+ status: 'error',
7522
+ message: error instanceof Error ? error.message : String(error),
7523
+ };
7524
+ return JSON.stringify(result);
7525
+ }
7526
+ },
7527
+ };
7528
+ }
7529
+ }
7530
+ /**
7531
+ * Note: [💞] Ignore a discrepancy between file name and entity name
7532
+ */
7533
+
7534
+ /**
7535
+ * AGENT MESSAGE commitment definition
7536
+ *
7537
+ * The AGENT MESSAGE commitment defines a message from the agent in the conversation history.
7538
+ * It is used to pre-fill the chat with a conversation history or to provide few-shot examples.
7539
+ *
7540
+ * Example usage in agent source:
7541
+ *
7542
+ * ```book
7543
+ * AGENT MESSAGE What seems to be the issue?
7544
+ * ```
7545
+ *
7080
7546
  * @private [🪔] Maybe export the commitments through some package
7081
7547
  */
7082
7548
  class AgentMessageCommitmentDefinition extends BaseCommitmentDefinition {
@@ -9171,14 +9637,30 @@
9171
9637
  /**
9172
9638
  * Builds a minimal chat prompt for teammate calls.
9173
9639
  */
9174
- function buildTeammatePrompt(request) {
9640
+ function buildTeammatePrompt(request, runtimeContext) {
9175
9641
  return {
9176
9642
  title: 'Teammate consultation',
9177
9643
  modelRequirements: {
9178
9644
  modelVariant: 'CHAT',
9179
9645
  },
9180
9646
  content: request,
9181
- parameters: {},
9647
+ parameters: {
9648
+ [TOOL_RUNTIME_CONTEXT_PARAMETER]: serializeToolRuntimeContext(runtimeContext),
9649
+ },
9650
+ };
9651
+ }
9652
+ /**
9653
+ * Creates teammate runtime context and marks conversation as team-only memory-disabled.
9654
+ */
9655
+ function createTeamConversationRuntimeContext(value) {
9656
+ const runtimeContext = parseToolRuntimeContext(value) || {};
9657
+ return {
9658
+ ...runtimeContext,
9659
+ memory: {
9660
+ ...(runtimeContext.memory || {}),
9661
+ enabled: false,
9662
+ isTeamConversation: true,
9663
+ },
9182
9664
  };
9183
9665
  }
9184
9666
  /**
@@ -9222,7 +9704,7 @@
9222
9704
  let toolCalls;
9223
9705
  try {
9224
9706
  const remoteAgent = await getRemoteTeammateAgent(entry.teammate.url);
9225
- const prompt = buildTeammatePrompt(request);
9707
+ const prompt = buildTeammatePrompt(request, createTeamConversationRuntimeContext(args[TOOL_RUNTIME_CONTEXT_ARGUMENT]));
9226
9708
  const teammateResult = await remoteAgent.callChatModel(prompt);
9227
9709
  response = teammateResult.content || '';
9228
9710
  toolCalls =
@@ -9772,25 +10254,6 @@
9772
10254
  * Note: [💞] Ignore a discrepancy between file name and entity name
9773
10255
  */
9774
10256
 
9775
- /**
9776
- * @@@
9777
- *
9778
- * @private utility for commitments
9779
- */
9780
- function formatOptionalInstructionBlock(label, content) {
9781
- const trimmedContent = spaceTrim$1.spaceTrim(content);
9782
- if (!trimmedContent) {
9783
- return '';
9784
- }
9785
- return spaceTrim$1.spaceTrim((block) => `
9786
- - ${label}:
9787
- ${block(trimmedContent
9788
- .split(/\r?\n/)
9789
- .map((line) => `- ${line}`)
9790
- .join('\n'))}
9791
- `);
9792
- }
9793
-
9794
10257
  /**
9795
10258
  * Client-side safe wrapper for sending emails.
9796
10259
  *
@@ -11407,6 +11870,63 @@
11407
11870
  var styles$c = {"BookEditor":"BookEditor-module_BookEditor__s-0PU","bookEditorContainer":"BookEditor-module_bookEditorContainer__wLMwM","isVerbose":"BookEditor-module_isVerbose__VQ6iL","bookEditorWrapper":"BookEditor-module_bookEditorWrapper__twppD","isBorderRadiusDisabled":"BookEditor-module_isBorderRadiusDisabled__h1I3v","dropOverlay":"BookEditor-module_dropOverlay__xWWoX","bookEditorActionbar":"BookEditor-module_bookEditorActionbar__KW6dc","fullscreen":"BookEditor-module_fullscreen__rktsl","button":"BookEditor-module_button__hS390","savedNotification":"BookEditor-module_savedNotification__OiX9L","fadeOut":"BookEditor-module_fadeOut__q8JnR","uploadPanel":"BookEditor-module_uploadPanel__2JJtD","uploadPanelHeader":"BookEditor-module_uploadPanelHeader__pdJd2","uploadPanelTitle":"BookEditor-module_uploadPanelTitle__TJIVF","uploadPanelHeaderMeta":"BookEditor-module_uploadPanelHeaderMeta__Xw0uI","uploadPanelSummary":"BookEditor-module_uploadPanelSummary__rwSbG","uploadPanelProgressBar":"BookEditor-module_uploadPanelProgressBar__a6pjf","uploadPanelProgressFill":"BookEditor-module_uploadPanelProgressFill__l-TKR","uploadPanelList":"BookEditor-module_uploadPanelList__VxEd5","uploadRow":"BookEditor-module_uploadRow__QiSFg","uploadRowHeader":"BookEditor-module_uploadRowHeader__po0j5","uploadRowName":"BookEditor-module_uploadRowName__doQRO","uploadRowStatus":"BookEditor-module_uploadRowStatus__jsUb-","uploadRowMeta":"BookEditor-module_uploadRowMeta__1lz9h","uploadRowProgressBar":"BookEditor-module_uploadRowProgressBar__NoBA7","uploadRowProgressFill":"BookEditor-module_uploadRowProgressFill__TrP7e","uploadRowActions":"BookEditor-module_uploadRowActions__5Y1Mq","uploadActionButton":"BookEditor-module_uploadActionButton__CqJrr","uploadRowError":"BookEditor-module_uploadRowError__eEHWw"};
11408
11871
  styleInject(css_248z$c);
11409
11872
 
11873
+ /**
11874
+ * Helper for manipulating agent books in-memory.
11875
+ *
11876
+ * @private internal helper for `@promptbook/core`
11877
+ */
11878
+ class BookEditable {
11879
+ /**
11880
+ * Creates a mutable view over the supplied book content.
11881
+ *
11882
+ * @param book - Agent source text to work with.
11883
+ */
11884
+ constructor(book) {
11885
+ this.lines = book.split(/\r?\n/);
11886
+ }
11887
+ /**
11888
+ * Creates a new instance from the supplied book text.
11889
+ *
11890
+ * @param book - Agent source text to work with.
11891
+ * @returns Editable view over the book content.
11892
+ */
11893
+ static from(book) {
11894
+ return new BookEditable(book);
11895
+ }
11896
+ /**
11897
+ * Returns the editable content as a string_book.
11898
+ *
11899
+ * @returns Current book content with original line breaks preserved.
11900
+ */
11901
+ toString() {
11902
+ return this.lines.join('\n');
11903
+ }
11904
+ /**
11905
+ * Checks whether the book contains any non-empty lines.
11906
+ *
11907
+ * @returns `true` when the book has meaningful content beyond blank lines.
11908
+ */
11909
+ hasNonEmptyContent() {
11910
+ return this.lines.some((line) => line.trim() !== '');
11911
+ }
11912
+ /**
11913
+ * Finds the last line index whose trimmed text matches the commitment name.
11914
+ *
11915
+ * @param commitment - Commitment keyword to locate (for example `CLOSED`).
11916
+ * @returns Zero-based line index or `null` when the commitment is absent.
11917
+ */
11918
+ findLastCommitmentLineIndex(commitment) {
11919
+ const normalized = commitment.trim().toUpperCase();
11920
+ for (let lineIndex = this.lines.length - 1; lineIndex >= 0; lineIndex -= 1) {
11921
+ const line = this.lines[lineIndex];
11922
+ if ((line === null || line === void 0 ? void 0 : line.trim().toUpperCase()) === normalized) {
11923
+ return lineIndex;
11924
+ }
11925
+ }
11926
+ return null;
11927
+ }
11928
+ }
11929
+
11410
11930
  /**
11411
11931
  * Gets all available commitment definitions
11412
11932
  * @returns Array of all commitment definitions
@@ -11867,6 +12387,39 @@
11867
12387
  { regex: /(^|[^\\])\\\(([\s\S]+?)\\\)/g, displayMode: false },
11868
12388
  { regex: /(^|[^\\])\$([^$\n]+?)\$/g, displayMode: false },
11869
12389
  ];
12390
+ const CODE_FENCE_REGEX = /(`{3,}|~{3,})(?:[^\n\r]*)\r?\n[\s\S]*?\r?\n\1[^\n\r]*/g;
12391
+ const INLINE_CODE_REGEX = /(`+)([\s\S]*?)(\1)/g;
12392
+ const CODE_PLACEHOLDER_PREFIX = '@@PROMPTBOOK_CODE_PLACEHOLDER__';
12393
+ const CODE_PLACEHOLDER_REGEX = new RegExp(`${CODE_PLACEHOLDER_PREFIX}(\\d+)__`, 'g');
12394
+ /**
12395
+ * Masks inline and fenced code segments so math rendering never touches them.
12396
+ *
12397
+ * @param markdown - Markdown text to mask.
12398
+ * @returns Masked markdown and a restore helper.
12399
+ *
12400
+ * @private utility of `MarkdownContent` component
12401
+ */
12402
+ function maskMarkdownCodeSegments(markdown) {
12403
+ const segments = [];
12404
+ let masked = markdown;
12405
+ const addPlaceholder = (segment) => {
12406
+ const placeholder = `${CODE_PLACEHOLDER_PREFIX}${segments.length}__`;
12407
+ segments.push(segment);
12408
+ return placeholder;
12409
+ };
12410
+ const maskWith = (regex) => {
12411
+ regex.lastIndex = 0;
12412
+ masked = masked.replace(regex, (match) => addPlaceholder(match));
12413
+ };
12414
+ maskWith(CODE_FENCE_REGEX);
12415
+ maskWith(INLINE_CODE_REGEX);
12416
+ return {
12417
+ masked: masked,
12418
+ restore(value) {
12419
+ return value.replace(CODE_PLACEHOLDER_REGEX, (_match, index) => { var _a; return (_a = segments[Number(index)]) !== null && _a !== void 0 ? _a : ''; });
12420
+ },
12421
+ };
12422
+ }
11870
12423
  function replaceMathDelimiter(md, delimiter) {
11871
12424
  return md.replace(delimiter.regex, (...args) => {
11872
12425
  var _a, _b, _c;
@@ -11896,11 +12449,13 @@
11896
12449
  * @private utility of `MarkdownContent` component
11897
12450
  */
11898
12451
  function renderMathInMarkdown(md) {
12452
+ const { masked, restore } = maskMarkdownCodeSegments(md);
12453
+ let processed = masked;
11899
12454
  for (const delimiter of mathDelimiterDefinitions) {
11900
- md = replaceMathDelimiter(md, delimiter);
12455
+ processed = replaceMathDelimiter(processed, delimiter);
11901
12456
  }
11902
- md = md.replace(/\\$/g, '$');
11903
- return md;
12457
+ processed = processed.replace(/\\$/g, '$');
12458
+ return restore(processed);
11904
12459
  }
11905
12460
  /**
11906
12461
  * Convert markdown content to HTML
@@ -13276,6 +13831,7 @@
13276
13831
  * Inserts upload placeholders and queues uploads for processing.
13277
13832
  */
13278
13833
  const handleFiles = react.useCallback(async (files) => {
13834
+ var _a;
13279
13835
  if (!onFileUpload || !editor || !monaco) {
13280
13836
  return;
13281
13837
  }
@@ -13291,15 +13847,21 @@
13291
13847
  file,
13292
13848
  placeholder: getUploadPlaceholderText(file.name),
13293
13849
  }));
13294
- const prefix = model.getValue() ? '\n' : '';
13295
- const textToAppend = prefix + placeholders.map((entry) => entry.placeholder).join('\n');
13296
- const lastLine = model.getLineCount();
13297
- const lastColumn = model.getLineMaxColumn(lastLine);
13298
- const insertStartOffset = model.getOffsetAt(new monaco.Position(lastLine, lastColumn));
13850
+ const currentValue = ((_a = model.getValue()) !== null && _a !== void 0 ? _a : '');
13851
+ const bookEditable = new BookEditable(currentValue);
13852
+ const closedLineIndex = bookEditable.findLastCommitmentLineIndex('CLOSED');
13853
+ const insertingBeforeClosed = closedLineIndex !== null;
13854
+ const insertLine = insertingBeforeClosed ? closedLineIndex + 1 : model.getLineCount();
13855
+ const insertColumn = insertingBeforeClosed ? 1 : model.getLineMaxColumn(insertLine);
13856
+ const shouldAddLeadingLineBreak = !insertingBeforeClosed && Boolean(model.getValue());
13857
+ const prefix = shouldAddLeadingLineBreak ? '\n' : '';
13858
+ const placeholderBlock = placeholders.map((entry) => `${entry.placeholder}\n`).join('');
13859
+ const textToInsert = `${prefix}${placeholderBlock}`;
13860
+ const insertStartOffset = model.getOffsetAt(new monaco.Position(insertLine, insertColumn));
13299
13861
  editor.executeEdits('upload-placeholders', [
13300
13862
  {
13301
- range: new monaco.Range(lastLine, lastColumn, lastLine, lastColumn),
13302
- text: textToAppend,
13863
+ range: new monaco.Range(insertLine, insertColumn, insertLine, insertColumn),
13864
+ text: textToInsert,
13303
13865
  forceMoveMarkers: true,
13304
13866
  },
13305
13867
  ]);
@@ -14562,17 +15124,274 @@
14562
15124
  */
14563
15125
  const TemplateIcon = ({ size }) => (jsxRuntime.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "currentColor", children: jsxRuntime.jsx("path", { d: "M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z" }) }));
14564
15126
 
15127
+ /**
15128
+ * Creates an inline data URL for an SVG illustration so the ex-port stays self-contained.
15129
+ *
15130
+ * @private Internal helper used by `htmlSaveFormatDefinition`.
15131
+ */
15132
+ function createSvgDataUrl(svg) {
15133
+ return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;
15134
+ }
14565
15135
  /**
14566
15136
  * Utility to compute readable text color based on background
15137
+ *
15138
+ * @private Internal helper of the HTML export renderer.
14567
15139
  */
14568
15140
  function getTextColor(bgColor) {
14569
- // Simple luminance check for contrast
14570
15141
  const hex = bgColor.replace('#', '');
14571
15142
  const r = parseInt(hex.substring(0, 2), 16);
14572
15143
  const g = parseInt(hex.substring(2, 4), 16);
14573
15144
  const b = parseInt(hex.substring(4, 6), 16);
14574
15145
  const luminance = 0.299 * r + 0.587 * g + 0.114 * b;
14575
- return luminance > 186 ? '#222' : '#fff';
15146
+ return luminance > 186 ? '#0f172a' : '#f8fafc';
15147
+ }
15148
+ const HERO_ILLUSTRATION_SVG = spaceTrim__default["default"](() => `
15149
+ <svg width="320" height="220" viewBox="0 0 320 220" fill="none" xmlns="http://www.w3.org/2000/svg">
15150
+ <defs>
15151
+ <linearGradient id="heroGradient" x1="0" y1="0" x2="320" y2="220">
15152
+ <stop offset="0%" stop-color="#2563eb" stop-opacity="0.9" />
15153
+ <stop offset="100%" stop-color="#0ea5e9" stop-opacity="0.45" />
15154
+ </linearGradient>
15155
+ </defs>
15156
+ <rect width="320" height="220" rx="28" fill="#0f172a" />
15157
+ <rect x="20" y="24" width="280" height="128" rx="18" fill="url(#heroGradient)" />
15158
+ <rect x="36" y="52" width="248" height="16" rx="8" fill="rgba(255,255,255,0.75)" />
15159
+ <rect x="36" y="84" width="212" height="12" rx="6" fill="rgba(255,255,255,0.55)" />
15160
+ <rect x="36" y="104" width="260" height="10" rx="5" fill="rgba(255,255,255,0.35)" />
15161
+ <circle cx="78" cy="168" r="42" fill="#22d3ee" opacity="0.85" />
15162
+ <circle cx="222" cy="178" r="32" fill="#facc15" opacity="0.8" />
15163
+ <rect x="62" y="130" width="196" height="20" rx="10" fill="rgba(255,255,255,0.15)" />
15164
+ </svg>
15165
+ `);
15166
+ const BRAND_MARK_SVG = spaceTrim__default["default"](() => `
15167
+ <svg width="92" height="92" viewBox="0 0 92 92" fill="none" xmlns="http://www.w3.org/2000/svg">
15168
+ <defs>
15169
+ <linearGradient id="badgeGradient" x1="0" y1="0" x2="92" y2="92">
15170
+ <stop offset="0%" stop-color="#38bdf8" />
15171
+ <stop offset="100%" stop-color="#0ea5e9" />
15172
+ </linearGradient>
15173
+ </defs>
15174
+ <rect width="92" height="92" rx="22" fill="url(#badgeGradient)" />
15175
+ <path
15176
+ d="M58 66H42V26H58C67.388 26 74 32.658 74 42C74 51.342 67.388 58 58 58H48V66Z"
15177
+ fill="white"
15178
+ />
15179
+ <path
15180
+ d="M42 66H34V26H42V66Z"
15181
+ fill="#0f172a"
15182
+ fill-opacity="0.6"
15183
+ />
15184
+ </svg>
15185
+ `);
15186
+ const HERO_ILLUSTRATION_URL = createSvgDataUrl(HERO_ILLUSTRATION_SVG);
15187
+ const BRAND_MARK_URL = createSvgDataUrl(BRAND_MARK_SVG);
15188
+ const ROLE_COLOR_FALLBACKS = {
15189
+ USER: '#0ea5e9',
15190
+ ASSISTANT: '#2563eb',
15191
+ SYSTEM: '#475569',
15192
+ };
15193
+ /**
15194
+ * Escapes HTML-special characters so user-provided content stays safe.
15195
+ *
15196
+ * @private Internal helper of the HTML export renderer.
15197
+ */
15198
+ function escapeHtml(value) {
15199
+ return String(value)
15200
+ .replace(/&/g, '&amp;')
15201
+ .replace(/</g, '&lt;')
15202
+ .replace(/>/g, '&gt;')
15203
+ .replace(/"/g, '&quot;')
15204
+ .replace(/'/g, '&#39;');
15205
+ }
15206
+ /**
15207
+ * Splits a message body into paragraphs while preserving line breaks.
15208
+ *
15209
+ * @private Internal helper of the HTML export renderer.
15210
+ */
15211
+ function formatMessageContent(content) {
15212
+ if (!content.trim()) {
15213
+ return '<p class="message-empty">No text provided.</p>';
15214
+ }
15215
+ const paragraphs = content.split(/\n{2,}/).map((paragraph) => paragraph.trim());
15216
+ const rendered = paragraphs
15217
+ .filter(Boolean)
15218
+ .map((paragraph) => `<p>${escapeHtml(paragraph).replace(/\n/g, '<br />')}</p>`)
15219
+ .join('');
15220
+ if (rendered) {
15221
+ return rendered;
15222
+ }
15223
+ return '<p class="message-empty">No text provided.</p>';
15224
+ }
15225
+ /**
15226
+ * Formats arbitrary date values into a consistent human-friendly label.
15227
+ *
15228
+ * @private Internal helper of the HTML export renderer.
15229
+ */
15230
+ function formatTimestamp(value) {
15231
+ if (!value) {
15232
+ return '';
15233
+ }
15234
+ const date = typeof value === 'string' ? new Date(value) : value;
15235
+ if (Number.isNaN(date.getTime())) {
15236
+ return '';
15237
+ }
15238
+ return new Intl.DateTimeFormat('en-US', {
15239
+ weekday: 'short',
15240
+ month: 'short',
15241
+ day: 'numeric',
15242
+ year: 'numeric',
15243
+ hour: 'numeric',
15244
+ minute: '2-digit',
15245
+ }).format(date);
15246
+ }
15247
+ /**
15248
+ * Builds a lookup map keyed by participant name to quickly resolve visuals.
15249
+ *
15250
+ * @private Internal helper of the HTML export renderer.
15251
+ */
15252
+ function buildParticipantMap(participants) {
15253
+ const map = new Map();
15254
+ for (const participant of participants) {
15255
+ const normalized = String(participant.name);
15256
+ map.set(normalized, participant);
15257
+ map.set(normalized.toUpperCase(), participant);
15258
+ }
15259
+ return map;
15260
+ }
15261
+ /**
15262
+ * Normalizes participant colors (either raw strings or Color instances) into hex strings.
15263
+ *
15264
+ * @private Internal helper of the HTML export renderer.
15265
+ */
15266
+ function normalizeParticipantColor(color) {
15267
+ if (!color) {
15268
+ return undefined;
15269
+ }
15270
+ if (typeof color === 'string') {
15271
+ return color;
15272
+ }
15273
+ const asHelper = color;
15274
+ if (typeof (asHelper === null || asHelper === void 0 ? void 0 : asHelper.toString) === 'function') {
15275
+ return asHelper.toString();
15276
+ }
15277
+ return undefined;
15278
+ }
15279
+ /**
15280
+ * Resolves the visuals (name, avatar, accent color) for a message sender.
15281
+ *
15282
+ * @private Internal helper of the HTML export renderer.
15283
+ */
15284
+ function resolveParticipantVisuals(participants, sender) {
15285
+ var _a, _b, _c, _d;
15286
+ const normalized = String(sender || 'SYSTEM');
15287
+ const upper = normalized.toUpperCase();
15288
+ const participant = (_a = participants.get(normalized)) !== null && _a !== void 0 ? _a : participants.get(upper);
15289
+ const accentColor = (_c = (_b = normalizeParticipantColor(participant === null || participant === void 0 ? void 0 : participant.color)) !== null && _b !== void 0 ? _b : ROLE_COLOR_FALLBACKS[upper]) !== null && _c !== void 0 ? _c : '#2563eb';
15290
+ const displayName = ((_d = participant === null || participant === void 0 ? void 0 : participant.fullname) === null || _d === void 0 ? void 0 : _d.trim()) || normalized;
15291
+ const avatarLabel = displayName.charAt(0).toUpperCase() || '?';
15292
+ return {
15293
+ displayName,
15294
+ avatarLabel,
15295
+ accentColor,
15296
+ avatarSrc: participant === null || participant === void 0 ? void 0 : participant.avatarSrc,
15297
+ };
15298
+ }
15299
+ /**
15300
+ * Builds markup for attachments inside a message bubble.
15301
+ *
15302
+ * @private Internal helper of the HTML export renderer.
15303
+ */
15304
+ function buildAttachmentsMarkup(message) {
15305
+ const attachments = message.attachments;
15306
+ if (!attachments || attachments.length === 0) {
15307
+ return '';
15308
+ }
15309
+ const chips = attachments.map((attachment) => {
15310
+ var _a;
15311
+ const hasUrl = Boolean(attachment.url);
15312
+ const tag = hasUrl ? 'a' : 'span';
15313
+ const href = hasUrl ? ` href="${escapeHtml((_a = attachment.url) !== null && _a !== void 0 ? _a : '#')}" target="_blank" rel="noopener"` : '';
15314
+ const name = escapeHtml(attachment.name || 'Attachment');
15315
+ const meta = escapeHtml(attachment.type || 'file');
15316
+ return spaceTrim__default["default"](`
15317
+ <${tag} class="attachment-chip"${href}>
15318
+ <span class="attachment-icon">📎</span>
15319
+ <span class="attachment-name">${name}</span>
15320
+ <span class="attachment-meta">${meta}</span>
15321
+ </${tag}>
15322
+ `);
15323
+ });
15324
+ return `<div class="message-attachments">${chips.join('')}</div>`;
15325
+ }
15326
+ /**
15327
+ * Builds markup for citations within a message bubble.
15328
+ *
15329
+ * @private Internal helper of the HTML export renderer.
15330
+ */
15331
+ function buildCitationsMarkup(message) {
15332
+ const citations = message.citations;
15333
+ if (!citations || citations.length === 0) {
15334
+ return '';
15335
+ }
15336
+ const chips = citations.map((citation) => {
15337
+ const excerpt = citation.excerpt ? `<p class="citation-excerpt">${escapeHtml(citation.excerpt)}</p>` : '';
15338
+ const urlLink = citation.url
15339
+ ? `<a class="citation-link" href="${escapeHtml(citation.url)}" target="_blank" rel="noopener">Open source</a>`
15340
+ : '';
15341
+ return spaceTrim__default["default"](`
15342
+ <article class="citation-chip">
15343
+ <div class="citation-header">
15344
+ <span class="citation-badge">${escapeHtml(citation.id)}</span>
15345
+ <span class="citation-source">${escapeHtml(citation.source)}</span>
15346
+ </div>
15347
+ ${excerpt}
15348
+ ${urlLink}
15349
+ </article>
15350
+ `);
15351
+ });
15352
+ return `<div class="message-citations">${chips.join('')}</div>`;
15353
+ }
15354
+ /**
15355
+ * Renders a single message block enriched with avatar, metadata, attachments, and citations.
15356
+ *
15357
+ * @private Internal helper of the HTML export renderer.
15358
+ */
15359
+ function renderMessageBlock(message, participants) {
15360
+ var _a;
15361
+ const sender = String((_a = message.sender) !== null && _a !== void 0 ? _a : 'SYSTEM');
15362
+ const upperSender = sender.toUpperCase();
15363
+ const visuals = resolveParticipantVisuals(participants, sender);
15364
+ const bubbleTextColor = getTextColor(visuals.accentColor);
15365
+ const timestamp = formatTimestamp(message.createdAt);
15366
+ const durationLabel = typeof message.generationDurationMs === 'number' ? `${(message.generationDurationMs / 1000).toFixed(1)}s` : '';
15367
+ const attachments = buildAttachmentsMarkup(message);
15368
+ const citations = buildCitationsMarkup(message);
15369
+ const alignmentClass = upperSender === 'USER' ? 'message-user' : 'message-assistant';
15370
+ const avatarMarkup = visuals.avatarSrc
15371
+ ? `<img class="message-avatar-img" src="${escapeHtml(visuals.avatarSrc)}" alt="${escapeHtml(visuals.displayName)}" />`
15372
+ : `<span class="message-avatar-fallback" style="background:${visuals.accentColor};color:${bubbleTextColor};">${escapeHtml(visuals.avatarLabel)}</span>`;
15373
+ return spaceTrim__default["default"](`
15374
+ <article class="message-block ${alignmentClass}">
15375
+ <div class="message-avatar">${avatarMarkup}</div>
15376
+ <div class="message-card" style="--bubble-color:${visuals.accentColor};--bubble-text:${bubbleTextColor};">
15377
+ <div class="message-card-inner">
15378
+ <header class="message-card-header">
15379
+ <div>
15380
+ <strong class="message-name">${escapeHtml(visuals.displayName)}</strong>
15381
+ <span class="message-role">${escapeHtml(upperSender)}</span>
15382
+ </div>
15383
+ ${timestamp ? `<time class="message-time">${escapeHtml(timestamp)}</time>` : ''}
15384
+ </header>
15385
+ <div class="message-content">${formatMessageContent(message.content)}</div>
15386
+ ${durationLabel
15387
+ ? `<div class="message-duration">Responded in ${escapeHtml(durationLabel)}</div>`
15388
+ : ''}
15389
+ ${attachments}
15390
+ ${citations}
15391
+ </div>
15392
+ </div>
15393
+ </article>
15394
+ `);
14576
15395
  }
14577
15396
  /**
14578
15397
  * HTML export plugin
@@ -14582,121 +15401,483 @@
14582
15401
  const htmlSaveFormatDefinition = {
14583
15402
  formatName: 'html',
14584
15403
  label: 'Html',
14585
- getContent: ({ messages }) => spaceTrim__default["default"](`
15404
+ getContent: ({ title, messages, participants }) => {
15405
+ const safeTitle = escapeHtml(title || 'Chat');
15406
+ const participantLookup = buildParticipantMap(participants);
15407
+ const exportedAt = new Date();
15408
+ const exportedLabel = formatTimestamp(exportedAt);
15409
+ const uniqueParticipants = Array.from(new Set(participants
15410
+ .map((participant) => { var _a; return ((_a = participant.fullname) !== null && _a !== void 0 ? _a : String(participant.name)).trim(); })
15411
+ .filter(Boolean)));
15412
+ const heroSubtitle = uniqueParticipants.length > 0
15413
+ ? `Featuring ${uniqueParticipants.slice(0, 3).join(', ')}${uniqueParticipants.length > 3 ? ' and more' : ''}`
15414
+ : 'Featuring your conversation';
15415
+ const participantCount = new Set(participants.map((participant) => String(participant.name).trim())).size;
15416
+ const statCards = [
15417
+ { label: 'Messages', value: messages.length.toString() },
15418
+ { label: 'Participants', value: participantCount.toString() },
15419
+ { label: 'Exported on', value: exportedLabel },
15420
+ ];
15421
+ const messageMarkup = messages.length > 0
15422
+ ? messages.map((message) => renderMessageBlock(message, participantLookup)).join('')
15423
+ : '<div class="empty-state">No messages yet. Send a note to capture this chat.</div>';
15424
+ return spaceTrim__default["default"](`
14586
15425
  <!DOCTYPE html>
14587
15426
  <html lang="en">
14588
15427
  <head>
14589
15428
  <meta charset="UTF-8" />
14590
15429
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
14591
- <title>Chat Export - Promptbook</title>
15430
+ <title>${safeTitle} · Promptbook</title>
14592
15431
  <style>
15432
+ :root {
15433
+ color-scheme: dark;
15434
+ }
15435
+
15436
+ * {
15437
+ box-sizing: border-box;
15438
+ }
15439
+
14593
15440
  body {
14594
- font-family: 'Segoe UI', Arial, sans-serif;
14595
- background: #f7f8fa;
14596
15441
  margin: 0;
14597
- padding: 0;
15442
+ background: radial-gradient(circle at top, rgba(14, 165, 233, 0.18), transparent 55%),
15443
+ #030617;
15444
+ font-family: 'Inter', 'Segoe UI', system-ui, sans-serif;
15445
+ color: #f8fafc;
14598
15446
  }
14599
- .chat-container {
14600
- max-width: 600px;
14601
- margin: 40px auto 20px auto;
14602
- background: #fff;
14603
- border-radius: 12px;
14604
- box-shadow: 0 2px 16px rgba(0,0,0,0.07);
14605
- padding: 24px 18px 18px 18px;
15447
+
15448
+ a {
15449
+ color: inherit;
15450
+ text-decoration: none;
14606
15451
  }
14607
- .chat-message {
15452
+
15453
+ .export-shell {
15454
+ max-width: 1040px;
15455
+ margin: 0 auto;
15456
+ padding: 40px 24px 64px;
14608
15457
  display: flex;
14609
- align-items: flex-start;
14610
- margin-bottom: 18px;
14611
- border-radius: 10px;
14612
- padding: 0;
15458
+ flex-direction: column;
15459
+ gap: 32px;
14613
15460
  }
14614
- .avatar {
14615
- width: 38px;
14616
- height: 38px;
14617
- border-radius: 50%;
14618
- background: #ccc;
14619
- margin-right: 14px;
14620
- flex-shrink: 0;
15461
+
15462
+ .hero {
15463
+ background: rgba(15, 23, 42, 0.85);
15464
+ border: 1px solid rgba(255, 255, 255, 0.08);
15465
+ border-radius: 32px;
15466
+ padding: 32px;
14621
15467
  display: flex;
14622
15468
  align-items: center;
14623
- justify-content: center;
14624
- font-weight: bold;
14625
- font-size: 18px;
14626
- color: #fff;
14627
- box-shadow: 0 1px 4px rgba(0,0,0,0.04);
15469
+ justify-content: space-between;
15470
+ gap: 32px;
15471
+ backdrop-filter: blur(18px);
15472
+ box-shadow: 0 30px 60px rgba(15, 23, 42, 0.65);
14628
15473
  }
14629
- .bubble {
14630
- border-radius: 10px;
14631
- padding: 12px 16px;
14632
- min-width: 80px;
14633
- max-width: 100%;
14634
- word-break: break-word;
14635
- box-shadow: 0 1px 4px rgba(0,0,0,0.03);
15474
+
15475
+ .hero-content h1 {
15476
+ margin: 8px 0;
15477
+ font-size: 32px;
15478
+ line-height: 1.2;
15479
+ font-weight: 600;
15480
+ }
15481
+
15482
+ .hero-edge {
15483
+ color: rgba(255, 255, 255, 0.7);
15484
+ }
15485
+
15486
+ .hero-kicker {
15487
+ letter-spacing: 0.18em;
15488
+ text-transform: uppercase;
15489
+ font-size: 12px;
15490
+ color: rgba(248, 250, 252, 0.7);
15491
+ margin: 0;
15492
+ }
15493
+
15494
+ .hero-subtitle {
15495
+ margin: 0;
14636
15496
  font-size: 16px;
14637
- line-height: 1.6;
14638
- margin-top: 2px;
15497
+ color: rgba(248, 250, 252, 0.65);
14639
15498
  }
14640
- .from-label {
14641
- font-weight: bold;
14642
- font-size: 15px;
14643
- margin-bottom: 4px;
14644
- display: block;
14645
- opacity: 0.85;
15499
+
15500
+ .stat-grid {
15501
+ margin-top: 18px;
15502
+ display: flex;
15503
+ gap: 16px;
15504
+ flex-wrap: wrap;
14646
15505
  }
14647
- .footer {
14648
- text-align: center;
14649
- margin: 32px 0 18px 0;
14650
- color: #888;
14651
- font-size: 15px;
14652
- opacity: 0.85;
15506
+
15507
+ .stat-card {
15508
+ background: rgba(15, 23, 42, 0.6);
15509
+ border: 1px solid rgba(255, 255, 255, 0.05);
15510
+ border-radius: 18px;
15511
+ padding: 12px 18px;
15512
+ min-width: 120px;
14653
15513
  }
14654
- .footer a {
14655
- color: #2b7cff;
14656
- text-decoration: none;
14657
- font-weight: bold;
15514
+
15515
+ .stat-value {
15516
+ display: block;
15517
+ font-size: 20px;
15518
+ font-weight: 600;
14658
15519
  }
14659
- </style>
14660
- </head>
14661
- <body>
14662
- <div class="chat-container">
14663
- ${messages
14664
- .map((message) => {
14665
- // Fallback color map for common participants
14666
- const participantColors = {
14667
- USER: '#2b7cff',
14668
- ASSISTANT: '#ffb300',
14669
- SYSTEM: '#888',
14670
- };
14671
- const bgColor = participantColors[String(message.sender)] || '#2b7cff';
14672
- const textColor = getTextColor(bgColor);
14673
- return spaceTrim__default["default"](`
14674
- <div class="chat-message">
14675
- <div class="avatar" style="background:${bgColor};color:${getTextColor(bgColor)};">
14676
- ${String(message.sender)[0] || '?'}
14677
- </div>
14678
- <div class="bubble" style="background:${bgColor};color:${textColor};">
14679
- <span class="from-label">${String(message.sender)}:</span>
14680
- ${message.content}
14681
- </div>
14682
- </div>
14683
- `);
14684
- })
14685
- .join('')}
14686
- </div>
14687
- <div class="footer">
14688
- Exported from <a href="https://ptbk.io" target="_blank" rel="noopener">Promptbook</a>
14689
- </div>
14690
- </body>
14691
- </html>
14692
- `),
14693
- mimeType: 'text/html',
14694
- fileExtension: 'html',
14695
- };
14696
- /**
14697
- * TODO: !!! Add QR code with branding to the footer
14698
- * TODO: [😬] Take chat save to HTML from existing parallel implementation
14699
- */
15520
+
15521
+ .stat-label {
15522
+ font-size: 12px;
15523
+ color: rgba(248, 250, 252, 0.55);
15524
+ text-transform: uppercase;
15525
+ letter-spacing: 0.1em;
15526
+ }
15527
+
15528
+ .hero-visual {
15529
+ display: grid;
15530
+ place-items: center;
15531
+ gap: 12px;
15532
+ }
15533
+
15534
+ .hero-illustration {
15535
+ width: 280px;
15536
+ border-radius: 20px;
15537
+ border: 1px solid rgba(255, 255, 255, 0.08);
15538
+ box-shadow: 0 18px 36px rgba(2, 6, 23, 0.8);
15539
+ }
15540
+
15541
+ .hero-badge {
15542
+ width: 70px;
15543
+ height: 70px;
15544
+ }
15545
+
15546
+ .chat-panel {
15547
+ background: rgba(15, 23, 42, 0.95);
15548
+ border-radius: 28px;
15549
+ padding: 32px;
15550
+ border: 1px solid rgba(255, 255, 255, 0.06);
15551
+ box-shadow: 0 30px 50px rgba(2, 6, 23, 0.7);
15552
+ }
15553
+
15554
+ .chat-panel-header {
15555
+ display: flex;
15556
+ align-items: center;
15557
+ justify-content: space-between;
15558
+ gap: 16px;
15559
+ margin-bottom: 18px;
15560
+ }
15561
+
15562
+ .chat-panel-subhead {
15563
+ margin: 0;
15564
+ font-size: 14px;
15565
+ color: rgba(248, 250, 252, 0.75);
15566
+ }
15567
+
15568
+ .chat-panel-meta {
15569
+ display: flex;
15570
+ gap: 12px;
15571
+ font-size: 13px;
15572
+ color: rgba(248, 250, 252, 0.55);
15573
+ }
15574
+
15575
+ .chat-messages {
15576
+ display: flex;
15577
+ flex-direction: column;
15578
+ gap: 24px;
15579
+ }
15580
+
15581
+ .message-block {
15582
+ display: flex;
15583
+ gap: 16px;
15584
+ align-items: flex-start;
15585
+ }
15586
+
15587
+ .message-block.message-user {
15588
+ flex-direction: row-reverse;
15589
+ }
15590
+
15591
+ .message-card {
15592
+ flex: 1;
15593
+ }
15594
+
15595
+ .message-card-inner {
15596
+ background: radial-gradient(circle at top, rgba(255, 255, 255, 0.08), transparent),
15597
+ var(--bubble-color, #2563eb);
15598
+ border-radius: 24px;
15599
+ padding: 20px;
15600
+ box-shadow: 0 16px 32px rgba(3, 7, 18, 0.6);
15601
+ color: var(--bubble-text, #f8fafc);
15602
+ border: 1px solid rgba(255, 255, 255, 0.05);
15603
+ }
15604
+
15605
+ .message-card-header {
15606
+ display: flex;
15607
+ justify-content: space-between;
15608
+ align-items: baseline;
15609
+ margin-bottom: 12px;
15610
+ gap: 12px;
15611
+ }
15612
+
15613
+ .message-name {
15614
+ font-size: 14px;
15615
+ margin: 0;
15616
+ }
15617
+
15618
+ .message-role {
15619
+ font-size: 11px;
15620
+ text-transform: uppercase;
15621
+ letter-spacing: 0.14em;
15622
+ margin-left: 8px;
15623
+ opacity: 0.75;
15624
+ }
15625
+
15626
+ .message-time {
15627
+ font-size: 11px;
15628
+ opacity: 0.7;
15629
+ }
15630
+
15631
+ .message-content {
15632
+ font-size: 16px;
15633
+ line-height: 1.7;
15634
+ }
15635
+
15636
+ .message-duration {
15637
+ margin-top: 10px;
15638
+ font-size: 12px;
15639
+ opacity: 0.65;
15640
+ }
15641
+
15642
+ .message-avatar {
15643
+ width: 52px;
15644
+ height: 52px;
15645
+ flex-shrink: 0;
15646
+ border-radius: 12px;
15647
+ background: rgba(255, 255, 255, 0.04);
15648
+ display: grid;
15649
+ place-items: center;
15650
+ position: relative;
15651
+ }
15652
+
15653
+ .message-avatar-img {
15654
+ width: 48px;
15655
+ height: 48px;
15656
+ border-radius: 50%;
15657
+ object-fit: cover;
15658
+ }
15659
+
15660
+ .message-avatar-fallback {
15661
+ width: 44px;
15662
+ height: 44px;
15663
+ border-radius: 50%;
15664
+ display: grid;
15665
+ place-items: center;
15666
+ font-weight: 600;
15667
+ font-size: 18px;
15668
+ border: 2px solid rgba(255, 255, 255, 0.2);
15669
+ }
15670
+
15671
+ .message-attachments {
15672
+ margin-top: 14px;
15673
+ display: flex;
15674
+ gap: 10px;
15675
+ flex-wrap: wrap;
15676
+ }
15677
+
15678
+ .attachment-chip {
15679
+ padding: 8px 12px;
15680
+ background: rgba(15, 23, 42, 0.55);
15681
+ border-radius: 14px;
15682
+ border: 1px solid rgba(255, 255, 255, 0.08);
15683
+ display: flex;
15684
+ align-items: center;
15685
+ gap: 6px;
15686
+ font-size: 13px;
15687
+ }
15688
+
15689
+ .attachment-icon {
15690
+ font-size: 14px;
15691
+ }
15692
+
15693
+ .attachment-name {
15694
+ font-weight: 500;
15695
+ }
15696
+
15697
+ .attachment-meta {
15698
+ font-size: 11px;
15699
+ opacity: 0.6;
15700
+ }
15701
+
15702
+ .message-citations {
15703
+ margin-top: 18px;
15704
+ display: grid;
15705
+ gap: 10px;
15706
+ }
15707
+
15708
+ .citation-chip {
15709
+ border-radius: 16px;
15710
+ background: rgba(255, 255, 255, 0.03);
15711
+ padding: 12px 16px;
15712
+ border: 1px solid rgba(255, 255, 255, 0.05);
15713
+ }
15714
+
15715
+ .citation-header {
15716
+ display: flex;
15717
+ align-items: center;
15718
+ gap: 8px;
15719
+ font-size: 12px;
15720
+ text-transform: uppercase;
15721
+ letter-spacing: 0.2em;
15722
+ }
15723
+
15724
+ .citation-badge {
15725
+ background: rgba(15, 23, 42, 0.4);
15726
+ padding: 2px 8px;
15727
+ border-radius: 999px;
15728
+ font-weight: 600;
15729
+ }
15730
+
15731
+ .citation-source {
15732
+ opacity: 0.65;
15733
+ }
15734
+
15735
+ .citation-excerpt {
15736
+ margin: 8px 0 0;
15737
+ font-size: 14px;
15738
+ line-height: 1.6;
15739
+ }
15740
+
15741
+ .citation-link {
15742
+ margin-top: 6px;
15743
+ display: inline-flex;
15744
+ font-size: 12px;
15745
+ color: #38bdf8;
15746
+ }
15747
+
15748
+ .empty-state {
15749
+ text-align: center;
15750
+ color: rgba(248, 250, 252, 0.6);
15751
+ padding: 40px;
15752
+ border-radius: 20px;
15753
+ background: rgba(15, 23, 42, 0.6);
15754
+ border: 1px dashed rgba(255, 255, 255, 0.2);
15755
+ }
15756
+
15757
+ .export-footer {
15758
+ border-radius: 26px;
15759
+ border: 1px solid rgba(255, 255, 255, 0.08);
15760
+ padding: 24px 32px;
15761
+ display: flex;
15762
+ justify-content: space-between;
15763
+ align-items: center;
15764
+ background: linear-gradient(135deg, rgba(15, 23, 42, 0.8), rgba(15, 23, 42, 0.4));
15765
+ box-shadow: 0 24px 40px rgba(2, 6, 23, 0.7);
15766
+ }
15767
+
15768
+ .footer-meta {
15769
+ margin: 4px 0 0;
15770
+ opacity: 0.7;
15771
+ font-size: 13px;
15772
+ }
15773
+
15774
+ .footer-brand {
15775
+ display: flex;
15776
+ align-items: center;
15777
+ gap: 16px;
15778
+ }
15779
+
15780
+ .footer-brand img {
15781
+ width: 46px;
15782
+ height: 46px;
15783
+ }
15784
+
15785
+ .footer-brand span {
15786
+ opacity: 0.65;
15787
+ font-size: 13px;
15788
+ }
15789
+
15790
+ @media (max-width: 960px) {
15791
+ .hero {
15792
+ flex-direction: column;
15793
+ text-align: center;
15794
+ }
15795
+
15796
+ .hero-visual {
15797
+ order: -1;
15798
+ }
15799
+
15800
+ .message-block {
15801
+ flex-direction: column;
15802
+ }
15803
+
15804
+ .message-block.message-user {
15805
+ flex-direction: column;
15806
+ }
15807
+ }
15808
+
15809
+ @media (max-width: 640px) {
15810
+ .chat-panel {
15811
+ padding: 24px;
15812
+ }
15813
+
15814
+ .export-shell {
15815
+ padding: 28px 16px 48px;
15816
+ }
15817
+ }
15818
+ </style>
15819
+ </head>
15820
+ <body>
15821
+ <div class="export-shell">
15822
+ <header class="hero">
15823
+ <div class="hero-content">
15824
+ <p class="hero-kicker">Chat export</p>
15825
+ <h1>Conversation with ${safeTitle}</h1>
15826
+ <p class="hero-subtitle">${escapeHtml(heroSubtitle)}</p>
15827
+ <div class="stat-grid">
15828
+ ${statCards
15829
+ .map((stat) => spaceTrim__default["default"](`
15830
+ <div class="stat-card">
15831
+ <span class="stat-value">${escapeHtml(stat.value)}</span>
15832
+ <span class="stat-label">${escapeHtml(stat.label)}</span>
15833
+ </div>
15834
+ `))
15835
+ .join('')}
15836
+ </div>
15837
+ </div>
15838
+ <div class="hero-visual">
15839
+ <img class="hero-illustration" src="${HERO_ILLUSTRATION_URL}" alt="" aria-hidden="true" />
15840
+ <img class="hero-badge" src="${BRAND_MARK_URL}" alt="Promptbook badge" width="72" height="72" />
15841
+ </div>
15842
+ </header>
15843
+ <section class="chat-panel">
15844
+ <div class="chat-panel-header">
15845
+ <div>
15846
+ <p class="chat-panel-subhead">Captured messages, ready to share</p>
15847
+ </div>
15848
+ <div class="chat-panel-meta">
15849
+ <span>${escapeHtml(`${messages.length} messages`)}</span>
15850
+ <span>${escapeHtml(`${participantCount} participants`)}</span>
15851
+ </div>
15852
+ </div>
15853
+ <div class="chat-messages">
15854
+ ${messageMarkup}
15855
+ </div>
15856
+ </section>
15857
+ <footer class="export-footer">
15858
+ <div>
15859
+ <p>Generated by Promptbook</p>
15860
+ <p class="footer-meta">Exported ${escapeHtml(exportedLabel)}</p>
15861
+ </div>
15862
+ <div class="footer-brand">
15863
+ <img src="${BRAND_MARK_URL}" alt="" aria-hidden="true" />
15864
+ <div>
15865
+ <strong>ptbk.io</strong>
15866
+ <span>Share with your team</span>
15867
+ </div>
15868
+ </div>
15869
+ </footer>
15870
+ </div>
15871
+ </body>
15872
+ </html>
15873
+ `);
15874
+ },
15875
+ mimeType: 'text/html',
15876
+ fileExtension: 'html',
15877
+ };
15878
+ /**
15879
+ * TODO: Enhance branding
15880
+ */
14700
15881
 
14701
15882
  /**
14702
15883
  * JSON export plugin (full metadata)
@@ -14736,6 +15917,139 @@
14736
15917
  fileExtension: 'md',
14737
15918
  };
14738
15919
 
15920
+ /**
15921
+ * Builds display-ready timestamp and duration labels for a chat message.
15922
+ *
15923
+ * @private utility of `<Chat/>` component
15924
+ */
15925
+ function getChatMessageTimingDisplay(message) {
15926
+ if (!message.createdAt) {
15927
+ return null;
15928
+ }
15929
+ const timestamp = moment__default["default"](message.createdAt);
15930
+ if (!timestamp.isValid()) {
15931
+ return null;
15932
+ }
15933
+ const durationLabel = message.generationDurationMs === undefined
15934
+ ? undefined
15935
+ : formatGenerationDurationLabel(message.generationDurationMs);
15936
+ return {
15937
+ timeLabel: timestamp.format('LT'),
15938
+ fullLabel: timestamp.format('YYYY-MM-DD HH:mm:ss'),
15939
+ durationLabel,
15940
+ };
15941
+ }
15942
+ /**
15943
+ * Formats a generation duration value into a compact label.
15944
+ */
15945
+ function formatGenerationDurationLabel(durationMs) {
15946
+ if (!Number.isFinite(durationMs) || durationMs < 0) {
15947
+ return '0ms';
15948
+ }
15949
+ const duration = moment__default["default"].duration(durationMs);
15950
+ const totalSeconds = duration.asSeconds();
15951
+ if (totalSeconds < 1) {
15952
+ return `${Math.max(1, Math.round(duration.asMilliseconds()))}ms`;
15953
+ }
15954
+ if (totalSeconds < 60) {
15955
+ const precision = totalSeconds < 10 ? 1 : 0;
15956
+ return `${totalSeconds.toFixed(precision)}s`;
15957
+ }
15958
+ const minutes = Math.floor(duration.asMinutes());
15959
+ const seconds = Math.round(totalSeconds - minutes * 60);
15960
+ return `${minutes}m ${seconds}s`;
15961
+ }
15962
+
15963
+ /**
15964
+ * Generates Promptbook branding header for exported files
15965
+ *
15966
+ * @private utility of `<Chat/>` component
15967
+ */
15968
+ function getPromptbookBranding(shareUrl) {
15969
+ const timestamp = new Date().toLocaleString();
15970
+ return `Generated by Promptbook Studio - ${timestamp}\nShare link: ${shareUrl}\nhttps://promptbook.studio\n\n`;
15971
+ }
15972
+
15973
+ /**
15974
+ * Converts chat messages to plain text format
15975
+ *
15976
+ * @private utility of `<Chat/>` component
15977
+ */
15978
+ function messagesToText(messages, shareUrl, headerMarkdown, participants) {
15979
+ const branding = getPromptbookBranding(shareUrl);
15980
+ const header = headerMarkdown ? `${headerMarkdown}\n\n` : '';
15981
+ const content = messages
15982
+ .map((message) => {
15983
+ const participant = (participants || []).find((participant) => participant.name === message.sender);
15984
+ const fullname = (participant === null || participant === void 0 ? void 0 : participant.fullname) || message.sender;
15985
+ const timing = getChatMessageTimingDisplay(message);
15986
+ const timestampLabel = timing ? ` [${timing.fullLabel}]` : '';
15987
+ return `${fullname}${timestampLabel}:\n${message.content}\n`;
15988
+ })
15989
+ .join('\n');
15990
+ return header + branding + content;
15991
+ }
15992
+
15993
+ const PDF_PAGE_MARGIN_PT = 40;
15994
+ const PDF_FONT_SIZE_PT = 10;
15995
+ const PDF_LINE_HEIGHT_MULTIPLIER = 1.3;
15996
+ const PDF_PARAGRAPH_SPACING_MULTIPLIER = 0.25;
15997
+ const PDF_LINE_HEIGHT_PT = PDF_FONT_SIZE_PT * PDF_LINE_HEIGHT_MULTIPLIER;
15998
+ /**
15999
+ * Builds the share URL used inside exported files.
16000
+ *
16001
+ * @returns The current page URL or a fallback to Promptbook home when unavailable.
16002
+ * @private Internal helper used by chat save format implementations.
16003
+ */
16004
+ function resolveShareUrl() {
16005
+ if (typeof window === 'undefined') {
16006
+ return 'https://promptbook.studio';
16007
+ }
16008
+ return window.location.href;
16009
+ }
16010
+ /**
16011
+ * Creates a minimal PDF representation of the provided chat.
16012
+ *
16013
+ * @param messages - Messages that should be included in the PDF export.
16014
+ * @param participants - Optional participant metadata to resolve sender names.
16015
+ * @returns Binary data for the generated PDF file.
16016
+ * @private Internal helper used by `pdfSaveFormatDefinition`.
16017
+ */
16018
+ function buildChatPdf(messages, participants) {
16019
+ const shareUrl = resolveShareUrl();
16020
+ const textContent = messagesToText([...messages], shareUrl, undefined, participants);
16021
+ const pdf = new jspdf.jsPDF({
16022
+ unit: 'pt',
16023
+ format: 'letter',
16024
+ });
16025
+ pdf.setFont('Helvetica', 'normal');
16026
+ pdf.setFontSize(PDF_FONT_SIZE_PT);
16027
+ const pageWidth = pdf.internal.pageSize.getWidth();
16028
+ const pageHeight = pdf.internal.pageSize.getHeight();
16029
+ const availableWidth = pageWidth - PDF_PAGE_MARGIN_PT * 2;
16030
+ const availableHeight = pageHeight - PDF_PAGE_MARGIN_PT;
16031
+ let cursorY = PDF_PAGE_MARGIN_PT;
16032
+ const ensureSpace = (height) => {
16033
+ if (cursorY + height > availableHeight) {
16034
+ pdf.addPage();
16035
+ cursorY = PDF_PAGE_MARGIN_PT;
16036
+ }
16037
+ };
16038
+ const paragraphs = textContent.split('\n');
16039
+ for (const paragraph of paragraphs) {
16040
+ if (paragraph.trim() === '') {
16041
+ cursorY += PDF_LINE_HEIGHT_PT;
16042
+ continue;
16043
+ }
16044
+ const wrappedLines = pdf.splitTextToSize(paragraph, availableWidth);
16045
+ const paragraphHeight = wrappedLines.length * PDF_LINE_HEIGHT_PT;
16046
+ ensureSpace(paragraphHeight);
16047
+ pdf.text(wrappedLines, PDF_PAGE_MARGIN_PT, cursorY);
16048
+ cursorY += paragraphHeight + PDF_LINE_HEIGHT_PT * PDF_PARAGRAPH_SPACING_MULTIPLIER;
16049
+ }
16050
+ return new Uint8Array(pdf.output('arraybuffer'));
16051
+ }
16052
+
14739
16053
  /**
14740
16054
  * PDF export plugin
14741
16055
  *
@@ -14744,13 +16058,7 @@
14744
16058
  const pdfSaveFormatDefinition = {
14745
16059
  formatName: 'pdf',
14746
16060
  label: 'Pdf',
14747
- getContent: async (chatExportData) => {
14748
- // const { messages } = chatExportData;
14749
- await htmlSaveFormatDefinition.getContent(chatExportData);
14750
- // PDF conversion should be implemented here (sync or pre-generated)
14751
- // For now, return a placeholder string
14752
- return '[PDF chat save not implemented. Integrate a PDF library for conversion.]';
14753
- },
16061
+ getContent: ({ messages, participants }) => buildChatPdf(messages, participants),
14754
16062
  mimeType: 'application/pdf',
14755
16063
  fileExtension: 'pdf',
14756
16064
  };
@@ -14841,8 +16149,8 @@
14841
16149
  return CHAT_SAVE_FORMATS.filter((saveFormatDefinition) => formatNames.includes(saveFormatDefinition.formatName));
14842
16150
  }
14843
16151
 
14844
- var css_248z$4 = "@font-face{font-family:OpenMojiBlack;src:url(https://s6.ptbk.io/fonts/OpenMoji-black-glyf.woff2) format(\"woff2\");unicode-range:u+23,u+2a,u+2d,u+30-39,u+a9,u+ae,u+200d,u+203c,u+2049,u+20e3,u+2117,u+2120,u+2122,u+2139,u+2194-2199,u+21a9,u+21aa,u+229c,u+231a,u+231b,u+2328,u+23cf,u+23e9-23f3,u+23f8-23fe,u+24c2,u+25a1,u+25aa-25ae,u+25b6,u+25c0,u+25c9,u+25d0,u+25d1,u+25e7-25ea,u+25ed,u+25ee,u+25fb-25fe,u+2600-2605,u+260e,u+2611,u+2614,u+2615,u+2618,u+261d,u+2620,u+2622,u+2623,u+2626,u+262a,u+262e,u+262f,u+2638-263a,u+2640,u+2642,u+2648-2653,u+265f,u+2660,u+2663,u+2665,u+2666,u+2668,u+267b,u+267e,u+267f,u+2691-2697,u+2699,u+269b,u+269c,u+26a0,u+26a1,u+26a7,u+26aa,u+26ab,u+26b0,u+26b1,u+26bd,u+26be,u+26c4,u+26c5,u+26c8,u+26ce,u+26cf,u+26d1,u+26d3,u+26d4,u+26e9,u+26ea,u+26f0-26f5,u+26f7-26fa,u+26fd,u+2702,u+2705,u+2708-270d,u+270f,u+2712,u+2714,u+2716,u+271d,u+2721,u+2728,u+2733,u+2734,u+2744,u+2747,u+274c,u+274e,u+2753-2755,u+2757,u+2763,u+2764,u+2795-2797,u+27a1,u+27b0,u+27bf,u+2934,u+2935,u+2b05-2b07,u+2b0c,u+2b0d,u+2b1b,u+2b1c,u+2b1f-2b24,u+2b2e,u+2b2f,u+2b50,u+2b55,u+2b58,u+2b8f,u+2bba-2bbc,u+2bc3,u+2bc4,u+2bea,u+2beb,u+3030,u+303d,u+3297,u+3299,u+e000-e009,u+e010,u+e011,u+e040-e06d,u+e080-e0b4,u+e0c0-e0cc,u+e0ff-e10d,u+e140-e14a,u+e150-e157,u+e181-e189,u+e1c0-e1c4,u+e1c6-e1d9,u+e200-e216,u+e240-e269,u+e280-e283,u+e2c0-e2c4,u+e2c6-e2da,u+e300-e303,u+e305-e30f,u+e312-e316,u+e318-e322,u+e324-e329,u+e32b,u+e340-e348,u+e380,u+e381,u+f000,u+f77a,u+f8ff,u+fe0f,u+1f004,u+1f0cf,u+1f10d-1f10f,u+1f12f,u+1f16d-1f171,u+1f17e,u+1f17f,u+1f18e,u+1f191-1f19a,u+1f1e6-1f1ff,u+1f201,u+1f202,u+1f21a,u+1f22f,u+1f232-1f23a,u+1f250,u+1f251,u+1f260-1f265,u+1f300-1f321,u+1f324-1f393,u+1f396,u+1f397,u+1f399-1f39b,u+1f39e-1f3f0,u+1f3f3-1f3f5,u+1f3f7-1f4fd,u+1f4ff-1f53d,u+1f549-1f54e,u+1f550-1f567,u+1f56f,u+1f570,u+1f573-1f57a,u+1f587,u+1f58a-1f58d,u+1f590,u+1f595,u+1f596,u+1f5a4,u+1f5a5,u+1f5a8,u+1f5b1,u+1f5b2,u+1f5bc,u+1f5c2-1f5c4,u+1f5d1-1f5d3,u+1f5dc-1f5de,u+1f5e1,u+1f5e3,u+1f5e8,u+1f5ef,u+1f5f3,u+1f5fa-1f64f,u+1f680-1f6c5,u+1f6cb-1f6d2,u+1f6d5-1f6d7,u+1f6dc-1f6e5,u+1f6e9,u+1f6eb,u+1f6ec,u+1f6f0,u+1f6f3-1f6fc,u+1f7e0-1f7eb,u+1f7f0,u+1f90c-1f93a,u+1f93c-1f945,u+1f947-1f9ff,u+1fa70-1fa7c,u+1fa80-1fa88,u+1fa90-1fabd,u+1fabf-1fac5,u+1face-1fadb,u+1fae0-1fae8,u+1faf0-1faf8,u+1fbc5-1fbc9,u+e0061-e0067,u+e0069,u+e006c-e0079,u+e007f}.Chat-module_copiedToClipboardMessage__apCPY{background:#222;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.18);color:#fff;font-size:1.1em;left:50%;opacity:.97;padding:10px 24px;pointer-events:none;position:fixed;top:32px;transform:translateX(-50%);z-index:9999}.Chat-module_Chat__j2eE5{--chat-message-min-width:150px;--chat-message-max-width:min(70%,600px);--chat-message-avatar-gap:12px;display:flex;flex-direction:column;font-family:Arial,Helvetica,sans-serif,OpenMojiBlack;height:100%;width:100%}.Chat-module_chatMainFlow__--8FE{display:grid;grid-template:\"🟦\" min-content \"💬\" 1fr \"📝\" min-content/1fr;height:100%;max-width:100vw;width:100%}.Chat-module_chatMainFlow__--8FE .Chat-module_chatBar__fLECN{background-color:#fff;border-bottom:1px solid rgba(15,23,36,.06);color:#0f1724;font-weight:500;grid-area:🟦;padding:16px 20px;text-align:center;width:100%}.Chat-module_TasksInProgress__fQfei{align-self:center;grid-area:🟦;height:min-content;justify-self:self-end;margin:8px 16px;width:auto}.Chat-module_actions__gTZ5T{align-items:center;align-self:self-start;display:flex;gap:8px;grid-area:💬;height:min-content;justify-self:self-end;margin:16px 20px 0;transition:opacity .2s ease;width:auto;will-change:opacity;z-index:40}.Chat-module_actions__gTZ5T.Chat-module_portal__uTOT8{margin:0}.Chat-module_actions__gTZ5T.Chat-module_left__7l5Mn{justify-self:self-start}.Chat-module_actions__gTZ5T.Chat-module_right__ABZrW{justify-self:self-end}.Chat-module_actionsFaded__qqAVQ{opacity:.3}.Chat-module_actionsScrolling__fIawW{opacity:.15;pointer-events:none}@media (max-width:900px){.Chat-module_chatButton__d9VgA{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_chatButton__d9VgA svg{height:18px!important;width:18px!important}.Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_useTemplateButton__xcJNR{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_useTemplateButton__xcJNR svg{height:18px!important;width:18px!important}.Chat-module_useTemplateButton__xcJNR .Chat-module_chatButtonText__RkGB-{display:none!important}}@media (max-width:600px){.Chat-module_actions__gTZ5T{gap:7px;margin:14px 18px 0}}.Chat-module_chatMainFlow__--8FE .Chat-module_chatChildren__flOPK{grid-area:💬;height:100%;width:100%;z-index:300}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N{grid-area:💬;height:100%;overflow-x:hidden;overflow-y:auto;padding:24px 20px 16px;scroll-behavior:smooth;width:100%;z-index:10}.Chat-module_hasActionsAndFirstMessageIsLong__5jgoZ{padding-top:80px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar{width:6px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar-track{background:transparent}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar-thumb{background:hsla(0,0%,49%,.2);border-radius:3px;transition:all .2s ease}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,49%,.3)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ{align-items:flex-end;animation:Chat-module_messageSlideIn__soTy2 .4s cubic-bezier(.25,.46,.45,.94);column-gap:var(--chat-message-avatar-gap);display:flex;flex-direction:row;margin-bottom:20px;max-width:100%;position:relative}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageStack__n0xNL{align-items:flex-start;display:flex;flex-direction:column;max-width:var(--chat-message-max-width)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_messageStack__n0xNL{align-items:flex-end}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageStack__n0xNL>*{max-width:100%}.Chat-module_messageMeta__eqCRu{align-items:center;color:#6b7280;display:flex;font-size:11px;gap:6px;line-height:1.4;margin:4px 6px 0}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_messageMeta__eqCRu{align-self:flex-end;text-align:right}.Chat-module_messageTimestamp__LDhRw{letter-spacing:.02em}.Chat-module_messageDuration__Y9Kg9{opacity:.85}.Chat-module_participantLabel__0Oo-3{color:#64748b;font-size:12px;font-weight:600;margin:0 0 6px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_participantLabel__0Oo-3{text-align:right}@keyframes Chat-module_messageSlideIn__soTy2{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.Chat-module_isNotCompleteMessage__Hj2K7{opacity:.7;position:relative}.Chat-module_NonCompleteMessageFiller__G5-Ve{color:transparent}.Chat-module_isNotCompleteMessage__Hj2K7 .Chat-module_messageText__XgNyQ:after{animation:Chat-module_loadingPulse__VomRm 1.5s ease-in-out infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);border-radius:2px;bottom:8px;content:\"\";height:4px;position:absolute;right:12px;width:20px}.Chat-module_completedToolCalls__vI1Qt,.Chat-module_ongoingToolCalls__NZkQN,.Chat-module_sourceCitations__oDtBX{border-top:1px solid hsla(0,0%,100%,.2);display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;margin-top:8px;padding-top:8px}.Chat-module_completedToolCall__-q4Cs,.Chat-module_ongoingToolCall__WT3Rc{align-items:center;background:hsla(0,0%,100%,.15);border:1px solid hsla(0,0%,100%,.2);border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,.1);color:inherit;display:flex;font-family:OpenMojiColor,OpenMojiBlack,Arial,Helvetica,sans-serif;font-size:.8em;gap:8px;padding:4px 10px}.Chat-module_completedToolCall__-q4Cs{cursor:pointer;transition:all .2s ease}.Chat-module_completedToolCall__-q4Cs:hover{background:hsla(0,0%,100%,.3);box-shadow:0 2px 6px rgba(0,0,0,.15);transform:translateY(-1px)}.Chat-module_toolCallOrigin__-Io6Y{font-size:.85em;font-weight:500;opacity:.75;white-space:nowrap}.Chat-module_toolCallDetails__WUFlD{margin-bottom:24px}.Chat-module_toolCallDetails__WUFlD p{margin-bottom:8px}.Chat-module_toolCallData__UauCO{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;max-height:300px;overflow-x:auto;padding:12px;word-break:break-all}.Chat-module_ongoingToolCallSpinner__7g-Ay{animation:Chat-module_toolCallSpinner__LSiK6 .8s linear infinite;border:2px solid hsla(0,0%,100%,.3);border-radius:50%;border-top-color:#fff;height:14px;width:14px}.Chat-module_ongoingToolCallName__y59-0{font-weight:500}@keyframes Chat-module_toolCallSpinner__LSiK6{to{transform:rotate(1turn)}}@keyframes Chat-module_loadingPulse__VomRm{0%,to{opacity:.3;transform:scaleX(.8)}50%{opacity:1;transform:scaleX(1.2)}}.Chat-module_typingIndicator__S-CT-{align-items:flex-end;animation:Chat-module_messageSlideIn__soTy2 .4s cubic-bezier(.25,.46,.45,.94);display:flex;margin-bottom:20px}.Chat-module_typingIndicator__S-CT- .Chat-module_avatar__gL6bm{flex-shrink:0;height:40px;margin:0 12px 4px;width:40px}.Chat-module_typingBubble__0Lb7B{backdrop-filter:blur(10px);border:1px solid hsla(0,0%,49%,.1);border-radius:20px;border-bottom-left-radius:6px;box-shadow:0 2px 8px rgba(0,0,0,.1);min-height:24px;padding:16px 20px}.Chat-module_typingBubble__0Lb7B,.Chat-module_typingDots__srOBB{align-items:center;display:flex;gap:4px}.Chat-module_typingDot__dnhKT{animation:Chat-module_typingBounce__1yp2v 1.4s ease-in-out infinite;background:linear-gradient(135deg,#6b7280,hsla(0,0%,49%,.6));border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.1);height:8px;width:8px}.Chat-module_typingDot__dnhKT:first-child{animation-delay:-.32s}.Chat-module_typingDot__dnhKT:nth-child(2){animation-delay:-.16s}.Chat-module_typingDot__dnhKT:nth-child(3){animation-delay:0s}@keyframes Chat-module_typingBounce__1yp2v{0%,80%,to{opacity:.5;transform:scale(.8) translateY(0)}40%{opacity:1;transform:scale(1.2) translateY(-8px)}}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV{align-items:flex-end;flex-direction:row-reverse;justify-content:flex-start}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_messageText__XgNyQ{border-bottom-right-radius:6px}.Chat-module_ratingStar__rRfqC{color:var(--star-inactive-color,#ccc);cursor:pointer;font-size:20px;transition:color .2s}.Chat-module_ratingStar__rRfqC.Chat-module_active__lbYL-{color:gold}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_avatar__gL6bm{aspect-ratio:1/1;flex-shrink:0;margin:0 0 4px;position:relative;width:40px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{word-wrap:break-word;--chat-heading-surface:hsla(0,0%,100%,.12);--chat-heading-accent:rgba(56,189,248,.85);--chat-heading-text-color:var(--message-text-color,#0f172a);--chat-heading-border-color:rgba(15,23,42,.18);--chat-heading-shadow-color:rgba(15,23,42,.65);backdrop-filter:blur(10px);background-color:var(--message-bg-color);border-radius:20px;box-shadow:0 2px 8px rgba(0,0,0,.1);color:var(--message-text-color);font-size:15px;line-height:1.5;margin-bottom:4px;max-width:100%;min-width:var(--chat-message-min-width);padding:14px 18px;position:relative;text-align:left;transition:all .2s ease}@supports (color:color-mix(in srgb,#000 50%,#fff 50%)){.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{--chat-heading-surface:color-mix(in srgb,var(--message-bg-color,#fff) 70%,rgba(15,23,42,.08) 30%);--chat-heading-accent:color-mix(in srgb,var(--message-text-color,#0f172a) 65%,rgba(59,130,246,.9) 35%);--chat-heading-border-color:color-mix(in srgb,var(--message-bg-color,#fff) 60%,rgba(15,23,42,.12) 40%);--chat-heading-shadow-color:color-mix(in srgb,rgba(15,23,42,.65) 80%,rgba(96,165,250,.45) 20%);--chat-heading-text-color:var(--message-text-color,#0f172a)}}.Chat-module_copyButtonContainer__Rij0U{align-items:center;float:right;justify-content:flex-end;pointer-events:none;right:10px;top:8px;visibility:hidden;z-index:2}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ:hover .Chat-module_copyButtonContainer__Rij0U,.Chat-module_copyButtonContainer__Rij0U:focus-within{pointer-events:auto;visibility:visible}.Chat-module_copyButton__DcxT5{align-items:center;background:hsla(0,0%,100%,.2);border:1px solid #ddd;border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,.07);cursor:pointer;display:flex;opacity:.7;padding:2px 5px;position:relative;transition:all .15s,box-shadow .15s,border .15s}.Chat-module_copiedTooltip__LH81j{animation:Chat-module_copiedTooltipFadeIn__QekO1 .2s;background:#222;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.18);color:#fff;font-size:.98em;left:50%;margin-top:4px;max-width:220px;opacity:.97;overflow-wrap:break-word;padding:6px 16px;pointer-events:none;position:absolute;top:110%;transform:translateX(-50%);white-space:nowrap;word-break:break-word;z-index:100}.Chat-module_copiedTooltipLeft__j-S-5{left:0!important;transform:none!important}.Chat-module_copiedTooltipRight__R-2cE{left:auto!important;right:0!important;transform:none!important}@keyframes Chat-module_copiedTooltipFadeIn__QekO1{0%{opacity:0;transform:translateX(-50%) translateY(8px) scale(.97)}to{opacity:.97;transform:translateX(-50%) translateY(0) scale(1)}}.Chat-module_copyButton__DcxT5:focus,.Chat-module_copyButton__DcxT5:hover{border:1.5px solid #bbb;box-shadow:0 2px 8px rgba(0,132,255,.1);opacity:1}.Chat-module_copyButton__DcxT5 svg{display:block}.Chat-module_messageText__XgNyQ ul{list-style:disc;margin-left:20px}.Chat-module_messageText__XgNyQ ol{list-style:decimal;margin-left:20px}.Chat-module_messageText__XgNyQ blockquote,.Chat-module_messageText__XgNyQ img,.Chat-module_messageText__XgNyQ pre,.Chat-module_messageText__XgNyQ table{border-radius:8px;margin-bottom:10px;margin-top:10px}.Chat-module_messageText__XgNyQ pre{background:#000;color:#fff}.Chat-module_messageText__XgNyQ blockquote,.Chat-module_messageText__XgNyQ pre{border:none;box-shadow:none;display:block;font-size:inherit;line-height:inherit;padding:1em}.Chat-module_messageText__XgNyQ blockquote{background:#ffffffcc;color:#000}.Chat-module_messageText__XgNyQ code{background:#cccccc55;border:none;box-shadow:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;margin:0;padding:0}.Chat-module_messageText__XgNyQ pre code{background-color:#000000cc;border-radius:8px}.Chat-module_messageText__XgNyQ .Chat-module_chat-code-block__k8IyS{background:#181c23;border-color:#23272f;box-shadow:0 2px 8px rgba(0,0,0,.12);color:#f8fafc;font-family:Fira Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:14px;line-height:1.6;overflow-x:auto}.Chat-module_messageText__XgNyQ .Chat-module_chat-code-block__k8IyS code{background:none!important;border:none!important;box-shadow:none!important;color:inherit!important;display:block;font-family:inherit!important;font-size:inherit!important;overflow-x:auto;padding:0!important;white-space:pre;word-break:break-word}.Chat-module_messageText__XgNyQ table{background:#f8fafc;border-collapse:separate;border-spacing:0;box-shadow:0 2px 8px rgba(0,0,0,.08);color:#17223b;font-size:14px;margin:16px 0;width:100%}.Chat-module_messageText__XgNyQ td,.Chat-module_messageText__XgNyQ th{background:none;border-bottom:1px solid #d1dbe8;color:#17223b;padding:10px 16px;text-align:left}.Chat-module_messageText__XgNyQ th{background:linear-gradient(90deg,#eaf3fa 80%,#d1e3f8);border-bottom:2px solid #b5c7de;color:#17223b;font-weight:700}.Chat-module_messageText__XgNyQ tr:last-child td{border-bottom:none}.Chat-module_messageText__XgNyQ tr:nth-child(2n) td{background:#eaf3fa}.Chat-module_messageText__XgNyQ tr:hover td{background:#cbe0f7;transition:background .2s}.Chat-module_messageText__XgNyQ table{border-radius:12px;overflow:hidden}.Chat-module_messageText__XgNyQ td:first-child,.Chat-module_messageText__XgNyQ th:first-child{border-top-left-radius:12px}.Chat-module_messageText__XgNyQ td:last-child,.Chat-module_messageText__XgNyQ th:last-child{border-top-right-radius:12px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ:hover{box-shadow:0 4px 16px rgba(0,0,0,.15);transform:translateY(-1px)}.Chat-module_attachments__m1Fts{border-top:1px solid hsla(0,0%,49%,.2);display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;padding-top:10px}.Chat-module_attachment__aE9hK{align-items:center;background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,49%,.3);border-radius:12px;color:inherit;display:flex;font-size:13px;gap:6px;max-width:200px;padding:6px 12px;text-decoration:none;transition:all .2s ease}.Chat-module_attachment__aE9hK:hover{background:hsla(0,0%,100%,.3);border-color:hsla(0,0%,49%,.5);transform:translateY(-1px)}.Chat-module_attachmentIcon__BX3Cy{font-size:14px;opacity:.8}.Chat-module_attachmentName__aMx56{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Chat-module_messageButtons__WaOob{border-top:1px solid hsla(0,0%,49%,.83);display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;padding-top:12px}.Chat-module_messageButton__mRnn-{-webkit-tap-highlight-color:transparent;align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,49%,.1);border:1px solid hsla(0,0%,49%,.9);border-radius:16px;cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;padding:8px 14px;touch-action:manipulation;transition:all .2s ease;user-select:none}.Chat-module_messageButton__mRnn-:hover{background:rgba(0,132,255,.1);border-color:rgba(0,132,255,.3);box-shadow:0 2px 8px rgba(0,132,255,.15);transform:translateY(-1px)}.Chat-module_messageButton__mRnn-:active{transform:scale(.98);transition:transform .1s ease}.Chat-module_messageButton__mRnn- p{line-height:inherit;margin:0;padding:0}.Chat-module_messageButton__mRnn- strong{font-weight:600}.Chat-module_messageButton__mRnn- em{font-style:italic}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M{align-items:center;backdrop-filter:blur(10px);background:rgba(0,0,0,.8);border-radius:12px;bottom:-8px;display:flex;gap:2px;min-width:24px;opacity:0;padding:4px 6px;position:absolute;right:8px;transform:translateY(4px);transition:all .3s cubic-bezier(.25,.46,.45,.94);z-index:1}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ:hover .Chat-module_rating__soc3M{opacity:1;transform:translateY(0)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M:hover{background:rgba(0,0,0,.9);box-shadow:0 4px 12px rgba(0,0,0,.3);padding:6px 8px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M span{cursor:pointer;display:inline-block;font-size:16px;transition:transform .2s ease,color .2s ease}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M:hover span{transform:scale(1.1)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{display:flex;flex-direction:column;gap:12px;grid-area:📝;padding:24px;position:relative;width:100%;z-index:10}.Chat-module_Chat__j2eE5.Chat-module_fullPageVisual__zNAEy .Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{backdrop-filter:blur(25px);background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.8))}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan.Chat-module_dragOver__bkS-g{background:linear-gradient(0deg,rgba(0,132,255,.1) 0,rgba(0,132,255,.05))}.Chat-module_filePreviewContainer__R70hm{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.Chat-module_filePreview__kq2aX{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,49%,.1);border:1px solid hsla(0,0%,49%,.2);border-radius:8px;display:flex;font-size:12px;gap:8px;padding:8px 12px;transition:all .2s ease}.Chat-module_filePreview__kq2aX:hover{background:hsla(0,0%,49%,.15);border-color:hsla(0,0%,49%,.3)}.Chat-module_fileIcon__zoSKW{font-size:14px;opacity:.7}.Chat-module_fileInfo__wBLi0{display:flex;flex-direction:column;gap:2px;min-width:0}.Chat-module_fileName__bBujo{color:#000;font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Chat-module_fileSize__ivliq{color:#6b7280;font-size:11px}.Chat-module_removeFileButton__0gakR{align-items:center;background:rgba(255,0,0,.1);border:none;border-radius:50%;color:#f44;cursor:pointer;display:flex;flex-shrink:0;height:20px;justify-content:center;transition:all .2s ease;width:20px}.Chat-module_removeFileButton__0gakR:hover{background:rgba(255,0,0,.2);transform:scale(1.1)}.Chat-module_inputContainer__bPt99{align-items:flex-end;background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:28px;box-shadow:0 4px 20px rgba(0,0,0,.06);display:flex;gap:8px;padding:8px 12px;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.Chat-module_inputContainer__bPt99:focus-within{border-color:var(--brand-color);box-shadow:0 8px 32px rgba(0,132,255,.12);transform:translateY(-2px)}.Chat-module_inputContainer__bPt99 textarea::placeholder{color:#94a3b8;opacity:1}.Chat-module_attachmentButton__qLO47{align-items:center;background:transparent;border:none;border-radius:50%;color:#64748b;cursor:pointer;display:flex;flex-shrink:0;height:40px;justify-content:center;margin-bottom:2px;transition:all .2s ease;width:40px}.Chat-module_attachmentButton__qLO47:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.Chat-module_attachmentButton__qLO47:disabled{cursor:not-allowed;opacity:.3}.Chat-module_voiceButton__d2zlP{align-items:center;background:transparent;border:none;border-radius:50%;color:#64748b;cursor:pointer;display:flex;flex-shrink:0;height:40px;justify-content:center;margin-bottom:2px;transition:all .2s ease;width:40px}.Chat-module_voiceButton__d2zlP:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.Chat-module_voiceButtonActive__Uoi3W{animation:Chat-module_voiceRecordingPulse__y2wJ5 1.5s infinite;background:rgba(239,68,68,.1)!important;color:#ef4444!important}@keyframes Chat-module_voiceRecordingPulse__y2wJ5{0%{box-shadow:0 0 0 0 rgba(255,0,0,.4)}70%{box-shadow:0 0 0 10px rgba(255,0,0,0)}to{box-shadow:0 0 0 0 rgba(255,0,0,0)}}.Chat-module_uploadProgress__jBTKe{align-items:center;background:rgba(0,132,255,.1);border:1px solid rgba(0,132,255,.2);border-radius:8px;color:#0084ff;display:flex;font-size:13px;gap:12px;padding:8px 12px}.Chat-module_uploadProgressBar__Gutnt{background:rgba(0,132,255,.2);border-radius:2px;flex:1;height:4px;overflow:hidden}.Chat-module_uploadProgressFill__EgubT{animation:Chat-module_uploadProgress__jBTKe 1.5s ease-in-out infinite;background:linear-gradient(90deg,#0084ff,rgba(0,132,255,.8));border-radius:2px;height:100%}@keyframes Chat-module_uploadProgress__jBTKe{0%{transform:translateX(-100%)}50%{transform:translateX(0)}to{transform:translateX(100%)}}.Chat-module_dragOverlay__SEGoS{align-items:center;backdrop-filter:blur(10px);background:rgba(0,132,255,.1);border:2px dashed rgba(0,132,255,.5);border-radius:12px;bottom:0;display:flex;justify-content:center;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:20}.Chat-module_dragOverlayContent__gb9kF{align-items:center;color:#0084ff;display:flex;flex-direction:column;font-weight:600;gap:12px;text-align:center}.Chat-module_dragOverlayContent__gb9kF svg{opacity:.7}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{-webkit-tap-highlight-color:transparent;appearance:none;-webkit-appearance:none;background:transparent;border:none;color:#0f172a;flex:1;font-size:15px;line-height:1.5;margin:0;max-height:200px;min-width:100px;outline:none;padding:10px 12px;resize:none;touch-action:manipulation}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea:disabled{cursor:not-allowed;opacity:.6;transform:none}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea::placeholder{color:inherit;opacity:.7}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action]{-webkit-tap-highlight-color:transparent;align-items:center;aspect-ratio:1/1;border:none;border-radius:50%!important;box-shadow:0 4px 12px rgba(0,132,255,.25);color:#fff;display:flex;height:40px;justify-content:center;margin:0 0 2px!important;min-height:unset!important;min-width:unset!important;overflow:visible;padding:0!important;touch-action:manipulation;transition:all .3s cubic-bezier(.25,.46,.45,.94);user-select:none;width:40px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action]:hover{box-shadow:0 6px 16px rgba(0,132,255,.35);transform:scale(1.05)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action]:active{transform:scale(.95)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action] svg{height:20px;width:20px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button img{height:100%;object-fit:contain;width:50%}.Chat-module_scrollToBottomContainer__5rXpK{align-items:flex-start;display:flex;grid-area:📝;height:100%;justify-content:center;pointer-events:none;width:100%;z-index:20}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottomWrapper__PCIu1{align-items:center;animation:Chat-module_scrollButtonSlideIn__XnImg .3s ease-out;display:inline-flex;justify-content:center;pointer-events:all;position:relative;transform:translate(-50%,-150%);transition:transform .3s cubic-bezier(.25,.46,.45,.94)}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottom__nzxdZ{-webkit-tap-highlight-color:transparent;align-items:center;backdrop-filter:blur(3px);background:rgba(0,0,0,.5);border:none;border-radius:50%;box-shadow:0 4px 16px rgba(0,0,0,.3);color:#fff;cursor:pointer;display:flex;font-weight:700;height:48px;justify-content:center;outline:none;touch-action:manipulation;transition:all .3s cubic-bezier(.25,.46,.45,.94);user-select:none;width:48px}@keyframes Chat-module_scrollButtonSlideIn__XnImg{0%{opacity:0;transform:translate(-50%,20px) scale(.8)}to{opacity:.9;transform:translate(-50%) scale(1)}}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottomWrapper__PCIu1:hover{transform:translate(-50%,-160%) scale(1.05)}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottomWrapper__PCIu1:active{transform:translate(-50%,-160%) scale(.95);transition:transform .1s ease}.Chat-module_scrollToBottomBadge__N6T6-{align-items:center;background:#2563eb;border-radius:999px;box-shadow:0 2px 10px rgba(37,99,235,.4);color:#fff;display:inline-flex;font-size:10px;font-weight:600;justify-content:center;letter-spacing:.04em;min-width:32px;padding:2px 6px;pointer-events:none;position:absolute;right:-8px;text-transform:uppercase;top:-8px;white-space:nowrap}.Chat-module_ratingModal__XVKYm{align-items:center;animation:Chat-module_modalFadeIn__RPc3w .3s ease-out;backdrop-filter:blur(8px);background-color:rgba(0,0,0,.6);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}@keyframes Chat-module_modalFadeIn__RPc3w{0%{backdrop-filter:blur(0);opacity:0}to{backdrop-filter:blur(8px);opacity:1}}.Chat-module_ratingModalContent__CCdq7{animation:Chat-module_modalSlideIn__XXtgN .3s cubic-bezier(.25,.46,.45,.94);backdrop-filter:blur(20px);background:#fff;border:1px solid hsla(0,0%,49%,.1);border-radius:16px;box-shadow:0 20px 60px rgba(0,0,0,.3);color:#0f1724;font-family:Arial,Helvetica,sans-serif,OpenMojiBlack;max-width:480px;padding:32px;width:90%}@keyframes Chat-module_modalSlideIn__XXtgN{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.Chat-module_ratingModalContent__CCdq7 h3{color:#000;font-size:20px;font-weight:600;margin:0 0 24px;text-align:center}.Chat-module_stars__PCzNO{display:flex;gap:8px;justify-content:center;margin-bottom:24px}.Chat-module_stars__PCzNO span{border-radius:8px;cursor:pointer;font-size:28px;padding:4px;transition:all .2s ease}.Chat-module_stars__PCzNO span:hover{background:rgba(255,215,0,.1);transform:scale(1.2)}.Chat-module_ratingModalStar__XkbHr{cursor:pointer;font-size:24px;transition:color .2s}.Chat-module_toolCallModal__uNaIK{max-width:800px;overflow:hidden;padding:0;position:relative}.Chat-module_searchModalHeader__Y8V-w{align-items:center;background:#fdfdfd;border-bottom:1px solid #eee;display:flex;gap:16px;padding:24px 72px 24px 32px}.Chat-module_selfLearningModalHeader__PDIt1{align-items:center;background:linear-gradient(135deg,#f8fafc,#fef9c3 45%,#ecfccb);border-bottom:1px solid #e2e8f0;gap:18px}.Chat-module_selfLearningAvatarGroup__jgy2k{align-items:center;display:flex;gap:10px}.Chat-module_selfLearningAvatar__NHXKm{align-items:center;background:#e2e8f0;background-position:50%;background-size:cover;border-radius:50%;box-shadow:0 10px 20px rgba(15,23,42,.18);color:#0f172a;display:inline-flex;font-size:18px;font-weight:600;height:48px;justify-content:center;letter-spacing:.02em;width:48px}.Chat-module_selfLearningAvatarInitial__cuw19{line-height:1}.Chat-module_selfLearningTeacher__fGhX8{background:linear-gradient(135deg,#fde68a,#86efac)}.Chat-module_selfLearningHeaderText__LTwHL{display:flex;flex-direction:column;gap:6px;text-align:left}.Chat-module_selfLearningTitle__G0SAk{color:#0f172a;font-size:20px;font-weight:600;margin:0}.Chat-module_selfLearningMetaRow__z4Tg0{align-items:center;color:#64748b;display:flex;flex-wrap:wrap;font-size:13px;gap:10px;margin-bottom:12px}.Chat-module_selfLearningMeta__58Pet{color:#64748b;font-size:13px}.Chat-module_selfLearningMetaChip__0go88{background:#e2e8f0;border-radius:999px;color:#0f172a;font-size:12px;font-weight:600;padding:4px 10px}.Chat-module_selfLearningCommitments__7ECnr{background:#f8fafc;border:1px solid #e2e8f0;border-radius:16px;padding:16px}.Chat-module_selfLearningCommitmentsLabel__OkDO1{color:#94a3b8;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.Chat-module_selfLearningBookEditor__CZy5T{border-radius:12px;margin-top:12px;overflow:hidden}.Chat-module_selfLearningEmpty__vCKHL{color:#475569;font-size:13px;margin-top:12px}.Chat-module_modalCloseButton__AAfWS{align-items:center;background:#fff;border:1px solid #e2e8f0;border-radius:999px;box-shadow:0 6px 16px rgba(15,23,42,.08);color:#475569;cursor:pointer;display:inline-flex;height:36px;justify-content:center;position:absolute;right:16px;top:16px;transition:background .2s ease,color .2s ease,box-shadow .2s ease,transform .2s ease;width:36px;z-index:1}.Chat-module_modalCloseButton__AAfWS:hover{background:#f8fafc;box-shadow:0 10px 24px rgba(15,23,42,.12);color:#0f172a;transform:translateY(-1px)}.Chat-module_modalCloseButton__AAfWS:focus-visible{outline:2px solid #94a3b8;outline-offset:2px}.Chat-module_teamModalHeader__SB5NL{flex-wrap:wrap;gap:12px}.Chat-module_teamHeaderParticipants__KS7aV{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.Chat-module_teamHeaderProfile__xRlcS{align-items:center;color:inherit;display:inline-flex;gap:12px;text-decoration:none}.Chat-module_teamHeaderProfileLink__fYTfT:hover{color:#0f172a}.Chat-module_teamHeaderAvatar__vXcTp{background-position:50%;background-repeat:no-repeat;background-size:cover;border:1px solid #e2e8f0;border-radius:999px;box-shadow:0 6px 14px rgba(15,23,42,.08);height:40px;width:40px}.Chat-module_teamHeaderName__ygJR9{color:#0f172a;font-size:18px;font-weight:600}.Chat-module_teamHeaderDivider__cnRMd{color:#94a3b8;font-size:14px;font-weight:600}.Chat-module_searchModalIcon__AR5KY{align-items:center;color:#475569;display:inline-flex;font-size:24px;justify-content:center}.Chat-module_searchModalQuery__5x-Ra{color:#202124!important;font-size:22px!important;font-weight:500!important;margin:0!important;text-align:left!important}.Chat-module_searchModalContent__mWLIE{background:#fff;max-height:60vh;overflow-y:auto;padding:24px 32px}.Chat-module_teamChatContainer__xdLtU{background:#f8fafc;border:1px solid #e5e7eb;border-radius:16px;margin-bottom:20px;overflow:hidden}.Chat-module_teamToolCallSection__FH9l7{display:flex;flex-direction:column;gap:16px}.Chat-module_teamToolCallGroup__PO6rl{display:flex;flex-direction:column;gap:8px}.Chat-module_teamToolCallHeading__G-JSj{color:#64748b;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.Chat-module_teamToolCallChips__hRWqh{display:flex;flex-wrap:wrap;gap:8px}.Chat-module_teamToolCallDetails__ZaTtt{background:#f8fafc;border:1px solid rgba(148,163,184,.4);border-radius:12px;padding:16px}.Chat-module_teamToolCallDetailsHeader__FPIgI{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:12px}.Chat-module_teamToolCallDetailsTitle__50SeL{align-items:center;color:#0f172a;display:flex;font-size:14px;font-weight:600;gap:6px}.Chat-module_teamToolCallDetailsClear__8yvu7{background:rgba(148,163,184,.2);border:1px solid rgba(148,163,184,.4);border-radius:999px;color:#475569;cursor:pointer;font-size:12px;padding:4px 10px;transition:all .2s ease}.Chat-module_teamToolCallDetailsClear__8yvu7:hover{background:rgba(148,163,184,.35)}.Chat-module_searchResultsList__xVDUZ{display:flex;flex-direction:column;gap:28px;text-align:left}.Chat-module_searchResultsRaw__i3GkD{max-width:650px;text-align:left}.Chat-module_searchResultItem__bTzq5{max-width:650px}.Chat-module_searchResultUrl__SbrH4{color:#202124;font-size:14px;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Chat-module_searchResultUrl__SbrH4 a{color:#202124;text-decoration:none}.Chat-module_searchResultTitle__XS7zN{font-size:20px!important;font-weight:400!important;line-height:1.3;margin:0 0 4px!important}.Chat-module_searchResultTitle__XS7zN a{color:#1a0dab;text-decoration:none}.Chat-module_searchResultTitle__XS7zN a:hover{text-decoration:underline}.Chat-module_searchResultSnippet__Wsun2{color:#4d5156;font-size:14px;line-height:1.58;margin:0}.Chat-module_noResults__AAv6s{color:#70757a;font-style:italic;padding:40px;text-align:center}.Chat-module_citationDetails__2v2e1,.Chat-module_toolCallDetails__WUFlD{margin:20px 0;text-align:left}.Chat-module_citationPreview__rGhCR{background:#f8f8f8;border:1px solid #ddd;border-radius:8px;margin-top:16px;overflow:hidden}.Chat-module_citationIframe__ngzFY{border:none;display:block;height:60vh;min-height:400px;width:100%}.Chat-module_citationMetadata__DPaCF{background:#f8f8f8;border:1px solid #eee;border-radius:8px;margin-bottom:20px;padding:16px}.Chat-module_citationMetadata__DPaCF p{font-size:.9em;margin:8px 0}.Chat-module_citationMetadata__DPaCF strong{color:#333}.Chat-module_citationMetadata__DPaCF a{color:#007bff;text-decoration:none;word-break:break-all}.Chat-module_citationMetadata__DPaCF a:hover{text-decoration:underline}.Chat-module_citationExcerpt__VU4BS{background:#fff;border:1px solid #ddd;border-radius:8px;max-height:400px;overflow-y:auto;padding:16px}.Chat-module_citationExcerpt__VU4BS h4{color:#333;font-size:1em;margin:0 0 12px}.Chat-module_citationHint__5AkLx{font-size:.85em;margin-top:8px;opacity:.7}.Chat-module_toolCallDataContainer__rdEzC{background:#f8f8f8;border:1px solid #eee;border-radius:6px;margin-bottom:15px;max-height:300px;overflow-y:auto;padding:12px}.Chat-module_toolCallData__UauCO{font-size:.85em;margin:0;white-space:pre-wrap;word-break:break-word}.Chat-module_toolCallArgsList__LD3xH{list-style:none;margin:0;padding:0}.Chat-module_toolCallArgsList__LD3xH li{font-size:.9em;margin-bottom:5px}.Chat-module_toolCallModal__uNaIK .Chat-module_toolCallData__UauCO{background:#f8fafc;color:#0f172a}.Chat-module_ratingInput__z8Pv-{background:hsla(0,0%,49%,.05);border:2px solid hsla(0,0%,49%,.1);border-radius:12px;color:#0b1220;font-size:14px;line-height:1.5;margin-bottom:18px;min-height:100px;padding:16px;resize:vertical;transition:all .2s ease;width:100%}.Chat-module_ratingInput__z8Pv-:focus{background:hsla(0,0%,49%,.08);border-color:#0084ff;box-shadow:0 0 0 4px rgba(0,132,255,.1);outline:none}.Chat-module_ratingInput__z8Pv-[readonly]{background:hsla(0,0%,49%,.01);border:1px solid hsla(0,0%,49%,.5)}.Chat-module_ratingActions__nXcss{display:flex;gap:12px;justify-content:flex-end}.Chat-module_ratingActions__nXcss button{border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:12px 24px;transition:all .2s ease}.Chat-module_ratingActions__nXcss button:first-child{background-color:hsla(0,0%,49%,.1);border:1px solid hsla(0,0%,49%,.2);color:#0b1220}.Chat-module_ratingActions__nXcss button:first-child:hover:not(:disabled){background-color:hsla(0,0%,49%,.2);color:#0b1220}.Chat-module_ratingActions__nXcss button:last-child{background:linear-gradient(135deg,#0084ff,#06c);color:#fff}.Chat-module_ratingActions__nXcss button:last-child:hover:not(:disabled){background:linear-gradient(135deg,#0071d1,#0052a3);box-shadow:0 4px 12px rgba(0,132,255,.3);transform:translateY(-1px)}.Chat-module_ratingActions__nXcss button:last-child:disabled{cursor:not-allowed;opacity:.5}.Chat-module_downloadButton__8--bk{align-items:center;background:linear-gradient(135deg,#0084ff,#06c);border:none;border-radius:8px;box-shadow:0 2px 8px rgba(0,132,255,.2);color:#fff;cursor:pointer;display:inline-flex;font-size:14px;font-weight:600;gap:8px;justify-content:center;padding:12px 24px;transition:all .2s ease}.Chat-module_downloadButton__8--bk:hover{background:linear-gradient(135deg,#09f,#07d);box-shadow:0 4px 16px rgba(0,132,255,.3);transform:translateY(-2px)}.Chat-module_downloadButton__8--bk:active{box-shadow:0 2px 8px rgba(0,132,255,.2);transform:translateY(0)}.Chat-module_downloadButton__8--bk svg{flex-shrink:0}.Chat-module_downloadButton__8--bk span{font-weight:600}.Chat-module_chatButton__d9VgA{-webkit-tap-highlight-color:transparent!important;align-items:center!important;backdrop-filter:blur(20px)!important;background:linear-gradient(135deg,#0084ff,#06c)!important;border:none!important;border-radius:20px!important;box-shadow:0 4px 16px rgba(0,132,255,.3)!important;color:#fff!important;cursor:pointer!important;display:inline-flex!important;font-size:13px!important;font-weight:600!important;gap:8px!important;justify-content:center!important;line-height:1.3!important;margin:0!important;min-height:40px!important;min-width:110px!important;overflow:hidden!important;padding:12px 16px!important;position:relative!important;touch-action:manipulation!important;transition:all .3s cubic-bezier(.25,.46,.45,.94)!important;user-select:none!important}.Chat-module_chatButton__d9VgA:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);content:\"\";height:100%;left:-100%;position:absolute;top:0;transition:left .5s ease;width:100%}.Chat-module_chatButton__d9VgA:hover:before{left:100%}.Chat-module_chatButton__d9VgA:hover:not(:disabled){background:linear-gradient(135deg,#09f,#07d);box-shadow:0 8px 24px rgba(0,132,255,.4);transform:translateY(-2px) scale(1.02)}.Chat-module_chatButton__d9VgA:active{box-shadow:0 4px 16px rgba(0,132,255,.3);transform:scale(.98) translateY(-1px);transition:transform .1s ease}.Chat-module_chatButton__d9VgA:focus{box-shadow:0 4px 16px rgba(0,132,255,.3),0 0 0 3px rgba(0,132,255,.3);outline:none}.Chat-module_chatButton__d9VgA svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.2));flex-shrink:0;height:16px;opacity:1;transition:all .3s cubic-bezier(.25,.46,.45,.94);width:16px}.Chat-module_chatButton__d9VgA:hover svg{filter:drop-shadow(0 2px 4px rgba(0,0,0,.3));transform:rotate(-90deg) scale(1.1)}.Chat-module_chatButtonText__RkGB-{font-weight:600;opacity:1;text-shadow:0 1px 2px rgba(0,0,0,.1);transition:all .2s ease;white-space:nowrap}.Chat-module_chatButton__d9VgA:hover .Chat-module_chatButtonText__RkGB-{transform:translateX(1px)}.Chat-module_useTemplateButton__xcJNR{-webkit-tap-highlight-color:transparent!important;align-items:center!important;backdrop-filter:blur(20px)!important;background:linear-gradient(135deg,#0084ff,#06c)!important;border:none!important;border-radius:20px!important;box-shadow:0 4px 16px rgba(0,132,255,.3)!important;color:#fff!important;cursor:pointer!important;display:inline-flex!important;font-size:13px!important;font-weight:600!important;gap:8px!important;justify-content:center!important;line-height:1.3!important;margin:0!important;min-height:40px!important;min-width:110px!important;overflow:hidden!important;padding:12px 16px!important;position:relative!important;touch-action:manipulation!important;transition:all .3s cubic-bezier(.25,.46,.45,.94)!important;user-select:none!important}.Chat-module_useTemplateButton__xcJNR:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);content:\"\";height:100%;left:-100%;position:absolute;top:0;transition:left .5s ease;width:100%}.Chat-module_useTemplateButton__xcJNR:hover:before{left:100%}.Chat-module_useTemplateButton__xcJNR:hover:not(:disabled){background:linear-gradient(135deg,#09f,#07d);box-shadow:0 8px 24px rgba(0,132,255,.4);transform:translateY(-2px) scale(1.02)}.Chat-module_useTemplateButton__xcJNR:active{box-shadow:0 4px 16px rgba(0,132,255,.3);transform:scale(.98) translateY(-1px);transition:transform .1s ease}.Chat-module_useTemplateButton__xcJNR:focus{box-shadow:0 4px 16px rgba(0,132,255,.3),0 0 0 3px rgba(0,132,255,.3);outline:none}.Chat-module_useTemplateButton__xcJNR svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.2));flex-shrink:0;height:16px;opacity:1;transition:all .3s cubic-bezier(.25,.46,.45,.94);width:16px}.Chat-module_useTemplateButton__xcJNR:hover svg{filter:drop-shadow(0 2px 4px rgba(0,0,0,.3));transform:scale(1.1)}.Chat-module_useTemplateButton__xcJNR:hover .Chat-module_chatButtonText__RkGB-{transform:translateX(1px)}.Chat-module_saveButtonContainer__lSNUJ{display:inline-block;position:relative}.Chat-module_saveMenu__-ph8y{background:#fff;border:1px solid #ddd;box-shadow:0 2px 8px rgba(0,0,0,.08);left:0;min-width:120px;position:absolute;top:100%;z-index:10}.Chat-module_saveMenuItem__ISApL{background:none;border:none;color:#111;cursor:pointer;display:block;padding:8px 16px;text-align:left;width:100%}.Chat-module_saveMenuItem__ISApL:hover{background-color:#f0f0f0}.Chat-module_saveMenuDivider__3ktTM{background-color:#ddd;height:1px;margin:4px 0}.Chat-module_chatFeedbackPanel__gfOzk{background:#fff;border:1px solid #e5e7eb;border-radius:14px;box-shadow:0 8px 18px rgba(15,23,42,.08);display:flex;flex-direction:column;gap:6px;padding:6px 8px;width:min(260px,100%)}.Chat-module_chatFeedbackToggle__IeOM6{align-items:center;background:transparent;border:none;border-radius:12px;cursor:pointer;display:flex;gap:10px;padding:6px 8px;text-align:left;transition:background .2s ease,transform .2s ease;width:100%}.Chat-module_chatFeedbackToggle__IeOM6:hover{background:#f5f5f5;transform:translateY(-.5px)}.Chat-module_chatFeedbackToggle__IeOM6:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.Chat-module_chatFeedbackIcon__XcB7A{background:#eef2ff;border-radius:10px;color:#6366f1;display:grid;flex-shrink:0;height:34px;place-items:center;transition:background .2s ease,color .2s ease;width:34px}.Chat-module_chatFeedbackToggle__IeOM6[data-enabled=true] .Chat-module_chatFeedbackIcon__XcB7A{background:#e0f2fe;color:#0284c7}.Chat-module_chatFeedbackToggle__IeOM6[data-enabled=false] .Chat-module_chatFeedbackIcon__XcB7A{background:#f3f4f6;color:#94a3b8}.Chat-module_chatFeedbackMeta__6t2be{display:flex;flex:1;flex-direction:column;gap:2px}.Chat-module_chatFeedbackLabel__qQgH3{color:#0f172a;font-size:.85rem;font-weight:600}.Chat-module_chatFeedbackDescription__I9bNg{color:#64748b;font-size:.75rem}.Chat-module_chatFeedbackIndicator__uHCr7{border-radius:999px;font-size:.72rem;font-weight:700;letter-spacing:.08em;padding:2px 8px;text-transform:uppercase}.Chat-module_chatFeedbackIndicatorActive__bkw-w{background:#dcfce7;border:1px solid #34d399;color:#166534}.Chat-module_chatFeedbackIndicatorInactive__qMBkh{background:#fef9c3;border:1px solid #facc15;color:#713f12}.Chat-module_pauseButton__eeu7K{background:linear-gradient(135deg,#ffb347,#ff8c42)!important}.Chat-module_pauseButton__eeu7K:hover:not(:disabled){background:linear-gradient(135deg,#ffc067,#ff9e5f)!important}.Chat-module_pauseButton__eeu7K.Chat-module_pausing__pTx8b{cursor:wait!important;opacity:.6!important}.Chat-module_pauseButton__eeu7K.Chat-module_paused__j-pya{background:linear-gradient(135deg,#10b981,#059669)!important}.Chat-module_pauseButton__eeu7K.Chat-module_paused__j-pya:hover:not(:disabled){background:linear-gradient(135deg,#34d399,#059669)!important;box-shadow:0 8px 24px rgba(16,185,129,.35);transform:translateY(-2px) scale(1.02)}.Chat-module_pauseButton__eeu7K svg{transition:transform .3s ease}.Chat-module_pauseButton__eeu7K.Chat-module_paused__j-pya svg{transform:scale(1.1)}.Chat-module_pauseButton__eeu7K.Chat-module_pausing__pTx8b svg{opacity:.8}.Chat-module_voiceCallIndicatorBar__N2sWN{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,rgba(34,197,94,.1),rgba(16,185,129,.1));border-bottom:1px solid rgba(34,197,94,.3);display:flex;grid-area:🟦;justify-content:center;padding:12px 20px;width:100%}.Chat-module_voiceCallIndicator__tsaaG{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,rgba(34,197,94,.2),rgba(16,185,129,.2));border:1px solid rgba(34,197,94,.4);border-radius:20px;box-shadow:0 2px 8px rgba(34,197,94,.2);color:#10b981;display:inline-flex;font-size:13px;font-weight:600;gap:8px;padding:8px 16px;position:relative}.Chat-module_voiceCallIndicator__tsaaG svg{animation:Chat-module_voiceCallIconPulse__zZbJn 2s ease-in-out infinite;flex-shrink:0;height:16px;width:16px}.Chat-module_voiceCallIndicator__tsaaG span{font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.1)}.Chat-module_voiceCallPulse__XcGU4{animation:Chat-module_voiceCallPulse__XcGU4 1.5s ease-in-out infinite;background:#10b981;border-radius:50%;height:8px;position:absolute;right:8px;top:50%;transform:translateY(-50%);width:8px}@keyframes Chat-module_voiceCallIconPulse__zZbJn{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes Chat-module_voiceCallPulse__XcGU4{0%,to{opacity:1;transform:translateY(-50%) scale(1)}50%{opacity:.6;transform:translateY(-50%) scale(1.3)}}.Chat-module_chatMessage__nmLaZ .Chat-module_voiceCallIndicator__tsaaG{border-radius:16px;font-size:12px;margin-bottom:8px;padding:6px 12px}.Chat-module_chatMessage__nmLaZ .Chat-module_voiceCallIndicator__tsaaG svg{height:14px;width:14px}.Chat-module_feedbackStatus__-df7l{word-wrap:break-word;animation:Chat-module_feedbackStatusSlideIn__n6bbB .28s ease-out;backdrop-filter:blur(20px);border-radius:14px;box-shadow:0 18px 32px rgba(15,23,42,.35);font-weight:500;max-width:340px;padding:14px 22px;pointer-events:none;position:fixed;right:20px;top:20px;z-index:10000}.Chat-module_feedbackStatusSuccess__Ax2q0{background:linear-gradient(135deg,#10b981,#059669);color:#f8fafc}.Chat-module_feedbackStatusError__dnv6d{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fef2f2}@keyframes Chat-module_feedbackStatusSlideIn__n6bbB{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@media (max-width:768px){.Chat-module_Chat__j2eE5{--chat-message-min-width:100px;--chat-message-max-width:min(85%,560px);--chat-message-avatar-gap:10px}.Chat-module_actions__gTZ5T{gap:6px;margin:12px 16px 0}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N{padding:16px 12px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ{margin-bottom:16px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{border-radius:18px;font-size:14px;padding:12px 16px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_avatar__gL6bm{height:36px;margin:0 0 4px;width:36px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{gap:10px;padding:16px 12px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{border-radius:22px;font-size:16px;padding:14px 18px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button{height:44px;width:44px}.Chat-module_scrollToBottom__nzxdZ{font-size:18px;height:44px;top:calc(100% - 160px);width:44px}.Chat-module_chatButton__d9VgA{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_chatButton__d9VgA svg{height:18px!important;width:18px!important}.Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_useTemplateButton__xcJNR{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_useTemplateButton__xcJNR svg{height:18px!important;width:18px!important}.Chat-module_useTemplateButton__xcJNR .Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_ratingModalContent__CCdq7{border-radius:16px;margin:16px;max-height:80vh;overflow-y:auto;padding:24px 20px}.Chat-module_stars__PCzNO{gap:6px;margin-bottom:20px}.Chat-module_stars__PCzNO span{font-size:32px;padding:8px}.Chat-module_ratingActions__nXcss{flex-direction:column-reverse;gap:8px}.Chat-module_ratingActions__nXcss button{border-radius:10px;font-size:16px;padding:14px;width:100%}.Chat-module_selfLearningModalHeader__PDIt1{align-items:flex-start;flex-direction:column}.Chat-module_selfLearningAvatarGroup__jgy2k{justify-content:flex-start}.Chat-module_selfLearningMetaRow__z4Tg0{align-items:flex-start}}@media (max-width:480px){.Chat-module_Chat__j2eE5{--chat-message-min-width:80px;--chat-message-max-width:min(90%,520px);--chat-message-avatar-gap:8px}.Chat-module_actions__gTZ5T{gap:4px;margin:8px 12px 0}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N{padding:12px 8px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{border-radius:16px;font-size:14px;padding:10px 14px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_avatar__gL6bm{height:32px;margin:0 0 4px;width:32px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{gap:8px;padding:12px 8px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{border-radius:20px;font-size:16px;padding:12px 16px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button{height:40px;width:40px}.Chat-module_chatButton__d9VgA{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_chatButton__d9VgA svg{height:18px!important;width:18px!important}.Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_useTemplateButton__xcJNR{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_useTemplateButton__xcJNR svg{height:18px!important;width:18px!important}.Chat-module_useTemplateButton__xcJNR .Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_scrollToBottom__nzxdZ{font-size:16px;height:40px;top:calc(100% - 140px);width:40px}.Chat-module_ratingModal__XVKYm{align-items:flex-end;padding:0}.Chat-module_ratingModalContent__CCdq7{border-radius:20px 20px 0 0;margin:0;max-height:70vh;padding:24px 16px 20px;width:100%}}@media (prefers-reduced-motion:reduce){.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ,.Chat-module_feedbackStatus__-df7l,.Chat-module_ratingModalContent__CCdq7,.Chat-module_ratingModal__XVKYm,.Chat-module_scrollToBottom__nzxdZ{animation:none}.Chat-module_chatButton__d9VgA,.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button,.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea,.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{transition:none}}@media (prefers-contrast:high){.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{border:2px solid}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{border-width:3px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button{border:2px solid}}.Chat-module_emailContainer__TBxXZ{display:flex;flex-direction:column;gap:16px;margin-bottom:20px}.Chat-module_emailModalHeader__Z4-CJ{background:#f8fafc}.Chat-module_emailHeaderText__1dR6R{display:flex;flex-direction:column;gap:2px}.Chat-module_emailHeaderLabel__7iAEH{color:#64748b;font-size:12px;letter-spacing:.08em;text-transform:uppercase}.Chat-module_emailMetadata__8XXGf{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 4px rgba(15,23,42,.08);margin-bottom:16px;padding:18px 20px}.Chat-module_emailField__pcb03{display:flex;font-size:14px;gap:8px;line-height:1.5;margin-bottom:8px}.Chat-module_emailField__pcb03:last-child{margin-bottom:0}.Chat-module_emailField__pcb03 strong{color:#64748b;font-weight:600;min-width:60px}.Chat-module_emailRecipients__YVVys{color:#0f172a;word-break:break-word}.Chat-module_emailBody__OBt-w{text-align:left}.Chat-module_emailBody__OBt-w strong{color:#64748b;display:block;font-size:14px;font-weight:600;margin-bottom:12px}.Chat-module_emailBodyContent__-vFo2{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 4px rgba(15,23,42,.08);line-height:1.6;max-height:400px;overflow-y:auto;padding:22px}.Chat-module_emailBodyContent__-vFo2 p{margin:0 0 12px}.Chat-module_emailBodyContent__-vFo2 p:last-child{margin-bottom:0}.Chat-module_emailStatus__T4UuL{color:#0f172a;font-weight:600;text-transform:capitalize}\n/*# sourceMappingURL=data:application/json;base64,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Q0FDdEIsUUFBUyxDQUhULGtCQUlKLENBRUEscUNBQ0ksa0JBQ0osQ0FFQSxvQ0FDSSxZQUFhLENBQ2IscUJBQXNCLENBQ3RCLE9BQ0osQ0FFQSxxQ0FJSSxhQUFjLENBSGQsY0FBZSxDQUNmLG9CQUFzQixDQUN0Qix3QkFFSixDQUVBLGtDQUNJLGVBQW1CLENBQ25CLHdCQUF5QixDQUN6QixrQkFBbUIsQ0FHbkIsdUNBQTRDLENBRDVDLGtCQUFtQixDQURuQixpQkFHSixDQUVBLCtCQUNJLFlBQWEsQ0FHYixjQUFlLENBRmYsT0FBUSxDQUdSLGVBQWdCLENBRmhCLGlCQUdKLENBRUEsMENBQ0ksZUFDSixDQUVBLHNDQUVJLGFBQWMsQ0FDZCxlQUFnQixDQUZoQixjQUdKLENBRUEsb0NBQ0ksYUFBYyxDQUNkLHFCQUNKLENBRUEsOEJBQ0ksZUFDSixDQUVBLHFDQUdJLGFBQWMsQ0FGZCxhQUFjLENBSWQsY0FBZSxDQURmLGVBQWdCLENBRmhCLGtCQUlKLENBRUEscUNBQ0ksZUFBbUIsQ0FDbkIsd0JBQXlCLENBQ3pCLGtCQUFtQixDQUtuQix1Q0FBNEMsQ0FINUMsZUFBZ0IsQ0FDaEIsZ0JBQWlCLENBQ2pCLGVBQWdCLENBSGhCLFlBS0osQ0FFQSx1Q0FDSSxlQUNKLENBRUEsa0RBQ0ksZUFDSixDQUVBLGdDQUVJLGFBQWMsQ0FDZCxlQUFnQixDQUZoQix5QkFHSiIsImZpbGUiOiJDaGF0Lm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ09wZW5Nb2ppQmxhY2snO1xuICAgIHNyYzogdXJsKCdodHRwczovL3M2LnB0YmsuaW8vZm9udHMvT3Blbk1vamktYmxhY2stZ2x5Zi53b2ZmMicpIGZvcm1hdCgnd29mZjInKTsgLyogPC0gVE9ETzogW/CfkLHigI3wn5qAXSBEeW5hbWljYWxseSBsb2FkIGZyb20gL3NlcnZlcnMudHMgKi9cbiAgICB1bmljb2RlLXJhbmdlOiBVKzIzLCBVKzJBLCBVKzJELCBVKzMwLTM5LCBVK0E5LCBVK0FFLCBVKzIwMEQsIFUrMjAzQywgVSsyMDQ5LCBVKzIwRTMsIFUrMjExNywgVSsyMTIwLCBVKzIxMjIsIFUrMjEzOSxcbiAgICAgICAgVSsyMTk0LTIxOTksIFUrMjFBOSwgVSsyMUFBLCBVKzIyOUMsIFUrMjMxQSwgVSsyMzFCLCBVKzIzMjgsIFUrMjNDRiwgVSsyM0U5LTIzRjMsIFUrMjNGOC0yM0ZFLCBVKzI0QzIsIFUrMjVBMSxcbiAgICAgICAgVSsyNUFBLTI1QUUsIFUrMjVCNiwgVSsyNUMwLCBVKzI1QzksIFUrMjVEMCwgVSsyNUQxLCBVKzI1RTctMjVFQSwgVSsyNUVELCBVKzI1RUUsIFUrMjVGQi0yNUZFLCBVKzI2MDAtMjYwNSxcbiAgICAgICAgVSsyNjBFLCBVKzI2MTEsIFUrMjYxNCwgVSsyNjE1LCBVKzI2MTgsIFUrMjYxRCwgVSsyNjIwLCBVKzI2MjIsIFUrMjYyMywgVSsyNjI2LCBVKzI2MkEsIFUrMjYyRSwgVSsyNjJGLFxuICAgICAgICBVKzI2MzgtMjYzQSwgVSsyNjQwLCBVKzI2NDIsIFUrMjY0OC0yNjUzLCBVKzI2NUYsIFUrMjY2MCwgVSsyNjYzLCBVKzI2NjUsIFUrMjY2NiwgVSsyNjY4LCBVKzI2N0IsIFUrMjY3RSwgVSsyNjdGLFxuICAgICAgICBVKzI2OTEtMjY5NywgVSsyNjk5LCBVKzI2OUIsIFUrMjY5QywgVSsyNkEwLCBVKzI2QTEsIFUrMjZBNywgVSsyNkFBLCBVKzI2QUIsIFUrMjZCMCwgVSsyNkIxLCBVKzI2QkQsIFUrMjZCRSxcbiAgICAgICAgVSsyNkM0LCBVKzI2QzUsIFUrMjZDOCwgVSsyNkNFLCBVKzI2Q0YsIFUrMjZEMSwgVSsyNkQzLCBVKzI2RDQsIFUrMjZFOSwgVSsyNkVBLCBVKzI2RjAtMjZGNSwgVSsyNkY3LTI2RkEsIFUrMjZGRCxcbiAgICAgICAgVSsyNzAyLCBVKzI3MDUsIFUrMjcwOC0yNzBELCBVKzI3MEYsIFUrMjcxMiwgVSsyNzE0LCBVKzI3MTYsIFUrMjcxRCwgVSsyNzIxLCBVKzI3MjgsIFUrMjczMywgVSsyNzM0LCBVKzI3NDQsXG4gICAgICAgIFUrMjc0NywgVSsyNzRDLCBVKzI3NEUsIFUrMjc1My0yNzU1LCBVKzI3NTcsIFUrMjc2MywgVSsyNzY0LCBVKzI3OTUtMjc5NywgVSsyN0ExLCBVKzI3QjAsIFUrMjdCRiwgVSsyOTM0LCBVKzI5MzUsXG4gICAgICAgIFUrMkIwNS0yQjA3LCBVKzJCMEMsIFUrMkIwRCwgVSsyQjFCLCBVKzJCMUMsIFUrMkIxRi0yQjI0LCBVKzJCMkUsIFUrMkIyRiwgVSsyQjUwLCBVKzJCNTUsIFUrMkI1OCwgVSsyQjhGLFxuICAgICAgICBVKzJCQkEtMkJCQywgVSsyQkMzLCBVKzJCQzQsIFUrMkJFQSwgVSsyQkVCLCBVKzMwMzAsIFUrMzAzRCwgVSszMjk3LCBVKzMyOTksIFUrRTAwMC1FMDA5LCBVK0UwMTAsIFUrRTAxMSxcbiAgICAgICAgVStFMDQwLUUwNkQsIFUrRTA4MC1FMEI0LCBVK0UwQzAtRTBDQywgVStFMEZGLUUxMEQsIFUrRTE0MC1FMTRBLCBVK0UxNTAtRTE1NywgVStFMTgxLUUxODksIFUrRTFDMC1FMUM0LFxuICAgICAgICBVK0UxQzYtRTFEOSwgVStFMjAwLUUyMTYsIFUrRTI0MC1FMjY5LCBVK0UyODAtRTI4MywgVStFMkMwLUUyQzQsIFUrRTJDNi1FMkRBLCBVK0UzMDAtRTMwMywgVStFMzA1LUUzMEYsXG4gICAgICAgIFUrRTMxMi1FMzE2LCBVK0UzMTgtRTMyMiwgVStFMzI0LUUzMjksIFUrRTMyQiwgVStFMzQwLUUzNDgsIFUrRTM4MCwgVStFMzgxLCBVK0YwMDAsIFUrRjc3QSwgVStGOEZGLCBVK0ZFMEYsXG4gICAgICAgIFUrMUYwMDQsIFUrMUYwQ0YsIFUrMUYxMEQtMUYxMEYsIFUrMUYxMkYsIFUrMUYxNkQtMUYxNzEsIFUrMUYxN0UsIFUrMUYxN0YsIFUrMUYxOEUsIFUrMUYxOTEtMUYxOUEsIFUrMUYxRTYtMUYxRkYsXG4gICAgICAgIFUrMUYyMDEsIFUrMUYyMDIsIFUrMUYyMUEsIFUrMUYyMkYsIFUrMUYyMzItMUYyM0EsIFUrMUYyNTAsIFUrMUYyNTEsIFUrMUYyNjAtMUYyNjUsIFUrMUYzMDAtMUYzMjEsIFUrMUYzMjQtMUYzOTMsXG4gICAgICAgIFUrMUYzOTYsIFUrMUYzOTcsIFUrMUYzOTktMUYzOUIsIFUrMUYzOUUtMUYzRjAsIFUrMUYzRjMtMUYzRjUsIFUrMUYzRjctMUY0RkQsIFUrMUY0RkYtMUY1M0QsIFUrMUY1NDktMUY1NEUsXG4gICAgICAgIFUrMUY1NTAtMUY1NjcsIFUrMUY1NkYsIFUrMUY1NzAsIFUrMUY1NzMtMUY1N0EsIFUrMUY1ODcsIFUrMUY1OEEtMUY1OEQsIFUrMUY1OTAsIFUrMUY1OTUsIFUrMUY1OTYsIFUrMUY1QTQsXG4gICAgICAgIFUrMUY1QTUsIFUrMUY1QTgsIFUrMUY1QjEsIFUrMUY1QjIsIFUrMUY1QkMsIFUrMUY1QzItMUY1QzQsIFUrMUY1RDEtMUY1RDMsIFUrMUY1REMtMUY1REUsIFUrMUY1RTEsIFUrMUY1RTMsXG4gICAgICAgIFUrMUY1RTgsIFUrMUY1RUYsIFUrMUY1RjMsIFUrMUY1RkEtMUY2NEYsIFUrMUY2ODAtMUY2QzUsIFUrMUY2Q0ItMUY2RDIsIFUrMUY2RDUtMUY2RDcsIFUrMUY2REMtMUY2RTUsIFUrMUY2RTksXG4gICAgICAgIFUrMUY2RUIsIFUrMUY2RUMsIFUrMUY2RjAsIFUrMUY2RjMtMUY2RkMsIFUrMUY3RTAtMUY3RUIsIFUrMUY3RjAsIFUrMUY5MEMtMUY5M0EsIFUrMUY5M0MtMUY5NDUsIFUrMUY5NDctMUY5RkYsXG4gICAgICAgIFUrMUZBNzAtMUZBN0MsIFUrMUZBODAtMUZBODgsIFUrMUZBOTAtMUZBQkQsIFUrMUZBQkYtMUZBQzUsIFUrMUZBQ0UtMUZBREIsIFUrMUZBRTAtMUZBRTgsIFUrMUZBRjAtMUZBRjgsXG4gICAgICAgIFUrMUZCQzUtMUZCQzksIFUrRTAwNjEtRTAwNjcsIFUrRTAwNjksIFUrRTAwNkMtRTAwNzksIFUrRTAwN0Y7XG59XG5cbi5jb3BpZWRUb0NsaXBib2FyZE1lc3NhZ2Uge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDMycHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBiYWNrZ3JvdW5kOiAjMjIyO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIHBhZGRpbmc6IDEwcHggMjRweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgZm9udC1zaXplOiAxLjFlbTtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7XG4gICAgb3BhY2l0eTogMC45NztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiA5OTk5O1xufVxuXG4uQ2hhdCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmLCAnT3Blbk1vamlCbGFjayc7XG5cbiAgICAtLWNoYXQtbWVzc2FnZS1taW4td2lkdGg6IDE1MHB4O1xuICAgIC0tY2hhdC1tZXNzYWdlLW1heC13aWR0aDogbWluKDcwJSwgNjAwcHgpO1xuICAgIC0tY2hhdC1tZXNzYWdlLWF2YXRhci1nYXA6IDEycHg7XG4gICAgLyogPC0gVE9ETzogW/Cfp6BdW/CfjrFdIEJldHRlciwgZGVmaW5lIG90aGVyIGZvbnRzICovXG59XG5cbi5jaGF0TWFpbkZsb3cge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZTpcbiAgICAgICAgJ/Cfn6YnIG1pbi1jb250ZW50XG4gICAgICAgICfwn5KsJyAxZnJcbiAgICAgICAgJ/Cfk50nIG1pbi1jb250ZW50XG4gICAgICAgIC8gMWZyO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0QmFyIHtcbiAgICBncmlkLWFyZWE6IPCfn6Y7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMTZweCAyMHB4O1xuICAgIGNvbG9yOiAjMGYxNzI0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTUsIDIzLCAzNiwgMC4wNik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5UYXNrc0luUHJvZ3Jlc3Mge1xuICAgIGdyaWQtYXJlYTog8J+fpjtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IG1pbi1jb250ZW50O1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LXNlbGY6IHNlbGYtZW5kO1xuICAgIG1hcmdpbjogOHB4IDE2cHg7XG59XG5cbi5hY3Rpb25zIHtcbiAgICBncmlkLWFyZWE6IPCfkqw7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBtaW4tY29udGVudDtcbiAgICB6LWluZGV4OiA0MDtcbiAgICBhbGlnbi1zZWxmOiBzZWxmLXN0YXJ0O1xuICAgIGp1c3RpZnktc2VsZjogc2VsZi1lbmQ7XG4gICAgbWFyZ2luOiAxNnB4IDIwcHggMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA4cHg7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgd2lsbC1jaGFuZ2U6IG9wYWNpdHk7XG59XG5cbi5hY3Rpb25zLnBvcnRhbCB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uYWN0aW9ucy5sZWZ0IHtcbiAgICBqdXN0aWZ5LXNlbGY6IHNlbGYtc3RhcnQ7XG59XG5cbi5hY3Rpb25zLnJpZ2h0IHtcbiAgICBqdXN0aWZ5LXNlbGY6IHNlbGYtZW5kO1xufVxuXG4uYWN0aW9uc0ZhZGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG59XG5cbi5hY3Rpb25zU2Nyb2xsaW5nIHtcbiAgICBvcGFjaXR5OiAwLjE1O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBMYXJnZSB0YWJsZXQgYW5kIHNtYWxsIGRlc2t0b3Agc2NyZWVucyAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XG4gICAgLmNoYXRCdXR0b24ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgZ2FwOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5jaGF0QnV0dG9uIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5jaGF0QnV0dG9uVGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAudXNlVGVtcGxhdGVCdXR0b24ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgZ2FwOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiBzdmcge1xuICAgICAgICB3aWR0aDogMThweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDE4cHggIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAudXNlVGVtcGxhdGVCdXR0b24gLmNoYXRCdXR0b25UZXh0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLyogTWVkaXVtIHNjcmVlbnMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIC5hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luOiAxNHB4IDE4cHggMDtcbiAgICAgICAgZ2FwOiA3cHg7XG4gICAgfVxufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0Q2hpbGRyZW4ge1xuICAgIGdyaWQtYXJlYTog8J+SrDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgei1pbmRleDogMzAwO1xufVxuXG4vKiBDaGF0IG1lc3NhZ2VzIGFyZWEgKi9cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlcyB7XG4gICAgZ3JpZC1hcmVhOiDwn5KsO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBwYWRkaW5nOiAyNHB4IDIwcHggMTZweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbn1cblxuLmhhc0FjdGlvbnNBbmRGaXJzdE1lc3NhZ2VJc0xvbmcge1xuICAgIHBhZGRpbmctdG9wOiA4MHB4O1xufVxuXG4vKiBDdXN0b20gc2Nyb2xsYmFyIHN0eWxpbmcgKi9cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlczo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiA2cHg7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMik7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4zKTtcbn1cblxuLyogSW5kaXZpZHVhbCBjaGF0IG1lc3NhZ2UgKi9cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgY29sdW1uLWdhcDogdmFyKC0tY2hhdC1tZXNzYWdlLWF2YXRhci1nYXApO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBhbmltYXRpb246IG1lc3NhZ2VTbGlkZUluIDAuNHMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xuICAgIG1heC13aWR0aDogMTAwJTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLm1lc3NhZ2VTdGFjayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1heC13aWR0aDogdmFyKC0tY2hhdC1tZXNzYWdlLW1heC13aWR0aCk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlLmlzTWUgLm1lc3NhZ2VTdGFjayB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVN0YWNrID4gKiB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4ubWVzc2FnZU1ldGEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDZweDtcbiAgICBtYXJnaW46IDRweCA2cHggMDtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgY29sb3I6ICM2YjcyODA7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UuaXNNZSAubWVzc2FnZU1ldGEge1xuICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4ubWVzc2FnZVRpbWVzdGFtcCB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbn1cblxuLm1lc3NhZ2VEdXJhdGlvbiB7XG4gICAgb3BhY2l0eTogMC44NTtcbn1cblxuLnBhcnRpY2lwYW50TGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIG1hcmdpbjogMCAwIDZweDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UuaXNNZSAucGFydGljaXBhbnRMYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbkBrZXlmcmFtZXMgbWVzc2FnZVNsaWRlSW4ge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCkgc2NhbGUoMC45NSk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpO1xuICAgIH1cbn1cblxuLmlzTm90Q29tcGxldGVNZXNzYWdlIHtcbiAgICAvKi9cbiAgICBvdXRsaW5lOiAxcHggZG90dGVkICNmZjAwMDAgIWltcG9ydGFudDtcbiAgICAvKiovXG5cbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uTm9uQ29tcGxldGVNZXNzYWdlRmlsbGVyIHtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8qIEVuaGFuY2VkIGxvYWRpbmcgc3RhdGVzIGZvciBtZXNzYWdlcyAqL1xuLmlzTm90Q29tcGxldGVNZXNzYWdlIC5tZXNzYWdlVGV4dDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDhweDtcbiAgICByaWdodDogMTJweDtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNiksIHRyYW5zcGFyZW50KTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYW5pbWF0aW9uOiBsb2FkaW5nUHVsc2UgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbn1cblxuLm9uZ29pbmdUb29sQ2FsbHMsXG4uY29tcGxldGVkVG9vbENhbGxzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogOHB4O1xuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICBwYWRkaW5nLXRvcDogOHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG59XG5cbi5zb3VyY2VDaXRhdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiA4cHg7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIHBhZGRpbmctdG9wOiA4cHg7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbn1cblxuLm9uZ29pbmdUb29sQ2FsbCxcbi5jb21wbGV0ZWRUb29sQ2FsbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogOHB4O1xuICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtZmFtaWx5OiAnT3Blbk1vamlDb2xvcicsICdPcGVuTW9qaUJsYWNrJywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbn1cblxuLmNvbXBsZXRlZFRvb2xDYWxsIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbn1cblxuLmNvbXBsZXRlZFRvb2xDYWxsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuXG4udG9vbENhbGxPcmlnaW4ge1xuICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgIG9wYWNpdHk6IDAuNzU7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udG9vbENhbGxEZXRhaWxzIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50b29sQ2FsbERldGFpbHMgcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4udG9vbENhbGxEYXRhIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgIHBhZGRpbmc6IDEycHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgbWF4LWhlaWdodDogMzAwcHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbn1cblxuLm9uZ29pbmdUb29sQ2FsbFNwaW5uZXIge1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGhlaWdodDogMTRweDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYW5pbWF0aW9uOiB0b29sQ2FsbFNwaW5uZXIgMC44cyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbi5vbmdvaW5nVG9vbENhbGxOYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG5Aa2V5ZnJhbWVzIHRvb2xDYWxsU3Bpbm5lciB7XG4gICAgdG8ge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBsb2FkaW5nUHVsc2Uge1xuICAgIDAlLFxuICAgIDEwMCUge1xuICAgICAgICBvcGFjaXR5OiAwLjM7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuOCk7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEuMik7XG4gICAgfVxufVxuXG4vKiBUeXBpbmcgaW5kaWNhdG9yIGZvciBBSSBtZXNzYWdlcyAqL1xuLnR5cGluZ0luZGljYXRvciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBhbmltYXRpb246IG1lc3NhZ2VTbGlkZUluIDAuNHMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xufVxuXG4udHlwaW5nSW5kaWNhdG9yIC5hdmF0YXIge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBtYXJnaW46IDAgMTJweCA0cHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIFvjipfvuI9dXG4udHlwaW5nSW5kaWNhdG9yIC5hdmF0YXIgaW1nIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmNmZiO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbn1cbiovXG5cbi50eXBpbmdCdWJibGUge1xuICAgIHBhZGRpbmc6IDE2cHggMjBweDtcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMSk7XG4gICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICAgIG1pbi1oZWlnaHQ6IDI0cHg7XG59XG5cbi50eXBpbmdEb3RzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogNHB4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi50eXBpbmdEb3Qge1xuICAgIHdpZHRoOiA4cHg7XG4gICAgaGVpZ2h0OiA4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2YjcyODAgMCUsIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC42KSAxMDAlKTtcbiAgICBhbmltYXRpb246IHR5cGluZ0JvdW5jZSAxLjRzIGluZmluaXRlIGVhc2UtaW4tb3V0O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi50eXBpbmdEb3Q6bnRoLWNoaWxkKDEpIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IC0wLjMycztcbn1cblxuLnR5cGluZ0RvdDpudGgtY2hpbGQoMikge1xuICAgIGFuaW1hdGlvbi1kZWxheTogLTAuMTZzO1xufVxuXG4udHlwaW5nRG90Om50aC1jaGlsZCgzKSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwcztcbn1cblxuQGtleWZyYW1lcyB0eXBpbmdCb3VuY2Uge1xuICAgIDAlLFxuICAgIDgwJSxcbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpIHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG4gICAgNDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpIHRyYW5zbGF0ZVkoLThweCk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZS5pc01lIHtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UuaXNNZSAubWVzc2FnZVRleHQge1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA2cHg7XG59XG5cbi5yYXRpbmdTdGFyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG4gICAgY29sb3I6IHZhcigtLXN0YXItaW5hY3RpdmUtY29sb3IsICNjY2MpO1xufVxuXG4ucmF0aW5nU3Rhci5hY3RpdmUge1xuICAgIGNvbG9yOiAjZmZkNzAwO1xufVxuXG4vKiBTZW5kZXIgQXZhdGFyICovXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAuYXZhdGFyIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICAgIG1hcmdpbjogMCAwIDRweDtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi8qIFvjipfvuI9dXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAuYXZhdGFyIGltZyB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXZhdGFyLWJnLWNvbG9yLCAjZWVmNmZiKTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2U7XG59XG5cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLmF2YXRhciBpbWc6aG92ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuKi9cblxuLyogTWVzc2FnZSB0ZXh0IGJ1YmJsZSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLm1lc3NhZ2VUZXh0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZXNzYWdlLWJnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWVzc2FnZS10ZXh0LWNvbG9yKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMTRweCAxOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogdmFyKC0tY2hhdC1tZXNzYWdlLW1pbi13aWR0aCk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgLS1jaGF0LWhlYWRpbmctc3VyZmFjZTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcbiAgICAtLWNoYXQtaGVhZGluZy1hY2NlbnQ6IHJnYmEoNTYsIDE4OSwgMjQ4LCAwLjg1KTtcbiAgICAtLWNoYXQtaGVhZGluZy10ZXh0LWNvbG9yOiB2YXIoLS1tZXNzYWdlLXRleHQtY29sb3IsICMwZjE3MmEpO1xuICAgIC0tY2hhdC1oZWFkaW5nLWJvcmRlci1jb2xvcjogcmdiYSgxNSwgMjMsIDQyLCAwLjE4KTtcbiAgICAtLWNoYXQtaGVhZGluZy1zaGFkb3ctY29sb3I6IHJnYmEoMTUsIDIzLCA0MiwgMC42NSk7XG59XG5cbkBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjMDAwIDUwJSwgI2ZmZiA1MCUpKSB7XG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLm1lc3NhZ2VUZXh0IHtcbiAgICAgICAgLS1jaGF0LWhlYWRpbmctc3VyZmFjZTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1lc3NhZ2UtYmctY29sb3IsICNmZmZmZmYpIDcwJSwgcmdiYSgxNSwgMjMsIDQyLCAwLjA4KSAzMCUpO1xuICAgICAgICAtLWNoYXQtaGVhZGluZy1hY2NlbnQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tZXNzYWdlLXRleHQtY29sb3IsICMwZjE3MmEpIDY1JSwgcmdiYSg1OSwgMTMwLCAyNDYsIDAuOSkgMzUlKTtcbiAgICAgICAgLS1jaGF0LWhlYWRpbmctYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWVzc2FnZS1iZy1jb2xvciwgI2ZmZmZmZikgNjAlLCByZ2JhKDE1LCAyMywgNDIsIDAuMTIpIDQwJSk7XG4gICAgICAgIC0tY2hhdC1oZWFkaW5nLXNoYWRvdy1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoMTUsIDIzLCA0MiwgMC42NSkgODAlLCByZ2JhKDk2LCAxNjUsIDI1MCwgMC40NSkgMjAlKTtcbiAgICAgICAgLS1jaGF0LWhlYWRpbmctdGV4dC1jb2xvcjogdmFyKC0tbWVzc2FnZS10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICB9XG59XG5cbi8qIENvcHkgYnV0dG9uIHN0eWxlcyAqL1xuLmNvcHlCdXR0b25Db250YWluZXIge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0b3A6IDhweDtcbiAgICByaWdodDogMTBweDtcbiAgICB6LWluZGV4OiAyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5tZXNzYWdlVGV4dDpob3ZlciAuY29weUJ1dHRvbkNvbnRhaW5lcixcbi5jb3B5QnV0dG9uQ29udGFpbmVyOmZvY3VzLXdpdGhpbiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuLmNvcHlCdXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA3KTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMsIGJveC1zaGFkb3cgMC4xNXMsIGJvcmRlciAwLjE1cztcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNvcGllZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdG9wOiAxMTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBiYWNrZ3JvdW5kOiAjMjIyO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIHBhZGRpbmc6IDZweCAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBmb250LXNpemU6IDAuOThlbTtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7XG4gICAgb3BhY2l0eTogMC45NztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgYW5pbWF0aW9uOiBjb3BpZWRUb29sdGlwRmFkZUluIDAuMnM7XG4gICAgbWF4LXdpZHRoOiAyMjBweDtcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG5cbi5jb3BpZWRUb29sdGlwTGVmdCB7XG4gICAgbGVmdDogMCAhaW1wb3J0YW50O1xuICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uY29waWVkVG9vbHRpcFJpZ2h0IHtcbiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogUmVtb3ZlZCByaWdodC1hbGlnbmVkIG92ZXJyaWRlIHRvIGtlZXAgdG9vbHRpcCBwb3NpdGlvbiBzdGFibGUgKi9cblxuQGtleWZyYW1lcyBjb3BpZWRUb29sdGlwRmFkZUluIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk3KTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAwLjk3O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTtcbiAgICB9XG59XG5cbi5jb3B5QnV0dG9uOmhvdmVyLFxuLmNvcHlCdXR0b246Zm9jdXMge1xuICAgIGJvcmRlcjogMS41cHggc29saWQgI2JiYjtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjEpO1xufVxuXG4uY29weUJ1dHRvbiBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubWVzc2FnZVRleHQgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5cbi5tZXNzYWdlVGV4dCBvbCB7XG4gICAgbGlzdC1zdHlsZTogZGVjaW1hbDtcbiAgICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLm1lc3NhZ2VUZXh0IGltZyxcbi5tZXNzYWdlVGV4dCBwcmUsXG4ubWVzc2FnZVRleHQgYmxvY2txdW90ZSxcbi5tZXNzYWdlVGV4dCB0YWJsZSB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbn1cblxuLm1lc3NhZ2VUZXh0IHByZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogIzAwMDAwMGZmO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbi5tZXNzYWdlVGV4dCBibG9ja3F1b3RlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmY2M7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAjMDAwO1xuICAgIHBhZGRpbmc6IDFlbTtcbn1cblxuLm1lc3NhZ2VUZXh0IGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjY2NjY2NjNTU7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4ubWVzc2FnZVRleHQgcHJlIGNvZGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDBjYztcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG59XG5cbi5tZXNzYWdlVGV4dCAuY2hhdC1jb2RlLWJsb2NrIHtcbiAgICBiYWNrZ3JvdW5kOiAjMTgxYzIzO1xuICAgIGNvbG9yOiAjZjhmYWZjO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgYm9yZGVyLWNvbG9yOiAjMjMyNzJmO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgIGZvbnQtZmFtaWx5OiAnRmlyYSBNb25vJywgJ01lbmxvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcbn1cbi5tZXNzYWdlVGV4dCAuY2hhdC1jb2RlLWJsb2NrIGNvZGUge1xuICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbiAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbi5tZXNzYWdlVGV4dCB0YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICBtYXJnaW46IDE2cHggMDtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOyAvKiBTdHJvbmdlciBsaWdodCBiYWNrZ3JvdW5kIGZvciBjb250cmFzdCAqL1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICMxNzIyM2I7IC8qIERhcmsgdGV4dCBmb3IgY29udHJhc3QgKi9cbn1cbi5tZXNzYWdlVGV4dCB0aCxcbi5tZXNzYWdlVGV4dCB0ZCB7XG4gICAgcGFkZGluZzogMTBweCAxNnB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDFkYmU4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICMxNzIyM2I7IC8qIEVuc3VyZSBzdHJvbmcgdGV4dCBjb2xvciBmb3IgYWxsIGNlbGxzICovXG4gICAgYmFja2dyb3VuZDogbm9uZTtcbn1cbi5tZXNzYWdlVGV4dCB0aCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZWFmM2ZhIDgwJSwgI2QxZTNmOCAxMDAlKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiAjMTcyMjNiOyAvKiBTdHJvbmcgaGVhZGVyIHRleHQgKi9cbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2I1YzdkZTtcbn1cbi5tZXNzYWdlVGV4dCB0cjpsYXN0LWNoaWxkIHRkIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLm1lc3NhZ2VUZXh0IHRyOm50aC1jaGlsZChldmVuKSB0ZCB7XG4gICAgYmFja2dyb3VuZDogI2VhZjNmYTtcbn1cbi5tZXNzYWdlVGV4dCB0cjpob3ZlciB0ZCB7XG4gICAgYmFja2dyb3VuZDogI2NiZTBmNztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG4ubWVzc2FnZVRleHQgdGFibGUge1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tZXNzYWdlVGV4dCB0aDpmaXJzdC1jaGlsZCxcbi5tZXNzYWdlVGV4dCB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTJweDtcbn1cbi5tZXNzYWdlVGV4dCB0aDpsYXN0LWNoaWxkLFxuLm1lc3NhZ2VUZXh0IHRkOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMnB4O1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVRleHQ6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi8qIEF0dGFjaG1lbnRzIHN0eWxlcyAqL1xuLmF0dGFjaG1lbnRzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMik7XG59XG5cbi5hdHRhY2htZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA2cHg7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4zKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xufVxuXG4uYXR0YWNobWVudDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbn1cblxuLmF0dGFjaG1lbnRJY29uIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgb3BhY2l0eTogMC44O1xufVxuXG4uYXR0YWNobWVudE5hbWUge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLyogTWVzc2FnZSBidXR0b25zIGNvbnRhaW5lciAqL1xuLm1lc3NhZ2VCdXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDEyNSAxMjUgMTI1IC8gMC44Myk7XG59XG5cbi8qIEluZGl2aWR1YWwgbWVzc2FnZSBidXR0b24gKi9cbi5tZXNzYWdlQnV0dG9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDhweCAxNHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuOSk7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLm1lc3NhZ2VCdXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTMyLCAyNTUsIDAuMSk7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4xNSk7XG59XG5cbi5tZXNzYWdlQnV0dG9uOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcyBlYXNlO1xufVxuXG4vKiBSZW1vdmUgZGVmYXVsdCBtYXJrZG93biBzdHlsZXMgZnJvbSBidXR0b24gY29udGVudCAqL1xuLm1lc3NhZ2VCdXR0b24gcCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi5tZXNzYWdlQnV0dG9uIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLm1lc3NhZ2VCdXR0b24gZW0ge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLyogUmF0aW5nIHN5c3RlbSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLnJhdGluZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogLThweDtcbiAgICByaWdodDogOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAycHg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IDI0cHg7XG4gICAgei1pbmRleDogMTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2U6aG92ZXIgLnJhdGluZyB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5yYXRpbmc6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45KTtcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAucmF0aW5nIHNwYW4ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLnJhdGluZzpob3ZlciBzcGFuIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi8qIENoYXQgaW5wdXQgYXJlYSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IHtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBncmlkLWFyZWE6IPCfk507XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMjRweDtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEycHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uQ2hhdC5mdWxsUGFnZVZpc3VhbCAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQge1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyNXB4KTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCkgMTAwJSk7XG59XG5cbi8qIEZpbGUgdXBsb2FkIGRyYWctYW5kLWRyb3Agc3R5bGVzICovXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQuZHJhZ092ZXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwgMTMyLCAyNTUsIDAuMSkgMCUsIHJnYmEoMCwgMTMyLCAyNTUsIDAuMDUpIDEwMCUpO1xufVxuXG4vKiBGaWxlIHByZXZpZXcgY29udGFpbmVyICovXG4uZmlsZVByZXZpZXdDb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogOHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLyogSW5kaXZpZHVhbCBmaWxlIHByZXZpZXcgKi9cbi5maWxlUHJldmlldyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogOHB4O1xuICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMik7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbn1cblxuLmZpbGVQcmV2aWV3OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMTUpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjMpO1xufVxuXG4uZmlsZUljb24ge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi5maWxlSW5mbyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMnB4O1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuLmZpbGVOYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgbWF4LXdpZHRoOiAxNTBweDtcbn1cblxuLmZpbGVTaXplIHtcbiAgICBjb2xvcjogIzZiNzI4MDtcbiAgICBmb250LXNpemU6IDExcHg7XG59XG5cbi5yZW1vdmVGaWxlQnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcbiAgICBjb2xvcjogI2ZmNDQ0NDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5yZW1vdmVGaWxlQnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMCwgMCwgMC4yKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi8qIElucHV0IGNvbnRhaW5lciBmb3IgdGV4dGFyZWEgYW5kIGJ1dHRvbnMgKi9cbi5pbnB1dENvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgZ2FwOiA4cHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDI4cHg7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcbn1cblxuLmlucHV0Q29udGFpbmVyOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZC1jb2xvcik7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjEyKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5pbnB1dENvbnRhaW5lciB0ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi8qIEF0dGFjaG1lbnQgYnV0dG9uICovXG4uYXR0YWNobWVudEJ1dHRvbiB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbn1cblxuLmF0dGFjaG1lbnRCdXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi5hdHRhY2htZW50QnV0dG9uOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLyogVm9pY2UgQnV0dG9uICovXG4udm9pY2VCdXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICM2NDc0OGI7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbi52b2ljZUJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICBjb2xvcjogIzBmMTcyYTtcbn1cblxuLnZvaWNlQnV0dG9uQWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEpICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICNlZjQ0NDQgIWltcG9ydGFudDtcbiAgICBhbmltYXRpb246IHZvaWNlUmVjb3JkaW5nUHVsc2UgMS41cyBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyB2b2ljZVJlY29yZGluZ1B1bHNlIHtcbiAgICAwJSB7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgyNTUsIDAsIDAsIDAuNCk7XG4gICAgfVxuICAgIDcwJSB7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgyNTUsIDAsIDAsIDApO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKDI1NSwgMCwgMCwgMCk7XG4gICAgfVxufVxuXG4vKiBVcGxvYWQgcHJvZ3Jlc3MgaW5kaWNhdG9yICovXG4udXBsb2FkUHJvZ3Jlc3Mge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDEycHg7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMzIsIDI1NSwgMC4xKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDEzMiwgMjU1LCAwLjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6ICMwMDg0ZmY7XG59XG5cbi51cGxvYWRQcm9ncmVzc0JhciB7XG4gICAgZmxleDogMTtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEzMiwgMjU1LCAwLjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udXBsb2FkUHJvZ3Jlc3NGaWxsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMDA4NGZmLCByZ2JhKDAsIDEzMiwgMjU1LCAwLjgpKTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYW5pbWF0aW9uOiB1cGxvYWRQcm9ncmVzcyAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIHVwbG9hZFByb2dyZXNzIHtcbiAgICAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgfVxufVxuXG4vKiBEcmFnIG92ZXJsYXkgKi9cbi5kcmFnT3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEzMiwgMjU1LCAwLjEpO1xuICAgIGJvcmRlcjogMnB4IGRhc2hlZCByZ2JhKDAsIDEzMiwgMjU1LCAwLjUpO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICB6LWluZGV4OiAyMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRyYWdPdmVybGF5Q29udGVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMnB4O1xuICAgIGNvbG9yOiAjMDA4NGZmO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZHJhZ092ZXJsYXlDb250ZW50IHN2ZyB7XG4gICAgb3BhY2l0eTogMC43O1xufVxuXG4vKiBDaGF0IGlucHV0IGZpZWxkICovXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWEge1xuICAgIGZsZXg6IDE7XG4gICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWE6Zm9jdXMge1xuICAgIC8qIEZvY3VzIGlzIGhhbmRsZWQgYnkgLmlucHV0Q29udGFpbmVyICovXG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCB0ZXh0YXJlYTpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC42O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgdHJhbnNmb3JtOiBub25lO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi8qIENoYXQgc2VuZCBidXR0b24gKi9cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b25bZGF0YS1idXR0b24tdHlwZT0nY2FsbC10by1hY3Rpb24nXSB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIG1hcmdpbjogMCAwIDJweCAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuXG4gICAgYm9yZGVyOiBub25lO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcbiAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICAgIG1pbi13aWR0aDogdW5zZXQgIWltcG9ydGFudDtcbiAgICBtaW4taGVpZ2h0OiB1bnNldCAhaW1wb3J0YW50O1xuXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAxMzIsIDI1NSwgMC4yNSk7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbltkYXRhLWJ1dHRvbi10eXBlPSdjYWxsLXRvLWFjdGlvbiddOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDE2cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zNSk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b25bZGF0YS1idXR0b24tdHlwZT0nY2FsbC10by1hY3Rpb24nXTphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b25bZGF0YS1idXR0b24tdHlwZT0nY2FsbC10by1hY3Rpb24nXSBzdmcge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbiBpbWcge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi8qIFNjcm9sbCB0byBib3R0b20gYnV0dG9uICovXG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciB7XG4gICAgLyovXG4gICAgb3V0bGluZTogMXB4IGRvdHRlZCByZWQ7XG4gICAgLyoqL1xuXG4gICAgei1pbmRleDogMjA7XG4gICAgZ3JpZC1hcmVhOiDwn5OdO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b21XcmFwcGVyIHtcbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTUwJSk7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBhbmltYXRpb246IHNjcm9sbEJ1dHRvblNsaWRlSW4gMC4zcyBlYXNlLW91dDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b20ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwIDAgMCAvIDAuNSk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG59XG5cbkBrZXlmcmFtZXMgc2Nyb2xsQnV0dG9uU2xpZGVJbiB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDIwcHgpIHNjYWxlKDAuOCk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMC45O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKSBzY2FsZSgxKTtcbiAgICB9XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b21XcmFwcGVyOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTYwJSkgc2NhbGUoMS4wNSk7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b21XcmFwcGVyOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTE2MCUpIHNjYWxlKDAuOTUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzIGVhc2U7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUJhZGdlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtOHB4O1xuICAgIHJpZ2h0OiAtOHB4O1xuICAgIG1pbi13aWR0aDogMzJweDtcbiAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJhY2tncm91bmQ6ICMyNTYzZWI7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjQpO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIFJhdGluZyBtb2RhbCAqL1xuLnJhdGluZ01vZGFsIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHotaW5kZXg6IDEwMDA7XG4gICAgYW5pbWF0aW9uOiBtb2RhbEZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuXG5Aa2V5ZnJhbWVzIG1vZGFsRmFkZUluIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG4gICAgfVxufVxuXG4ucmF0aW5nTW9kYWxDb250ZW50IHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIGNvbG9yOiAjMGYxNzI0O1xuICAgIHBhZGRpbmc6IDMycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICB3aWR0aDogOTAlO1xuICAgIG1heC13aWR0aDogNDgwcHg7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG4gICAgYW5pbWF0aW9uOiBtb2RhbFNsaWRlSW4gMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG5cbiAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiwgJ09wZW5Nb2ppQmxhY2snO1xuICAgIC8qIDwtIFRPRE86IFvwn6egXVvwn46xXSBCZXR0ZXIsIGRlZmluZSBvdGhlciBmb250cyAqL1xufVxuXG5Aa2V5ZnJhbWVzIG1vZGFsU2xpZGVJbiB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KSBzY2FsZSgwLjk1KTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gICAgfVxufVxuXG4ucmF0aW5nTW9kYWxDb250ZW50IGgzIHtcbiAgICBtYXJnaW46IDAgMCAyNHB4IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnN0YXJzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogOHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG59XG5cbi5zdGFycyBzcGFuIHtcbiAgICBmb250LXNpemU6IDI4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbn1cblxuLnN0YXJzIHNwYW46aG92ZXIge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjE1LCAwLCAwLjEpO1xufVxuXG4ucmF0aW5nTW9kYWxTdGFyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG59XG5cbi50b29sQ2FsbE1vZGFsIHtcbiAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5zZWFyY2hNb2RhbEhlYWRlciB7XG4gICAgcGFkZGluZzogMjRweCAzMnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDcycHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTZweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmRmZGZkO1xufVxuXG4uc2VsZkxlYXJuaW5nTW9kYWxIZWFkZXIge1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxOHB4O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmOGZhZmMgMCUsICNmZWY5YzMgNDUlLCAjZWNmY2NiIDEwMCUpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTJlOGYwO1xufVxuXG4uc2VsZkxlYXJuaW5nQXZhdGFyR3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDEwcHg7XG59XG5cbi5zZWxmTGVhcm5pbmdBdmF0YXIge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZDogI2UyZThmMDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDIwcHggcmdiYSgxNSwgMjMsIDQyLCAwLjE4KTtcbn1cblxuLnNlbGZMZWFybmluZ0F2YXRhckluaXRpYWwge1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4uc2VsZkxlYXJuaW5nVGVhY2hlciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZkZTY4YSAwJSwgIzg2ZWZhYyAxMDAlKTtcbn1cblxuLnNlbGZMZWFybmluZ0hlYWRlclRleHQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDZweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uc2VsZkxlYXJuaW5nVGl0bGUge1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbn1cblxuLnNlbGZMZWFybmluZ01ldGFSb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMHB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4uc2VsZkxlYXJuaW5nTWV0YSB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAjNjQ3NDhiO1xufVxuXG4uc2VsZkxlYXJuaW5nTWV0YUNoaXAge1xuICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5zZWxmTGVhcm5pbmdDb21taXRtZW50cyB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgcGFkZGluZzogMTZweDtcbn1cblxuLnNlbGZMZWFybmluZ0NvbW1pdG1lbnRzTGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM5NGEzYjg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnNlbGZMZWFybmluZ0Jvb2tFZGl0b3Ige1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xufVxuXG4uc2VsZkxlYXJuaW5nRW1wdHkge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAjNDc1NTY5O1xufVxuXG4ubW9kYWxDbG9zZUJ1dHRvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTZweDtcbiAgICByaWdodDogMTZweDtcbiAgICB6LWluZGV4OiAxO1xuICAgIHdpZHRoOiAzNnB4O1xuICAgIGhlaWdodDogMzZweDtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgY29sb3I6ICM0NzU1Njk7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm94LXNoYWRvdzogMCA2cHggMTZweCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCBjb2xvciAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xufVxuXG4ubW9kYWxDbG9zZUJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBib3gtc2hhZG93OiAwIDEwcHggMjRweCByZ2JhKDE1LCAyMywgNDIsIDAuMTIpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbn1cblxuLm1vZGFsQ2xvc2VCdXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkICM5NGEzYjg7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLnRlYW1Nb2RhbEhlYWRlciB7XG4gICAgZ2FwOiAxMnB4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLnRlYW1IZWFkZXJQYXJ0aWNpcGFudHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDEycHg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xufVxuXG4udGVhbUhlYWRlclByb2ZpbGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMnB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLnRlYW1IZWFkZXJQcm9maWxlTGluazpob3ZlciB7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi50ZWFtSGVhZGVyQXZhdGFyIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDE0cHggcmdiYSgxNSwgMjMsIDQyLCAwLjA4KTtcbn1cblxuLnRlYW1IZWFkZXJOYW1lIHtcbiAgICBmb250LXNpemU6IDE4cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbn1cblxuLnRlYW1IZWFkZXJEaXZpZGVyIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzk0YTNiODtcbn1cblxuLnNlYXJjaE1vZGFsSWNvbiB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgY29sb3I6ICM0NzU1Njk7XG59XG5cbi5zZWFyY2hNb2RhbFF1ZXJ5IHtcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICBmb250LXNpemU6IDIycHggIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogNTAwICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMyMDIxMjQgIWltcG9ydGFudDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG59XG5cbi5zZWFyY2hNb2RhbENvbnRlbnQge1xuICAgIHBhZGRpbmc6IDI0cHggMzJweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgIG1heC1oZWlnaHQ6IDYwdmg7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLnRlYW1DaGF0Q29udGFpbmVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViO1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi50ZWFtVG9vbENhbGxTZWN0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxNnB4O1xufVxuXG4udGVhbVRvb2xDYWxsR3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDhweDtcbn1cblxuLnRlYW1Ub29sQ2FsbEhlYWRpbmcge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICBjb2xvcjogIzY0NzQ4Yjtcbn1cblxuLnRlYW1Ub29sQ2FsbENoaXBzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbn1cblxuLnRlYW1Ub29sQ2FsbERldGFpbHMge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC40KTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbn1cblxuLnRlYW1Ub29sQ2FsbERldGFpbHNIZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZ2FwOiAxMnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG59XG5cbi50ZWFtVG9vbENhbGxEZXRhaWxzVGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDZweDtcbn1cblxuLnRlYW1Ub29sQ2FsbERldGFpbHNDbGVhciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjIpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC40KTtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiAjNDc1NTY5O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG59XG5cbi50ZWFtVG9vbENhbGxEZXRhaWxzQ2xlYXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4zNSk7XG59XG5cbi5zZWFyY2hSZXN1bHRzTGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMjhweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uc2VhcmNoUmVzdWx0c1JhdyB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXgtd2lkdGg6IDY1MHB4O1xufVxuXG4uc2VhcmNoUmVzdWx0SXRlbSB7XG4gICAgbWF4LXdpZHRoOiA2NTBweDtcbn1cblxuLnNlYXJjaFJlc3VsdFVybCB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGNvbG9yOiAjMjAyMTI0O1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5zZWFyY2hSZXN1bHRVcmwgYSB7XG4gICAgY29sb3I6ICMyMDIxMjQ7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uc2VhcmNoUmVzdWx0VGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDAgIWltcG9ydGFudDtcbiAgICBtYXJnaW46IDAgMCA0cHggMCAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi5zZWFyY2hSZXN1bHRUaXRsZSBhIHtcbiAgICBjb2xvcjogIzFhMGRhYjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5zZWFyY2hSZXN1bHRUaXRsZSBhOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLnNlYXJjaFJlc3VsdFNuaXBwZXQge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMS41ODtcbiAgICBjb2xvcjogIzRkNTE1NjtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5ub1Jlc3VsdHMge1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiAjNzA3NTdhO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLnRvb2xDYWxsRGV0YWlscyB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXJnaW46IDIwcHggMDtcbn1cbi5jaXRhdGlvbkRldGFpbHMge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi5jaXRhdGlvblByZXZpZXcge1xuICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4O1xufVxuXG4uY2l0YXRpb25JZnJhbWUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNjB2aDtcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5jaXRhdGlvbk1ldGFkYXRhIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4O1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLmNpdGF0aW9uTWV0YWRhdGEgcCB7XG4gICAgbWFyZ2luOiA4cHggMDtcbiAgICBmb250LXNpemU6IDAuOWVtO1xufVxuXG4uY2l0YXRpb25NZXRhZGF0YSBzdHJvbmcge1xuICAgIGNvbG9yOiAjMzMzO1xufVxuXG4uY2l0YXRpb25NZXRhZGF0YSBhIHtcbiAgICBjb2xvcjogIzAwN2JmZjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgd29yZC1icmVhazogYnJlYWstYWxsO1xufVxuXG4uY2l0YXRpb25NZXRhZGF0YSBhOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmNpdGF0aW9uRXhjZXJwdCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBwYWRkaW5nOiAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgIG1heC1oZWlnaHQ6IDQwMHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5jaXRhdGlvbkV4Y2VycHQgaDQge1xuICAgIG1hcmdpbjogMCAwIDEycHggMDtcbiAgICBjb2xvcjogIzMzMztcbiAgICBmb250LXNpemU6IDFlbTtcbn1cblxuLmNpdGF0aW9uSGludCB7XG4gICAgZm9udC1zaXplOiAwLjg1ZW07XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIG9wYWNpdHk6IDAuNztcbn1cblxuLnRvb2xDYWxsRGF0YUNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgbWF4LWhlaWdodDogMzAwcHg7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLnRvb2xDYWxsRGF0YSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuXG4udG9vbENhbGxBcmdzTGlzdCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnRvb2xDYWxsQXJnc0xpc3QgbGkge1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBmb250LXNpemU6IDAuOWVtO1xufVxuXG4udG9vbENhbGxNb2RhbCAudG9vbENhbGxEYXRhIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xufVxuXG4ucmF0aW5nSW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDEwMHB4O1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjEpO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMThweDtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4wNSk7XG4gICAgY29sb3I6ICMwYjEyMjA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbn1cblxuLnJhdGluZ0lucHV0OmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICMwMDg0ZmY7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjA4KTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCA0cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4xKTtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG4ucmF0aW5nSW5wdXRbcmVhZG9ubHldIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuNSk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjAxKTtcbn1cblxuLnJhdGluZ0FjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDEycHg7XG59XG5cbi5yYXRpbmdBY3Rpb25zIGJ1dHRvbiB7XG4gICAgcGFkZGluZzogMTJweCAyNHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgbWluLXdpZHRoOiA4MHB4O1xufVxuXG4ucmF0aW5nQWN0aW9ucyBidXR0b246Zmlyc3QtY2hpbGQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBjb2xvcjogIzBiMTIyMDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMik7XG59XG5cbi5yYXRpbmdBY3Rpb25zIGJ1dHRvbjpmaXJzdC1jaGlsZDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjIpO1xuICAgIGNvbG9yOiAjMGIxMjIwO1xufVxuXG4ucmF0aW5nQWN0aW9ucyBidXR0b246bGFzdC1jaGlsZCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwODRmZiAwJSwgIzAwNjZjYyAxMDAlKTtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbn1cblxuLnJhdGluZ0FjdGlvbnMgYnV0dG9uOmxhc3QtY2hpbGQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDcxZDEgMCUsICMwMDUyYTMgMTAwJSk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zKTtcbn1cblxuLnJhdGluZ0FjdGlvbnMgYnV0dG9uOmxhc3QtY2hpbGQ6ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uZG93bmxvYWRCdXR0b24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiA4cHg7XG4gICAgcGFkZGluZzogMTJweCAyNHB4O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDg0ZmYgMCUsICMwMDY2Y2MgMTAwJSk7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4yKTtcbn1cblxuLmRvd25sb2FkQnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA5OWZmIDAlLCAjMDA3N2RkIDEwMCUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMyk7XG59XG5cbi5kb3dubG9hZEJ1dHRvbjphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4yKTtcbn1cblxuLmRvd25sb2FkQnV0dG9uIHN2ZyB7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5kb3dubG9hZEJ1dHRvbiBzcGFuIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4vKiBOZXcgY2hhdCBidXR0b24gc3R5bGluZyAtIE1hdGNoZXMgdGhlIHNsZWVrIGNoYXQgbWVzc2FnZSBkZXNpZ24gKi9cbi5jaGF0QnV0dG9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgIGdhcDogOHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMTJweCAxNnB4ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwODRmZiAwJSwgIzAwNjZjYyAxMDAlKSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMjBweCAhaW1wb3J0YW50O1xuICAgIGZvbnQtc2l6ZTogMTNweCAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICBsaW5lLWhlaWdodDogMS4zICFpbXBvcnRhbnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpICFpbXBvcnRhbnQ7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpICFpbXBvcnRhbnQ7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpICFpbXBvcnRhbnQ7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uICFpbXBvcnRhbnQ7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmUgIWltcG9ydGFudDtcbiAgICBtaW4taGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiAxMTBweCAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbn1cblxuLmNoYXRCdXR0b246OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAtMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjVzIGVhc2U7XG59XG5cbi5jaGF0QnV0dG9uOmhvdmVyOjpiZWZvcmUge1xuICAgIGxlZnQ6IDEwMCU7XG59XG5cbi5jaGF0QnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA5OWZmIDAlLCAjMDA3N2RkIDEwMCUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KSBzY2FsZSgxLjAyKTtcbiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuNCk7XG59XG5cbi5jaGF0QnV0dG9uOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KSB0cmFuc2xhdGVZKC0xcHgpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzIGVhc2U7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xufVxuXG4uY2hhdEJ1dHRvbjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMyksIDAgMCAwIDNweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xufVxuXG4uY2hhdEJ1dHRvbiBzdmcge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMikpO1xufVxuXG4uY2hhdEJ1dHRvbjpob3ZlciBzdmcge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZykgc2NhbGUoMS4xKTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMykpO1xufVxuXG4uY2hhdEJ1dHRvblRleHQge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi5jaGF0QnV0dG9uOmhvdmVyIC5jaGF0QnV0dG9uVGV4dCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDFweCk7XG59XG5cbi8qIFVzZSB0ZW1wbGF0ZSBidXR0b24gc3R5bGluZyAtIG1hdGNoZXMgdGhlIGNoYXRCdXR0b24gYW5kIHNhdmVCdXR0b24gKi9cbi51c2VUZW1wbGF0ZUJ1dHRvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICBnYXA6IDhweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDEycHggMTZweCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDg0ZmYgMCUsICMwMDY2Y2MgMTAwJSkgIWltcG9ydGFudDtcbiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50O1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcbiAgICBmb250LXNpemU6IDEzcHggIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50O1xuICAgIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zKSAhaW1wb3J0YW50O1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KSAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbiAhaW1wb3J0YW50O1xuICAgIHVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XG4gICAgbWluLWhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgIG1pbi13aWR0aDogMTEwcHggIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG59XG5cbi51c2VUZW1wbGF0ZUJ1dHRvbjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIHRyYW5zcGFyZW50KTtcbiAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuNXMgZWFzZTtcbn1cblxuLnVzZVRlbXBsYXRlQnV0dG9uOmhvdmVyOjpiZWZvcmUge1xuICAgIGxlZnQ6IDEwMCU7XG59XG5cbi51c2VUZW1wbGF0ZUJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwOTlmZiAwJSwgIzAwNzdkZCAxMDAlKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCkgc2NhbGUoMS4wMik7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjQpO1xufVxuXG4udXNlVGVtcGxhdGVCdXR0b246YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTgpIHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMgZWFzZTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMyk7XG59XG5cbi51c2VUZW1wbGF0ZUJ1dHRvbjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMyksIDAgMCAwIDNweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xufVxuXG4udXNlVGVtcGxhdGVCdXR0b24gc3ZnIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTtcbn1cblxuLnVzZVRlbXBsYXRlQnV0dG9uOmhvdmVyIHN2ZyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKSk7XG59XG5cbi51c2VUZW1wbGF0ZUJ1dHRvbjpob3ZlciAuY2hhdEJ1dHRvblRleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxcHgpO1xufVxuXG4uc2F2ZUJ1dHRvbkNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnNhdmVNZW51IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxMDAlO1xuICAgIGxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIG1pbi13aWR0aDogMTIwcHg7XG4gICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG59XG5cbi5zYXZlTWVudUl0ZW0ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDhweCAxNnB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiAjMTExO1xufVxuXG4uc2F2ZU1lbnVJdGVtOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xufVxuXG4uc2F2ZU1lbnVEaXZpZGVyIHtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xuICAgIG1hcmdpbjogNHB4IDA7XG59XG5cbi5jaGF0RmVlZGJhY2tQYW5lbCB7XG4gICAgd2lkdGg6IG1pbigyNjBweCwgMTAwJSk7XG4gICAgcGFkZGluZzogNnB4IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNWU3ZWI7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wOCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogNnB4O1xufVxuXG4uY2hhdEZlZWRiYWNrVG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5jaGF0RmVlZGJhY2tUb2dnbGU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0wLjVweCk7XG59XG5cbi5jaGF0RmVlZGJhY2tUb2dnbGU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkICMyNTYzZWI7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLmNoYXRGZWVkYmFja0ljb24ge1xuICAgIHdpZHRoOiAzNHB4O1xuICAgIGhlaWdodDogMzRweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIGJhY2tncm91bmQ6ICNlZWYyZmY7XG4gICAgY29sb3I6ICM2MzY2ZjE7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlLCBjb2xvciAwLjJzIGVhc2U7XG59XG5cbi5jaGF0RmVlZGJhY2tUb2dnbGVbZGF0YS1lbmFibGVkPSd0cnVlJ10gLmNoYXRGZWVkYmFja0ljb24ge1xuICAgIGJhY2tncm91bmQ6ICNlMGYyZmU7XG4gICAgY29sb3I6ICMwMjg0Yzc7XG59XG5cbi5jaGF0RmVlZGJhY2tUb2dnbGVbZGF0YS1lbmFibGVkPSdmYWxzZSddIC5jaGF0RmVlZGJhY2tJY29uIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjNmNGY2O1xuICAgIGNvbG9yOiAjOTRhM2I4O1xufVxuXG4uY2hhdEZlZWRiYWNrTWV0YSB7XG4gICAgZmxleDogMTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAycHg7XG59XG5cbi5jaGF0RmVlZGJhY2tMYWJlbCB7XG4gICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi5jaGF0RmVlZGJhY2tEZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIGNvbG9yOiAjNjQ3NDhiO1xufVxuXG4uY2hhdEZlZWRiYWNrSW5kaWNhdG9yIHtcbiAgICBmb250LXNpemU6IDAuNzJyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcGFkZGluZzogMnB4IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbn1cblxuLmNoYXRGZWVkYmFja0luZGljYXRvckFjdGl2ZSB7XG4gICAgY29sb3I6ICMxNjY1MzQ7XG4gICAgYmFja2dyb3VuZDogI2RjZmNlNztcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzRkMzk5O1xufVxuXG4uY2hhdEZlZWRiYWNrSW5kaWNhdG9ySW5hY3RpdmUge1xuICAgIGNvbG9yOiAjNzEzZjEyO1xuICAgIGJhY2tncm91bmQ6ICNmZWY5YzM7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2ZhY2MxNTtcbn1cblxuLyogUGF1c2UvUmVzdW1lIGJ1dHRvbiB2YXJpYW50IChyZXVzZXMgLmNoYXRCdXR0b24gYmFzZSBzdHlsZXMgZm9yIERSWSkgKi9cbi5wYXVzZUJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmYjM0NyAwJSwgI2ZmOGM0MiAxMDAlKSAhaW1wb3J0YW50OyAvKiBXYXJtIG9yYW5nZSBmb3IgXCJhY3RpdmUvcnVubmluZ1wiICovXG59XG5cbi5wYXVzZUJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmYzA2NyAwJSwgI2ZmOWU1ZiAxMDAlKSAhaW1wb3J0YW50O1xufVxuXG4ucGF1c2VCdXR0b24ucGF1c2luZyB7XG4gICAgb3BhY2l0eTogMC42ICFpbXBvcnRhbnQ7XG4gICAgY3Vyc29yOiB3YWl0ICFpbXBvcnRhbnQ7XG59XG5cbi5wYXVzZUJ1dHRvbi5wYXVzZWQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxMGI5ODEgMCUsICMwNTk2NjkgMTAwJSkgIWltcG9ydGFudDsgLyogR3JlZW4gd2hlbiBwYXVzZWQgKHJlYWR5IHRvIHJlc3VtZSkgKi9cbn1cblxuLnBhdXNlQnV0dG9uLnBhdXNlZDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzM0ZDM5OSAwJSwgIzA1OTY2OSAxMDAlKSAhaW1wb3J0YW50O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KSBzY2FsZSgxLjAyKTtcbiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjM1KTtcbn1cblxuLnBhdXNlQnV0dG9uIHN2ZyB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTtcbn1cblxuLnBhdXNlQnV0dG9uLnBhdXNlZCBzdmcge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbn1cblxuLnBhdXNlQnV0dG9uLnBhdXNpbmcgc3ZnIHtcbiAgICBvcGFjaXR5OiAwLjg7XG59XG5cbi8qIFZvaWNlIGNhbGwgaW5kaWNhdG9yIGJhciAqL1xuLnZvaWNlQ2FsbEluZGljYXRvckJhciB7XG4gICAgZ3JpZC1hcmVhOiDwn5+mO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpIDAlLCByZ2JhKDE2LCAxODUsIDEyOSwgMC4xKSAxMDAlKTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgzNCwgMTk3LCA5NCwgMC4zKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xufVxuXG4vKiBWb2ljZSBjYWxsIGluZGljYXRvciAqL1xuLnZvaWNlQ2FsbEluZGljYXRvciB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDhweDtcbiAgICBwYWRkaW5nOiA4cHggMTZweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpIDAlLCByZ2JhKDE2LCAxODUsIDEyOSwgMC4yKSAxMDAlKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM0LCAxOTcsIDk0LCAwLjQpO1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgY29sb3I6ICMxMGI5ODE7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZvaWNlQ2FsbEluZGljYXRvciBzdmcge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBhbmltYXRpb246IHZvaWNlQ2FsbEljb25QdWxzZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbn1cblxuLnZvaWNlQ2FsbEluZGljYXRvciBzcGFuIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4vKiBWb2ljZSBjYWxsIHB1bHNlIGFuaW1hdGlvbiAqL1xuLnZvaWNlQ2FsbFB1bHNlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDhweDtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgd2lkdGg6IDhweDtcbiAgICBoZWlnaHQ6IDhweDtcbiAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBhbmltYXRpb246IHZvaWNlQ2FsbFB1bHNlIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgdm9pY2VDYWxsSWNvblB1bHNlIHtcbiAgICAwJSxcbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHZvaWNlQ2FsbFB1bHNlIHtcbiAgICAwJSxcbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA1MCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMS4zKTtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgIH1cbn1cblxuLyogVm9pY2UgY2FsbCBpbmRpY2F0b3IgaW4gbWVzc2FnZXMgKi9cbi5jaGF0TWVzc2FnZSAudm9pY2VDYWxsSW5kaWNhdG9yIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG59XG5cbi5jaGF0TWVzc2FnZSAudm9pY2VDYWxsSW5kaWNhdG9yIHN2ZyB7XG4gICAgd2lkdGg6IDE0cHg7XG4gICAgaGVpZ2h0OiAxNHB4O1xufVxuXG4vKiBGZWVkYmFjayBzdGF0dXMgYmFubmVyICovXG4uZmVlZGJhY2tTdGF0dXMge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDIwcHg7XG4gICAgcmlnaHQ6IDIwcHg7XG4gICAgcGFkZGluZzogMTRweCAyMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgYm94LXNoYWRvdzogMCAxOHB4IDMycHggcmdiYSgxNSwgMjMsIDQyLCAwLjM1KTtcbiAgICB6LWluZGV4OiAxMDAwMDsgLyogW0ZpeCB6LWluZGV4XTogRW5zdXJlIGl0J3MgYWJvdmUgdGhlIGhlYWRlciAoei01MCkgYW5kIG90aGVyIFVJIGVsZW1lbnRzICovXG4gICAgYW5pbWF0aW9uOiBmZWVkYmFja1N0YXR1c1NsaWRlSW4gMC4yOHMgZWFzZS1vdXQ7XG4gICAgbWF4LXdpZHRoOiAzNDBweDtcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5mZWVkYmFja1N0YXR1c1N1Y2Nlc3Mge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxMGI5ODEgMCUsICMwNTk2NjkgMTAwJSk7XG4gICAgY29sb3I6ICNmOGZhZmM7XG59XG5cbi5mZWVkYmFja1N0YXR1c0Vycm9yIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZWY0NDQ0IDAlLCAjZGMyNjI2IDEwMCUpO1xuICAgIGNvbG9yOiAjZmVmMmYyO1xufVxuXG5Aa2V5ZnJhbWVzIGZlZWRiYWNrU3RhdHVzU2xpZGVJbiB7XG4gICAgZnJvbSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG59XG5cbi8qIE1vYmlsZSByZXNwb25zaXZlbmVzcyAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLkNoYXQge1xuICAgICAgICAtLWNoYXQtbWVzc2FnZS1taW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAtLWNoYXQtbWVzc2FnZS1tYXgtd2lkdGg6IG1pbig4NSUsIDU2MHB4KTtcbiAgICAgICAgLS1jaGF0LW1lc3NhZ2UtYXZhdGFyLWdhcDogMTBweDtcbiAgICB9XG5cbiAgICAuYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbjogMTJweCAxNnB4IDA7XG4gICAgICAgIGdhcDogNnB4O1xuICAgIH1cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlcyB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMTJweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLm1lc3NhZ2VUZXh0IHtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLmF2YXRhciB7XG4gICAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgICBoZWlnaHQ6IDM2cHg7XG4gICAgICAgIG1hcmdpbjogMCAwIDRweDtcbiAgICB9XG5cbiAgICAvKiBb44qX77iPXVxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5hdmF0YXIgaW1nIHtcbiAgICAgICAgd2lkdGg6IDM2cHg7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7XG4gICAgfVxuICAgICovXG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDEycHg7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWEge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIHBhZGRpbmc6IDE0cHggMThweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICAgIGhlaWdodDogNDRweDtcbiAgICB9XG5cbiAgICAuc2Nyb2xsVG9Cb3R0b20ge1xuICAgICAgICB3aWR0aDogNDRweDtcbiAgICAgICAgaGVpZ2h0OiA0NHB4O1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHRvcDogY2FsYygxMDAlIC0gMTYwcHgpO1xuICAgIH1cblxuICAgIC5jaGF0QnV0dG9uIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBtaW4td2lkdGg6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLWhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGdhcDogMCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuY2hhdEJ1dHRvbiBzdmcge1xuICAgICAgICB3aWR0aDogMThweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDE4cHggIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuY2hhdEJ1dHRvblRleHQge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnVzZVRlbXBsYXRlQnV0dG9uIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7XG4gICAgICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBtaW4td2lkdGg6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLWhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGdhcDogMCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAudXNlVGVtcGxhdGVCdXR0b24gc3ZnIHtcbiAgICAgICAgd2lkdGg6IDE4cHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnVzZVRlbXBsYXRlQnV0dG9uIC5jaGF0QnV0dG9uVGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAucmF0aW5nTW9kYWxDb250ZW50IHtcbiAgICAgICAgbWFyZ2luOiAxNnB4O1xuICAgICAgICBwYWRkaW5nOiAyNHB4IDIwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgIG1heC1oZWlnaHQ6IDgwdmg7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgfVxuXG4gICAgLnN0YXJzIHtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuXG4gICAgLnN0YXJzIHNwYW4ge1xuICAgICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICAgIHBhZGRpbmc6IDhweDtcbiAgICB9XG5cbiAgICAucmF0aW5nQWN0aW9ucyB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJhdGluZ0FjdGlvbnMgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDE0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICB9XG5cbiAgICAuc2VsZkxlYXJuaW5nTW9kYWxIZWFkZXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICB9XG5cbiAgICAuc2VsZkxlYXJuaW5nQXZhdGFyR3JvdXAge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgfVxuXG4gICAgLnNlbGZMZWFybmluZ01ldGFSb3cge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkge1xuICAgIC5DaGF0IHtcbiAgICAgICAgLS1jaGF0LW1lc3NhZ2UtbWluLXdpZHRoOiA4MHB4O1xuICAgICAgICAtLWNoYXQtbWVzc2FnZS1tYXgtd2lkdGg6IG1pbig5MCUsIDUyMHB4KTtcbiAgICAgICAgLS1jaGF0LW1lc3NhZ2UtYXZhdGFyLWdhcDogOHB4O1xuICAgIH1cblxuICAgIC5hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luOiA4cHggMTJweCAwO1xuICAgICAgICBnYXA6IDRweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZXMge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVRleHQge1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAuYXZhdGFyIHtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgbWFyZ2luOiAwIDAgNHB4O1xuICAgIH1cblxuICAgIC8qIFvjipfvuI9dXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLmF2YXRhciBpbWcge1xuICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbiAgICB9XG4gICAgKi9cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggOHB4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWEge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIGhlaWdodDogNDBweDtcbiAgICB9XG5cbiAgICAuY2hhdEJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBnYXA6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b24gc3ZnIHtcbiAgICAgICAgd2lkdGg6IDE4cHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b25UZXh0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBnYXA6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnVzZVRlbXBsYXRlQnV0dG9uIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiAuY2hhdEJ1dHRvblRleHQge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnNjcm9sbFRvQm90dG9tIHtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB0b3A6IGNhbGMoMTAwJSAtIDE0MHB4KTtcbiAgICB9XG5cbiAgICAucmF0aW5nTW9kYWwge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgfVxuXG4gICAgLnJhdGluZ01vZGFsQ29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHggMjBweCAwIDA7XG4gICAgICAgIG1heC1oZWlnaHQ6IDcwdmg7XG4gICAgICAgIHBhZGRpbmc6IDI0cHggMTZweCAyMHB4O1xuICAgIH1cbn1cblxuLyogUmVkdWNlZCBtb3Rpb24gc3VwcG9ydCAqL1xuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSxcbiAgICAuc2Nyb2xsVG9Cb3R0b20sXG4gICAgLnJhdGluZ01vZGFsLFxuICAgIC5yYXRpbmdNb2RhbENvbnRlbnQsXG4gICAgLmZlZWRiYWNrU3RhdHVzIHtcbiAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgIH1cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5tZXNzYWdlVGV4dCxcbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWEsXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbixcbiAgICAvKiBb44qX77iPXSAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAuYXZhdGFyIGltZywgKi9cbiAgICAuY2hhdEJ1dHRvbiB7XG4gICAgICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgfVxufVxuXG4vKiBIaWdoIGNvbnRyYXN0IG1vZGUgc3VwcG9ydCAqL1xuQG1lZGlhIChwcmVmZXJzLWNvbnRyYXN0OiBoaWdoKSB7XG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLm1lc3NhZ2VUZXh0IHtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgY3VycmVudENvbG9yO1xuICAgIH1cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCB0ZXh0YXJlYSB7XG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgIH1cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b24ge1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgfVxufVxuXG4vKiBFbWFpbCBtb2RhbCBzdHlsZXMgKi9cbi5lbWFpbENvbnRhaW5lciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxNnB4O1xufVxuXG4uZW1haWxNb2RhbEhlYWRlciB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbn1cblxuLmVtYWlsSGVhZGVyVGV4dCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMnB4O1xufVxuXG4uZW1haWxIZWFkZXJMYWJlbCB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzY0NzQ4Yjtcbn1cblxuLmVtYWlsTWV0YWRhdGEge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDE4cHggMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpO1xufVxuXG4uZW1haWxGaWVsZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDhweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5lbWFpbEZpZWxkOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5lbWFpbEZpZWxkIHN0cm9uZyB7XG4gICAgbWluLXdpZHRoOiA2MHB4O1xuICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5lbWFpbFJlY2lwaWVudHMge1xuICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG5cbi5lbWFpbEJvZHkge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5lbWFpbEJvZHkgc3Ryb25nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4uZW1haWxCb2R5Q29udGVudCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgcGFkZGluZzogMjJweDtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIG1heC1oZWlnaHQ6IDQwMHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wOCk7XG59XG5cbi5lbWFpbEJvZHlDb250ZW50IHAge1xuICAgIG1hcmdpbjogMCAwIDEycHggMDtcbn1cblxuLmVtYWlsQm9keUNvbnRlbnQgcDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uZW1haWxTdGF0dXMge1xuICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qKlxuICogVE9ETzogW/CfjIldIERSWSBNYXJrZG93biBwcmltaXRpdmVzIHN0eWxpbmdcbiAqL1xuIl19 */";
14845
- var styles$4 = {"copiedToClipboardMessage":"Chat-module_copiedToClipboardMessage__apCPY","Chat":"Chat-module_Chat__j2eE5","chatMainFlow":"Chat-module_chatMainFlow__--8FE","chatBar":"Chat-module_chatBar__fLECN","TasksInProgress":"Chat-module_TasksInProgress__fQfei","actions":"Chat-module_actions__gTZ5T","portal":"Chat-module_portal__uTOT8","left":"Chat-module_left__7l5Mn","right":"Chat-module_right__ABZrW","actionsFaded":"Chat-module_actionsFaded__qqAVQ","actionsScrolling":"Chat-module_actionsScrolling__fIawW","chatButton":"Chat-module_chatButton__d9VgA","chatButtonText":"Chat-module_chatButtonText__RkGB-","useTemplateButton":"Chat-module_useTemplateButton__xcJNR","chatChildren":"Chat-module_chatChildren__flOPK","chatMessages":"Chat-module_chatMessages__J2u2N","hasActionsAndFirstMessageIsLong":"Chat-module_hasActionsAndFirstMessageIsLong__5jgoZ","chatMessage":"Chat-module_chatMessage__nmLaZ","messageSlideIn":"Chat-module_messageSlideIn__soTy2","messageStack":"Chat-module_messageStack__n0xNL","isMe":"Chat-module_isMe__nBtaV","messageMeta":"Chat-module_messageMeta__eqCRu","messageTimestamp":"Chat-module_messageTimestamp__LDhRw","messageDuration":"Chat-module_messageDuration__Y9Kg9","participantLabel":"Chat-module_participantLabel__0Oo-3","isNotCompleteMessage":"Chat-module_isNotCompleteMessage__Hj2K7","NonCompleteMessageFiller":"Chat-module_NonCompleteMessageFiller__G5-Ve","messageText":"Chat-module_messageText__XgNyQ","loadingPulse":"Chat-module_loadingPulse__VomRm","ongoingToolCalls":"Chat-module_ongoingToolCalls__NZkQN","completedToolCalls":"Chat-module_completedToolCalls__vI1Qt","sourceCitations":"Chat-module_sourceCitations__oDtBX","ongoingToolCall":"Chat-module_ongoingToolCall__WT3Rc","completedToolCall":"Chat-module_completedToolCall__-q4Cs","toolCallOrigin":"Chat-module_toolCallOrigin__-Io6Y","toolCallDetails":"Chat-module_toolCallDetails__WUFlD","toolCallData":"Chat-module_toolCallData__UauCO","ongoingToolCallSpinner":"Chat-module_ongoingToolCallSpinner__7g-Ay","toolCallSpinner":"Chat-module_toolCallSpinner__LSiK6","ongoingToolCallName":"Chat-module_ongoingToolCallName__y59-0","typingIndicator":"Chat-module_typingIndicator__S-CT-","avatar":"Chat-module_avatar__gL6bm","typingBubble":"Chat-module_typingBubble__0Lb7B","typingDots":"Chat-module_typingDots__srOBB","typingDot":"Chat-module_typingDot__dnhKT","typingBounce":"Chat-module_typingBounce__1yp2v","ratingStar":"Chat-module_ratingStar__rRfqC","active":"Chat-module_active__lbYL-","copyButtonContainer":"Chat-module_copyButtonContainer__Rij0U","copyButton":"Chat-module_copyButton__DcxT5","copiedTooltip":"Chat-module_copiedTooltip__LH81j","copiedTooltipFadeIn":"Chat-module_copiedTooltipFadeIn__QekO1","copiedTooltipLeft":"Chat-module_copiedTooltipLeft__j-S-5","copiedTooltipRight":"Chat-module_copiedTooltipRight__R-2cE","chat-code-block":"Chat-module_chat-code-block__k8IyS","attachments":"Chat-module_attachments__m1Fts","attachment":"Chat-module_attachment__aE9hK","attachmentIcon":"Chat-module_attachmentIcon__BX3Cy","attachmentName":"Chat-module_attachmentName__aMx56","messageButtons":"Chat-module_messageButtons__WaOob","messageButton":"Chat-module_messageButton__mRnn-","rating":"Chat-module_rating__soc3M","chatInput":"Chat-module_chatInput__1Ecan","fullPageVisual":"Chat-module_fullPageVisual__zNAEy","dragOver":"Chat-module_dragOver__bkS-g","filePreviewContainer":"Chat-module_filePreviewContainer__R70hm","filePreview":"Chat-module_filePreview__kq2aX","fileIcon":"Chat-module_fileIcon__zoSKW","fileInfo":"Chat-module_fileInfo__wBLi0","fileName":"Chat-module_fileName__bBujo","fileSize":"Chat-module_fileSize__ivliq","removeFileButton":"Chat-module_removeFileButton__0gakR","inputContainer":"Chat-module_inputContainer__bPt99","attachmentButton":"Chat-module_attachmentButton__qLO47","voiceButton":"Chat-module_voiceButton__d2zlP","voiceButtonActive":"Chat-module_voiceButtonActive__Uoi3W","voiceRecordingPulse":"Chat-module_voiceRecordingPulse__y2wJ5","uploadProgress":"Chat-module_uploadProgress__jBTKe","uploadProgressBar":"Chat-module_uploadProgressBar__Gutnt","uploadProgressFill":"Chat-module_uploadProgressFill__EgubT","dragOverlay":"Chat-module_dragOverlay__SEGoS","dragOverlayContent":"Chat-module_dragOverlayContent__gb9kF","scrollToBottomContainer":"Chat-module_scrollToBottomContainer__5rXpK","scrollToBottomWrapper":"Chat-module_scrollToBottomWrapper__PCIu1","scrollButtonSlideIn":"Chat-module_scrollButtonSlideIn__XnImg","scrollToBottom":"Chat-module_scrollToBottom__nzxdZ","scrollToBottomBadge":"Chat-module_scrollToBottomBadge__N6T6-","ratingModal":"Chat-module_ratingModal__XVKYm","modalFadeIn":"Chat-module_modalFadeIn__RPc3w","ratingModalContent":"Chat-module_ratingModalContent__CCdq7","modalSlideIn":"Chat-module_modalSlideIn__XXtgN","stars":"Chat-module_stars__PCzNO","ratingModalStar":"Chat-module_ratingModalStar__XkbHr","toolCallModal":"Chat-module_toolCallModal__uNaIK","searchModalHeader":"Chat-module_searchModalHeader__Y8V-w","selfLearningModalHeader":"Chat-module_selfLearningModalHeader__PDIt1","selfLearningAvatarGroup":"Chat-module_selfLearningAvatarGroup__jgy2k","selfLearningAvatar":"Chat-module_selfLearningAvatar__NHXKm","selfLearningAvatarInitial":"Chat-module_selfLearningAvatarInitial__cuw19","selfLearningTeacher":"Chat-module_selfLearningTeacher__fGhX8","selfLearningHeaderText":"Chat-module_selfLearningHeaderText__LTwHL","selfLearningTitle":"Chat-module_selfLearningTitle__G0SAk","selfLearningMetaRow":"Chat-module_selfLearningMetaRow__z4Tg0","selfLearningMeta":"Chat-module_selfLearningMeta__58Pet","selfLearningMetaChip":"Chat-module_selfLearningMetaChip__0go88","selfLearningCommitments":"Chat-module_selfLearningCommitments__7ECnr","selfLearningCommitmentsLabel":"Chat-module_selfLearningCommitmentsLabel__OkDO1","selfLearningBookEditor":"Chat-module_selfLearningBookEditor__CZy5T","selfLearningEmpty":"Chat-module_selfLearningEmpty__vCKHL","modalCloseButton":"Chat-module_modalCloseButton__AAfWS","teamModalHeader":"Chat-module_teamModalHeader__SB5NL","teamHeaderParticipants":"Chat-module_teamHeaderParticipants__KS7aV","teamHeaderProfile":"Chat-module_teamHeaderProfile__xRlcS","teamHeaderProfileLink":"Chat-module_teamHeaderProfileLink__fYTfT","teamHeaderAvatar":"Chat-module_teamHeaderAvatar__vXcTp","teamHeaderName":"Chat-module_teamHeaderName__ygJR9","teamHeaderDivider":"Chat-module_teamHeaderDivider__cnRMd","searchModalIcon":"Chat-module_searchModalIcon__AR5KY","searchModalQuery":"Chat-module_searchModalQuery__5x-Ra","searchModalContent":"Chat-module_searchModalContent__mWLIE","teamChatContainer":"Chat-module_teamChatContainer__xdLtU","teamToolCallSection":"Chat-module_teamToolCallSection__FH9l7","teamToolCallGroup":"Chat-module_teamToolCallGroup__PO6rl","teamToolCallHeading":"Chat-module_teamToolCallHeading__G-JSj","teamToolCallChips":"Chat-module_teamToolCallChips__hRWqh","teamToolCallDetails":"Chat-module_teamToolCallDetails__ZaTtt","teamToolCallDetailsHeader":"Chat-module_teamToolCallDetailsHeader__FPIgI","teamToolCallDetailsTitle":"Chat-module_teamToolCallDetailsTitle__50SeL","teamToolCallDetailsClear":"Chat-module_teamToolCallDetailsClear__8yvu7","searchResultsList":"Chat-module_searchResultsList__xVDUZ","searchResultsRaw":"Chat-module_searchResultsRaw__i3GkD","searchResultItem":"Chat-module_searchResultItem__bTzq5","searchResultUrl":"Chat-module_searchResultUrl__SbrH4","searchResultTitle":"Chat-module_searchResultTitle__XS7zN","searchResultSnippet":"Chat-module_searchResultSnippet__Wsun2","noResults":"Chat-module_noResults__AAv6s","citationDetails":"Chat-module_citationDetails__2v2e1","citationPreview":"Chat-module_citationPreview__rGhCR","citationIframe":"Chat-module_citationIframe__ngzFY","citationMetadata":"Chat-module_citationMetadata__DPaCF","citationExcerpt":"Chat-module_citationExcerpt__VU4BS","citationHint":"Chat-module_citationHint__5AkLx","toolCallDataContainer":"Chat-module_toolCallDataContainer__rdEzC","toolCallArgsList":"Chat-module_toolCallArgsList__LD3xH","ratingInput":"Chat-module_ratingInput__z8Pv-","ratingActions":"Chat-module_ratingActions__nXcss","downloadButton":"Chat-module_downloadButton__8--bk","saveButtonContainer":"Chat-module_saveButtonContainer__lSNUJ","saveMenu":"Chat-module_saveMenu__-ph8y","saveMenuItem":"Chat-module_saveMenuItem__ISApL","saveMenuDivider":"Chat-module_saveMenuDivider__3ktTM","chatFeedbackPanel":"Chat-module_chatFeedbackPanel__gfOzk","chatFeedbackToggle":"Chat-module_chatFeedbackToggle__IeOM6","chatFeedbackIcon":"Chat-module_chatFeedbackIcon__XcB7A","chatFeedbackMeta":"Chat-module_chatFeedbackMeta__6t2be","chatFeedbackLabel":"Chat-module_chatFeedbackLabel__qQgH3","chatFeedbackDescription":"Chat-module_chatFeedbackDescription__I9bNg","chatFeedbackIndicator":"Chat-module_chatFeedbackIndicator__uHCr7","chatFeedbackIndicatorActive":"Chat-module_chatFeedbackIndicatorActive__bkw-w","chatFeedbackIndicatorInactive":"Chat-module_chatFeedbackIndicatorInactive__qMBkh","pauseButton":"Chat-module_pauseButton__eeu7K","pausing":"Chat-module_pausing__pTx8b","paused":"Chat-module_paused__j-pya","voiceCallIndicatorBar":"Chat-module_voiceCallIndicatorBar__N2sWN","voiceCallIndicator":"Chat-module_voiceCallIndicator__tsaaG","voiceCallIconPulse":"Chat-module_voiceCallIconPulse__zZbJn","voiceCallPulse":"Chat-module_voiceCallPulse__XcGU4","feedbackStatus":"Chat-module_feedbackStatus__-df7l","feedbackStatusSlideIn":"Chat-module_feedbackStatusSlideIn__n6bbB","feedbackStatusSuccess":"Chat-module_feedbackStatusSuccess__Ax2q0","feedbackStatusError":"Chat-module_feedbackStatusError__dnv6d","emailContainer":"Chat-module_emailContainer__TBxXZ","emailModalHeader":"Chat-module_emailModalHeader__Z4-CJ","emailHeaderText":"Chat-module_emailHeaderText__1dR6R","emailHeaderLabel":"Chat-module_emailHeaderLabel__7iAEH","emailMetadata":"Chat-module_emailMetadata__8XXGf","emailField":"Chat-module_emailField__pcb03","emailRecipients":"Chat-module_emailRecipients__YVVys","emailBody":"Chat-module_emailBody__OBt-w","emailBodyContent":"Chat-module_emailBodyContent__-vFo2","emailStatus":"Chat-module_emailStatus__T4UuL"};
16152
+ var css_248z$4 = "@font-face{font-family:OpenMojiBlack;src:url(https://s6.ptbk.io/fonts/OpenMoji-black-glyf.woff2) format(\"woff2\");unicode-range:u+23,u+2a,u+2d,u+30-39,u+a9,u+ae,u+200d,u+203c,u+2049,u+20e3,u+2117,u+2120,u+2122,u+2139,u+2194-2199,u+21a9,u+21aa,u+229c,u+231a,u+231b,u+2328,u+23cf,u+23e9-23f3,u+23f8-23fe,u+24c2,u+25a1,u+25aa-25ae,u+25b6,u+25c0,u+25c9,u+25d0,u+25d1,u+25e7-25ea,u+25ed,u+25ee,u+25fb-25fe,u+2600-2605,u+260e,u+2611,u+2614,u+2615,u+2618,u+261d,u+2620,u+2622,u+2623,u+2626,u+262a,u+262e,u+262f,u+2638-263a,u+2640,u+2642,u+2648-2653,u+265f,u+2660,u+2663,u+2665,u+2666,u+2668,u+267b,u+267e,u+267f,u+2691-2697,u+2699,u+269b,u+269c,u+26a0,u+26a1,u+26a7,u+26aa,u+26ab,u+26b0,u+26b1,u+26bd,u+26be,u+26c4,u+26c5,u+26c8,u+26ce,u+26cf,u+26d1,u+26d3,u+26d4,u+26e9,u+26ea,u+26f0-26f5,u+26f7-26fa,u+26fd,u+2702,u+2705,u+2708-270d,u+270f,u+2712,u+2714,u+2716,u+271d,u+2721,u+2728,u+2733,u+2734,u+2744,u+2747,u+274c,u+274e,u+2753-2755,u+2757,u+2763,u+2764,u+2795-2797,u+27a1,u+27b0,u+27bf,u+2934,u+2935,u+2b05-2b07,u+2b0c,u+2b0d,u+2b1b,u+2b1c,u+2b1f-2b24,u+2b2e,u+2b2f,u+2b50,u+2b55,u+2b58,u+2b8f,u+2bba-2bbc,u+2bc3,u+2bc4,u+2bea,u+2beb,u+3030,u+303d,u+3297,u+3299,u+e000-e009,u+e010,u+e011,u+e040-e06d,u+e080-e0b4,u+e0c0-e0cc,u+e0ff-e10d,u+e140-e14a,u+e150-e157,u+e181-e189,u+e1c0-e1c4,u+e1c6-e1d9,u+e200-e216,u+e240-e269,u+e280-e283,u+e2c0-e2c4,u+e2c6-e2da,u+e300-e303,u+e305-e30f,u+e312-e316,u+e318-e322,u+e324-e329,u+e32b,u+e340-e348,u+e380,u+e381,u+f000,u+f77a,u+f8ff,u+fe0f,u+1f004,u+1f0cf,u+1f10d-1f10f,u+1f12f,u+1f16d-1f171,u+1f17e,u+1f17f,u+1f18e,u+1f191-1f19a,u+1f1e6-1f1ff,u+1f201,u+1f202,u+1f21a,u+1f22f,u+1f232-1f23a,u+1f250,u+1f251,u+1f260-1f265,u+1f300-1f321,u+1f324-1f393,u+1f396,u+1f397,u+1f399-1f39b,u+1f39e-1f3f0,u+1f3f3-1f3f5,u+1f3f7-1f4fd,u+1f4ff-1f53d,u+1f549-1f54e,u+1f550-1f567,u+1f56f,u+1f570,u+1f573-1f57a,u+1f587,u+1f58a-1f58d,u+1f590,u+1f595,u+1f596,u+1f5a4,u+1f5a5,u+1f5a8,u+1f5b1,u+1f5b2,u+1f5bc,u+1f5c2-1f5c4,u+1f5d1-1f5d3,u+1f5dc-1f5de,u+1f5e1,u+1f5e3,u+1f5e8,u+1f5ef,u+1f5f3,u+1f5fa-1f64f,u+1f680-1f6c5,u+1f6cb-1f6d2,u+1f6d5-1f6d7,u+1f6dc-1f6e5,u+1f6e9,u+1f6eb,u+1f6ec,u+1f6f0,u+1f6f3-1f6fc,u+1f7e0-1f7eb,u+1f7f0,u+1f90c-1f93a,u+1f93c-1f945,u+1f947-1f9ff,u+1fa70-1fa7c,u+1fa80-1fa88,u+1fa90-1fabd,u+1fabf-1fac5,u+1face-1fadb,u+1fae0-1fae8,u+1faf0-1faf8,u+1fbc5-1fbc9,u+e0061-e0067,u+e0069,u+e006c-e0079,u+e007f}@font-face{font-display:swap;font-family:OpenMojiColor;src:url(https://s6.ptbk.io/fonts/OpenMoji-color-cbdt.woff2) format(\"woff2\");unicode-range:u+23,u+2a,u+2d,u+30-39,u+a9,u+ae,u+200d,u+203c,u+2049,u+20e3,u+2117,u+2120,u+2122,u+2139,u+2194-2199,u+21a9,u+21aa,u+229c,u+231a,u+231b,u+2328,u+23cf,u+23e9-23f3,u+23f8-23fe,u+24c2,u+25a1,u+25aa-25ae,u+25b6,u+25c0,u+25c9,u+25d0,u+25d1,u+25e7-25ea,u+25ed,u+25ee,u+25fb-25fe,u+2600-2605,u+260e,u+2611,u+2614,u+2615,u+2618,u+261d,u+2620,u+2622,u+2623,u+2626,u+262a,u+262e,u+262f,u+2638-263a,u+2640,u+2642,u+2648-2653,u+265f,u+2660,u+2663,u+2665,u+2666,u+2668,u+267b,u+267e,u+267f,u+2691-2697,u+2699,u+269b,u+269c,u+26a0,u+26a1,u+26a7,u+26aa,u+26ab,u+26b0,u+26b1,u+26bd,u+26be,u+26c4,u+26c5,u+26c8,u+26ce,u+26cf,u+26d1,u+26d3,u+26d4,u+26e9,u+26ea,u+26f0-26f5,u+26f7-26fa,u+26fd,u+2702,u+2705,u+2708-270d,u+270f,u+2712,u+2714,u+2716,u+271d,u+2721,u+2728,u+2733,u+2734,u+2744,u+2747,u+274c,u+274e,u+2753-2755,u+2757,u+2763,u+2764,u+2795-2797,u+27a1,u+27b0,u+27bf,u+2934,u+2935,u+2b05-2b07,u+2b0c,u+2b0d,u+2b1b,u+2b1c,u+2b1f-2b24,u+2b2e,u+2b2f,u+2b50,u+2b55,u+2b58,u+2b8f,u+2bba-2bbc,u+2bc3,u+2bc4,u+2bea,u+2beb,u+3030,u+303d,u+3297,u+3299,u+e000-e009,u+e010,u+e011,u+e040-e06d,u+e080-e0b4,u+e0c0-e0cc,u+e0ff-e10d,u+e140-e14a,u+e150-e157,u+e181-e189,u+e1c0-e1c4,u+e1c6-e1d9,u+e200-e216,u+e240-e269,u+e280-e283,u+e2c0-e2c4,u+e2c6-e2da,u+e300-e303,u+e305-e30f,u+e312-e316,u+e318-e322,u+e324-e329,u+e32b,u+e340-e348,u+e380,u+e381,u+f000,u+f77a,u+f8ff,u+fe0f,u+1f004,u+1f0cf,u+1f10d-1f10f,u+1f12f,u+1f16d-1f171,u+1f17e,u+1f17f,u+1f18e,u+1f191-1f19a,u+1f1e6-1f1ff,u+1f201,u+1f202,u+1f21a,u+1f22f,u+1f232-1f23a,u+1f250,u+1f251,u+1f260-1f265,u+1f300-1f321,u+1f324-1f393,u+1f396,u+1f397,u+1f399-1f39b,u+1f39e-1f3f0,u+1f3f3-1f3f5,u+1f3f7-1f4fd,u+1f4ff-1f53d,u+1f549-1f54e,u+1f550-1f567,u+1f56f,u+1f570,u+1f573-1f57a,u+1f587,u+1f58a-1f58d,u+1f590,u+1f595,u+1f596,u+1f5a4,u+1f5a5,u+1f5a8,u+1f5b1,u+1f5b2,u+1f5bc,u+1f5c2-1f5c4,u+1f5d1-1f5d3,u+1f5dc-1f5de,u+1f5e1,u+1f5e3,u+1f5e8,u+1f5ef,u+1f5f3,u+1f5fa-1f64f,u+1f680-1f6c5,u+1f6cb-1f6d2,u+1f6d5-1f6d7,u+1f6dc-1f6e5,u+1f6e9,u+1f6eb,u+1f6ec,u+1f6f0,u+1f6f3-1f6fc,u+1f7e0-1f7eb,u+1f7f0,u+1f90c-1f93a,u+1f93c-1f945,u+1f947-1f9ff,u+1fa70-1fa7c,u+1fa80-1fa88,u+1fa90-1fabd,u+1fabf-1fac5,u+1face-1fadb,u+1fae0-1fae8,u+1faf0-1faf8,u+1fbc5-1fbc9,u+e0061-e0067,u+e0069,u+e006c-e0079,u+e007f}.Chat-module_copiedToClipboardMessage__apCPY{background:#222;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.18);color:#fff;font-size:1.1em;left:50%;opacity:.97;padding:10px 24px;pointer-events:none;position:fixed;top:32px;transform:translateX(-50%);z-index:9999}.Chat-module_Chat__j2eE5{--chat-message-min-width:150px;--chat-message-max-width:min(70%,600px);--chat-message-avatar-gap:12px;display:flex;flex-direction:column;font-family:Arial,Helvetica,sans-serif,OpenMojiColor,OpenMojiBlack;height:100%;width:100%}.Chat-module_chatMainFlow__--8FE{display:grid;grid-template:\"🟦\" min-content \"💬\" 1fr \"📝\" min-content/1fr;height:100%;max-width:100vw;width:100%}.Chat-module_chatMainFlow__--8FE .Chat-module_chatBar__fLECN{background-color:#fff;border-bottom:1px solid rgba(15,23,36,.06);color:#0f1724;font-weight:500;grid-area:🟦;padding:16px 20px;text-align:center;width:100%}.Chat-module_TasksInProgress__fQfei{align-self:center;grid-area:🟦;height:min-content;justify-self:self-end;margin:8px 16px;width:auto}.Chat-module_actions__gTZ5T{align-items:center;align-self:self-start;display:flex;gap:8px;grid-area:💬;height:min-content;justify-self:self-end;margin:16px 20px 0;transition:opacity .2s ease;width:auto;will-change:opacity;z-index:40}.Chat-module_actions__gTZ5T.Chat-module_portal__uTOT8{margin:0}.Chat-module_actions__gTZ5T.Chat-module_left__7l5Mn{justify-self:self-start}.Chat-module_actions__gTZ5T.Chat-module_right__ABZrW{justify-self:self-end}.Chat-module_actionsFaded__qqAVQ{opacity:.3}.Chat-module_actionsScrolling__fIawW{opacity:.15;pointer-events:none}@media (max-width:900px){.Chat-module_chatButton__d9VgA{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_chatButton__d9VgA svg{height:18px!important;width:18px!important}.Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_useTemplateButton__xcJNR{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_useTemplateButton__xcJNR svg{height:18px!important;width:18px!important}.Chat-module_useTemplateButton__xcJNR .Chat-module_chatButtonText__RkGB-{display:none!important}}@media (max-width:600px){.Chat-module_actions__gTZ5T{gap:7px;margin:14px 18px 0}}.Chat-module_chatMainFlow__--8FE .Chat-module_chatChildren__flOPK{grid-area:💬;height:100%;width:100%;z-index:300}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N{grid-area:💬;height:100%;overflow-x:hidden;overflow-y:auto;padding:24px 20px 16px;scroll-behavior:smooth;width:100%;z-index:10}.Chat-module_hasActionsAndFirstMessageIsLong__5jgoZ{padding-top:80px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar{width:6px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar-track{background:transparent}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar-thumb{background:hsla(0,0%,49%,.2);border-radius:3px;transition:all .2s ease}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,49%,.3)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ{align-items:flex-end;animation:Chat-module_messageSlideIn__soTy2 .4s cubic-bezier(.25,.46,.45,.94);column-gap:var(--chat-message-avatar-gap);display:flex;flex-direction:row;margin-bottom:20px;max-width:100%;position:relative}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageStack__n0xNL{align-items:flex-start;display:flex;flex-direction:column;max-width:var(--chat-message-max-width)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_messageStack__n0xNL{align-items:flex-end}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageStack__n0xNL>*{max-width:100%}.Chat-module_messageMeta__eqCRu{align-items:center;color:#6b7280;display:flex;font-size:11px;gap:6px;line-height:1.4;margin:4px 6px 0}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_messageMeta__eqCRu{align-self:flex-end;text-align:right}.Chat-module_messageTimestamp__LDhRw{letter-spacing:.02em}.Chat-module_messageDuration__Y9Kg9{opacity:.85}.Chat-module_participantLabel__0Oo-3{color:#64748b;font-size:12px;font-weight:600;margin:0 0 6px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_participantLabel__0Oo-3{text-align:right}@keyframes Chat-module_messageSlideIn__soTy2{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.Chat-module_isNotCompleteMessage__Hj2K7{opacity:.7;position:relative}.Chat-module_NonCompleteMessageFiller__G5-Ve{color:transparent}.Chat-module_isNotCompleteMessage__Hj2K7 .Chat-module_messageText__XgNyQ:after{animation:Chat-module_loadingPulse__VomRm 1.5s ease-in-out infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.6),transparent);border-radius:2px;bottom:8px;content:\"\";height:4px;position:absolute;right:12px;width:20px}.Chat-module_completedToolCalls__vI1Qt,.Chat-module_ongoingToolCalls__NZkQN,.Chat-module_sourceCitations__oDtBX{border-top:1px solid hsla(0,0%,100%,.2);display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;margin-top:8px;padding-top:8px}.Chat-module_completedToolCall__-q4Cs,.Chat-module_ongoingToolCall__WT3Rc{align-items:center;background:hsla(0,0%,100%,.15);border:1px solid hsla(0,0%,100%,.2);border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,.1);color:inherit;display:flex;font-family:OpenMojiColor,OpenMojiBlack,Arial,Helvetica,sans-serif;font-size:.8em;gap:8px;padding:4px 10px}.Chat-module_completedToolCall__-q4Cs{cursor:pointer;transition:all .2s ease}.Chat-module_completedToolCall__-q4Cs:hover{background:hsla(0,0%,100%,.3);box-shadow:0 2px 6px rgba(0,0,0,.15);transform:translateY(-1px)}.Chat-module_toolCallOrigin__-Io6Y{font-size:.85em;font-weight:500;opacity:.75;white-space:nowrap}.Chat-module_toolCallDetails__WUFlD{margin-bottom:24px}.Chat-module_toolCallDetails__WUFlD p{margin-bottom:8px}.Chat-module_toolCallData__UauCO{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;max-height:300px;overflow-x:auto;padding:12px;word-break:break-all}.Chat-module_ongoingToolCallSpinner__7g-Ay{animation:Chat-module_toolCallSpinner__LSiK6 .8s linear infinite;border:2px solid hsla(0,0%,100%,.3);border-radius:50%;border-top-color:#fff;height:14px;width:14px}.Chat-module_ongoingToolCallName__y59-0{font-weight:500}@keyframes Chat-module_toolCallSpinner__LSiK6{to{transform:rotate(1turn)}}@keyframes Chat-module_loadingPulse__VomRm{0%,to{opacity:.3;transform:scaleX(.8)}50%{opacity:1;transform:scaleX(1.2)}}.Chat-module_typingIndicator__S-CT-{align-items:flex-end;animation:Chat-module_messageSlideIn__soTy2 .4s cubic-bezier(.25,.46,.45,.94);display:flex;margin-bottom:20px}.Chat-module_typingIndicator__S-CT- .Chat-module_avatar__gL6bm{flex-shrink:0;height:40px;margin:0 12px 4px;width:40px}.Chat-module_typingBubble__0Lb7B{backdrop-filter:blur(10px);border:1px solid hsla(0,0%,49%,.1);border-radius:20px;border-bottom-left-radius:6px;box-shadow:0 2px 8px rgba(0,0,0,.1);min-height:24px;padding:16px 20px}.Chat-module_typingBubble__0Lb7B,.Chat-module_typingDots__srOBB{align-items:center;display:flex;gap:4px}.Chat-module_typingDot__dnhKT{animation:Chat-module_typingBounce__1yp2v 1.4s ease-in-out infinite;background:linear-gradient(135deg,#6b7280,hsla(0,0%,49%,.6));border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.1);height:8px;width:8px}.Chat-module_typingDot__dnhKT:first-child{animation-delay:-.32s}.Chat-module_typingDot__dnhKT:nth-child(2){animation-delay:-.16s}.Chat-module_typingDot__dnhKT:nth-child(3){animation-delay:0s}@keyframes Chat-module_typingBounce__1yp2v{0%,80%,to{opacity:.5;transform:scale(.8) translateY(0)}40%{opacity:1;transform:scale(1.2) translateY(-8px)}}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV{align-items:flex-end;flex-direction:row-reverse;justify-content:flex-start}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ.Chat-module_isMe__nBtaV .Chat-module_messageText__XgNyQ{border-bottom-right-radius:6px}.Chat-module_ratingStar__rRfqC{color:var(--star-inactive-color,#ccc);cursor:pointer;font-size:20px;transition:color .2s}.Chat-module_ratingStar__rRfqC.Chat-module_active__lbYL-{color:gold}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_avatar__gL6bm{aspect-ratio:1/1;flex-shrink:0;margin:0 0 4px;position:relative;width:40px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{word-wrap:break-word;--chat-heading-surface:hsla(0,0%,100%,.12);--chat-heading-accent:rgba(56,189,248,.85);--chat-heading-text-color:var(--message-text-color,#0f172a);--chat-heading-border-color:rgba(15,23,42,.18);--chat-heading-shadow-color:rgba(15,23,42,.65);backdrop-filter:blur(10px);background-color:var(--message-bg-color);border-radius:20px;box-shadow:0 2px 8px rgba(0,0,0,.1);color:var(--message-text-color);font-size:15px;line-height:1.5;margin-bottom:4px;max-width:100%;min-width:var(--chat-message-min-width);padding:14px 18px;position:relative;text-align:left;transition:all .2s ease}@supports (color:color-mix(in srgb,#000 50%,#fff 50%)){.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{--chat-heading-surface:color-mix(in srgb,var(--message-bg-color,#fff) 70%,rgba(15,23,42,.08) 30%);--chat-heading-accent:color-mix(in srgb,var(--message-text-color,#0f172a) 65%,rgba(59,130,246,.9) 35%);--chat-heading-border-color:color-mix(in srgb,var(--message-bg-color,#fff) 60%,rgba(15,23,42,.12) 40%);--chat-heading-shadow-color:color-mix(in srgb,rgba(15,23,42,.65) 80%,rgba(96,165,250,.45) 20%);--chat-heading-text-color:var(--message-text-color,#0f172a)}}.Chat-module_copyButtonContainer__Rij0U{float:right;pointer-events:none;right:10px;top:8px;visibility:hidden;z-index:2}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ:hover .Chat-module_copyButtonContainer__Rij0U,.Chat-module_copyButtonContainer__Rij0U:focus-within{pointer-events:auto;visibility:visible}.Chat-module_messageControlGroup__gAo4k{align-items:center;display:flex;gap:6px;pointer-events:auto}.Chat-module_copyButton__DcxT5{align-items:center;background:hsla(0,0%,100%,.2);border:1px solid #ddd;border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,.07);cursor:pointer;display:flex;opacity:.7;padding:2px 5px;position:relative;transition:all .15s,box-shadow .15s,border .15s}.Chat-module_playButton__ZigYL{align-items:center;background:hsla(0,0%,100%,.25);border:1px solid hsla(0,0%,100%,.6);border-radius:12px;color:#111;cursor:pointer;display:inline-flex;height:36px;justify-content:center;padding:0;position:relative;transition:all .15s ease;width:36px}.Chat-module_playButtonIcon__wPErq{height:16px;width:16px}.Chat-module_playButtonSpinner__Ad33i{animation:Chat-module_messagePlaySpinner__ldlvy .9s linear infinite;border:2px solid rgba(0,0,0,.3);border-radius:50%;border-top-color:#111;height:16px;width:16px}.Chat-module_playButton__ZigYL:hover:not(:disabled){background:hsla(0,0%,100%,.4);border-color:hsla(0,0%,100%,.8)}.Chat-module_playButton__ZigYL:disabled{cursor:not-allowed;opacity:.6}@keyframes Chat-module_messagePlaySpinner__ldlvy{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.Chat-module_copiedTooltip__LH81j{animation:Chat-module_copiedTooltipFadeIn__QekO1 .2s;background:#222;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.18);color:#fff;font-size:.98em;left:50%;margin-top:4px;max-width:220px;opacity:.97;overflow-wrap:break-word;padding:6px 16px;pointer-events:none;position:absolute;top:110%;transform:translateX(-50%);white-space:nowrap;word-break:break-word;z-index:100}.Chat-module_copiedTooltipLeft__j-S-5{left:0!important;transform:none!important}.Chat-module_copiedTooltipRight__R-2cE{left:auto!important;right:0!important;transform:none!important}@keyframes Chat-module_copiedTooltipFadeIn__QekO1{0%{opacity:0;transform:translateX(-50%) translateY(8px) scale(.97)}to{opacity:.97;transform:translateX(-50%) translateY(0) scale(1)}}.Chat-module_copyButton__DcxT5:focus,.Chat-module_copyButton__DcxT5:hover{border:1.5px solid #bbb;box-shadow:0 2px 8px rgba(0,132,255,.1);opacity:1}.Chat-module_copyButton__DcxT5 svg{display:block}.Chat-module_messageText__XgNyQ ul{list-style:disc;margin-left:20px}.Chat-module_messageText__XgNyQ ol{list-style:decimal;margin-left:20px}.Chat-module_messageText__XgNyQ blockquote,.Chat-module_messageText__XgNyQ img,.Chat-module_messageText__XgNyQ pre,.Chat-module_messageText__XgNyQ table{border-radius:8px;margin-bottom:10px;margin-top:10px}.Chat-module_messageText__XgNyQ pre{background:#000;color:#fff}.Chat-module_messageText__XgNyQ blockquote,.Chat-module_messageText__XgNyQ pre{border:none;box-shadow:none;display:block;font-size:inherit;line-height:inherit;padding:1em}.Chat-module_messageText__XgNyQ blockquote{background:#ffffffcc;color:#000}.Chat-module_messageText__XgNyQ code{background:#cccccc55;border:none;box-shadow:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;margin:0;padding:0}.Chat-module_messageText__XgNyQ pre code{background-color:#000000cc;border-radius:8px}.Chat-module_messageText__XgNyQ .Chat-module_chat-code-block__k8IyS{background:#181c23;border-color:#23272f;box-shadow:0 2px 8px rgba(0,0,0,.12);color:#f8fafc;font-family:Fira Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:14px;line-height:1.6;overflow-x:auto}.Chat-module_messageText__XgNyQ .Chat-module_chat-code-block__k8IyS code{background:none!important;border:none!important;box-shadow:none!important;color:inherit!important;display:block;font-family:inherit!important;font-size:inherit!important;overflow-x:auto;padding:0!important;white-space:pre;word-break:break-word}.Chat-module_messageText__XgNyQ table{background:#f8fafc;border-collapse:separate;border-spacing:0;box-shadow:0 2px 8px rgba(0,0,0,.08);color:#17223b;font-size:14px;margin:16px 0;width:100%}.Chat-module_messageText__XgNyQ td,.Chat-module_messageText__XgNyQ th{background:none;border-bottom:1px solid #d1dbe8;color:#17223b;padding:10px 16px;text-align:left}.Chat-module_messageText__XgNyQ th{background:linear-gradient(90deg,#eaf3fa 80%,#d1e3f8);border-bottom:2px solid #b5c7de;color:#17223b;font-weight:700}.Chat-module_messageText__XgNyQ tr:last-child td{border-bottom:none}.Chat-module_messageText__XgNyQ tr:nth-child(2n) td{background:#eaf3fa}.Chat-module_messageText__XgNyQ tr:hover td{background:#cbe0f7;transition:background .2s}.Chat-module_messageText__XgNyQ table{border-radius:12px;overflow:hidden}.Chat-module_messageText__XgNyQ td:first-child,.Chat-module_messageText__XgNyQ th:first-child{border-top-left-radius:12px}.Chat-module_messageText__XgNyQ td:last-child,.Chat-module_messageText__XgNyQ th:last-child{border-top-right-radius:12px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ:hover{box-shadow:0 4px 16px rgba(0,0,0,.15);transform:translateY(-1px)}.Chat-module_attachments__m1Fts{border-top:1px solid hsla(0,0%,49%,.2);display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;padding-top:10px}.Chat-module_attachment__aE9hK{align-items:center;background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,49%,.3);border-radius:12px;color:inherit;display:flex;font-size:13px;gap:6px;max-width:200px;padding:6px 12px;text-decoration:none;transition:all .2s ease}.Chat-module_attachment__aE9hK:hover{background:hsla(0,0%,100%,.3);border-color:hsla(0,0%,49%,.5);transform:translateY(-1px)}.Chat-module_attachmentIcon__BX3Cy{font-size:14px;opacity:.8}.Chat-module_attachmentName__aMx56{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Chat-module_messageButtons__WaOob{border-top:1px solid hsla(0,0%,49%,.83);display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;padding-top:12px}.Chat-module_messageButton__mRnn-{-webkit-tap-highlight-color:transparent;align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,49%,.1);border:1px solid hsla(0,0%,49%,.9);border-radius:16px;cursor:pointer;display:inline-flex;font-size:13px;font-weight:500;padding:8px 14px;touch-action:manipulation;transition:all .2s ease;user-select:none}.Chat-module_messageButton__mRnn-:hover{background:rgba(0,132,255,.1);border-color:rgba(0,132,255,.3);box-shadow:0 2px 8px rgba(0,132,255,.15);transform:translateY(-1px)}.Chat-module_messageButton__mRnn-:active{transform:scale(.98);transition:transform .1s ease}.Chat-module_messageButton__mRnn- p{line-height:inherit;margin:0;padding:0}.Chat-module_messageButton__mRnn- strong{font-weight:600}.Chat-module_messageButton__mRnn- em{font-style:italic}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M{align-items:center;backdrop-filter:blur(10px);background:rgba(0,0,0,.8);border-radius:12px;bottom:-8px;display:flex;gap:2px;min-width:24px;opacity:0;padding:4px 6px;position:absolute;right:8px;transform:translateY(4px);transition:all .3s cubic-bezier(.25,.46,.45,.94);z-index:1}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ:hover .Chat-module_rating__soc3M{opacity:1;transform:translateY(0)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M:hover{background:rgba(0,0,0,.9);box-shadow:0 4px 12px rgba(0,0,0,.3);padding:6px 8px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M span{cursor:pointer;display:inline-block;font-size:16px;transition:transform .2s ease,color .2s ease}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_rating__soc3M:hover span{transform:scale(1.1)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{display:flex;flex-direction:column;gap:12px;grid-area:📝;padding:24px;position:relative;width:100%;z-index:10}.Chat-module_Chat__j2eE5.Chat-module_fullPageVisual__zNAEy .Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{backdrop-filter:blur(25px);background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.8))}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan.Chat-module_dragOver__bkS-g{background:linear-gradient(0deg,rgba(0,132,255,.1) 0,rgba(0,132,255,.05))}.Chat-module_filePreviewContainer__R70hm{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.Chat-module_filePreview__kq2aX{align-items:center;backdrop-filter:blur(10px);background:hsla(0,0%,49%,.1);border:1px solid hsla(0,0%,49%,.2);border-radius:8px;display:flex;font-size:12px;gap:8px;padding:8px 12px;transition:all .2s ease}.Chat-module_filePreview__kq2aX:hover{background:hsla(0,0%,49%,.15);border-color:hsla(0,0%,49%,.3)}.Chat-module_fileIcon__zoSKW{font-size:14px;opacity:.7}.Chat-module_fileInfo__wBLi0{display:flex;flex-direction:column;gap:2px;min-width:0}.Chat-module_fileName__bBujo{color:#000;font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Chat-module_fileSize__ivliq{color:#6b7280;font-size:11px}.Chat-module_removeFileButton__0gakR{align-items:center;background:rgba(255,0,0,.1);border:none;border-radius:50%;color:#f44;cursor:pointer;display:flex;flex-shrink:0;height:20px;justify-content:center;transition:all .2s ease;width:20px}.Chat-module_removeFileButton__0gakR:hover{background:rgba(255,0,0,.2);transform:scale(1.1)}.Chat-module_inputContainer__bPt99{align-items:flex-end;background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:28px;box-shadow:0 4px 20px rgba(0,0,0,.06);display:flex;gap:8px;padding:8px 12px;transition:all .3s cubic-bezier(.25,.46,.45,.94)}.Chat-module_inputContainer__bPt99:focus-within{border-color:var(--brand-color);box-shadow:0 8px 32px rgba(0,132,255,.12);transform:translateY(-2px)}.Chat-module_inputContainer__bPt99 textarea::placeholder{color:#94a3b8;opacity:1}.Chat-module_attachmentButton__qLO47{align-items:center;background:transparent;border:none;border-radius:50%;color:#64748b;cursor:pointer;display:flex;flex-shrink:0;height:40px;justify-content:center;margin-bottom:2px;transition:all .2s ease;width:40px}.Chat-module_attachmentButton__qLO47:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.Chat-module_attachmentButton__qLO47:disabled{cursor:not-allowed;opacity:.3}.Chat-module_voiceButton__d2zlP{align-items:center;background:transparent;border:none;border-radius:50%;color:#64748b;cursor:pointer;display:flex;flex-shrink:0;height:40px;justify-content:center;margin-bottom:2px;transition:all .2s ease;width:40px}.Chat-module_voiceButton__d2zlP:hover:not(:disabled){background:#f1f5f9;color:#0f172a}.Chat-module_voiceButtonActive__Uoi3W{animation:Chat-module_voiceRecordingPulse__y2wJ5 1.5s infinite;background:rgba(239,68,68,.1)!important;color:#ef4444!important}@keyframes Chat-module_voiceRecordingPulse__y2wJ5{0%{box-shadow:0 0 0 0 rgba(255,0,0,.4)}70%{box-shadow:0 0 0 10px rgba(255,0,0,0)}to{box-shadow:0 0 0 0 rgba(255,0,0,0)}}.Chat-module_uploadProgress__jBTKe{align-items:center;background:rgba(0,132,255,.1);border:1px solid rgba(0,132,255,.2);border-radius:8px;color:#0084ff;display:flex;font-size:13px;gap:12px;padding:8px 12px}.Chat-module_uploadProgressBar__Gutnt{background:rgba(0,132,255,.2);border-radius:2px;flex:1;height:4px;overflow:hidden}.Chat-module_uploadProgressFill__EgubT{animation:Chat-module_uploadProgress__jBTKe 1.5s ease-in-out infinite;background:linear-gradient(90deg,#0084ff,rgba(0,132,255,.8));border-radius:2px;height:100%}@keyframes Chat-module_uploadProgress__jBTKe{0%{transform:translateX(-100%)}50%{transform:translateX(0)}to{transform:translateX(100%)}}.Chat-module_dragOverlay__SEGoS{align-items:center;backdrop-filter:blur(10px);background:rgba(0,132,255,.1);border:2px dashed rgba(0,132,255,.5);border-radius:12px;bottom:0;display:flex;justify-content:center;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:20}.Chat-module_dragOverlayContent__gb9kF{align-items:center;color:#0084ff;display:flex;flex-direction:column;font-weight:600;gap:12px;text-align:center}.Chat-module_dragOverlayContent__gb9kF svg{opacity:.7}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{-webkit-tap-highlight-color:transparent;appearance:none;-webkit-appearance:none;background:transparent;border:none;color:#0f172a;flex:1;font-size:15px;line-height:1.5;margin:0;max-height:200px;min-width:100px;outline:none;padding:10px 12px;resize:none;touch-action:manipulation}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea:disabled{cursor:not-allowed;opacity:.6;transform:none}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea::placeholder{color:inherit;opacity:.7}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action]{-webkit-tap-highlight-color:transparent;align-items:center;aspect-ratio:1/1;border:none;border-radius:50%!important;box-shadow:0 4px 12px rgba(0,132,255,.25);color:#fff;display:flex;height:40px;justify-content:center;margin:0 0 2px!important;min-height:unset!important;min-width:unset!important;overflow:visible;padding:0!important;touch-action:manipulation;transition:all .3s cubic-bezier(.25,.46,.45,.94);user-select:none;width:40px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action]:hover{box-shadow:0 6px 16px rgba(0,132,255,.35);transform:scale(1.05)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action]:active{transform:scale(.95)}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button[data-button-type=call-to-action] svg{height:20px;width:20px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button img{height:100%;object-fit:contain;width:50%}.Chat-module_scrollToBottomContainer__5rXpK{align-items:flex-start;display:flex;grid-area:📝;height:100%;justify-content:center;pointer-events:none;width:100%;z-index:20}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottomWrapper__PCIu1{align-items:center;animation:Chat-module_scrollButtonSlideIn__XnImg .3s ease-out;display:inline-flex;justify-content:center;pointer-events:all;position:relative;transform:translate(-50%,-150%);transition:transform .3s cubic-bezier(.25,.46,.45,.94)}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottom__nzxdZ{-webkit-tap-highlight-color:transparent;align-items:center;background:rgba(0,0,0,.5);border:none;border-radius:50%;box-shadow:0 4px 16px rgba(0,0,0,.3);color:#fff;cursor:pointer;display:flex;font-weight:700;height:48px;justify-content:center;outline:none;touch-action:manipulation;transition:all .3s cubic-bezier(.25,.46,.45,.94);user-select:none;width:48px}@keyframes Chat-module_scrollButtonSlideIn__XnImg{0%{opacity:0;transform:translate(-50%,20px) scale(.8)}to{opacity:.9;transform:translate(-50%) scale(1)}}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottomWrapper__PCIu1:hover{transform:translate(-50%,-160%) scale(1.05)}.Chat-module_scrollToBottomContainer__5rXpK .Chat-module_scrollToBottomWrapper__PCIu1:active{transform:translate(-50%,-160%) scale(.95);transition:transform .1s ease}.Chat-module_scrollToBottomBadge__N6T6-{align-items:center;background:#2563eb;border-radius:999px;box-shadow:0 2px 10px rgba(37,99,235,.4);color:#fff;display:inline-flex;font-size:10px;font-weight:600;justify-content:center;letter-spacing:.04em;min-width:32px;padding:2px 6px;pointer-events:none;position:absolute;right:-8px;text-transform:uppercase;top:-8px;white-space:nowrap}.Chat-module_ratingModal__XVKYm{align-items:center;animation:Chat-module_modalFadeIn__RPc3w .3s ease-out;backdrop-filter:blur(8px);background-color:rgba(0,0,0,.6);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}@keyframes Chat-module_modalFadeIn__RPc3w{0%{backdrop-filter:blur(0);opacity:0}to{backdrop-filter:blur(8px);opacity:1}}.Chat-module_ratingModalContent__CCdq7{animation:Chat-module_modalSlideIn__XXtgN .3s cubic-bezier(.25,.46,.45,.94);backdrop-filter:blur(20px);background:#fff;border:1px solid hsla(0,0%,49%,.1);border-radius:16px;box-shadow:0 20px 60px rgba(0,0,0,.3);color:#0f1724;font-family:Arial,Helvetica,sans-serif,OpenMojiColor,OpenMojiBlack;max-width:480px;padding:32px;width:90%}@keyframes Chat-module_modalSlideIn__XXtgN{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.Chat-module_ratingModalContent__CCdq7 h3{color:#000;font-size:20px;font-weight:600;margin:0 0 24px;text-align:center}.Chat-module_stars__PCzNO{display:flex;gap:8px;justify-content:center;margin-bottom:24px}.Chat-module_stars__PCzNO span{border-radius:8px;cursor:pointer;font-size:28px;padding:4px;transition:all .2s ease}.Chat-module_stars__PCzNO span:hover{background:rgba(255,215,0,.1);transform:scale(1.2)}.Chat-module_ratingModalStar__XkbHr{cursor:pointer;font-size:24px;transition:color .2s}.Chat-module_toolCallModal__uNaIK{max-width:800px;overflow:hidden;padding:0;position:relative}.Chat-module_toolCallHeader__ZaTZF{align-items:center;background:linear-gradient(135deg,#eef2ff,#f5f3ff 40%,#fefcc9);border-bottom:1px solid rgba(15,23,42,.08);display:flex;gap:16px;padding:24px 32px 16px}.Chat-module_toolCallIcon__UgRKj{font-size:32px}.Chat-module_toolCallHeaderMeta__iAL-U{display:flex;flex-direction:column;gap:4px}.Chat-module_toolCallLabel__q7EFf{color:#475467;font-size:11px;letter-spacing:.35em;margin:0;text-transform:uppercase}.Chat-module_toolCallTitle__jhL0A{color:#0f172a;font-size:24px;font-weight:600;margin:0}.Chat-module_toolCallSubtitle__a2GIO{color:#475467;font-size:13px;margin:0}.Chat-module_toolCallGrid__Nfr7N{background:#fefefe;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));padding:24px 32px 16px}.Chat-module_toolCallPanel__kQZE9{background:#fff;border:1px solid #e2e8f0;border-radius:16px;box-shadow:0 18px 40px rgba(15,23,42,.08);padding:18px}.Chat-module_toolCallPanelTitle__-7OtJ{color:#94a3b8;font-size:12px;font-weight:600;letter-spacing:.25em;margin:0 0 12px;text-transform:uppercase}.Chat-module_toolCallList__5co3s{display:flex;flex-direction:column;gap:12px;list-style:none;margin:0;padding:0}.Chat-module_toolCallItem__k7W5Z{display:flex;flex-direction:column;gap:4px}.Chat-module_toolCallItemLabel__d3C1E{color:#94a3b8;font-size:11px;letter-spacing:.25em;text-transform:uppercase}.Chat-module_toolCallItemValue__cStQ0{color:#0f172a;font-size:14px;line-height:1.4;white-space:pre-wrap;word-break:break-word}.Chat-module_toolCallSummary__wGZwg{color:#0f172a;font-size:15px;line-height:1.6;margin:0}.Chat-module_toolCallSummaryMeta__RXiSv{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.Chat-module_toolCallSummaryMetaBadge__JBi-I{background:rgba(79,70,229,.15);border-radius:999px;color:#312e81;font-size:12px;font-weight:600;padding:5px 12px}.Chat-module_toolCallEmpty__bUz5v{color:#94a3b8;font-size:14px;margin:0}.Chat-module_toolCallIssues__evhYM{display:flex;flex-wrap:wrap;gap:8px;padding:0 32px 16px}.Chat-module_toolCallIssueBadge__Qbwdp{align-items:center;border-radius:999px;display:inline-flex;font-size:12px;font-weight:600;gap:4px;padding:6px 10px}.Chat-module_toolCallIssueError__LImeS{background:rgba(239,68,68,.12);color:#b91c1c}.Chat-module_toolCallIssueWarning__chQDf{background:rgba(234,179,8,.16);color:#a16207}.Chat-module_toolCallFooter__lJ24N{align-items:center;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;padding:0 32px 24px}.Chat-module_toolCallTimestamp__-iWsu{color:#475467;font-size:13px}.Chat-module_toolCallRawDetails__CvFfs{color:#2563eb;font-size:13px}.Chat-module_toolCallRawSummary__-aLvG{color:#2563eb;cursor:pointer;font-weight:600}.Chat-module_toolCallRawColumns__8ummz{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));margin-top:12px}.Chat-module_toolCallRawColumnTitle__JQda7{color:#94a3b8;font-size:11px;letter-spacing:.25em;margin:0 0 8px;text-transform:uppercase}.Chat-module_memoryModalHeader__SpZJT{align-items:flex-start;background:linear-gradient(180deg,#fdfdfd,#f6f9ff);border-bottom:1px solid #e2e8f0;display:flex;gap:16px;padding:28px 32px 16px}.Chat-module_memoryModalIcon__eYbli{align-items:center;background:linear-gradient(135deg,#6366f1,#a855f7);border-radius:18px;box-shadow:0 18px 28px rgba(15,23,42,.18);color:#fff;display:inline-flex;font-size:24px;height:52px;justify-content:center;width:52px}.Chat-module_memoryModalHeaderText__S6MZG{flex:1}.Chat-module_memoryModalTitle__zzbaQ{color:#0f172a;font-size:22px;font-weight:600;margin:0}.Chat-module_memoryModalSubtitle__PStci{color:#475467;font-size:14px;margin:4px 0 0}.Chat-module_memoryModalCallTime__RmVI9{color:#94a3b8;font-size:13px;margin:4px 0 0}.Chat-module_memoryModalStatus__bmrfc{align-items:center;border-radius:999px;display:inline-flex;font-size:13px;font-weight:600;gap:6px;margin-left:auto;padding:6px 14px;white-space:nowrap}.Chat-module_memoryStatusDot__c0oVs{background:currentColor;border-radius:50%;display:inline-block;height:8px;width:8px}.Chat-module_memoryModalContent__8E7oj{background:#fff;display:flex;flex-direction:column;gap:16px;padding:24px 32px 32px}.Chat-module_memoryMessage__q0pNK{color:#0f172a;font-size:15px;font-weight:500;margin:0}.Chat-module_memoryMetaRow__Hc-Xp{align-items:center;color:#475467;display:flex;font-size:13px;justify-content:space-between}.Chat-module_memoryMetaLabel__LFx11{font-weight:600;letter-spacing:.08em;text-transform:uppercase}.Chat-module_memoryMetaValue__4bILO{color:#0f172a;font-weight:600}.Chat-module_memoryRetrieveSection__VbuS4,.Chat-module_memoryStoreSection__qQJPN{display:flex;flex-direction:column;gap:12px}.Chat-module_memoryCard__-kIDN{background:#f8fafc;border:1px solid #e5e7eb;border-radius:16px;box-shadow:0 10px 18px rgba(15,23,42,.08);padding:18px}.Chat-module_memoryCardContent__l9S4G{color:#0f172a;font-size:14px;line-height:1.6;overflow-wrap:break-word;white-space:pre-wrap}.Chat-module_memoryCardMeta__K66KE{align-items:center;color:#94a3b8;display:flex;font-size:12px;justify-content:space-between;margin-top:12px}.Chat-module_memoryScopeBadge__T2ACc{background:rgba(124,58,237,.12);border-radius:999px;color:#0f172a;font-size:11px;font-weight:700;padding:3px 10px}.Chat-module_memoryList__pUOg2{display:flex;flex-direction:column;gap:12px}.Chat-module_memoryEmptyState__fPrXA{background:#fef3c7;border:1px solid #fde68a;border-radius:12px;color:#92400e;font-weight:500;padding:16px}.Chat-module_memoryListFooter__Y0Q2Z{color:#475467;font-size:13px;text-align:center}.Chat-module_memoryStatusSuccess__4bhfo{background:rgba(16,185,129,.16);color:#047857}.Chat-module_memoryStatusWarning__AR6yh{background:rgba(234,179,8,.16);color:#a16207}.Chat-module_memoryStatusError__ZNAT6{background:rgba(239,68,68,.15);color:#b91c1c}.Chat-module_memoryStatusNeutral__Fa-4M{background:rgba(96,165,250,.15);color:#1d4ed8}.Chat-module_searchModalHeader__Y8V-w{align-items:center;background:#fdfdfd;border-bottom:1px solid #eee;display:flex;gap:16px;padding:24px 72px 24px 32px}.Chat-module_selfLearningModalHeader__PDIt1{align-items:center;background:linear-gradient(135deg,#f8fafc,#fef9c3 45%,#ecfccb);border-bottom:1px solid #e2e8f0;gap:18px}.Chat-module_selfLearningAvatarGroup__jgy2k{align-items:center;display:flex;gap:10px}.Chat-module_selfLearningAvatar__NHXKm{align-items:center;background:#e2e8f0;background-position:50%;background-size:cover;border-radius:50%;box-shadow:0 10px 20px rgba(15,23,42,.18);color:#0f172a;display:inline-flex;font-size:18px;font-weight:600;height:48px;justify-content:center;letter-spacing:.02em;width:48px}.Chat-module_selfLearningAvatarInitial__cuw19{line-height:1}.Chat-module_selfLearningTeacher__fGhX8{background:linear-gradient(135deg,#fde68a,#86efac)}.Chat-module_selfLearningHeaderText__LTwHL{display:flex;flex-direction:column;gap:6px;text-align:left}.Chat-module_selfLearningTitle__G0SAk{color:#0f172a;font-size:20px;font-weight:600;margin:0}.Chat-module_selfLearningMetaRow__z4Tg0{align-items:center;color:#64748b;display:flex;flex-wrap:wrap;font-size:13px;gap:10px;margin-bottom:12px}.Chat-module_selfLearningMeta__58Pet{color:#64748b;font-size:13px}.Chat-module_selfLearningMetaChip__0go88{background:#e2e8f0;border-radius:999px;color:#0f172a;font-size:12px;font-weight:600;padding:4px 10px}.Chat-module_selfLearningCommitments__7ECnr{background:#f8fafc;border:1px solid #e2e8f0;border-radius:16px;padding:16px}.Chat-module_selfLearningCommitmentsLabel__OkDO1{color:#94a3b8;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.Chat-module_selfLearningBookEditor__CZy5T{border-radius:12px;margin-top:12px;overflow:hidden}.Chat-module_selfLearningEmpty__vCKHL{color:#475569;font-size:13px;margin-top:12px}.Chat-module_modalCloseButton__AAfWS{align-items:center;background:#fff;border:1px solid #e2e8f0;border-radius:999px;box-shadow:0 6px 16px rgba(15,23,42,.08);color:#475569;cursor:pointer;display:inline-flex;height:36px;justify-content:center;position:absolute;right:16px;top:16px;transition:background .2s ease,color .2s ease,box-shadow .2s ease,transform .2s ease;width:36px;z-index:1}.Chat-module_modalCloseButton__AAfWS:hover{background:#f8fafc;box-shadow:0 10px 24px rgba(15,23,42,.12);color:#0f172a;transform:translateY(-1px)}.Chat-module_modalCloseButton__AAfWS:focus-visible{outline:2px solid #94a3b8;outline-offset:2px}.Chat-module_teamModalHeader__SB5NL{flex-wrap:wrap;gap:12px}.Chat-module_teamHeaderParticipants__KS7aV{align-items:center;display:flex;flex-wrap:wrap;gap:12px}.Chat-module_teamHeaderProfile__xRlcS{align-items:center;color:inherit;display:inline-flex;gap:12px;text-decoration:none}.Chat-module_teamHeaderProfileLink__fYTfT:hover{color:#0f172a}.Chat-module_teamHeaderAvatar__vXcTp{background-position:50%;background-repeat:no-repeat;background-size:cover;border:1px solid #e2e8f0;border-radius:999px;box-shadow:0 6px 14px rgba(15,23,42,.08);height:40px;width:40px}.Chat-module_teamHeaderName__ygJR9{color:#0f172a;font-size:18px;font-weight:600}.Chat-module_teamHeaderDivider__cnRMd{color:#94a3b8;font-size:14px;font-weight:600}.Chat-module_searchModalIcon__AR5KY{align-items:center;color:#475569;display:inline-flex;font-size:24px;justify-content:center}.Chat-module_searchModalQuery__5x-Ra{color:#202124!important;font-size:22px!important;font-weight:500!important;margin:0!important;text-align:left!important}.Chat-module_searchModalContent__mWLIE{background:#fff;max-height:60vh;overflow-y:auto;padding:24px 32px}.Chat-module_teamChatContainer__xdLtU{background:#f8fafc;border:1px solid #e5e7eb;border-radius:16px;margin-bottom:20px;overflow:hidden}.Chat-module_teamToolCallSection__FH9l7{display:flex;flex-direction:column;gap:16px}.Chat-module_teamToolCallGroup__PO6rl{display:flex;flex-direction:column;gap:8px}.Chat-module_teamToolCallHeading__G-JSj{color:#64748b;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.Chat-module_teamToolCallChips__hRWqh{display:flex;flex-wrap:wrap;gap:8px}.Chat-module_teamToolCallDetails__ZaTtt{background:#f8fafc;border:1px solid rgba(148,163,184,.4);border-radius:12px;padding:16px}.Chat-module_teamToolCallDetailsHeader__FPIgI{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:12px}.Chat-module_teamToolCallDetailsTitle__50SeL{align-items:center;color:#0f172a;display:flex;font-size:14px;font-weight:600;gap:6px}.Chat-module_teamToolCallDetailsClear__8yvu7{background:rgba(148,163,184,.2);border:1px solid rgba(148,163,184,.4);border-radius:999px;color:#475569;cursor:pointer;font-size:12px;padding:4px 10px;transition:all .2s ease}.Chat-module_teamToolCallDetailsClear__8yvu7:hover{background:rgba(148,163,184,.35)}.Chat-module_searchResultsList__xVDUZ{display:flex;flex-direction:column;gap:28px;text-align:left}.Chat-module_searchResultsRaw__i3GkD{max-width:650px;text-align:left}.Chat-module_searchResultItem__bTzq5{max-width:650px}.Chat-module_searchResultUrl__SbrH4{color:#202124;font-size:14px;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Chat-module_searchResultUrl__SbrH4 a{color:#202124;text-decoration:none}.Chat-module_searchResultTitle__XS7zN{font-size:20px!important;font-weight:400!important;line-height:1.3;margin:0 0 4px!important}.Chat-module_searchResultTitle__XS7zN a{color:#1a0dab;text-decoration:none}.Chat-module_searchResultTitle__XS7zN a:hover{text-decoration:underline}.Chat-module_searchResultSnippet__Wsun2{color:#4d5156;font-size:14px;line-height:1.58;margin:0}.Chat-module_noResults__AAv6s{color:#70757a;font-style:italic;padding:40px;text-align:center}.Chat-module_citationDetails__2v2e1,.Chat-module_toolCallDetails__WUFlD{margin:20px 0;text-align:left}.Chat-module_citationPreview__rGhCR{background:#f8f8f8;border:1px solid #ddd;border-radius:8px;margin-top:16px;overflow:hidden}.Chat-module_citationIframe__ngzFY{border:none;display:block;height:60vh;min-height:400px;width:100%}.Chat-module_citationMetadata__DPaCF{background:#f8f8f8;border:1px solid #eee;border-radius:8px;margin-bottom:20px;padding:16px}.Chat-module_citationMetadata__DPaCF p{font-size:.9em;margin:8px 0}.Chat-module_citationMetadata__DPaCF strong{color:#333}.Chat-module_citationMetadata__DPaCF a{color:#007bff;text-decoration:none;word-break:break-all}.Chat-module_citationMetadata__DPaCF a:hover{text-decoration:underline}.Chat-module_citationExcerpt__VU4BS{background:#fff;border:1px solid #ddd;border-radius:8px;max-height:400px;overflow-y:auto;padding:16px}.Chat-module_citationExcerpt__VU4BS h4{color:#333;font-size:1em;margin:0 0 12px}.Chat-module_citationHint__5AkLx{font-size:.85em;margin-top:8px;opacity:.7}.Chat-module_toolCallDataContainer__rdEzC{background:#f8f8f8;border:1px solid #eee;border-radius:6px;margin-bottom:15px;max-height:300px;overflow-y:auto;padding:12px}.Chat-module_toolCallData__UauCO{font-size:.85em;margin:0;white-space:pre-wrap;word-break:break-word}.Chat-module_toolCallArgsList__LD3xH{list-style:none;margin:0;padding:0}.Chat-module_toolCallArgsList__LD3xH li{font-size:.9em;margin-bottom:5px}.Chat-module_toolCallModal__uNaIK .Chat-module_toolCallData__UauCO{background:#f8fafc;color:#0f172a}.Chat-module_ratingInput__z8Pv-{background:hsla(0,0%,49%,.05);border:2px solid hsla(0,0%,49%,.1);border-radius:12px;color:#0b1220;font-size:14px;line-height:1.5;margin-bottom:18px;min-height:100px;padding:16px;resize:vertical;transition:all .2s ease;width:100%}.Chat-module_ratingInput__z8Pv-:focus{background:hsla(0,0%,49%,.08);border-color:#0084ff;box-shadow:0 0 0 4px rgba(0,132,255,.1);outline:none}.Chat-module_ratingInput__z8Pv-[readonly]{background:hsla(0,0%,49%,.01);border:1px solid hsla(0,0%,49%,.5)}.Chat-module_ratingActions__nXcss{display:flex;gap:12px;justify-content:flex-end}.Chat-module_ratingActions__nXcss button{border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:500;min-width:80px;padding:12px 24px;transition:all .2s ease}.Chat-module_ratingActions__nXcss button:first-child{background-color:hsla(0,0%,49%,.1);border:1px solid hsla(0,0%,49%,.2);color:#0b1220}.Chat-module_ratingActions__nXcss button:first-child:hover:not(:disabled){background-color:hsla(0,0%,49%,.2);color:#0b1220}.Chat-module_ratingActions__nXcss button:last-child{background:linear-gradient(135deg,#0084ff,#06c);color:#fff}.Chat-module_ratingActions__nXcss button:last-child:hover:not(:disabled){background:linear-gradient(135deg,#0071d1,#0052a3);box-shadow:0 4px 12px rgba(0,132,255,.3);transform:translateY(-1px)}.Chat-module_ratingActions__nXcss button:last-child:disabled{cursor:not-allowed;opacity:.5}.Chat-module_downloadButton__8--bk{align-items:center;background:linear-gradient(135deg,#0084ff,#06c);border:none;border-radius:8px;box-shadow:0 2px 8px rgba(0,132,255,.2);color:#fff;cursor:pointer;display:inline-flex;font-size:14px;font-weight:600;gap:8px;justify-content:center;padding:12px 24px;transition:all .2s ease}.Chat-module_downloadButton__8--bk:hover{background:linear-gradient(135deg,#09f,#07d);box-shadow:0 4px 16px rgba(0,132,255,.3);transform:translateY(-2px)}.Chat-module_downloadButton__8--bk:active{box-shadow:0 2px 8px rgba(0,132,255,.2);transform:translateY(0)}.Chat-module_downloadButton__8--bk svg{flex-shrink:0}.Chat-module_downloadButton__8--bk span{font-weight:600}.Chat-module_chatButton__d9VgA{-webkit-tap-highlight-color:transparent!important;align-items:center!important;backdrop-filter:blur(20px)!important;background:linear-gradient(135deg,#0084ff,#06c)!important;border:none!important;border-radius:20px!important;box-shadow:0 4px 16px rgba(0,132,255,.3)!important;color:#fff!important;cursor:pointer!important;display:inline-flex!important;font-size:13px!important;font-weight:600!important;gap:8px!important;justify-content:center!important;line-height:1.3!important;margin:0!important;min-height:40px!important;min-width:110px!important;overflow:hidden!important;padding:12px 16px!important;position:relative!important;touch-action:manipulation!important;transition:all .3s cubic-bezier(.25,.46,.45,.94)!important;user-select:none!important}.Chat-module_chatButton__d9VgA:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);content:\"\";height:100%;left:-100%;position:absolute;top:0;transition:left .5s ease;width:100%}.Chat-module_chatButton__d9VgA:hover:before{left:100%}.Chat-module_chatButton__d9VgA:hover:not(:disabled){background:linear-gradient(135deg,#09f,#07d);box-shadow:0 8px 24px rgba(0,132,255,.4);transform:translateY(-2px) scale(1.02)}.Chat-module_chatButton__d9VgA:active{box-shadow:0 4px 16px rgba(0,132,255,.3);transform:scale(.98) translateY(-1px);transition:transform .1s ease}.Chat-module_chatButton__d9VgA:focus{box-shadow:0 4px 16px rgba(0,132,255,.3),0 0 0 3px rgba(0,132,255,.3);outline:none}.Chat-module_chatButton__d9VgA svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.2));flex-shrink:0;height:16px;opacity:1;transition:all .3s cubic-bezier(.25,.46,.45,.94);width:16px}.Chat-module_chatButton__d9VgA:hover svg{filter:drop-shadow(0 2px 4px rgba(0,0,0,.3));transform:rotate(-90deg) scale(1.1)}.Chat-module_chatButtonText__RkGB-{font-weight:600;opacity:1;text-shadow:0 1px 2px rgba(0,0,0,.1);transition:all .2s ease;white-space:nowrap}.Chat-module_chatButton__d9VgA:hover .Chat-module_chatButtonText__RkGB-{transform:translateX(1px)}.Chat-module_useTemplateButton__xcJNR{-webkit-tap-highlight-color:transparent!important;align-items:center!important;backdrop-filter:blur(20px)!important;background:linear-gradient(135deg,#0084ff,#06c)!important;border:none!important;border-radius:20px!important;box-shadow:0 4px 16px rgba(0,132,255,.3)!important;color:#fff!important;cursor:pointer!important;display:inline-flex!important;font-size:13px!important;font-weight:600!important;gap:8px!important;justify-content:center!important;line-height:1.3!important;margin:0!important;min-height:40px!important;min-width:110px!important;overflow:hidden!important;padding:12px 16px!important;position:relative!important;touch-action:manipulation!important;transition:all .3s cubic-bezier(.25,.46,.45,.94)!important;user-select:none!important}.Chat-module_useTemplateButton__xcJNR:before{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);content:\"\";height:100%;left:-100%;position:absolute;top:0;transition:left .5s ease;width:100%}.Chat-module_useTemplateButton__xcJNR:hover:before{left:100%}.Chat-module_useTemplateButton__xcJNR:hover:not(:disabled){background:linear-gradient(135deg,#09f,#07d);box-shadow:0 8px 24px rgba(0,132,255,.4);transform:translateY(-2px) scale(1.02)}.Chat-module_useTemplateButton__xcJNR:active{box-shadow:0 4px 16px rgba(0,132,255,.3);transform:scale(.98) translateY(-1px);transition:transform .1s ease}.Chat-module_useTemplateButton__xcJNR:focus{box-shadow:0 4px 16px rgba(0,132,255,.3),0 0 0 3px rgba(0,132,255,.3);outline:none}.Chat-module_useTemplateButton__xcJNR svg{filter:drop-shadow(0 1px 2px rgba(0,0,0,.2));flex-shrink:0;height:16px;opacity:1;transition:all .3s cubic-bezier(.25,.46,.45,.94);width:16px}.Chat-module_useTemplateButton__xcJNR:hover svg{filter:drop-shadow(0 2px 4px rgba(0,0,0,.3));transform:scale(1.1)}.Chat-module_useTemplateButton__xcJNR:hover .Chat-module_chatButtonText__RkGB-{transform:translateX(1px)}.Chat-module_saveButtonContainer__lSNUJ{display:inline-block;position:relative}.Chat-module_saveMenu__-ph8y{background:#fff;border:1px solid #ddd;box-shadow:0 2px 8px rgba(0,0,0,.08);left:0;min-width:120px;position:absolute;top:100%;z-index:10}.Chat-module_saveMenuItem__ISApL{background:none;border:none;color:#111;cursor:pointer;display:block;padding:8px 16px;text-align:left;width:100%}.Chat-module_saveMenuItem__ISApL:hover{background-color:#f0f0f0}.Chat-module_saveMenuDivider__3ktTM{background-color:#ddd;height:1px;margin:4px 0}.Chat-module_chatFeedbackPanel__gfOzk{background:#fff;border:1px solid #e5e7eb;border-radius:14px;box-shadow:0 8px 18px rgba(15,23,42,.08);display:flex;flex-direction:column;gap:6px;padding:6px 8px;width:min(260px,100%)}.Chat-module_chatFeedbackToggle__IeOM6{align-items:center;background:transparent;border:none;border-radius:12px;cursor:pointer;display:flex;gap:10px;padding:6px 8px;text-align:left;transition:background .2s ease,transform .2s ease;width:100%}.Chat-module_chatFeedbackToggle__IeOM6:hover{background:#f5f5f5;transform:translateY(-.5px)}.Chat-module_chatFeedbackToggle__IeOM6:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.Chat-module_chatFeedbackIcon__XcB7A{background:#eef2ff;border-radius:10px;color:#6366f1;display:grid;flex-shrink:0;height:34px;place-items:center;transition:background .2s ease,color .2s ease;width:34px}.Chat-module_chatFeedbackToggle__IeOM6[data-enabled=true] .Chat-module_chatFeedbackIcon__XcB7A{background:#e0f2fe;color:#0284c7}.Chat-module_chatFeedbackToggle__IeOM6[data-enabled=false] .Chat-module_chatFeedbackIcon__XcB7A{background:#f3f4f6;color:#94a3b8}.Chat-module_chatFeedbackMeta__6t2be{display:flex;flex:1;flex-direction:column;gap:2px}.Chat-module_chatFeedbackLabel__qQgH3{color:#0f172a;font-size:.85rem;font-weight:600}.Chat-module_chatFeedbackDescription__I9bNg{color:#64748b;font-size:.75rem}.Chat-module_chatFeedbackIndicator__uHCr7{border-radius:999px;font-size:.72rem;font-weight:700;letter-spacing:.08em;padding:2px 8px;text-transform:uppercase}.Chat-module_chatFeedbackIndicatorActive__bkw-w{background:#dcfce7;border:1px solid #34d399;color:#166534}.Chat-module_chatFeedbackIndicatorInactive__qMBkh{background:#fef9c3;border:1px solid #facc15;color:#713f12}.Chat-module_pauseButton__eeu7K{background:linear-gradient(135deg,#ffb347,#ff8c42)!important}.Chat-module_pauseButton__eeu7K:hover:not(:disabled){background:linear-gradient(135deg,#ffc067,#ff9e5f)!important}.Chat-module_pauseButton__eeu7K.Chat-module_pausing__pTx8b{cursor:wait!important;opacity:.6!important}.Chat-module_pauseButton__eeu7K.Chat-module_paused__j-pya{background:linear-gradient(135deg,#10b981,#059669)!important}.Chat-module_pauseButton__eeu7K.Chat-module_paused__j-pya:hover:not(:disabled){background:linear-gradient(135deg,#34d399,#059669)!important;box-shadow:0 8px 24px rgba(16,185,129,.35);transform:translateY(-2px) scale(1.02)}.Chat-module_pauseButton__eeu7K svg{transition:transform .3s ease}.Chat-module_pauseButton__eeu7K.Chat-module_paused__j-pya svg{transform:scale(1.1)}.Chat-module_pauseButton__eeu7K.Chat-module_pausing__pTx8b svg{opacity:.8}.Chat-module_voiceCallIndicatorBar__N2sWN{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,rgba(34,197,94,.1),rgba(16,185,129,.1));border-bottom:1px solid rgba(34,197,94,.3);display:flex;grid-area:🟦;justify-content:center;padding:12px 20px;width:100%}.Chat-module_voiceCallIndicator__tsaaG{align-items:center;backdrop-filter:blur(10px);background:linear-gradient(135deg,rgba(34,197,94,.2),rgba(16,185,129,.2));border:1px solid rgba(34,197,94,.4);border-radius:20px;box-shadow:0 2px 8px rgba(34,197,94,.2);color:#10b981;display:inline-flex;font-size:13px;font-weight:600;gap:8px;padding:8px 16px;position:relative}.Chat-module_voiceCallIndicator__tsaaG svg{animation:Chat-module_voiceCallIconPulse__zZbJn 2s ease-in-out infinite;flex-shrink:0;height:16px;width:16px}.Chat-module_voiceCallIndicator__tsaaG span{font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.1)}.Chat-module_voiceCallPulse__XcGU4{animation:Chat-module_voiceCallPulse__XcGU4 1.5s ease-in-out infinite;background:#10b981;border-radius:50%;height:8px;position:absolute;right:8px;top:50%;transform:translateY(-50%);width:8px}@keyframes Chat-module_voiceCallIconPulse__zZbJn{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.1)}}@keyframes Chat-module_voiceCallPulse__XcGU4{0%,to{opacity:1;transform:translateY(-50%) scale(1)}50%{opacity:.6;transform:translateY(-50%) scale(1.3)}}.Chat-module_chatMessage__nmLaZ .Chat-module_voiceCallIndicator__tsaaG{border-radius:16px;font-size:12px;margin-bottom:8px;padding:6px 12px}.Chat-module_chatMessage__nmLaZ .Chat-module_voiceCallIndicator__tsaaG svg{height:14px;width:14px}.Chat-module_feedbackStatus__-df7l{word-wrap:break-word;animation:Chat-module_feedbackStatusSlideIn__n6bbB .28s ease-out;backdrop-filter:blur(20px);border-radius:14px;box-shadow:0 18px 32px rgba(15,23,42,.35);font-weight:500;max-width:340px;padding:14px 22px;pointer-events:none;position:fixed;right:20px;top:20px;z-index:10000}.Chat-module_feedbackStatusSuccess__Ax2q0{background:linear-gradient(135deg,#10b981,#059669);color:#f8fafc}.Chat-module_feedbackStatusError__dnv6d{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fef2f2}@keyframes Chat-module_feedbackStatusSlideIn__n6bbB{0%{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}@media (max-width:768px){.Chat-module_Chat__j2eE5{--chat-message-min-width:100px;--chat-message-max-width:min(85%,560px);--chat-message-avatar-gap:10px}.Chat-module_actions__gTZ5T{gap:6px;margin:12px 16px 0}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N{padding:16px 12px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ{margin-bottom:16px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{border-radius:18px;font-size:14px;padding:12px 16px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_avatar__gL6bm{height:36px;margin:0 0 4px;width:36px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{gap:10px;padding:16px 12px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{border-radius:22px;font-size:16px;padding:14px 18px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button{height:44px;width:44px}.Chat-module_scrollToBottom__nzxdZ{font-size:18px;height:44px;top:calc(100% - 160px);width:44px}.Chat-module_chatButton__d9VgA{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_chatButton__d9VgA svg{height:18px!important;width:18px!important}.Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_useTemplateButton__xcJNR{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_useTemplateButton__xcJNR svg{height:18px!important;width:18px!important}.Chat-module_useTemplateButton__xcJNR .Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_ratingModalContent__CCdq7{border-radius:16px;margin:16px;max-height:80vh;overflow-y:auto;padding:24px 20px}.Chat-module_stars__PCzNO{gap:6px;margin-bottom:20px}.Chat-module_stars__PCzNO span{font-size:32px;padding:8px}.Chat-module_ratingActions__nXcss{flex-direction:column-reverse;gap:8px}.Chat-module_ratingActions__nXcss button{border-radius:10px;font-size:16px;padding:14px;width:100%}.Chat-module_selfLearningModalHeader__PDIt1{align-items:flex-start;flex-direction:column}.Chat-module_selfLearningAvatarGroup__jgy2k{justify-content:flex-start}.Chat-module_selfLearningMetaRow__z4Tg0{align-items:flex-start}}@media (max-width:480px){.Chat-module_Chat__j2eE5{--chat-message-min-width:80px;--chat-message-max-width:min(90%,520px);--chat-message-avatar-gap:8px}.Chat-module_actions__gTZ5T{gap:4px;margin:8px 12px 0}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessages__J2u2N{padding:12px 8px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{border-radius:16px;font-size:14px;padding:10px 14px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_avatar__gL6bm{height:32px;margin:0 0 4px;width:32px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan{gap:8px;padding:12px 8px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{border-radius:20px;font-size:16px;padding:12px 16px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button{height:40px;width:40px}.Chat-module_chatButton__d9VgA{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_chatButton__d9VgA svg{height:18px!important;width:18px!important}.Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_useTemplateButton__xcJNR{border-radius:50%!important;gap:0!important;height:40px!important;margin:0!important;min-height:40px!important;min-width:40px!important;padding:0!important;width:40px!important}.Chat-module_useTemplateButton__xcJNR svg{height:18px!important;width:18px!important}.Chat-module_useTemplateButton__xcJNR .Chat-module_chatButtonText__RkGB-{display:none!important}.Chat-module_scrollToBottom__nzxdZ{font-size:16px;height:40px;top:calc(100% - 140px);width:40px}.Chat-module_ratingModal__XVKYm{align-items:flex-end;padding:0}.Chat-module_ratingModalContent__CCdq7{border-radius:20px 20px 0 0;margin:0;max-height:70vh;padding:24px 16px 20px;width:100%}}@media (prefers-reduced-motion:reduce){.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ,.Chat-module_feedbackStatus__-df7l,.Chat-module_ratingModalContent__CCdq7,.Chat-module_ratingModal__XVKYm,.Chat-module_scrollToBottom__nzxdZ{animation:none}.Chat-module_chatButton__d9VgA,.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button,.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea,.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{transition:none}}@media (prefers-contrast:high){.Chat-module_chatMainFlow__--8FE .Chat-module_chatMessage__nmLaZ .Chat-module_messageText__XgNyQ{border:2px solid}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan textarea{border-width:3px}.Chat-module_chatMainFlow__--8FE .Chat-module_chatInput__1Ecan button{border:2px solid}}.Chat-module_emailContainer__TBxXZ{display:flex;flex-direction:column;gap:16px;margin-bottom:20px}.Chat-module_emailModalHeader__Z4-CJ{background:#f8fafc}.Chat-module_emailHeaderText__1dR6R{display:flex;flex-direction:column;gap:2px}.Chat-module_emailHeaderLabel__7iAEH{color:#64748b;font-size:12px;letter-spacing:.08em;text-transform:uppercase}.Chat-module_emailMetadata__8XXGf{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 4px rgba(15,23,42,.08);margin-bottom:16px;padding:18px 20px}.Chat-module_emailField__pcb03{display:flex;font-size:14px;gap:8px;line-height:1.5;margin-bottom:8px}.Chat-module_emailField__pcb03:last-child{margin-bottom:0}.Chat-module_emailField__pcb03 strong{color:#64748b;font-weight:600;min-width:60px}.Chat-module_emailRecipients__YVVys{color:#0f172a;word-break:break-word}.Chat-module_emailBody__OBt-w{text-align:left}.Chat-module_emailBody__OBt-w strong{color:#64748b;display:block;font-size:14px;font-weight:600;margin-bottom:12px}.Chat-module_emailBodyContent__-vFo2{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 1px 4px rgba(15,23,42,.08);line-height:1.6;max-height:400px;overflow-y:auto;padding:22px}.Chat-module_emailBodyContent__-vFo2 p{margin:0 0 12px}.Chat-module_emailBodyContent__-vFo2 p:last-child{margin-bottom:0}.Chat-module_emailStatus__T4UuL{color:#0f172a;font-weight:600;text-transform:capitalize}.Chat-module_imagePrompt__v7-Ho{backdrop-filter:blur(12px);background:hsla(0,0%,100%,.25);border:1px solid hsla(0,0%,49%,.35);border-radius:18px;box-shadow:inset 0 0 0 1px hsla(0,0%,100%,.25);display:flex;flex-direction:column;gap:8px;margin-bottom:16px;margin-top:16px;padding:12px}.Chat-module_imagePromptPreview__ve5dB{background:linear-gradient(180deg,rgba(15,118,255,.05),hsla(0,0%,100%,.4));border:1px dashed hsla(0,0%,49%,.3);border-radius:14px;min-height:160px;overflow:hidden;position:relative}.Chat-module_imagePromptImage__KjE3H{display:block;height:100%;object-fit:cover;width:100%}.Chat-module_imagePromptPlaceholder__b8cW6{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.Chat-module_imagePromptSpinner__nat8r{animation:Chat-module_imagePromptSpinner__nat8r .9s linear infinite;border:3px solid hsla(0,0%,100%,.35);border-radius:50%;border-top-color:#2563eb;height:36px;width:36px}@keyframes Chat-module_imagePromptSpinner__nat8r{to{transform:rotate(1turn)}}.Chat-module_imagePromptMeta__YwltP{display:flex;flex-direction:column;gap:4px}.Chat-module_imagePromptPrompt__N1E--{color:#111;font-size:13px;font-weight:500;overflow-wrap:anywhere}.Chat-module_imagePromptStatus__0ROQF{color:#6b7280;font-size:11px}.Chat-module_imagePromptError__x1952{align-items:center;background:rgba(220,38,38,.08);color:#dc2626;display:flex;font-size:12px;inset:0;justify-content:center;padding:12px;position:absolute;text-align:center}\n/*# sourceMappingURL=data:application/json;base64,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LGtCQUFtQixDQUtuQix1Q0FBNEMsQ0FINUMsZUFBZ0IsQ0FDaEIsZ0JBQWlCLENBQ2pCLGVBQWdCLENBSGhCLFlBS0osQ0FFQSx1Q0FDSSxlQUNKLENBRUEsa0RBQ0ksZUFDSixDQUVBLGdDQUVJLGFBQWMsQ0FDZCxlQUFnQixDQUZoQix5QkFHSixDQU1BLGdDQU9JLDBCQUEyQixDQUQzQiw4QkFBcUMsQ0FEckMsbUNBQTJDLENBRDNDLGtCQUFtQixDQUluQiw4Q0FBcUQsQ0FDckQsWUFBYSxDQUNiLHFCQUFzQixDQUN0QixPQUFRLENBVFIsa0JBQW1CLENBRG5CLGVBQWdCLENBRWhCLFlBU0osQ0FFQSx1Q0FNSSwwRUFBdUYsQ0FEdkYsbUNBQTJDLENBSDNDLGtCQUFtQixDQUVuQixnQkFBaUIsQ0FEakIsZUFBZ0IsQ0FGaEIsaUJBTUosQ0FFQSxxQ0FJSSxhQUFjLENBRmQsV0FBWSxDQUNaLGdCQUFpQixDQUZqQixVQUlKLENBRUEsMkNBSUksa0JBQW1CLENBRG5CLFlBQWEsQ0FEYixXQUFZLENBR1osc0JBQXVCLENBSnZCLFVBS0osQ0FFQSx1Q0FNSSxtRUFBa0QsQ0FEbEQsb0NBQXlCLENBRnpCLGlCQUFrQixDQUVsQix3QkFBeUIsQ0FIekIsV0FBWSxDQURaLFVBTUosQ0FFQSxpREFDSSxHQUNJLHVCQUNKLENBQ0osQ0FFQSxvQ0FDSSxZQUFhLENBQ2IscUJBQXNCLENBQ3RCLE9BQ0osQ0FFQSxzQ0FHSSxVQUFXLENBRlgsY0FBZSxDQUNmLGVBQWdCLENBRWhCLHNCQUNKLENBRUEsc0NBRUksYUFBYyxDQURkLGNBRUosQ0FFQSxxQ0FJSSxrQkFBbUIsQ0FNbkIsOEJBQW1DLENBRG5DLGFBQWMsQ0FOZCxZQUFhLENBS2IsY0FBZSxDQU5mLE9BQVEsQ0FHUixzQkFBdUIsQ0FDdkIsWUFBYSxDQUxiLGlCQUFrQixDQU1sQixpQkFJSiIsImZpbGUiOiJDaGF0Lm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ09wZW5Nb2ppQmxhY2snO1xuICAgIHNyYzogdXJsKCdodHRwczovL3M2LnB0YmsuaW8vZm9udHMvT3Blbk1vamktYmxhY2stZ2x5Zi53b2ZmMicpIGZvcm1hdCgnd29mZjInKTsgLyogPC0gVE9ETzogW/CfkLHigI3wn5qAXSBEeW5hbWljYWxseSBsb2FkIGZyb20gL3NlcnZlcnMudHMgKi9cbiAgICB1bmljb2RlLXJhbmdlOiBVKzIzLCBVKzJBLCBVKzJELCBVKzMwLTM5LCBVK0E5LCBVK0FFLCBVKzIwMEQsIFUrMjAzQywgVSsyMDQ5LCBVKzIwRTMsIFUrMjExNywgVSsyMTIwLCBVKzIxMjIsIFUrMjEzOSxcbiAgICAgICAgVSsyMTk0LTIxOTksIFUrMjFBOSwgVSsyMUFBLCBVKzIyOUMsIFUrMjMxQSwgVSsyMzFCLCBVKzIzMjgsIFUrMjNDRiwgVSsyM0U5LTIzRjMsIFUrMjNGOC0yM0ZFLCBVKzI0QzIsIFUrMjVBMSxcbiAgICAgICAgVSsyNUFBLTI1QUUsIFUrMjVCNiwgVSsyNUMwLCBVKzI1QzksIFUrMjVEMCwgVSsyNUQxLCBVKzI1RTctMjVFQSwgVSsyNUVELCBVKzI1RUUsIFUrMjVGQi0yNUZFLCBVKzI2MDAtMjYwNSxcbiAgICAgICAgVSsyNjBFLCBVKzI2MTEsIFUrMjYxNCwgVSsyNjE1LCBVKzI2MTgsIFUrMjYxRCwgVSsyNjIwLCBVKzI2MjIsIFUrMjYyMywgVSsyNjI2LCBVKzI2MkEsIFUrMjYyRSwgVSsyNjJGLFxuICAgICAgICBVKzI2MzgtMjYzQSwgVSsyNjQwLCBVKzI2NDIsIFUrMjY0OC0yNjUzLCBVKzI2NUYsIFUrMjY2MCwgVSsyNjYzLCBVKzI2NjUsIFUrMjY2NiwgVSsyNjY4LCBVKzI2N0IsIFUrMjY3RSwgVSsyNjdGLFxuICAgICAgICBVKzI2OTEtMjY5NywgVSsyNjk5LCBVKzI2OUIsIFUrMjY5QywgVSsyNkEwLCBVKzI2QTEsIFUrMjZBNywgVSsyNkFBLCBVKzI2QUIsIFUrMjZCMCwgVSsyNkIxLCBVKzI2QkQsIFUrMjZCRSxcbiAgICAgICAgVSsyNkM0LCBVKzI2QzUsIFUrMjZDOCwgVSsyNkNFLCBVKzI2Q0YsIFUrMjZEMSwgVSsyNkQzLCBVKzI2RDQsIFUrMjZFOSwgVSsyNkVBLCBVKzI2RjAtMjZGNSwgVSsyNkY3LTI2RkEsIFUrMjZGRCxcbiAgICAgICAgVSsyNzAyLCBVKzI3MDUsIFUrMjcwOC0yNzBELCBVKzI3MEYsIFUrMjcxMiwgVSsyNzE0LCBVKzI3MTYsIFUrMjcxRCwgVSsyNzIxLCBVKzI3MjgsIFUrMjczMywgVSsyNzM0LCBVKzI3NDQsXG4gICAgICAgIFUrMjc0NywgVSsyNzRDLCBVKzI3NEUsIFUrMjc1My0yNzU1LCBVKzI3NTcsIFUrMjc2MywgVSsyNzY0LCBVKzI3OTUtMjc5NywgVSsyN0ExLCBVKzI3QjAsIFUrMjdCRiwgVSsyOTM0LCBVKzI5MzUsXG4gICAgICAgIFUrMkIwNS0yQjA3LCBVKzJCMEMsIFUrMkIwRCwgVSsyQjFCLCBVKzJCMUMsIFUrMkIxRi0yQjI0LCBVKzJCMkUsIFUrMkIyRiwgVSsyQjUwLCBVKzJCNTUsIFUrMkI1OCwgVSsyQjhGLFxuICAgICAgICBVKzJCQkEtMkJCQywgVSsyQkMzLCBVKzJCQzQsIFUrMkJFQSwgVSsyQkVCLCBVKzMwMzAsIFUrMzAzRCwgVSszMjk3LCBVKzMyOTksIFUrRTAwMC1FMDA5LCBVK0UwMTAsIFUrRTAxMSxcbiAgICAgICAgVStFMDQwLUUwNkQsIFUrRTA4MC1FMEI0LCBVK0UwQzAtRTBDQywgVStFMEZGLUUxMEQsIFUrRTE0MC1FMTRBLCBVK0UxNTAtRTE1NywgVStFMTgxLUUxODksIFUrRTFDMC1FMUM0LFxuICAgICAgICBVK0UxQzYtRTFEOSwgVStFMjAwLUUyMTYsIFUrRTI0MC1FMjY5LCBVK0UyODAtRTI4MywgVStFMkMwLUUyQzQsIFUrRTJDNi1FMkRBLCBVK0UzMDAtRTMwMywgVStFMzA1LUUzMEYsXG4gICAgICAgIFUrRTMxMi1FMzE2LCBVK0UzMTgtRTMyMiwgVStFMzI0LUUzMjksIFUrRTMyQiwgVStFMzQwLUUzNDgsIFUrRTM4MCwgVStFMzgxLCBVK0YwMDAsIFUrRjc3QSwgVStGOEZGLCBVK0ZFMEYsXG4gICAgICAgIFUrMUYwMDQsIFUrMUYwQ0YsIFUrMUYxMEQtMUYxMEYsIFUrMUYxMkYsIFUrMUYxNkQtMUYxNzEsIFUrMUYxN0UsIFUrMUYxN0YsIFUrMUYxOEUsIFUrMUYxOTEtMUYxOUEsIFUrMUYxRTYtMUYxRkYsXG4gICAgICAgIFUrMUYyMDEsIFUrMUYyMDIsIFUrMUYyMUEsIFUrMUYyMkYsIFUrMUYyMzItMUYyM0EsIFUrMUYyNTAsIFUrMUYyNTEsIFUrMUYyNjAtMUYyNjUsIFUrMUYzMDAtMUYzMjEsIFUrMUYzMjQtMUYzOTMsXG4gICAgICAgIFUrMUYzOTYsIFUrMUYzOTcsIFUrMUYzOTktMUYzOUIsIFUrMUYzOUUtMUYzRjAsIFUrMUYzRjMtMUYzRjUsIFUrMUYzRjctMUY0RkQsIFUrMUY0RkYtMUY1M0QsIFUrMUY1NDktMUY1NEUsXG4gICAgICAgIFUrMUY1NTAtMUY1NjcsIFUrMUY1NkYsIFUrMUY1NzAsIFUrMUY1NzMtMUY1N0EsIFUrMUY1ODcsIFUrMUY1OEEtMUY1OEQsIFUrMUY1OTAsIFUrMUY1OTUsIFUrMUY1OTYsIFUrMUY1QTQsXG4gICAgICAgIFUrMUY1QTUsIFUrMUY1QTgsIFUrMUY1QjEsIFUrMUY1QjIsIFUrMUY1QkMsIFUrMUY1QzItMUY1QzQsIFUrMUY1RDEtMUY1RDMsIFUrMUY1REMtMUY1REUsIFUrMUY1RTEsIFUrMUY1RTMsXG4gICAgICAgIFUrMUY1RTgsIFUrMUY1RUYsIFUrMUY1RjMsIFUrMUY1RkEtMUY2NEYsIFUrMUY2ODAtMUY2QzUsIFUrMUY2Q0ItMUY2RDIsIFUrMUY2RDUtMUY2RDcsIFUrMUY2REMtMUY2RTUsIFUrMUY2RTksXG4gICAgICAgIFUrMUY2RUIsIFUrMUY2RUMsIFUrMUY2RjAsIFUrMUY2RjMtMUY2RkMsIFUrMUY3RTAtMUY3RUIsIFUrMUY3RjAsIFUrMUY5MEMtMUY5M0EsIFUrMUY5M0MtMUY5NDUsIFUrMUY5NDctMUY5RkYsXG4gICAgICAgIFUrMUZBNzAtMUZBN0MsIFUrMUZBODAtMUZBODgsIFUrMUZBOTAtMUZBQkQsIFUrMUZBQkYtMUZBQzUsIFUrMUZBQ0UtMUZBREIsIFUrMUZBRTAtMUZBRTgsIFUrMUZBRjAtMUZBRjgsXG4gICAgICAgIFUrMUZCQzUtMUZCQzksIFUrRTAwNjEtRTAwNjcsIFUrRTAwNjksIFUrRTAwNkMtRTAwNzksIFUrRTAwN0Y7XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnT3Blbk1vamlDb2xvcic7XG4gICAgc3JjOiB1cmwoJ2h0dHBzOi8vczYucHRiay5pby9mb250cy9PcGVuTW9qaS1jb2xvci1jYmR0LndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICB1bmljb2RlLXJhbmdlOiBVKzIzLCBVKzJBLCBVKzJELCBVKzMwLTM5LCBVK0E5LCBVK0FFLCBVKzIwMEQsIFUrMjAzQywgVSsyMDQ5LCBVKzIwRTMsIFUrMjExNywgVSsyMTIwLCBVKzIxMjIsIFUrMjEzOSxcbiAgICAgICAgVSsyMTk0LTIxOTksIFUrMjFBOSwgVSsyMUFBLCBVKzIyOUMsIFUrMjMxQSwgVSsyMzFCLCBVKzIzMjgsIFUrMjNDRiwgVSsyM0U5LTIzRjMsIFUrMjNGOC0yM0ZFLCBVKzI0QzIsIFUrMjVBMSxcbiAgICAgICAgVSsyNUFBLTI1QUUsIFUrMjVCNiwgVSsyNUMwLCBVKzI1QzksIFUrMjVEMCwgVSsyNUQxLCBVKzI1RTctMjVFQSwgVSsyNUVELCBVKzI1RUUsIFUrMjVGQi0yNUZFLCBVKzI2MDAtMjYwNSxcbiAgICAgICAgVSsyNjBFLCBVKzI2MTEsIFUrMjYxNCwgVSsyNjE1LCBVKzI2MTgsIFUrMjYxRCwgVSsyNjIwLCBVKzI2MjIsIFUrMjYyMywgVSsyNjI2LCBVKzI2MkEsIFUrMjYyRSwgVSsyNjJGLFxuICAgICAgICBVKzI2MzgtMjYzQSwgVSsyNjQwLCBVKzI2NDIsIFUrMjY0OC0yNjUzLCBVKzI2NUYsIFUrMjY2MCwgVSsyNjYzLCBVKzI2NjUsIFUrMjY2NiwgVSsyNjY4LCBVKzI2N0IsIFUrMjY3RSwgVSsyNjdGLFxuICAgICAgICBVKzI2OTEtMjY5NywgVSsyNjk5LCBVKzI2OUIsIFUrMjY5QywgVSsyNkEwLCBVKzI2QTEsIFUrMjZBNywgVSsyNkFBLCBVKzI2QUIsIFUrMjZCMCwgVSsyNkIxLCBVKzI2QkQsIFUrMjZCRSxcbiAgICAgICAgVSsyNkM0LCBVKzI2QzUsIFUrMjZDOCwgVSsyNkNFLCBVKzI2Q0YsIFUrMjZEMSwgVSsyNkQzLCBVKzI2RDQsIFUrMjZFOSwgVSsyNkVBLCBVKzI2RjAtMjZGNSwgVSsyNkY3LTI2RkEsIFUrMjZGRCxcbiAgICAgICAgVSsyNzAyLCBVKzI3MDUsIFUrMjcwOC0yNzBELCBVKzI3MEYsIFUrMjcxMiwgVSsyNzE0LCBVKzI3MTYsIFUrMjcxRCwgVSsyNzIxLCBVKzI3MjgsIFUrMjczMywgVSsyNzM0LCBVKzI3NDQsXG4gICAgICAgIFUrMjc0NywgVSsyNzRDLCBVKzI3NEUsIFUrMjc1My0yNzU1LCBVKzI3NTcsIFUrMjc2MywgVSsyNzY0LCBVKzI3OTUtMjc5NywgVSsyN0ExLCBVKzI3QjAsIFUrMjdCRiwgVSsyOTM0LCBVKzI5MzUsXG4gICAgICAgIFUrMkIwNS0yQjA3LCBVKzJCMEMsIFUrMkIwRCwgVSsyQjFCLCBVKzJCMUMsIFUrMkIxRi0yQjI0LCBVKzJCMkUsIFUrMkIyRiwgVSsyQjUwLCBVKzJCNTUsIFUrMkI1OCwgVSsyQjhGLFxuICAgICAgICBVKzJCQkEtMkJCQywgVSsyQkMzLCBVKzJCQzQsIFUrMkJFQSwgVSsyQkVCLCBVKzMwMzAsIFUrMzAzRCwgVSszMjk3LCBVKzMyOTksIFUrRTAwMC1FMDA5LCBVK0UwMTAsIFUrRTAxMSxcbiAgICAgICAgVStFMDQwLUUwNkQsIFUrRTA4MC1FMEI0LCBVK0UwQzAtRTBDQywgVStFMEZGLUUxMEQsIFUrRTE0MC1FMTRBLCBVK0UxNTAtRTE1NywgVStFMTgxLUUxODksIFUrRTFDMC1FMUM0LFxuICAgICAgICBVK0UxQzYtRTFEOSwgVStFMjAwLUUyMTYsIFUrRTI0MC1FMjY5LCBVK0UyODAtRTI4MywgVStFMkMwLUUyQzQsIFUrRTJDNi1FMkRBLCBVK0UzMDAtRTMwMywgVStFMzA1LUUzMEYsXG4gICAgICAgIFUrRTMxMi1FMzE2LCBVK0UzMTgtRTMyMiwgVStFMzI0LUUzMjksIFUrRTMyQiwgVStFMzQwLUUzNDgsIFUrRTM4MCwgVStFMzgxLCBVK0YwMDAsIFUrRjc3QSwgVStGOEZGLCBVK0ZFMEYsXG4gICAgICAgIFUrMUYwMDQsIFUrMUYwQ0YsIFUrMUYxMEQtMUYxMEYsIFUrMUYxMkYsIFUrMUYxNkQtMUYxNzEsIFUrMUYxN0UsIFUrMUYxN0YsIFUrMUYxOEUsIFUrMUYxOTEtMUYxOUEsIFUrMUYxRTYtMUYxRkYsXG4gICAgICAgIFUrMUYyMDEsIFUrMUYyMDIsIFUrMUYyMUEsIFUrMUYyMkYsIFUrMUYyMzItMUYyM0EsIFUrMUYyNTAsIFUrMUYyNTEsIFUrMUYyNjAtMUYyNjUsIFUrMUYzMDAtMUYzMjEsIFUrMUYzMjQtMUYzOTMsXG4gICAgICAgIFUrMUYzOTYsIFUrMUYzOTcsIFUrMUYzOTktMUYzOUIsIFUrMUYzOUUtMUYzRjAsIFUrMUYzRjMtMUYzRjUsIFUrMUYzRjctMUY0RkQsIFUrMUY0RkYtMUY1M0QsIFUrMUY1NDktMUY1NEUsXG4gICAgICAgIFUrMUY1NTAtMUY1NjcsIFUrMUY1NkYsIFUrMUY1NzAsIFUrMUY1NzMtMUY1N0EsIFUrMUY1ODcsIFUrMUY1OEEtMUY1OEQsIFUrMUY1OTAsIFUrMUY1OTUsIFUrMUY1OTYsIFUrMUY1QTQsXG4gICAgICAgIFUrMUY1QTUsIFUrMUY1QTgsIFUrMUY1QjEsIFUrMUY1QjIsIFUrMUY1QkMsIFUrMUY1QzItMUY1QzQsIFUrMUY1RDEtMUY1RDMsIFUrMUY1REMtMUY1REUsIFUrMUY1RTEsIFUrMUY1RTMsXG4gICAgICAgIFUrMUY1RTgsIFUrMUY1RUYsIFUrMUY1RjMsIFUrMUY1RkEtMUY2NEYsIFUrMUY2ODAtMUY2QzUsIFUrMUY2Q0ItMUY2RDIsIFUrMUY2RDUtMUY2RDcsIFUrMUY2REMtMUY2RTUsIFUrMUY2RTksXG4gICAgICAgIFUrMUY2RUIsIFUrMUY2RUMsIFUrMUY2RjAsIFUrMUY2RjMtMUY2RkMsIFUrMUY3RTAtMUY3RUIsIFUrMUY3RjAsIFUrMUY5MEMtMUY5M0EsIFUrMUY5M0MtMUY5NDUsIFUrMUY5NDctMUY5RkYsXG4gICAgICAgIFUrMUZBNzAtMUZBN0MsIFUrMUZBODAtMUZBODgsIFUrMUZBOTAtMUZBQkQsIFUrMUZBQkYtMUZBQzUsIFUrMUZBQ0UtMUZBREIsIFUrMUZBRTAtMUZBRTgsIFUrMUZBRjAtMUZBRjgsXG4gICAgICAgIFUrMUZCQzUtMUZCQzksIFUrRTAwNjEtRTAwNjcsIFUrRTAwNjksIFUrRTAwNkMtRTAwNzksIFUrRTAwN0Y7XG59XG5cbi5jb3BpZWRUb0NsaXBib2FyZE1lc3NhZ2Uge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDMycHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBiYWNrZ3JvdW5kOiAjMjIyO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIHBhZGRpbmc6IDEwcHggMjRweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgZm9udC1zaXplOiAxLjFlbTtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7XG4gICAgb3BhY2l0eTogMC45NztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiA5OTk5O1xufVxuXG4uQ2hhdCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmLCAnT3Blbk1vamlDb2xvcicsICdPcGVuTW9qaUJsYWNrJztcblxuICAgIC0tY2hhdC1tZXNzYWdlLW1pbi13aWR0aDogMTUwcHg7XG4gICAgLS1jaGF0LW1lc3NhZ2UtbWF4LXdpZHRoOiBtaW4oNzAlLCA2MDBweCk7XG4gICAgLS1jaGF0LW1lc3NhZ2UtYXZhdGFyLWdhcDogMTJweDtcbiAgICAvKiA8LSBUT0RPOiBb8J+noF1b8J+OsV0gQmV0dGVyLCBkZWZpbmUgb3RoZXIgZm9udHMgKi9cbn1cblxuLmNoYXRNYWluRmxvdyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlOlxuICAgICAgICAn8J+fpicgbWluLWNvbnRlbnRcbiAgICAgICAgJ/CfkqwnIDFmclxuICAgICAgICAn8J+TnScgbWluLWNvbnRlbnRcbiAgICAgICAgLyAxZnI7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRCYXIge1xuICAgIGdyaWQtYXJlYTog8J+fpjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgY29sb3I6ICMwZjE3MjQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxNSwgMjMsIDM2LCAwLjA2KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLlRhc2tzSW5Qcm9ncmVzcyB7XG4gICAgZ3JpZC1hcmVhOiDwn5+mO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGhlaWdodDogbWluLWNvbnRlbnQ7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgIGp1c3RpZnktc2VsZjogc2VsZi1lbmQ7XG4gICAgbWFyZ2luOiA4cHggMTZweDtcbn1cblxuLmFjdGlvbnMge1xuICAgIGdyaWQtYXJlYTog8J+SrDtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IG1pbi1jb250ZW50O1xuICAgIHotaW5kZXg6IDQwO1xuICAgIGFsaWduLXNlbGY6IHNlbGYtc3RhcnQ7XG4gICAganVzdGlmeS1zZWxmOiBzZWxmLWVuZDtcbiAgICBtYXJnaW46IDE2cHggMjBweCAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDhweDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbiAgICB3aWxsLWNoYW5nZTogb3BhY2l0eTtcbn1cblxuLmFjdGlvbnMucG9ydGFsIHtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5hY3Rpb25zLmxlZnQge1xuICAgIGp1c3RpZnktc2VsZjogc2VsZi1zdGFydDtcbn1cblxuLmFjdGlvbnMucmlnaHQge1xuICAgIGp1c3RpZnktc2VsZjogc2VsZi1lbmQ7XG59XG5cbi5hY3Rpb25zRmFkZWQge1xuICAgIG9wYWNpdHk6IDAuMztcbn1cblxuLmFjdGlvbnNTY3JvbGxpbmcge1xuICAgIG9wYWNpdHk6IDAuMTU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIExhcmdlIHRhYmxldCBhbmQgc21hbGwgZGVza3RvcCBzY3JlZW5zICovXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgICAuY2hhdEJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBnYXA6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b24gc3ZnIHtcbiAgICAgICAgd2lkdGg6IDE4cHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b25UZXh0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBnYXA6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnVzZVRlbXBsYXRlQnV0dG9uIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiAuY2hhdEJ1dHRvblRleHQge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4vKiBNZWRpdW0gc2NyZWVucyAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgLmFjdGlvbnMge1xuICAgICAgICBtYXJnaW46IDE0cHggMThweCAwO1xuICAgICAgICBnYXA6IDdweDtcbiAgICB9XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRDaGlsZHJlbiB7XG4gICAgZ3JpZC1hcmVhOiDwn5KsO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiAzMDA7XG59XG5cbi8qIENoYXQgbWVzc2FnZXMgYXJlYSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2VzIHtcbiAgICBncmlkLWFyZWE6IPCfkqw7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIHBhZGRpbmc6IDI0cHggMjBweCAxNnB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xufVxuXG4uaGFzQWN0aW9uc0FuZEZpcnN0TWVzc2FnZUlzTG9uZyB7XG4gICAgcGFkZGluZy10b3A6IDgwcHg7XG59XG5cbi8qIEN1c3RvbSBzY3JvbGxiYXIgc3R5bGluZyAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2VzOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDZweDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2VzOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4yKTtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2VzOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjMpO1xufVxuXG4vKiBJbmRpdmlkdWFsIGNoYXQgbWVzc2FnZSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2Uge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBjb2x1bW4tZ2FwOiB2YXIoLS1jaGF0LW1lc3NhZ2UtYXZhdGFyLWdhcCk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGFuaW1hdGlvbjogbWVzc2FnZVNsaWRlSW4gMC40cyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVN0YWNrIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1jaGF0LW1lc3NhZ2UtbWF4LXdpZHRoKTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UuaXNNZSAubWVzc2FnZVN0YWNrIHtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5tZXNzYWdlU3RhY2sgPiAqIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5tZXNzYWdlTWV0YSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNnB4O1xuICAgIG1hcmdpbjogNHB4IDZweCAwO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBjb2xvcjogIzZiNzI4MDtcbiAgICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZS5pc01lIC5tZXNzYWdlTWV0YSB7XG4gICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5tZXNzYWdlVGltZXN0YW1wIHtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xufVxuXG4ubWVzc2FnZUR1cmF0aW9uIHtcbiAgICBvcGFjaXR5OiAwLjg1O1xufVxuXG4ucGFydGljaXBhbnRMYWJlbCB7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICM2NDc0OGI7XG4gICAgbWFyZ2luOiAwIDAgNnB4O1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZS5pc01lIC5wYXJ0aWNpcGFudExhYmVsIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuQGtleWZyYW1lcyBtZXNzYWdlU2xpZGVJbiB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KSBzY2FsZSgwLjk1KTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gICAgfVxufVxuXG4uaXNOb3RDb21wbGV0ZU1lc3NhZ2Uge1xuICAgIC8qL1xuICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgI2ZmMDAwMCAhaW1wb3J0YW50O1xuICAgIC8qKi9cblxuICAgIG9wYWNpdHk6IDAuNztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5Ob25Db21wbGV0ZU1lc3NhZ2VGaWxsZXIge1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLyogRW5oYW5jZWQgbG9hZGluZyBzdGF0ZXMgZm9yIG1lc3NhZ2VzICovXG4uaXNOb3RDb21wbGV0ZU1lc3NhZ2UgLm1lc3NhZ2VUZXh0OjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogOHB4O1xuICAgIHJpZ2h0OiAxMnB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogNHB4O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSwgdHJhbnNwYXJlbnQpO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBhbmltYXRpb246IGxvYWRpbmdQdWxzZSAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG4ub25nb2luZ1Rvb2xDYWxscyxcbi5jb21wbGV0ZWRUb29sQ2FsbHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiA4cHg7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIHBhZGRpbmctdG9wOiA4cHg7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbn1cblxuLnNvdXJjZUNpdGF0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgcGFkZGluZy10b3A6IDhweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xufVxuXG4ub25nb2luZ1Rvb2xDYWxsLFxuLmNvbXBsZXRlZFRvb2xDYWxsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA4cHg7XG4gICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgZm9udC1mYW1pbHk6ICdPcGVuTW9qaUNvbG9yJywgJ09wZW5Nb2ppQmxhY2snLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuXG4uY29tcGxldGVkVG9vbENhbGwge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xufVxuXG4uY29tcGxldGVkVG9vbENhbGw6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG5cbi50b29sQ2FsbE9yaWdpbiB7XG4gICAgZm9udC1zaXplOiAwLjg1ZW07XG4gICAgb3BhY2l0eTogMC43NTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi50b29sQ2FsbERldGFpbHMge1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnRvb2xDYWxsRGV0YWlscyBwIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5cbi50b29sQ2FsbERhdGEge1xuICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xufVxuXG4ub25nb2luZ1Rvb2xDYWxsU3Bpbm5lciB7XG4gICAgd2lkdGg6IDE0cHg7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBhbmltYXRpb246IHRvb2xDYWxsU3Bpbm5lciAwLjhzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuLm9uZ29pbmdUb29sQ2FsbE5hbWUge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbkBrZXlmcmFtZXMgdG9vbENhbGxTcGlubmVyIHtcbiAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIGxvYWRpbmdQdWxzZSB7XG4gICAgMCUsXG4gICAgMTAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDAuMztcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMC44KTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMS4yKTtcbiAgICB9XG59XG5cbi8qIFR5cGluZyBpbmRpY2F0b3IgZm9yIEFJIG1lc3NhZ2VzICovXG4udHlwaW5nSW5kaWNhdG9yIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGFuaW1hdGlvbjogbWVzc2FnZVNsaWRlSW4gMC40cyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG59XG5cbi50eXBpbmdJbmRpY2F0b3IgLmF2YXRhciB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIG1hcmdpbjogMCAxMnB4IDRweDtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLyogW+OKl++4j11cbi50eXBpbmdJbmRpY2F0b3IgLmF2YXRhciBpbWcge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWY2ZmI7XG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjEpO1xufVxuKi9cblxuLnR5cGluZ0J1YmJsZSB7XG4gICAgcGFkZGluZzogMTZweCAyMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA0cHg7XG4gICAgbWluLWhlaWdodDogMjRweDtcbn1cblxuLnR5cGluZ0RvdHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA0cHg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnR5cGluZ0RvdCB7XG4gICAgd2lkdGg6IDhweDtcbiAgICBoZWlnaHQ6IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzZiNzI4MCAwJSwgcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjYpIDEwMCUpO1xuICAgIGFuaW1hdGlvbjogdHlwaW5nQm91bmNlIDEuNHMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XG4gICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLnR5cGluZ0RvdDpudGgtY2hpbGQoMSkge1xuICAgIGFuaW1hdGlvbi1kZWxheTogLTAuMzJzO1xufVxuXG4udHlwaW5nRG90Om50aC1jaGlsZCgyKSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAtMC4xNnM7XG59XG5cbi50eXBpbmdEb3Q6bnRoLWNoaWxkKDMpIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDBzO1xufVxuXG5Aa2V5ZnJhbWVzIHR5cGluZ0JvdW5jZSB7XG4gICAgMCUsXG4gICAgODAlLFxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCkgdHJhbnNsYXRlWSgwKTtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICA0MCUge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMikgdHJhbnNsYXRlWSgtOHB4KTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlLmlzTWUge1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZS5pc01lIC5tZXNzYWdlVGV4dCB7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDZweDtcbn1cblxuLnJhdGluZ1N0YXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbiAgICBjb2xvcjogdmFyKC0tc3Rhci1pbmFjdGl2ZS1jb2xvciwgI2NjYyk7XG59XG5cbi5yYXRpbmdTdGFyLmFjdGl2ZSB7XG4gICAgY29sb3I6ICNmZmQ3MDA7XG59XG5cbi8qIFNlbmRlciBBdmF0YXIgKi9cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5hdmF0YXIge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7XG4gICAgbWFyZ2luOiAwIDAgNHB4O1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLyogW+OKl++4j11cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5hdmF0YXIgaW1nIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdmF0YXItYmctY29sb3IsICNlZWY2ZmIpO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTtcbn1cblxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAuYXZhdGFyIGltZzpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG4qL1xuXG4vKiBNZXNzYWdlIHRleHQgYnViYmxlICovXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVRleHQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1lc3NhZ2UtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZXNzYWdlLXRleHQtY29sb3IpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiAxNHB4IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiB2YXIoLS1jaGF0LW1lc3NhZ2UtbWluLXdpZHRoKTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICAtLWNoYXQtaGVhZGluZy1zdXJmYWNlOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xuICAgIC0tY2hhdC1oZWFkaW5nLWFjY2VudDogcmdiYSg1NiwgMTg5LCAyNDgsIDAuODUpO1xuICAgIC0tY2hhdC1oZWFkaW5nLXRleHQtY29sb3I6IHZhcigtLW1lc3NhZ2UtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgLS1jaGF0LWhlYWRpbmctYm9yZGVyLWNvbG9yOiByZ2JhKDE1LCAyMywgNDIsIDAuMTgpO1xuICAgIC0tY2hhdC1oZWFkaW5nLXNoYWRvdy1jb2xvcjogcmdiYSgxNSwgMjMsIDQyLCAwLjY1KTtcbn1cblxuQHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICMwMDAgNTAlLCAjZmZmIDUwJSkpIHtcbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVRleHQge1xuICAgICAgICAtLWNoYXQtaGVhZGluZy1zdXJmYWNlOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWVzc2FnZS1iZy1jb2xvciwgI2ZmZmZmZikgNzAlLCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpIDMwJSk7XG4gICAgICAgIC0tY2hhdC1oZWFkaW5nLWFjY2VudDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1lc3NhZ2UtdGV4dC1jb2xvciwgIzBmMTcyYSkgNjUlLCByZ2JhKDU5LCAxMzAsIDI0NiwgMC45KSAzNSUpO1xuICAgICAgICAtLWNoYXQtaGVhZGluZy1ib3JkZXItY29sb3I6IGNvbG9yLW1peChcbiAgICAgICAgICAgIGluIHNyZ2IsXG4gICAgICAgICAgICB2YXIoLS1tZXNzYWdlLWJnLWNvbG9yLCAjZmZmZmZmKSA2MCUsXG4gICAgICAgICAgICByZ2JhKDE1LCAyMywgNDIsIDAuMTIpIDQwJVxuICAgICAgICApO1xuICAgICAgICAtLWNoYXQtaGVhZGluZy1zaGFkb3ctY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDE1LCAyMywgNDIsIDAuNjUpIDgwJSwgcmdiYSg5NiwgMTY1LCAyNTAsIDAuNDUpIDIwJSk7XG4gICAgICAgIC0tY2hhdC1oZWFkaW5nLXRleHQtY29sb3I6IHZhcigtLW1lc3NhZ2UtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxufVxuXG4vKiBDb3B5IGJ1dHRvbiBzdHlsZXMgKi9cbi5jb3B5QnV0dG9uQ29udGFpbmVyIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgdG9wOiA4cHg7XG4gICAgcmlnaHQ6IDEwcHg7XG4gICAgei1pbmRleDogMjtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5tZXNzYWdlVGV4dDpob3ZlciAuY29weUJ1dHRvbkNvbnRhaW5lcixcbi5jb3B5QnV0dG9uQ29udGFpbmVyOmZvY3VzLXdpdGhpbiB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuLm1lc3NhZ2VDb250cm9sR3JvdXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDZweDtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuLmNvcHlCdXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA3KTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMsIGJveC1zaGFkb3cgMC4xNXMsIGJvcmRlciAwLjE1cztcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnBsYXlCdXR0b24ge1xuICAgIHdpZHRoOiAzNnB4O1xuICAgIGhlaWdodDogMzZweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlO1xuICAgIGNvbG9yOiAjMTExO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4ucGxheUJ1dHRvbkljb24ge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbn1cblxuLnBsYXlCdXR0b25TcGlubmVyIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAjMTExO1xuICAgIGFuaW1hdGlvbjogbWVzc2FnZVBsYXlTcGlubmVyIDAuOXMgbGluZWFyIGluZmluaXRlO1xufVxuXG4ucGxheUJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xufVxuXG4ucGxheUJ1dHRvbjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBvcGFjaXR5OiAwLjY7XG59XG5cbkBrZXlmcmFtZXMgbWVzc2FnZVBsYXlTcGlubmVyIHtcbiAgICBmcm9tIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIH1cbn1cblxuLmNvcGllZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdG9wOiAxMTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBiYWNrZ3JvdW5kOiAjMjIyO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIHBhZGRpbmc6IDZweCAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBmb250LXNpemU6IDAuOThlbTtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7XG4gICAgb3BhY2l0eTogMC45NztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgYW5pbWF0aW9uOiBjb3BpZWRUb29sdGlwRmFkZUluIDAuMnM7XG4gICAgbWF4LXdpZHRoOiAyMjBweDtcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG5cbi5jb3BpZWRUb29sdGlwTGVmdCB7XG4gICAgbGVmdDogMCAhaW1wb3J0YW50O1xuICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uY29waWVkVG9vbHRpcFJpZ2h0IHtcbiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogUmVtb3ZlZCByaWdodC1hbGlnbmVkIG92ZXJyaWRlIHRvIGtlZXAgdG9vbHRpcCBwb3NpdGlvbiBzdGFibGUgKi9cblxuQGtleWZyYW1lcyBjb3BpZWRUb29sdGlwRmFkZUluIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk3KTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAwLjk3O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTtcbiAgICB9XG59XG5cbi5jb3B5QnV0dG9uOmhvdmVyLFxuLmNvcHlCdXR0b246Zm9jdXMge1xuICAgIGJvcmRlcjogMS41cHggc29saWQgI2JiYjtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjEpO1xufVxuXG4uY29weUJ1dHRvbiBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ubWVzc2FnZVRleHQgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG5cbi5tZXNzYWdlVGV4dCBvbCB7XG4gICAgbGlzdC1zdHlsZTogZGVjaW1hbDtcbiAgICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLm1lc3NhZ2VUZXh0IGltZyxcbi5tZXNzYWdlVGV4dCBwcmUsXG4ubWVzc2FnZVRleHQgYmxvY2txdW90ZSxcbi5tZXNzYWdlVGV4dCB0YWJsZSB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbn1cblxuLm1lc3NhZ2VUZXh0IHByZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogIzAwMDAwMGZmO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBwYWRkaW5nOiAxZW07XG59XG5cbi5tZXNzYWdlVGV4dCBibG9ja3F1b3RlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmY2M7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAjMDAwO1xuICAgIHBhZGRpbmc6IDFlbTtcbn1cblxuLm1lc3NhZ2VUZXh0IGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjY2NjY2NjNTU7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4ubWVzc2FnZVRleHQgcHJlIGNvZGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDBjYztcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG59XG5cbi5tZXNzYWdlVGV4dCAuY2hhdC1jb2RlLWJsb2NrIHtcbiAgICBiYWNrZ3JvdW5kOiAjMTgxYzIzO1xuICAgIGNvbG9yOiAjZjhmYWZjO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgYm9yZGVyLWNvbG9yOiAjMjMyNzJmO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgIGZvbnQtZmFtaWx5OiAnRmlyYSBNb25vJywgJ01lbmxvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTtcbn1cbi5tZXNzYWdlVGV4dCAuY2hhdC1jb2RlLWJsb2NrIGNvZGUge1xuICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbiAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbi5tZXNzYWdlVGV4dCB0YWJsZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICBtYXJnaW46IDE2cHggMDtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOyAvKiBTdHJvbmdlciBsaWdodCBiYWNrZ3JvdW5kIGZvciBjb250cmFzdCAqL1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA4KTtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICMxNzIyM2I7IC8qIERhcmsgdGV4dCBmb3IgY29udHJhc3QgKi9cbn1cbi5tZXNzYWdlVGV4dCB0aCxcbi5tZXNzYWdlVGV4dCB0ZCB7XG4gICAgcGFkZGluZzogMTBweCAxNnB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDFkYmU4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgY29sb3I6ICMxNzIyM2I7IC8qIEVuc3VyZSBzdHJvbmcgdGV4dCBjb2xvciBmb3IgYWxsIGNlbGxzICovXG4gICAgYmFja2dyb3VuZDogbm9uZTtcbn1cbi5tZXNzYWdlVGV4dCB0aCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZWFmM2ZhIDgwJSwgI2QxZTNmOCAxMDAlKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiAjMTcyMjNiOyAvKiBTdHJvbmcgaGVhZGVyIHRleHQgKi9cbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2I1YzdkZTtcbn1cbi5tZXNzYWdlVGV4dCB0cjpsYXN0LWNoaWxkIHRkIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLm1lc3NhZ2VUZXh0IHRyOm50aC1jaGlsZChldmVuKSB0ZCB7XG4gICAgYmFja2dyb3VuZDogI2VhZjNmYTtcbn1cbi5tZXNzYWdlVGV4dCB0cjpob3ZlciB0ZCB7XG4gICAgYmFja2dyb3VuZDogI2NiZTBmNztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG4ubWVzc2FnZVRleHQgdGFibGUge1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tZXNzYWdlVGV4dCB0aDpmaXJzdC1jaGlsZCxcbi5tZXNzYWdlVGV4dCB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTJweDtcbn1cbi5tZXNzYWdlVGV4dCB0aDpsYXN0LWNoaWxkLFxuLm1lc3NhZ2VUZXh0IHRkOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMnB4O1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVRleHQ6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi8qIEF0dGFjaG1lbnRzIHN0eWxlcyAqL1xuLmF0dGFjaG1lbnRzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMik7XG59XG5cbi5hdHRhY2htZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA2cHg7XG4gICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4zKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xufVxuXG4uYXR0YWNobWVudDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbn1cblxuLmF0dGFjaG1lbnRJY29uIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgb3BhY2l0eTogMC44O1xufVxuXG4uYXR0YWNobWVudE5hbWUge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLyogTWVzc2FnZSBidXR0b25zIGNvbnRhaW5lciAqL1xuLm1lc3NhZ2VCdXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDEyNSAxMjUgMTI1IC8gMC44Myk7XG59XG5cbi8qIEluZGl2aWR1YWwgbWVzc2FnZSBidXR0b24gKi9cbi5tZXNzYWdlQnV0dG9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDhweCAxNHB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuOSk7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLm1lc3NhZ2VCdXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTMyLCAyNTUsIDAuMSk7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4xNSk7XG59XG5cbi5tZXNzYWdlQnV0dG9uOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcyBlYXNlO1xufVxuXG4vKiBSZW1vdmUgZGVmYXVsdCBtYXJrZG93biBzdHlsZXMgZnJvbSBidXR0b24gY29udGVudCAqL1xuLm1lc3NhZ2VCdXR0b24gcCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi5tZXNzYWdlQnV0dG9uIHN0cm9uZyB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLm1lc3NhZ2VCdXR0b24gZW0ge1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuLyogUmF0aW5nIHN5c3RlbSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLnJhdGluZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogLThweDtcbiAgICByaWdodDogOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAycHg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IDI0cHg7XG4gICAgei1pbmRleDogMTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBwYWRkaW5nOiA0cHggNnB4O1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2U6aG92ZXIgLnJhdGluZyB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5yYXRpbmc6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45KTtcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAucmF0aW5nIHNwYW4ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLnJhdGluZzpob3ZlciBzcGFuIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi8qIENoYXQgaW5wdXQgYXJlYSAqL1xuLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IHtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBncmlkLWFyZWE6IPCfk507XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMjRweDtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEycHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uQ2hhdC5mdWxsUGFnZVZpc3VhbCAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQge1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyNXB4KTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCkgMTAwJSk7XG59XG5cbi8qIEZpbGUgdXBsb2FkIGRyYWctYW5kLWRyb3Agc3R5bGVzICovXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQuZHJhZ092ZXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwgMTMyLCAyNTUsIDAuMSkgMCUsIHJnYmEoMCwgMTMyLCAyNTUsIDAuMDUpIDEwMCUpO1xufVxuXG4vKiBGaWxlIHByZXZpZXcgY29udGFpbmVyICovXG4uZmlsZVByZXZpZXdDb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogOHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLyogSW5kaXZpZHVhbCBmaWxlIHByZXZpZXcgKi9cbi5maWxlUHJldmlldyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogOHB4O1xuICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMik7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbn1cblxuLmZpbGVQcmV2aWV3OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMTUpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjMpO1xufVxuXG4uZmlsZUljb24ge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi5maWxlSW5mbyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMnB4O1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuLmZpbGVOYW1lIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgbWF4LXdpZHRoOiAxNTBweDtcbn1cblxuLmZpbGVTaXplIHtcbiAgICBjb2xvcjogIzZiNzI4MDtcbiAgICBmb250LXNpemU6IDExcHg7XG59XG5cbi5yZW1vdmVGaWxlQnV0dG9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcbiAgICBjb2xvcjogI2ZmNDQ0NDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5yZW1vdmVGaWxlQnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMCwgMCwgMC4yKTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi8qIElucHV0IGNvbnRhaW5lciBmb3IgdGV4dGFyZWEgYW5kIGJ1dHRvbnMgKi9cbi5pbnB1dENvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgZ2FwOiA4cHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDI4cHg7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KTtcbn1cblxuLmlucHV0Q29udGFpbmVyOmZvY3VzLXdpdGhpbiB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmFuZC1jb2xvcik7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMzJweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjEyKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5pbnB1dENvbnRhaW5lciB0ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi8qIEF0dGFjaG1lbnQgYnV0dG9uICovXG4uYXR0YWNobWVudEJ1dHRvbiB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbn1cblxuLmF0dGFjaG1lbnRCdXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi5hdHRhY2htZW50QnV0dG9uOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLyogVm9pY2UgQnV0dG9uICovXG4udm9pY2VCdXR0b24ge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6ICM2NDc0OGI7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbi52b2ljZUJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICBjb2xvcjogIzBmMTcyYTtcbn1cblxuLnZvaWNlQnV0dG9uQWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEpICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICNlZjQ0NDQgIWltcG9ydGFudDtcbiAgICBhbmltYXRpb246IHZvaWNlUmVjb3JkaW5nUHVsc2UgMS41cyBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyB2b2ljZVJlY29yZGluZ1B1bHNlIHtcbiAgICAwJSB7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgyNTUsIDAsIDAsIDAuNCk7XG4gICAgfVxuICAgIDcwJSB7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDEwcHggcmdiYSgyNTUsIDAsIDAsIDApO1xuICAgIH1cbiAgICAxMDAlIHtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMCByZ2JhKDI1NSwgMCwgMCwgMCk7XG4gICAgfVxufVxuXG4vKiBVcGxvYWQgcHJvZ3Jlc3MgaW5kaWNhdG9yICovXG4udXBsb2FkUHJvZ3Jlc3Mge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDEycHg7XG4gICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMzIsIDI1NSwgMC4xKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDEzMiwgMjU1LCAwLjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6ICMwMDg0ZmY7XG59XG5cbi51cGxvYWRQcm9ncmVzc0JhciB7XG4gICAgZmxleDogMTtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEzMiwgMjU1LCAwLjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udXBsb2FkUHJvZ3Jlc3NGaWxsIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMDA4NGZmLCByZ2JhKDAsIDEzMiwgMjU1LCAwLjgpKTtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYW5pbWF0aW9uOiB1cGxvYWRQcm9ncmVzcyAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIHVwbG9hZFByb2dyZXNzIHtcbiAgICAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgfVxufVxuXG4vKiBEcmFnIG92ZXJsYXkgKi9cbi5kcmFnT3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDEzMiwgMjU1LCAwLjEpO1xuICAgIGJvcmRlcjogMnB4IGRhc2hlZCByZ2JhKDAsIDEzMiwgMjU1LCAwLjUpO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICB6LWluZGV4OiAyMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRyYWdPdmVybGF5Q29udGVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMnB4O1xuICAgIGNvbG9yOiAjMDA4NGZmO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZHJhZ092ZXJsYXlDb250ZW50IHN2ZyB7XG4gICAgb3BhY2l0eTogMC43O1xufVxuXG4vKiBDaGF0IGlucHV0IGZpZWxkICovXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWEge1xuICAgIGZsZXg6IDE7XG4gICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIHJlc2l6ZTogbm9uZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWE6Zm9jdXMge1xuICAgIC8qIEZvY3VzIGlzIGhhbmRsZWQgYnkgLmlucHV0Q29udGFpbmVyICovXG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCB0ZXh0YXJlYTpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC42O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgdHJhbnNmb3JtOiBub25lO1xufVxuXG4uY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi8qIENoYXQgc2VuZCBidXR0b24gKi9cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b25bZGF0YS1idXR0b24tdHlwZT0nY2FsbC10by1hY3Rpb24nXSB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIG1hcmdpbjogMCAwIDJweCAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuXG4gICAgYm9yZGVyOiBub25lO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcbiAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICAgIG1pbi13aWR0aDogdW5zZXQgIWltcG9ydGFudDtcbiAgICBtaW4taGVpZ2h0OiB1bnNldCAhaW1wb3J0YW50O1xuXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAxMzIsIDI1NSwgMC4yNSk7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbltkYXRhLWJ1dHRvbi10eXBlPSdjYWxsLXRvLWFjdGlvbiddOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDE2cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zNSk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b25bZGF0YS1idXR0b24tdHlwZT0nY2FsbC10by1hY3Rpb24nXTphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7XG59XG5cbi5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b25bZGF0YS1idXR0b24tdHlwZT0nY2FsbC10by1hY3Rpb24nXSBzdmcge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbn1cblxuLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbiBpbWcge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi8qIFNjcm9sbCB0byBib3R0b20gYnV0dG9uICovXG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciB7XG4gICAgLyovXG4gICAgb3V0bGluZTogMXB4IGRvdHRlZCByZWQ7XG4gICAgLyoqL1xuXG4gICAgei1pbmRleDogMjA7XG4gICAgZ3JpZC1hcmVhOiDwn5OdO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b21XcmFwcGVyIHtcbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTUwJSk7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBhbmltYXRpb246IHNjcm9sbEJ1dHRvblNsaWRlSW4gMC4zcyBlYXNlLW91dDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b20ge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwIDAgMCAvIDAuNSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG59XG5cbkBrZXlmcmFtZXMgc2Nyb2xsQnV0dG9uU2xpZGVJbiB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDIwcHgpIHNjYWxlKDAuOCk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMC45O1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKSBzY2FsZSgxKTtcbiAgICB9XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b21XcmFwcGVyOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTYwJSkgc2NhbGUoMS4wNSk7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUNvbnRhaW5lciAuc2Nyb2xsVG9Cb3R0b21XcmFwcGVyOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTE2MCUpIHNjYWxlKDAuOTUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzIGVhc2U7XG59XG5cbi5zY3JvbGxUb0JvdHRvbUJhZGdlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtOHB4O1xuICAgIHJpZ2h0OiAtOHB4O1xuICAgIG1pbi13aWR0aDogMzJweDtcbiAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJhY2tncm91bmQ6ICMyNTYzZWI7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjQpO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIFJhdGluZyBtb2RhbCAqL1xuLnJhdGluZ01vZGFsIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHotaW5kZXg6IDEwMDA7XG4gICAgYW5pbWF0aW9uOiBtb2RhbEZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuXG5Aa2V5ZnJhbWVzIG1vZGFsRmFkZUluIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDBweCk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG4gICAgfVxufVxuXG4ucmF0aW5nTW9kYWxDb250ZW50IHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIGNvbG9yOiAjMGYxNzI0O1xuICAgIHBhZGRpbmc6IDMycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICB3aWR0aDogOTAlO1xuICAgIG1heC13aWR0aDogNDgwcHg7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG4gICAgYW5pbWF0aW9uOiBtb2RhbFNsaWRlSW4gMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG5cbiAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiwgJ09wZW5Nb2ppQ29sb3InLCAnT3Blbk1vamlCbGFjayc7XG4gICAgLyogPC0gVE9ETzogW/Cfp6BdW/CfjrFdIEJldHRlciwgZGVmaW5lIG90aGVyIGZvbnRzICovXG59XG5cbkBrZXlmcmFtZXMgbW9kYWxTbGlkZUluIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpIHNjYWxlKDAuOTUpO1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTtcbiAgICB9XG59XG5cbi5yYXRpbmdNb2RhbENvbnRlbnQgaDMge1xuICAgIG1hcmdpbjogMCAwIDI0cHggMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY29sb3I6IGJsYWNrO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uc3RhcnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiA4cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbn1cblxuLnN0YXJzIHNwYW4ge1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICBwYWRkaW5nOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xufVxuXG4uc3RhcnMgc3Bhbjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyMTUsIDAsIDAuMSk7XG59XG5cbi5yYXRpbmdNb2RhbFN0YXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbn1cblxuLnRvb2xDYWxsTW9kYWwge1xuICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnRvb2xDYWxsSGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxNnB4O1xuICAgIHBhZGRpbmc6IDI0cHggMzJweCAxNnB4O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNlZWYyZmYgMCUsICNmNWYzZmYgNDAlLCAjZmVmY2M5IDEwMCUpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpO1xufVxuXG4udG9vbENhbGxJY29uIHtcbiAgICBmb250LXNpemU6IDMycHg7XG59XG5cbi50b29sQ2FsbEhlYWRlck1ldGEge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDRweDtcbn1cblxuLnRvb2xDYWxsTGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4zNWVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM0NzU0Njc7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4udG9vbENhbGxUaXRsZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xufVxuXG4udG9vbENhbGxTdWJ0aXRsZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzQ3NTQ2Nztcbn1cblxuLnRvb2xDYWxsR3JpZCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI1MHB4LCAxZnIpKTtcbiAgICBnYXA6IDE2cHg7XG4gICAgcGFkZGluZzogMjRweCAzMnB4IDE2cHg7XG4gICAgYmFja2dyb3VuZDogI2ZlZmVmZTtcbn1cblxuLnRvb2xDYWxsUGFuZWwge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIHBhZGRpbmc6IDE4cHg7XG4gICAgYm94LXNoYWRvdzogMCAxOHB4IDQwcHggcmdiYSgxNSwgMjMsIDQyLCAwLjA4KTtcbn1cblxuLnRvb2xDYWxsUGFuZWxUaXRsZSB7XG4gICAgbWFyZ2luOiAwIDAgMTJweCAwO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjI1ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzk0YTNiODtcbn1cblxuLnRvb2xDYWxsTGlzdCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxMnB4O1xufVxuXG4udG9vbENhbGxJdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiA0cHg7XG59XG5cbi50b29sQ2FsbEl0ZW1MYWJlbCB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjI1ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzk0YTNiODtcbn1cblxuLnRvb2xDYWxsSXRlbVZhbHVlIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6ICMwZjE3MmE7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbn1cblxuLnRvb2xDYWxsU3VtbWFyeSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xufVxuXG4udG9vbENhbGxTdW1tYXJ5TWV0YSB7XG4gICAgbWFyZ2luLXRvcDogMTRweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDhweDtcbn1cblxuLnRvb2xDYWxsU3VtbWFyeU1ldGFCYWRnZSB7XG4gICAgcGFkZGluZzogNXB4IDEycHg7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSg3OSwgNzAsIDIyOSwgMC4xNSk7XG4gICAgY29sb3I6ICMzMTJlODE7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi50b29sQ2FsbEVtcHR5IHtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6ICM5NGEzYjg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4udG9vbENhbGxJc3N1ZXMge1xuICAgIHBhZGRpbmc6IDAgMzJweCAxNnB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogOHB4O1xufVxuXG4udG9vbENhbGxJc3N1ZUJhZGdlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNHB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xufVxuXG4udG9vbENhbGxJc3N1ZUVycm9yIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKTtcbiAgICBjb2xvcjogI2I5MWMxYztcbn1cblxuLnRvb2xDYWxsSXNzdWVXYXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzNCwgMTc5LCA4LCAwLjE2KTtcbiAgICBjb2xvcjogI2ExNjIwNztcbn1cblxuLnRvb2xDYWxsRm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTJweDtcbiAgICBwYWRkaW5nOiAwIDMycHggMjRweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi50b29sQ2FsbFRpbWVzdGFtcCB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAjNDc1NDY3O1xufVxuXG4udG9vbENhbGxSYXdEZXRhaWxzIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6ICMyNTYzZWI7XG59XG5cbi50b29sQ2FsbFJhd1N1bW1hcnkge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMjU2M2ViO1xufVxuXG4udG9vbENhbGxSYXdDb2x1bW5zIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMjBweCwgMWZyKSk7XG4gICAgZ2FwOiAxMnB4O1xufVxuXG4udG9vbENhbGxSYXdDb2x1bW5UaXRsZSB7XG4gICAgbWFyZ2luOiAwIDAgOHB4IDA7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjI1ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogIzk0YTNiODtcbn1cblxuLm1lbW9yeU1vZGFsSGVhZGVyIHtcbiAgICBwYWRkaW5nOiAyOHB4IDMycHggMTZweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogMTZweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmRmZGZkIDAlLCAjZjZmOWZmIDEwMCUpO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTJlOGYwO1xufVxuXG4ubWVtb3J5TW9kYWxJY29uIHtcbiAgICB3aWR0aDogNTJweDtcbiAgICBoZWlnaHQ6IDUycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMThweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNjM2NmYxLCAjYTg1NWY3KTtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBib3gtc2hhZG93OiAwIDE4cHggMjhweCByZ2JhKDE1LCAyMywgNDIsIDAuMTgpO1xufVxuXG4ubWVtb3J5TW9kYWxIZWFkZXJUZXh0IHtcbiAgICBmbGV4OiAxO1xufVxuXG4ubWVtb3J5TW9kYWxUaXRsZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xufVxuXG4ubWVtb3J5TW9kYWxTdWJ0aXRsZSB7XG4gICAgbWFyZ2luOiA0cHggMCAwO1xuICAgIGNvbG9yOiAjNDc1NDY3O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuLm1lbW9yeU1vZGFsQ2FsbFRpbWUge1xuICAgIG1hcmdpbjogNHB4IDAgMDtcbiAgICBjb2xvcjogIzk0YTNiODtcbiAgICBmb250LXNpemU6IDEzcHg7XG59XG5cbi5tZW1vcnlNb2RhbFN0YXR1cyB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgcGFkZGluZzogNnB4IDE0cHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDZweDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ubWVtb3J5U3RhdHVzRG90IHtcbiAgICB3aWR0aDogOHB4O1xuICAgIGhlaWdodDogOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ubWVtb3J5TW9kYWxDb250ZW50IHtcbiAgICBwYWRkaW5nOiAyNHB4IDMycHggMzJweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDE2cHg7XG59XG5cbi5tZW1vcnlNZXNzYWdlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5tZW1vcnlNZXRhUm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzQ3NTQ2Nztcbn1cblxuLm1lbW9yeU1ldGFMYWJlbCB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5tZW1vcnlNZXRhVmFsdWUge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi5tZW1vcnlTdG9yZVNlY3Rpb24sXG4ubWVtb3J5UmV0cmlldmVTZWN0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxMnB4O1xufVxuXG4ubWVtb3J5Q2FyZCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYjtcbiAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgIHBhZGRpbmc6IDE4cHg7XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICBib3gtc2hhZG93OiAwIDEwcHggMThweCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpO1xufVxuXG4ubWVtb3J5Q2FyZENvbnRlbnQge1xuICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4ubWVtb3J5Q2FyZE1ldGEge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBjb2xvcjogIzk0YTNiODtcbiAgICBmb250LXNpemU6IDEycHg7XG59XG5cbi5tZW1vcnlTY29wZUJhZGdlIHtcbiAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEyNCwgNTgsIDIzNywgMC4xMik7XG59XG5cbi5tZW1vcnlMaXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxMnB4O1xufVxuXG4ubWVtb3J5RW1wdHlTdGF0ZSB7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmVmM2M3O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZGU2OGE7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBjb2xvcjogIzkyNDAwZTtcbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubWVtb3J5TGlzdEZvb3RlciB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAjNDc1NDY3O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLm1lbW9yeVN0YXR1c1N1Y2Nlc3Mge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTYsIDE4NSwgMTI5LCAwLjE2KTtcbiAgICBjb2xvcjogIzA0Nzg1Nztcbn1cblxuLm1lbW9yeVN0YXR1c1dhcm5pbmcge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjM0LCAxNzksIDgsIDAuMTYpO1xuICAgIGNvbG9yOiAjYTE2MjA3O1xufVxuXG4ubWVtb3J5U3RhdHVzRXJyb3Ige1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMTUpO1xuICAgIGNvbG9yOiAjYjkxYzFjO1xufVxuXG4ubWVtb3J5U3RhdHVzTmV1dHJhbCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSg5NiwgMTY1LCAyNTAsIDAuMTUpO1xuICAgIGNvbG9yOiAjMWQ0ZWQ4O1xufVxuXG4uc2VhcmNoTW9kYWxIZWFkZXIge1xuICAgIHBhZGRpbmc6IDI0cHggMzJweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiA3MnB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDE2cHg7XG4gICAgYmFja2dyb3VuZDogI2ZkZmRmZDtcbn1cblxuLnNlbGZMZWFybmluZ01vZGFsSGVhZGVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMThweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZjhmYWZjIDAlLCAjZmVmOWMzIDQ1JSwgI2VjZmNjYiAxMDAlKTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UyZThmMDtcbn1cblxuLnNlbGZMZWFybmluZ0F2YXRhckdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMHB4O1xufVxuXG4uc2VsZkxlYXJuaW5nQXZhdGFyIHtcbiAgICB3aWR0aDogNDhweDtcbiAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCAyMHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4xOCk7XG59XG5cbi5zZWxmTGVhcm5pbmdBdmF0YXJJbml0aWFsIHtcbiAgICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnNlbGZMZWFybmluZ1RlYWNoZXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZGU2OGEgMCUsICM4NmVmYWMgMTAwJSk7XG59XG5cbi5zZWxmTGVhcm5pbmdIZWFkZXJUZXh0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiA2cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnNlbGZMZWFybmluZ1RpdGxlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi5zZWxmTGVhcm5pbmdNZXRhUm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTBweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6ICM2NDc0OGI7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbn1cblxuLnNlbGZMZWFybmluZ01ldGEge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzY0NzQ4Yjtcbn1cblxuLnNlbGZMZWFybmluZ01ldGFDaGlwIHtcbiAgICBiYWNrZ3JvdW5kOiAjZTJlOGYwO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uc2VsZkxlYXJuaW5nQ29tbWl0bWVudHMge1xuICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgIHBhZGRpbmc6IDE2cHg7XG59XG5cbi5zZWxmTGVhcm5pbmdDb21taXRtZW50c0xhYmVsIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5zZWxmTGVhcm5pbmdCb29rRWRpdG9yIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbn1cblxuLnNlbGZMZWFybmluZ0VtcHR5IHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBjb2xvcjogIzQ3NTU2OTtcbn1cblxuLm1vZGFsQ2xvc2VCdXR0b24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDE2cHg7XG4gICAgcmlnaHQ6IDE2cHg7XG4gICAgei1pbmRleDogMTtcbiAgICB3aWR0aDogMzZweDtcbiAgICBoZWlnaHQ6IDM2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgIGNvbG9yOiAjNDc1NTY5O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDE2cHggcmdiYSgxNSwgMjMsIDQyLCAwLjA4KTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZSwgdHJhbnNmb3JtIDAuMnMgZWFzZTtcbn1cblxuLm1vZGFsQ2xvc2VCdXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgY29sb3I6ICMwZjE3MmE7XG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDI0cHggcmdiYSgxNSwgMjMsIDQyLCAwLjEyKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi5tb2RhbENsb3NlQnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCAjOTRhM2I4O1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi50ZWFtTW9kYWxIZWFkZXIge1xuICAgIGdhcDogMTJweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi50ZWFtSGVhZGVyUGFydGljaXBhbnRzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMnB4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLnRlYW1IZWFkZXJQcm9maWxlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTJweDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi50ZWFtSGVhZGVyUHJvZmlsZUxpbms6aG92ZXIge1xuICAgIGNvbG9yOiAjMGYxNzJhO1xufVxuXG4udGVhbUhlYWRlckF2YXRhciB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBib3gtc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wOCk7XG59XG5cbi50ZWFtSGVhZGVyTmFtZSB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMwZjE3MmE7XG59XG5cbi50ZWFtSGVhZGVyRGl2aWRlciB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICM5NGEzYjg7XG59XG5cbi5zZWFyY2hNb2RhbEljb24ge1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGNvbG9yOiAjNDc1NTY5O1xufVxuXG4uc2VhcmNoTW9kYWxRdWVyeSB7XG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiAyMnB4ICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IDUwMCAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAjMjAyMTI0ICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50O1xufVxuXG4uc2VhcmNoTW9kYWxDb250ZW50IHtcbiAgICBwYWRkaW5nOiAyNHB4IDMycHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBtYXgtaGVpZ2h0OiA2MHZoO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi50ZWFtQ2hhdENvbnRhaW5lciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTdlYjtcbiAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4udGVhbVRvb2xDYWxsU2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMTZweDtcbn1cblxuLnRlYW1Ub29sQ2FsbEdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiA4cHg7XG59XG5cbi50ZWFtVG9vbENhbGxIZWFkaW5nIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgY29sb3I6ICM2NDc0OGI7XG59XG5cbi50ZWFtVG9vbENhbGxDaGlwcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiA4cHg7XG59XG5cbi50ZWFtVG9vbENhbGxEZXRhaWxzIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0OCwgMTYzLCAxODQsIDAuNCk7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBwYWRkaW5nOiAxNnB4O1xuICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG59XG5cbi50ZWFtVG9vbENhbGxEZXRhaWxzSGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMTJweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4udGVhbVRvb2xDYWxsRGV0YWlsc1RpdGxlIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA2cHg7XG59XG5cbi50ZWFtVG9vbENhbGxEZXRhaWxzQ2xlYXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4yKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0OCwgMTYzLCAxODQsIDAuNCk7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xufVxuXG4udGVhbVRvb2xDYWxsRGV0YWlsc0NsZWFyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMzUpO1xufVxuXG4uc2VhcmNoUmVzdWx0c0xpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDI4cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnNlYXJjaFJlc3VsdHNSYXcge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgbWF4LXdpZHRoOiA2NTBweDtcbn1cblxuLnNlYXJjaFJlc3VsdEl0ZW0ge1xuICAgIG1heC13aWR0aDogNjUwcHg7XG59XG5cbi5zZWFyY2hSZXN1bHRVcmwge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBjb2xvcjogIzIwMjEyNDtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4uc2VhcmNoUmVzdWx0VXJsIGEge1xuICAgIGNvbG9yOiAjMjAyMTI0O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNlYXJjaFJlc3VsdFRpdGxlIHtcbiAgICBmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwIDAgNHB4IDAgIWltcG9ydGFudDtcbiAgICBsaW5lLWhlaWdodDogMS4zO1xufVxuXG4uc2VhcmNoUmVzdWx0VGl0bGUgYSB7XG4gICAgY29sb3I6ICMxYTBkYWI7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4uc2VhcmNoUmVzdWx0VGl0bGUgYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5zZWFyY2hSZXN1bHRTbmlwcGV0IHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTg7XG4gICAgY29sb3I6ICM0ZDUxNTY7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4ubm9SZXN1bHRzIHtcbiAgICBwYWRkaW5nOiA0MHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogIzcwNzU3YTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi50b29sQ2FsbERldGFpbHMge1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG4uY2l0YXRpb25EZXRhaWxzIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1hcmdpbjogMjBweCAwO1xufVxuXG4uY2l0YXRpb25QcmV2aWV3IHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbn1cblxuLmNpdGF0aW9uSWZyYW1lIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDYwdmg7XG4gICAgbWluLWhlaWdodDogNDAwcHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY2l0YXRpb25NZXRhZGF0YSB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZjhmODtcbiAgICBwYWRkaW5nOiAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5jaXRhdGlvbk1ldGFkYXRhIHAge1xuICAgIG1hcmdpbjogOHB4IDA7XG4gICAgZm9udC1zaXplOiAwLjllbTtcbn1cblxuLmNpdGF0aW9uTWV0YWRhdGEgc3Ryb25nIHtcbiAgICBjb2xvcjogIzMzMztcbn1cblxuLmNpdGF0aW9uTWV0YWRhdGEgYSB7XG4gICAgY29sb3I6ICMwMDdiZmY7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbn1cblxuLmNpdGF0aW9uTWV0YWRhdGEgYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5jaXRhdGlvbkV4Y2VycHQge1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uY2l0YXRpb25FeGNlcnB0IGg0IHtcbiAgICBtYXJnaW46IDAgMCAxMnB4IDA7XG4gICAgY29sb3I6ICMzMzM7XG4gICAgZm9udC1zaXplOiAxZW07XG59XG5cbi5jaXRhdGlvbkhpbnQge1xuICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi50b29sQ2FsbERhdGFDb250YWluZXIge1xuICAgIGJhY2tncm91bmQ6ICNmOGY4Zjg7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIG1heC1oZWlnaHQ6IDMwMHB4O1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi50b29sQ2FsbERhdGEge1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250LXNpemU6IDAuODVlbTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbn1cblxuLnRvb2xDYWxsQXJnc0xpc3Qge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDA7XG59XG5cbi50b29sQ2FsbEFyZ3NMaXN0IGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgZm9udC1zaXplOiAwLjllbTtcbn1cblxuLnRvb2xDYWxsTW9kYWwgLnRvb2xDYWxsRGF0YSB7XG4gICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICBjb2xvcjogIzBmMTcyYTtcbn1cblxuLnJhdGluZ0lucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgICBwYWRkaW5nOiAxNnB4O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4xKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE4cHg7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMDUpO1xuICAgIGNvbG9yOiAjMGIxMjIwO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG59XG5cbi5yYXRpbmdJbnB1dDpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMDA4NGZmO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4wOCk7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMSk7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuLnJhdGluZ0lucHV0W3JlYWRvbmx5XSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjUpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4wMSk7XG59XG5cbi5yYXRpbmdBY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZ2FwOiAxMnB4O1xufVxuXG4ucmF0aW5nQWN0aW9ucyBidXR0b24ge1xuICAgIHBhZGRpbmc6IDEycHggMjRweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIG1pbi13aWR0aDogODBweDtcbn1cblxuLnJhdGluZ0FjdGlvbnMgYnV0dG9uOmZpcnN0LWNoaWxkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMSk7XG4gICAgY29sb3I6ICMwYjEyMjA7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjUsIDEyNSwgMTI1LCAwLjIpO1xufVxuXG4ucmF0aW5nQWN0aW9ucyBidXR0b246Zmlyc3QtY2hpbGQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4yKTtcbiAgICBjb2xvcjogIzBiMTIyMDtcbn1cblxuLnJhdGluZ0FjdGlvbnMgYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDg0ZmYgMCUsICMwMDY2Y2MgMTAwJSk7XG4gICAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5yYXRpbmdBY3Rpb25zIGJ1dHRvbjpsYXN0LWNoaWxkOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA3MWQxIDAlLCAjMDA1MmEzIDEwMCUpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMyk7XG59XG5cbi5yYXRpbmdBY3Rpb25zIGJ1dHRvbjpsYXN0LWNoaWxkOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLmRvd25sb2FkQnV0dG9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogOHB4O1xuICAgIHBhZGRpbmc6IDEycHggMjRweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA4NGZmIDAlLCAjMDA2NmNjIDEwMCUpO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMik7XG59XG5cbi5kb3dubG9hZEJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwOTlmZiAwJSwgIzAwNzdkZCAxMDAlKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xufVxuXG4uZG93bmxvYWRCdXR0b246YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMik7XG59XG5cbi5kb3dubG9hZEJ1dHRvbiBzdmcge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uZG93bmxvYWRCdXR0b24gc3BhbiB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLyogTmV3IGNoYXQgYnV0dG9uIHN0eWxpbmcgLSBNYXRjaGVzIHRoZSBzbGVlayBjaGF0IG1lc3NhZ2UgZGVzaWduICovXG4uY2hhdEJ1dHRvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICBnYXA6IDhweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDEycHggMTZweCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDg0ZmYgMCUsICMwMDY2Y2MgMTAwJSkgIWltcG9ydGFudDtcbiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50O1xuICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcbiAgICBmb250LXNpemU6IDEzcHggIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50O1xuICAgIGN1cnNvcjogcG9pbnRlciAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0KSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zKSAhaW1wb3J0YW50O1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KSAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbiAhaW1wb3J0YW50O1xuICAgIHVzZXItc2VsZWN0OiBub25lICFpbXBvcnRhbnQ7XG4gICAgbWluLWhlaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgIG1pbi13aWR0aDogMTEwcHggIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG59XG5cbi5jaGF0QnV0dG9uOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogLTEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgdHJhbnNwYXJlbnQpO1xuICAgIHRyYW5zaXRpb246IGxlZnQgMC41cyBlYXNlO1xufVxuXG4uY2hhdEJ1dHRvbjpob3Zlcjo6YmVmb3JlIHtcbiAgICBsZWZ0OiAxMDAlO1xufVxuXG4uY2hhdEJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwOTlmZiAwJSwgIzAwNzdkZCAxMDAlKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCkgc2NhbGUoMS4wMik7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjQpO1xufVxuXG4uY2hhdEJ1dHRvbjphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgtMXB4KTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcyBlYXNlO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zKTtcbn1cblxuLmNoYXRCdXR0b246Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpLCAwIDAgMCAzcHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zKTtcbn1cblxuLmNoYXRCdXR0b24gc3ZnIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCk7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTtcbn1cblxuLmNoYXRCdXR0b246aG92ZXIgc3ZnIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpIHNjYWxlKDEuMSk7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjMpKTtcbn1cblxuLmNoYXRCdXR0b25UZXh0IHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4uY2hhdEJ1dHRvbjpob3ZlciAuY2hhdEJ1dHRvblRleHQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxcHgpO1xufVxuXG4vKiBVc2UgdGVtcGxhdGUgYnV0dG9uIHN0eWxpbmcgLSBtYXRjaGVzIHRoZSBjaGF0QnV0dG9uIGFuZCBzYXZlQnV0dG9uICovXG4udXNlVGVtcGxhdGVCdXR0b24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgZ2FwOiA4cHggIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAxMnB4IDE2cHggIWltcG9ydGFudDtcbiAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA4NGZmIDAlLCAjMDA2NmNjIDEwMCUpICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDtcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiAxM3B4ICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDtcbiAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCkgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMTMyLCAyNTUsIDAuMykgIWltcG9ydGFudDtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCkgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb24gIWltcG9ydGFudDtcbiAgICB1c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xuICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICBtaW4td2lkdGg6IDExMHB4ICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4udXNlVGVtcGxhdGVCdXR0b246OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAtMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCk7XG4gICAgdHJhbnNpdGlvbjogbGVmdCAwLjVzIGVhc2U7XG59XG5cbi51c2VUZW1wbGF0ZUJ1dHRvbjpob3Zlcjo6YmVmb3JlIHtcbiAgICBsZWZ0OiAxMDAlO1xufVxuXG4udXNlVGVtcGxhdGVCdXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwMDk5ZmYgMCUsICMwMDc3ZGQgMTAwJSk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpIHNjYWxlKDEuMDIpO1xuICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAxMzIsIDI1NSwgMC40KTtcbn1cblxuLnVzZVRlbXBsYXRlQnV0dG9uOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KSB0cmFuc2xhdGVZKC0xcHgpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzIGVhc2U7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpO1xufVxuXG4udXNlVGVtcGxhdGVCdXR0b246Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsIDEzMiwgMjU1LCAwLjMpLCAwIDAgMCAzcHggcmdiYSgwLCAxMzIsIDI1NSwgMC4zKTtcbn1cblxuLnVzZVRlbXBsYXRlQnV0dG9uIHN2ZyB7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuMjUsIDAuNDYsIDAuNDUsIDAuOTQpO1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSk7XG59XG5cbi51c2VUZW1wbGF0ZUJ1dHRvbjpob3ZlciBzdmcge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMykpO1xufVxuXG4udXNlVGVtcGxhdGVCdXR0b246aG92ZXIgLmNoYXRCdXR0b25UZXh0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMXB4KTtcbn1cblxuLnNhdmVCdXR0b25Db250YWluZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5zYXZlTWVudSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICBsZWZ0OiAwO1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBtaW4td2lkdGg6IDEyMHB4O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xufVxuXG4uc2F2ZU1lbnVJdGVtIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiA4cHggMTZweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogIzExMTtcbn1cblxuLnNhdmVNZW51SXRlbTpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcbn1cblxuLnNhdmVNZW51RGl2aWRlciB7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbiAgICBtYXJnaW46IDRweCAwO1xufVxuXG4uY2hhdEZlZWRiYWNrUGFuZWwge1xuICAgIHdpZHRoOiBtaW4oMjYwcHgsIDEwMCUpO1xuICAgIHBhZGRpbmc6IDZweCA4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTRweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViO1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMThweCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDZweDtcbn1cblxuLmNoYXRGZWVkYmFja1RvZ2dsZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZSwgdHJhbnNmb3JtIDAuMnMgZWFzZTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uY2hhdEZlZWRiYWNrVG9nZ2xlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMC41cHgpO1xufVxuXG4uY2hhdEZlZWRiYWNrVG9nZ2xlOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCAjMjU2M2ViO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5jaGF0RmVlZGJhY2tJY29uIHtcbiAgICB3aWR0aDogMzRweDtcbiAgICBoZWlnaHQ6IDM0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBiYWNrZ3JvdW5kOiAjZWVmMmZmO1xuICAgIGNvbG9yOiAjNjM2NmYxO1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlO1xufVxuXG4uY2hhdEZlZWRiYWNrVG9nZ2xlW2RhdGEtZW5hYmxlZD0ndHJ1ZSddIC5jaGF0RmVlZGJhY2tJY29uIHtcbiAgICBiYWNrZ3JvdW5kOiAjZTBmMmZlO1xuICAgIGNvbG9yOiAjMDI4NGM3O1xufVxuXG4uY2hhdEZlZWRiYWNrVG9nZ2xlW2RhdGEtZW5hYmxlZD0nZmFsc2UnXSAuY2hhdEZlZWRiYWNrSWNvbiB7XG4gICAgYmFja2dyb3VuZDogI2YzZjRmNjtcbiAgICBjb2xvcjogIzk0YTNiODtcbn1cblxuLmNoYXRGZWVkYmFja01ldGEge1xuICAgIGZsZXg6IDE7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMnB4O1xufVxuXG4uY2hhdEZlZWRiYWNrTGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAjMGYxNzJhO1xufVxuXG4uY2hhdEZlZWRiYWNrRGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBjb2xvcjogIzY0NzQ4Yjtcbn1cblxuLmNoYXRGZWVkYmFja0luZGljYXRvciB7XG4gICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG59XG5cbi5jaGF0RmVlZGJhY2tJbmRpY2F0b3JBY3RpdmUge1xuICAgIGNvbG9yOiAjMTY2NTM0O1xuICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzM0ZDM5OTtcbn1cblxuLmNoYXRGZWVkYmFja0luZGljYXRvckluYWN0aXZlIHtcbiAgICBjb2xvcjogIzcxM2YxMjtcbiAgICBiYWNrZ3JvdW5kOiAjZmVmOWMzO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNmYWNjMTU7XG59XG5cbi8qIFBhdXNlL1Jlc3VtZSBidXR0b24gdmFyaWFudCAocmV1c2VzIC5jaGF0QnV0dG9uIGJhc2Ugc3R5bGVzIGZvciBEUlkpICovXG4ucGF1c2VCdXR0b24ge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmIzNDcgMCUsICNmZjhjNDIgMTAwJSkgIWltcG9ydGFudDsgLyogV2FybSBvcmFuZ2UgZm9yIFwiYWN0aXZlL3J1bm5pbmdcIiAqL1xufVxuXG4ucGF1c2VCdXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmMwNjcgMCUsICNmZjllNWYgMTAwJSkgIWltcG9ydGFudDtcbn1cblxuLnBhdXNlQnV0dG9uLnBhdXNpbmcge1xuICAgIG9wYWNpdHk6IDAuNiAhaW1wb3J0YW50O1xuICAgIGN1cnNvcjogd2FpdCAhaW1wb3J0YW50O1xufVxuXG4ucGF1c2VCdXR0b24ucGF1c2VkIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMTBiOTgxIDAlLCAjMDU5NjY5IDEwMCUpICFpbXBvcnRhbnQ7IC8qIEdyZWVuIHdoZW4gcGF1c2VkIChyZWFkeSB0byByZXN1bWUpICovXG59XG5cbi5wYXVzZUJ1dHRvbi5wYXVzZWQ6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMzNGQzOTkgMCUsICMwNTk2NjkgMTAwJSkgIWltcG9ydGFudDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCkgc2NhbGUoMS4wMik7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDE2LCAxODUsIDEyOSwgMC4zNSk7XG59XG5cbi5wYXVzZUJ1dHRvbiBzdmcge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2U7XG59XG5cbi5wYXVzZUJ1dHRvbi5wYXVzZWQgc3ZnIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG59XG5cbi5wYXVzZUJ1dHRvbi5wYXVzaW5nIHN2ZyB7XG4gICAgb3BhY2l0eTogMC44O1xufVxuXG4vKiBWb2ljZSBjYWxsIGluZGljYXRvciBiYXIgKi9cbi52b2ljZUNhbGxJbmRpY2F0b3JCYXIge1xuICAgIGdyaWQtYXJlYTog8J+fpjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgzNCwgMTk3LCA5NCwgMC4xKSAwJSwgcmdiYSgxNiwgMTg1LCAxMjksIDAuMSkgMTAwJSk7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMzQsIDE5NywgOTQsIDAuMyk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbn1cblxuLyogVm9pY2UgY2FsbCBpbmRpY2F0b3IgKi9cbi52b2ljZUNhbGxJbmRpY2F0b3Ige1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA4cHg7XG4gICAgcGFkZGluZzogOHB4IDE2cHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgzNCwgMTk3LCA5NCwgMC4yKSAwJSwgcmdiYSgxNiwgMTg1LCAxMjksIDAuMikgMTAwJSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNCwgMTk3LCA5NCwgMC40KTtcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgIGNvbG9yOiAjMTBiOTgxO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52b2ljZUNhbGxJbmRpY2F0b3Igc3ZnIHtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgYW5pbWF0aW9uOiB2b2ljZUNhbGxJY29uUHVsc2UgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi52b2ljZUNhbGxJbmRpY2F0b3Igc3BhbiB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLyogVm9pY2UgY2FsbCBwdWxzZSBhbmltYXRpb24gKi9cbi52b2ljZUNhbGxQdWxzZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiA4cHg7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHdpZHRoOiA4cHg7XG4gICAgaGVpZ2h0OiA4cHg7XG4gICAgYmFja2dyb3VuZDogIzEwYjk4MTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYW5pbWF0aW9uOiB2b2ljZUNhbGxQdWxzZSAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIHZvaWNlQ2FsbEljb25QdWxzZSB7XG4gICAgMCUsXG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDUwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgICAgICAgb3BhY2l0eTogMC44O1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyB2b2ljZUNhbGxQdWxzZSB7XG4gICAgMCUsXG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZSgxKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEuMyk7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICB9XG59XG5cbi8qIFZvaWNlIGNhbGwgaW5kaWNhdG9yIGluIG1lc3NhZ2VzICovXG4uY2hhdE1lc3NhZ2UgLnZvaWNlQ2FsbEluZGljYXRvciB7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xufVxuXG4uY2hhdE1lc3NhZ2UgLnZvaWNlQ2FsbEluZGljYXRvciBzdmcge1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGhlaWdodDogMTRweDtcbn1cblxuLyogRmVlZGJhY2sgc3RhdHVzIGJhbm5lciAqL1xuLmZlZWRiYWNrU3RhdHVzIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAyMHB4O1xuICAgIHJpZ2h0OiAyMHB4O1xuICAgIHBhZGRpbmc6IDE0cHggMjJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgIGJveC1zaGFkb3c6IDAgMThweCAzMnB4IHJnYmEoMTUsIDIzLCA0MiwgMC4zNSk7XG4gICAgei1pbmRleDogMTAwMDA7IC8qIFtGaXggei1pbmRleF06IEVuc3VyZSBpdCdzIGFib3ZlIHRoZSBoZWFkZXIgKHotNTApIGFuZCBvdGhlciBVSSBlbGVtZW50cyAqL1xuICAgIGFuaW1hdGlvbjogZmVlZGJhY2tTdGF0dXNTbGlkZUluIDAuMjhzIGVhc2Utb3V0O1xuICAgIG1heC13aWR0aDogMzQwcHg7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZmVlZGJhY2tTdGF0dXNTdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMTBiOTgxIDAlLCAjMDU5NjY5IDEwMCUpO1xuICAgIGNvbG9yOiAjZjhmYWZjO1xufVxuXG4uZmVlZGJhY2tTdGF0dXNFcnJvciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2VmNDQ0NCAwJSwgI2RjMjYyNiAxMDAlKTtcbiAgICBjb2xvcjogI2ZlZjJmMjtcbn1cblxuQGtleWZyYW1lcyBmZWVkYmFja1N0YXR1c1NsaWRlSW4ge1xuICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG4vKiBNb2JpbGUgcmVzcG9uc2l2ZW5lc3MgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5DaGF0IHtcbiAgICAgICAgLS1jaGF0LW1lc3NhZ2UtbWluLXdpZHRoOiAxMDBweDtcbiAgICAgICAgLS1jaGF0LW1lc3NhZ2UtbWF4LXdpZHRoOiBtaW4oODUlLCA1NjBweCk7XG4gICAgICAgIC0tY2hhdC1tZXNzYWdlLWF2YXRhci1nYXA6IDEwcHg7XG4gICAgfVxuXG4gICAgLmFjdGlvbnMge1xuICAgICAgICBtYXJnaW46IDEycHggMTZweCAwO1xuICAgICAgICBnYXA6IDZweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZXMge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDEycHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2Uge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIH1cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5tZXNzYWdlVGV4dCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4O1xuICAgIH1cblxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5hdmF0YXIge1xuICAgICAgICB3aWR0aDogMzZweDtcbiAgICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgICBtYXJnaW46IDAgMCA0cHg7XG4gICAgfVxuXG4gICAgLyogW+OKl++4j11cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAuYXZhdGFyIGltZyB7XG4gICAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xuICAgIH1cbiAgICAqL1xuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IHtcbiAgICAgICAgcGFkZGluZzogMTZweCAxMnB4O1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IHRleHRhcmVhIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE4cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIycHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgfVxuXG4gICAgLnNjcm9sbFRvQm90dG9tIHtcbiAgICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICAgIGhlaWdodDogNDRweDtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICB0b3A6IGNhbGMoMTAwJSAtIDE2MHB4KTtcbiAgICB9XG5cbiAgICAuY2hhdEJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBnYXA6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b24gc3ZnIHtcbiAgICAgICAgd2lkdGg6IDE4cHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b25UZXh0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBnYXA6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnVzZVRlbXBsYXRlQnV0dG9uIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiAuY2hhdEJ1dHRvblRleHQge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnJhdGluZ01vZGFsQ29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMTZweDtcbiAgICAgICAgcGFkZGluZzogMjRweCAyMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cblxuICAgIC5zdGFycyB7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cblxuICAgIC5zdGFycyBzcGFuIHtcbiAgICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHg7XG4gICAgfVxuXG4gICAgLnJhdGluZ0FjdGlvbnMge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgIGdhcDogOHB4O1xuICAgIH1cblxuICAgIC5yYXRpbmdBY3Rpb25zIGJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAxNHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgfVxuXG4gICAgLnNlbGZMZWFybmluZ01vZGFsSGVhZGVyIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgfVxuXG4gICAgLnNlbGZMZWFybmluZ0F2YXRhckdyb3VwIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIH1cblxuICAgIC5zZWxmTGVhcm5pbmdNZXRhUm93IHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuQ2hhdCB7XG4gICAgICAgIC0tY2hhdC1tZXNzYWdlLW1pbi13aWR0aDogODBweDtcbiAgICAgICAgLS1jaGF0LW1lc3NhZ2UtbWF4LXdpZHRoOiBtaW4oOTAlLCA1MjBweCk7XG4gICAgICAgIC0tY2hhdC1tZXNzYWdlLWF2YXRhci1nYXA6IDhweDtcbiAgICB9XG5cbiAgICAuYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbjogOHB4IDEycHggMDtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2VzIHtcbiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLm1lc3NhZ2VUZXh0IHtcbiAgICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLmF2YXRhciB7XG4gICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgIG1hcmdpbjogMCAwIDRweDtcbiAgICB9XG5cbiAgICAvKiBb44qX77iPXVxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5hdmF0YXIgaW1nIHtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7XG4gICAgfVxuICAgICovXG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IHRleHRhcmVhIHtcbiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgfVxuXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IGJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgfVxuXG4gICAgLmNoYXRCdXR0b24ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgZ2FwOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5jaGF0QnV0dG9uIHN2ZyB7XG4gICAgICAgIHdpZHRoOiAxOHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMThweCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5jaGF0QnV0dG9uVGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAudXNlVGVtcGxhdGVCdXR0b24ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcbiAgICAgICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgZ2FwOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC51c2VUZW1wbGF0ZUJ1dHRvbiBzdmcge1xuICAgICAgICB3aWR0aDogMThweCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDE4cHggIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAudXNlVGVtcGxhdGVCdXR0b24gLmNoYXRCdXR0b25UZXh0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5zY3JvbGxUb0JvdHRvbSB7XG4gICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgdG9wOiBjYWxjKDEwMCUgLSAxNDBweCk7XG4gICAgfVxuXG4gICAgLnJhdGluZ01vZGFsIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIH1cblxuICAgIC5yYXRpbmdNb2RhbENvbnRlbnQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4IDIwcHggMCAwO1xuICAgICAgICBtYXgtaGVpZ2h0OiA3MHZoO1xuICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHggMjBweDtcbiAgICB9XG59XG5cbi8qIFJlZHVjZWQgbW90aW9uIHN1cHBvcnQgKi9cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UsXG4gICAgLnNjcm9sbFRvQm90dG9tLFxuICAgIC5yYXRpbmdNb2RhbCxcbiAgICAucmF0aW5nTW9kYWxDb250ZW50LFxuICAgIC5mZWVkYmFja1N0YXR1cyB7XG4gICAgICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0TWVzc2FnZSAubWVzc2FnZVRleHQsXG4gICAgLmNoYXRNYWluRmxvdyAuY2hhdElucHV0IHRleHRhcmVhLFxuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRJbnB1dCBidXR0b24sXG4gICAgLyogW+OKl++4j10gLmNoYXRNYWluRmxvdyAuY2hhdE1lc3NhZ2UgLmF2YXRhciBpbWcsICovXG4gICAgLmNoYXRCdXR0b24ge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIH1cbn1cblxuLyogSGlnaCBjb250cmFzdCBtb2RlIHN1cHBvcnQgKi9cbkBtZWRpYSAocHJlZmVycy1jb250cmFzdDogaGlnaCkge1xuICAgIC5jaGF0TWFpbkZsb3cgLmNoYXRNZXNzYWdlIC5tZXNzYWdlVGV4dCB7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgdGV4dGFyZWEge1xuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICB9XG5cbiAgICAuY2hhdE1haW5GbG93IC5jaGF0SW5wdXQgYnV0dG9uIHtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgY3VycmVudENvbG9yO1xuICAgIH1cbn1cblxuLyogRW1haWwgbW9kYWwgc3R5bGVzICovXG4uZW1haWxDb250YWluZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMTZweDtcbn1cblxuLmVtYWlsTW9kYWxIZWFkZXIge1xuICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG59XG5cbi5lbWFpbEhlYWRlclRleHQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDJweDtcbn1cblxuLmVtYWlsSGVhZGVyTGFiZWwge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICM2NDc0OGI7XG59XG5cbi5lbWFpbE1ldGFkYXRhIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBwYWRkaW5nOiAxOHB4IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgxNSwgMjMsIDQyLCAwLjA4KTtcbn1cblxuLmVtYWlsRmllbGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiA4cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMS41O1xufVxuXG4uZW1haWxGaWVsZDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uZW1haWxGaWVsZCBzdHJvbmcge1xuICAgIG1pbi13aWR0aDogNjBweDtcbiAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4uZW1haWxSZWNpcGllbnRzIHtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuXG4uZW1haWxCb2R5IHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uZW1haWxCb2R5IHN0cm9uZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuLmVtYWlsQm9keUNvbnRlbnQge1xuICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIHBhZGRpbmc6IDIycHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpO1xufVxuXG4uZW1haWxCb2R5Q29udGVudCBwIHtcbiAgICBtYXJnaW46IDAgMCAxMnB4IDA7XG59XG5cbi5lbWFpbEJvZHlDb250ZW50IHA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmVtYWlsU3RhdHVzIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICBjb2xvcjogIzBmMTcyYTtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4vKipcbiAqIFRPRE86IFvwn4yJXSBEUlkgTWFya2Rvd24gcHJpbWl0aXZlcyBzdHlsaW5nXG4gKi9cbi8qIEltYWdlIHByb21wdCBwcmV2aWV3IHN0eWxlcyAqL1xuLmltYWdlUHJvbXB0IHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBib3JkZXItcmFkaXVzOiAxOHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTI1LCAxMjUsIDEyNSwgMC4zNSk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogOHB4O1xufVxuXG4uaW1hZ2VQcm9tcHRQcmV2aWV3IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyLXJhZGl1czogMTRweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIG1pbi1oZWlnaHQ6IDE2MHB4O1xuICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDEyNSwgMTI1LCAxMjUsIDAuMyk7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxNSwgMTE4LCAyNTUsIDAuMDUpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCkpO1xufVxuXG4uaW1hZ2VQcm9tcHRJbWFnZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uaW1hZ2VQcm9tcHRQbGFjZWhvbGRlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmltYWdlUHJvbXB0U3Bpbm5lciB7XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiAzNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXI6IDNweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMyNTYzZWI7XG4gICAgYW5pbWF0aW9uOiBpbWFnZVByb21wdFNwaW5uZXIgMC45cyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgaW1hZ2VQcm9tcHRTcGlubmVyIHtcbiAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxufVxuXG4uaW1hZ2VQcm9tcHRNZXRhIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiA0cHg7XG59XG5cbi5pbWFnZVByb21wdFByb21wdCB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgY29sb3I6ICMxMTE7XG4gICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG59XG5cbi5pbWFnZVByb21wdFN0YXR1cyB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGNvbG9yOiAjNmI3MjgwO1xufVxuXG4uaW1hZ2VQcm9tcHRFcnJvciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6ICNkYzI2MjY7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyMjAsIDM4LCAzOCwgMC4wOCk7XG59XG4iXX0= */";
16153
+ var styles$4 = {"copiedToClipboardMessage":"Chat-module_copiedToClipboardMessage__apCPY","Chat":"Chat-module_Chat__j2eE5","chatMainFlow":"Chat-module_chatMainFlow__--8FE","chatBar":"Chat-module_chatBar__fLECN","TasksInProgress":"Chat-module_TasksInProgress__fQfei","actions":"Chat-module_actions__gTZ5T","portal":"Chat-module_portal__uTOT8","left":"Chat-module_left__7l5Mn","right":"Chat-module_right__ABZrW","actionsFaded":"Chat-module_actionsFaded__qqAVQ","actionsScrolling":"Chat-module_actionsScrolling__fIawW","chatButton":"Chat-module_chatButton__d9VgA","chatButtonText":"Chat-module_chatButtonText__RkGB-","useTemplateButton":"Chat-module_useTemplateButton__xcJNR","chatChildren":"Chat-module_chatChildren__flOPK","chatMessages":"Chat-module_chatMessages__J2u2N","hasActionsAndFirstMessageIsLong":"Chat-module_hasActionsAndFirstMessageIsLong__5jgoZ","chatMessage":"Chat-module_chatMessage__nmLaZ","messageSlideIn":"Chat-module_messageSlideIn__soTy2","messageStack":"Chat-module_messageStack__n0xNL","isMe":"Chat-module_isMe__nBtaV","messageMeta":"Chat-module_messageMeta__eqCRu","messageTimestamp":"Chat-module_messageTimestamp__LDhRw","messageDuration":"Chat-module_messageDuration__Y9Kg9","participantLabel":"Chat-module_participantLabel__0Oo-3","isNotCompleteMessage":"Chat-module_isNotCompleteMessage__Hj2K7","NonCompleteMessageFiller":"Chat-module_NonCompleteMessageFiller__G5-Ve","messageText":"Chat-module_messageText__XgNyQ","loadingPulse":"Chat-module_loadingPulse__VomRm","ongoingToolCalls":"Chat-module_ongoingToolCalls__NZkQN","completedToolCalls":"Chat-module_completedToolCalls__vI1Qt","sourceCitations":"Chat-module_sourceCitations__oDtBX","ongoingToolCall":"Chat-module_ongoingToolCall__WT3Rc","completedToolCall":"Chat-module_completedToolCall__-q4Cs","toolCallOrigin":"Chat-module_toolCallOrigin__-Io6Y","toolCallDetails":"Chat-module_toolCallDetails__WUFlD","toolCallData":"Chat-module_toolCallData__UauCO","ongoingToolCallSpinner":"Chat-module_ongoingToolCallSpinner__7g-Ay","toolCallSpinner":"Chat-module_toolCallSpinner__LSiK6","ongoingToolCallName":"Chat-module_ongoingToolCallName__y59-0","typingIndicator":"Chat-module_typingIndicator__S-CT-","avatar":"Chat-module_avatar__gL6bm","typingBubble":"Chat-module_typingBubble__0Lb7B","typingDots":"Chat-module_typingDots__srOBB","typingDot":"Chat-module_typingDot__dnhKT","typingBounce":"Chat-module_typingBounce__1yp2v","ratingStar":"Chat-module_ratingStar__rRfqC","active":"Chat-module_active__lbYL-","copyButtonContainer":"Chat-module_copyButtonContainer__Rij0U","messageControlGroup":"Chat-module_messageControlGroup__gAo4k","copyButton":"Chat-module_copyButton__DcxT5","playButton":"Chat-module_playButton__ZigYL","playButtonIcon":"Chat-module_playButtonIcon__wPErq","playButtonSpinner":"Chat-module_playButtonSpinner__Ad33i","messagePlaySpinner":"Chat-module_messagePlaySpinner__ldlvy","copiedTooltip":"Chat-module_copiedTooltip__LH81j","copiedTooltipFadeIn":"Chat-module_copiedTooltipFadeIn__QekO1","copiedTooltipLeft":"Chat-module_copiedTooltipLeft__j-S-5","copiedTooltipRight":"Chat-module_copiedTooltipRight__R-2cE","chat-code-block":"Chat-module_chat-code-block__k8IyS","attachments":"Chat-module_attachments__m1Fts","attachment":"Chat-module_attachment__aE9hK","attachmentIcon":"Chat-module_attachmentIcon__BX3Cy","attachmentName":"Chat-module_attachmentName__aMx56","messageButtons":"Chat-module_messageButtons__WaOob","messageButton":"Chat-module_messageButton__mRnn-","rating":"Chat-module_rating__soc3M","chatInput":"Chat-module_chatInput__1Ecan","fullPageVisual":"Chat-module_fullPageVisual__zNAEy","dragOver":"Chat-module_dragOver__bkS-g","filePreviewContainer":"Chat-module_filePreviewContainer__R70hm","filePreview":"Chat-module_filePreview__kq2aX","fileIcon":"Chat-module_fileIcon__zoSKW","fileInfo":"Chat-module_fileInfo__wBLi0","fileName":"Chat-module_fileName__bBujo","fileSize":"Chat-module_fileSize__ivliq","removeFileButton":"Chat-module_removeFileButton__0gakR","inputContainer":"Chat-module_inputContainer__bPt99","attachmentButton":"Chat-module_attachmentButton__qLO47","voiceButton":"Chat-module_voiceButton__d2zlP","voiceButtonActive":"Chat-module_voiceButtonActive__Uoi3W","voiceRecordingPulse":"Chat-module_voiceRecordingPulse__y2wJ5","uploadProgress":"Chat-module_uploadProgress__jBTKe","uploadProgressBar":"Chat-module_uploadProgressBar__Gutnt","uploadProgressFill":"Chat-module_uploadProgressFill__EgubT","dragOverlay":"Chat-module_dragOverlay__SEGoS","dragOverlayContent":"Chat-module_dragOverlayContent__gb9kF","scrollToBottomContainer":"Chat-module_scrollToBottomContainer__5rXpK","scrollToBottomWrapper":"Chat-module_scrollToBottomWrapper__PCIu1","scrollButtonSlideIn":"Chat-module_scrollButtonSlideIn__XnImg","scrollToBottom":"Chat-module_scrollToBottom__nzxdZ","scrollToBottomBadge":"Chat-module_scrollToBottomBadge__N6T6-","ratingModal":"Chat-module_ratingModal__XVKYm","modalFadeIn":"Chat-module_modalFadeIn__RPc3w","ratingModalContent":"Chat-module_ratingModalContent__CCdq7","modalSlideIn":"Chat-module_modalSlideIn__XXtgN","stars":"Chat-module_stars__PCzNO","ratingModalStar":"Chat-module_ratingModalStar__XkbHr","toolCallModal":"Chat-module_toolCallModal__uNaIK","toolCallHeader":"Chat-module_toolCallHeader__ZaTZF","toolCallIcon":"Chat-module_toolCallIcon__UgRKj","toolCallHeaderMeta":"Chat-module_toolCallHeaderMeta__iAL-U","toolCallLabel":"Chat-module_toolCallLabel__q7EFf","toolCallTitle":"Chat-module_toolCallTitle__jhL0A","toolCallSubtitle":"Chat-module_toolCallSubtitle__a2GIO","toolCallGrid":"Chat-module_toolCallGrid__Nfr7N","toolCallPanel":"Chat-module_toolCallPanel__kQZE9","toolCallPanelTitle":"Chat-module_toolCallPanelTitle__-7OtJ","toolCallList":"Chat-module_toolCallList__5co3s","toolCallItem":"Chat-module_toolCallItem__k7W5Z","toolCallItemLabel":"Chat-module_toolCallItemLabel__d3C1E","toolCallItemValue":"Chat-module_toolCallItemValue__cStQ0","toolCallSummary":"Chat-module_toolCallSummary__wGZwg","toolCallSummaryMeta":"Chat-module_toolCallSummaryMeta__RXiSv","toolCallSummaryMetaBadge":"Chat-module_toolCallSummaryMetaBadge__JBi-I","toolCallEmpty":"Chat-module_toolCallEmpty__bUz5v","toolCallIssues":"Chat-module_toolCallIssues__evhYM","toolCallIssueBadge":"Chat-module_toolCallIssueBadge__Qbwdp","toolCallIssueError":"Chat-module_toolCallIssueError__LImeS","toolCallIssueWarning":"Chat-module_toolCallIssueWarning__chQDf","toolCallFooter":"Chat-module_toolCallFooter__lJ24N","toolCallTimestamp":"Chat-module_toolCallTimestamp__-iWsu","toolCallRawDetails":"Chat-module_toolCallRawDetails__CvFfs","toolCallRawSummary":"Chat-module_toolCallRawSummary__-aLvG","toolCallRawColumns":"Chat-module_toolCallRawColumns__8ummz","toolCallRawColumnTitle":"Chat-module_toolCallRawColumnTitle__JQda7","memoryModalHeader":"Chat-module_memoryModalHeader__SpZJT","memoryModalIcon":"Chat-module_memoryModalIcon__eYbli","memoryModalHeaderText":"Chat-module_memoryModalHeaderText__S6MZG","memoryModalTitle":"Chat-module_memoryModalTitle__zzbaQ","memoryModalSubtitle":"Chat-module_memoryModalSubtitle__PStci","memoryModalCallTime":"Chat-module_memoryModalCallTime__RmVI9","memoryModalStatus":"Chat-module_memoryModalStatus__bmrfc","memoryStatusDot":"Chat-module_memoryStatusDot__c0oVs","memoryModalContent":"Chat-module_memoryModalContent__8E7oj","memoryMessage":"Chat-module_memoryMessage__q0pNK","memoryMetaRow":"Chat-module_memoryMetaRow__Hc-Xp","memoryMetaLabel":"Chat-module_memoryMetaLabel__LFx11","memoryMetaValue":"Chat-module_memoryMetaValue__4bILO","memoryStoreSection":"Chat-module_memoryStoreSection__qQJPN","memoryRetrieveSection":"Chat-module_memoryRetrieveSection__VbuS4","memoryCard":"Chat-module_memoryCard__-kIDN","memoryCardContent":"Chat-module_memoryCardContent__l9S4G","memoryCardMeta":"Chat-module_memoryCardMeta__K66KE","memoryScopeBadge":"Chat-module_memoryScopeBadge__T2ACc","memoryList":"Chat-module_memoryList__pUOg2","memoryEmptyState":"Chat-module_memoryEmptyState__fPrXA","memoryListFooter":"Chat-module_memoryListFooter__Y0Q2Z","memoryStatusSuccess":"Chat-module_memoryStatusSuccess__4bhfo","memoryStatusWarning":"Chat-module_memoryStatusWarning__AR6yh","memoryStatusError":"Chat-module_memoryStatusError__ZNAT6","memoryStatusNeutral":"Chat-module_memoryStatusNeutral__Fa-4M","searchModalHeader":"Chat-module_searchModalHeader__Y8V-w","selfLearningModalHeader":"Chat-module_selfLearningModalHeader__PDIt1","selfLearningAvatarGroup":"Chat-module_selfLearningAvatarGroup__jgy2k","selfLearningAvatar":"Chat-module_selfLearningAvatar__NHXKm","selfLearningAvatarInitial":"Chat-module_selfLearningAvatarInitial__cuw19","selfLearningTeacher":"Chat-module_selfLearningTeacher__fGhX8","selfLearningHeaderText":"Chat-module_selfLearningHeaderText__LTwHL","selfLearningTitle":"Chat-module_selfLearningTitle__G0SAk","selfLearningMetaRow":"Chat-module_selfLearningMetaRow__z4Tg0","selfLearningMeta":"Chat-module_selfLearningMeta__58Pet","selfLearningMetaChip":"Chat-module_selfLearningMetaChip__0go88","selfLearningCommitments":"Chat-module_selfLearningCommitments__7ECnr","selfLearningCommitmentsLabel":"Chat-module_selfLearningCommitmentsLabel__OkDO1","selfLearningBookEditor":"Chat-module_selfLearningBookEditor__CZy5T","selfLearningEmpty":"Chat-module_selfLearningEmpty__vCKHL","modalCloseButton":"Chat-module_modalCloseButton__AAfWS","teamModalHeader":"Chat-module_teamModalHeader__SB5NL","teamHeaderParticipants":"Chat-module_teamHeaderParticipants__KS7aV","teamHeaderProfile":"Chat-module_teamHeaderProfile__xRlcS","teamHeaderProfileLink":"Chat-module_teamHeaderProfileLink__fYTfT","teamHeaderAvatar":"Chat-module_teamHeaderAvatar__vXcTp","teamHeaderName":"Chat-module_teamHeaderName__ygJR9","teamHeaderDivider":"Chat-module_teamHeaderDivider__cnRMd","searchModalIcon":"Chat-module_searchModalIcon__AR5KY","searchModalQuery":"Chat-module_searchModalQuery__5x-Ra","searchModalContent":"Chat-module_searchModalContent__mWLIE","teamChatContainer":"Chat-module_teamChatContainer__xdLtU","teamToolCallSection":"Chat-module_teamToolCallSection__FH9l7","teamToolCallGroup":"Chat-module_teamToolCallGroup__PO6rl","teamToolCallHeading":"Chat-module_teamToolCallHeading__G-JSj","teamToolCallChips":"Chat-module_teamToolCallChips__hRWqh","teamToolCallDetails":"Chat-module_teamToolCallDetails__ZaTtt","teamToolCallDetailsHeader":"Chat-module_teamToolCallDetailsHeader__FPIgI","teamToolCallDetailsTitle":"Chat-module_teamToolCallDetailsTitle__50SeL","teamToolCallDetailsClear":"Chat-module_teamToolCallDetailsClear__8yvu7","searchResultsList":"Chat-module_searchResultsList__xVDUZ","searchResultsRaw":"Chat-module_searchResultsRaw__i3GkD","searchResultItem":"Chat-module_searchResultItem__bTzq5","searchResultUrl":"Chat-module_searchResultUrl__SbrH4","searchResultTitle":"Chat-module_searchResultTitle__XS7zN","searchResultSnippet":"Chat-module_searchResultSnippet__Wsun2","noResults":"Chat-module_noResults__AAv6s","citationDetails":"Chat-module_citationDetails__2v2e1","citationPreview":"Chat-module_citationPreview__rGhCR","citationIframe":"Chat-module_citationIframe__ngzFY","citationMetadata":"Chat-module_citationMetadata__DPaCF","citationExcerpt":"Chat-module_citationExcerpt__VU4BS","citationHint":"Chat-module_citationHint__5AkLx","toolCallDataContainer":"Chat-module_toolCallDataContainer__rdEzC","toolCallArgsList":"Chat-module_toolCallArgsList__LD3xH","ratingInput":"Chat-module_ratingInput__z8Pv-","ratingActions":"Chat-module_ratingActions__nXcss","downloadButton":"Chat-module_downloadButton__8--bk","saveButtonContainer":"Chat-module_saveButtonContainer__lSNUJ","saveMenu":"Chat-module_saveMenu__-ph8y","saveMenuItem":"Chat-module_saveMenuItem__ISApL","saveMenuDivider":"Chat-module_saveMenuDivider__3ktTM","chatFeedbackPanel":"Chat-module_chatFeedbackPanel__gfOzk","chatFeedbackToggle":"Chat-module_chatFeedbackToggle__IeOM6","chatFeedbackIcon":"Chat-module_chatFeedbackIcon__XcB7A","chatFeedbackMeta":"Chat-module_chatFeedbackMeta__6t2be","chatFeedbackLabel":"Chat-module_chatFeedbackLabel__qQgH3","chatFeedbackDescription":"Chat-module_chatFeedbackDescription__I9bNg","chatFeedbackIndicator":"Chat-module_chatFeedbackIndicator__uHCr7","chatFeedbackIndicatorActive":"Chat-module_chatFeedbackIndicatorActive__bkw-w","chatFeedbackIndicatorInactive":"Chat-module_chatFeedbackIndicatorInactive__qMBkh","pauseButton":"Chat-module_pauseButton__eeu7K","pausing":"Chat-module_pausing__pTx8b","paused":"Chat-module_paused__j-pya","voiceCallIndicatorBar":"Chat-module_voiceCallIndicatorBar__N2sWN","voiceCallIndicator":"Chat-module_voiceCallIndicator__tsaaG","voiceCallIconPulse":"Chat-module_voiceCallIconPulse__zZbJn","voiceCallPulse":"Chat-module_voiceCallPulse__XcGU4","feedbackStatus":"Chat-module_feedbackStatus__-df7l","feedbackStatusSlideIn":"Chat-module_feedbackStatusSlideIn__n6bbB","feedbackStatusSuccess":"Chat-module_feedbackStatusSuccess__Ax2q0","feedbackStatusError":"Chat-module_feedbackStatusError__dnv6d","emailContainer":"Chat-module_emailContainer__TBxXZ","emailModalHeader":"Chat-module_emailModalHeader__Z4-CJ","emailHeaderText":"Chat-module_emailHeaderText__1dR6R","emailHeaderLabel":"Chat-module_emailHeaderLabel__7iAEH","emailMetadata":"Chat-module_emailMetadata__8XXGf","emailField":"Chat-module_emailField__pcb03","emailRecipients":"Chat-module_emailRecipients__YVVys","emailBody":"Chat-module_emailBody__OBt-w","emailBodyContent":"Chat-module_emailBodyContent__-vFo2","emailStatus":"Chat-module_emailStatus__T4UuL","imagePrompt":"Chat-module_imagePrompt__v7-Ho","imagePromptPreview":"Chat-module_imagePromptPreview__ve5dB","imagePromptImage":"Chat-module_imagePromptImage__KjE3H","imagePromptPlaceholder":"Chat-module_imagePromptPlaceholder__b8cW6","imagePromptSpinner":"Chat-module_imagePromptSpinner__nat8r","imagePromptMeta":"Chat-module_imagePromptMeta__YwltP","imagePromptPrompt":"Chat-module_imagePromptPrompt__N1E--","imagePromptStatus":"Chat-module_imagePromptStatus__0ROQF","imagePromptError":"Chat-module_imagePromptError__x1952"};
14846
16154
  styleInject(css_248z$4);
14847
16155
 
14848
16156
  /**
@@ -15382,6 +16690,40 @@
15382
16690
  return toolCall.name === ASSISTANT_PREPARATION_TOOL_CALL_NAME;
15383
16691
  }
15384
16692
 
16693
+ /**
16694
+ * Builds a stable identity string for tool calls across partial updates.
16695
+ *
16696
+ * @param toolCall - Tool call entry to identify.
16697
+ * @returns Stable identity string for deduplication.
16698
+ *
16699
+ * @private function of <Chat/>
16700
+ */
16701
+ function getToolCallIdentity(toolCall) {
16702
+ const rawToolCall = toolCall.rawToolCall;
16703
+ const rawId = (rawToolCall === null || rawToolCall === void 0 ? void 0 : rawToolCall.id) || (rawToolCall === null || rawToolCall === void 0 ? void 0 : rawToolCall.callId) || (rawToolCall === null || rawToolCall === void 0 ? void 0 : rawToolCall.call_id);
16704
+ if (rawId) {
16705
+ return `id:${rawId}`;
16706
+ }
16707
+ if (toolCall.createdAt) {
16708
+ return `time:${toolCall.createdAt}:${toolCall.name}`;
16709
+ }
16710
+ const argsKey = (() => {
16711
+ if (typeof toolCall.arguments === 'string') {
16712
+ return toolCall.arguments;
16713
+ }
16714
+ if (!toolCall.arguments) {
16715
+ return '';
16716
+ }
16717
+ try {
16718
+ return JSON.stringify(toolCall.arguments);
16719
+ }
16720
+ catch (_a) {
16721
+ return '';
16722
+ }
16723
+ })();
16724
+ return `fallback:${toolCall.name}:${argsKey}`;
16725
+ }
16726
+
15385
16727
  var css_248z$3 = ".AvatarProfileTooltip-module_AvatarProfileTooltip__bZ020{background-color:transparent;border:none;max-width:90vw;padding:0;position:fixed;width:320px;z-index:1000}.AvatarProfileTooltip-module_arrow__wmM61{border-color:transparent transparent #fff;border-style:solid;border-width:0 9px 9px;filter:drop-shadow(0 -3px 4px rgba(15,23,42,.15));height:0;left:28px;position:absolute;top:-9px;width:0}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkF2YXRhclByb2ZpbGVUb29sdGlwLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBSUksNEJBQTZCLENBQzdCLFdBQVksQ0FFWixjQUFlLENBSmYsU0FBVSxDQUZWLGNBQWUsQ0FLZixXQUFZLENBSlosWUFNSixDQUVBLDBDQVFJLHlDQUF5RCxDQUF6RCxrQkFBeUQsQ0FBekQsc0JBQXlELENBQ3pELGlEQUFzRCxDQU50RCxRQUFTLENBR1QsU0FBVSxDQUxWLGlCQUFrQixDQUlsQixRQUFTLENBSFQsT0FRSiIsImZpbGUiOiJBdmF0YXJQcm9maWxlVG9vbHRpcC5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLkF2YXRhclByb2ZpbGVUb29sdGlwIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogMTAwMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICB3aWR0aDogMzIwcHg7XG4gICAgbWF4LXdpZHRoOiA5MHZ3O1xufVxuXG4uYXJyb3cge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICB0b3A6IC05cHg7XG4gICAgbGVmdDogMjhweDtcbiAgICBib3JkZXItd2lkdGg6IDAgOXB4IDlweCA5cHg7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZmZmZmZmIHRyYW5zcGFyZW50O1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAtM3B4IDRweCByZ2JhKDE1LCAyMywgNDIsIDAuMTUpKTtcbn1cbiJdfQ== */";
15386
16728
  var styles$3 = {"AvatarProfileTooltip":"AvatarProfileTooltip-module_AvatarProfileTooltip__bZ020","arrow":"AvatarProfileTooltip-module_arrow__wmM61"};
15387
16729
  styleInject(css_248z$3);
@@ -19893,6 +21235,7 @@
19893
21235
  systemMessage: requirements.systemMessage + '\n\n' + exampleInteractionsContent,
19894
21236
  };
19895
21237
  }
21238
+ requirements = await applyPendingInlineKnowledgeSources(requirements, options === null || options === void 0 ? void 0 : options.inlineKnowledgeSourceUploader);
19896
21239
  // Remove comment lines (lines starting with #) from the final system message
19897
21240
  // while preserving the original content with comments in metadata
19898
21241
  const cleanedSystemMessage = removeCommentsFromSystemMessage(requirements.systemMessage);
@@ -19902,16 +21245,64 @@
19902
21245
  };
19903
21246
  }
19904
21247
  /**
19905
- * Mocked security check for imported files
19906
- *
19907
- * @param urlOrPath - The URL or local path of the file to check
19908
- * @returns A promise that resolves if the file is safe
21248
+ * @private Attempts to upload inline knowledge entries, falling back to legacy data URLs when the upload fails or is not configured.
19909
21249
  */
19910
- async function mockedSecurityCheck(urlOrPath) {
19911
- // TODO: Implement proper security checks
19912
- await new Promise((resolve) => setTimeout(resolve, 10)); // Mock async delay
19913
- if (urlOrPath.includes('malicious')) {
19914
- throw new Error(`Security check failed for: ${urlOrPath}`);
21250
+ async function applyPendingInlineKnowledgeSources(requirements, uploader) {
21251
+ var _a;
21252
+ const inlineSources = extractInlineKnowledgeSources(requirements._metadata);
21253
+ if (inlineSources.length === 0) {
21254
+ return requirements;
21255
+ }
21256
+ const knowledgeSources = [...((_a = requirements.knowledgeSources) !== null && _a !== void 0 ? _a : [])];
21257
+ for (const inlineSource of inlineSources) {
21258
+ const url = uploader
21259
+ ? await uploadInlineKnowledgeSourceWithFallback(inlineSource, uploader)
21260
+ : inlineKnowledgeSourceToDataUrl(inlineSource);
21261
+ knowledgeSources.push(url);
21262
+ }
21263
+ return {
21264
+ ...requirements,
21265
+ knowledgeSources,
21266
+ _metadata: stripInlineKnowledgeMetadata(requirements._metadata),
21267
+ };
21268
+ }
21269
+ async function uploadInlineKnowledgeSourceWithFallback(inlineSource, uploader) {
21270
+ try {
21271
+ return await uploader(inlineSource);
21272
+ }
21273
+ catch (error) {
21274
+ console.error('[inline-knowledge] Failed to upload inline source', {
21275
+ filename: inlineSource.filename,
21276
+ error,
21277
+ });
21278
+ return inlineKnowledgeSourceToDataUrl(inlineSource);
21279
+ }
21280
+ }
21281
+ function extractInlineKnowledgeSources(metadata) {
21282
+ if (!metadata) {
21283
+ return [];
21284
+ }
21285
+ const value = metadata.inlineKnowledgeSources;
21286
+ return Array.isArray(value) ? value : [];
21287
+ }
21288
+ function stripInlineKnowledgeMetadata(metadata) {
21289
+ if (!metadata || !Object.prototype.hasOwnProperty.call(metadata, 'inlineKnowledgeSources')) {
21290
+ return metadata;
21291
+ }
21292
+ const { inlineKnowledgeSources: _unusedInlineKnowledgeSources, ...rest } = metadata;
21293
+ return Object.keys(rest).length > 0 ? rest : undefined;
21294
+ }
21295
+ /**
21296
+ * Mocked security check for imported files
21297
+ *
21298
+ * @param urlOrPath - The URL or local path of the file to check
21299
+ * @returns A promise that resolves if the file is safe
21300
+ */
21301
+ async function mockedSecurityCheck(urlOrPath) {
21302
+ // TODO: Implement proper security checks
21303
+ await new Promise((resolve) => setTimeout(resolve, 10)); // Mock async delay
21304
+ if (urlOrPath.includes('malicious')) {
21305
+ throw new Error(`Security check failed for: ${urlOrPath}`);
19915
21306
  }
19916
21307
  }
19917
21308
  /**
@@ -21106,6 +22497,28 @@
21106
22497
  }));
21107
22498
  }
21108
22499
 
22500
+ /**
22501
+ * Builds a tool invocation script that injects hidden runtime context into tool args.
22502
+ *
22503
+ * @private utility of OpenAI tool execution wrappers
22504
+ */
22505
+ function buildToolInvocationScript(options) {
22506
+ const { functionName, functionArgsExpression } = options;
22507
+ return `
22508
+ const args = ${functionArgsExpression};
22509
+ const runtimeContextRaw =
22510
+ typeof ${TOOL_RUNTIME_CONTEXT_PARAMETER} === 'undefined'
22511
+ ? undefined
22512
+ : ${TOOL_RUNTIME_CONTEXT_PARAMETER};
22513
+
22514
+ if (runtimeContextRaw !== undefined && args && typeof args === 'object' && !Array.isArray(args)) {
22515
+ args.${TOOL_RUNTIME_CONTEXT_ARGUMENT} = runtimeContextRaw;
22516
+ }
22517
+
22518
+ return await ${functionName}(args);
22519
+ `;
22520
+ }
22521
+
21109
22522
  /**
21110
22523
  * Parses an OpenAI error message to identify which parameter is unsupported
21111
22524
  *
@@ -21459,10 +22872,10 @@
21459
22872
  const scriptTool = scriptTools[0]; // <- TODO: [🧠] Which script tool to use?
21460
22873
  functionResponse = await scriptTool.execute({
21461
22874
  scriptLanguage: 'javascript',
21462
- script: `
21463
- const args = ${functionArgs};
21464
- return await ${functionName}(args);
21465
- `,
22875
+ script: buildToolInvocationScript({
22876
+ functionName,
22877
+ functionArgsExpression: functionArgs,
22878
+ }),
21466
22879
  parameters: prompt.parameters,
21467
22880
  });
21468
22881
  }
@@ -23164,10 +24577,10 @@
23164
24577
  try {
23165
24578
  return await scriptTool.execute({
23166
24579
  scriptLanguage: 'javascript',
23167
- script: `
23168
- const args = ${JSON.stringify(functionArgs)};
23169
- return await ${functionName}(args);
23170
- `,
24580
+ script: buildToolInvocationScript({
24581
+ functionName,
24582
+ functionArgsExpression: JSON.stringify(functionArgs),
24583
+ }),
23171
24584
  parameters: (_c = (_b = runContext === null || runContext === void 0 ? void 0 : runContext.context) === null || _b === void 0 ? void 0 : _b.parameters) !== null && _c !== void 0 ? _c : {},
23172
24585
  });
23173
24586
  }
@@ -23620,10 +25033,10 @@
23620
25033
  const scriptTool = scriptTools[0]; // <- TODO: [🧠] Which script tool to use?
23621
25034
  functionResponse = await scriptTool.execute({
23622
25035
  scriptLanguage: 'javascript',
23623
- script: `
23624
- const args = ${JSON.stringify(functionArgs)};
23625
- return await ${functionName}(args);
23626
- `,
25036
+ script: buildToolInvocationScript({
25037
+ functionName,
25038
+ functionArgsExpression: JSON.stringify(functionArgs),
25039
+ }),
23627
25040
  parameters: prompt.parameters,
23628
25041
  });
23629
25042
  if (this.options.isVerbose) {
@@ -24964,38 +26377,18 @@
24964
26377
  */
24965
26378
 
24966
26379
  /**
24967
- * Builds a stable identity string for tool calls across partial updates.
26380
+ * Keep-alive helpers used for streaming chat responses.
24968
26381
  *
24969
- * @param toolCall - Tool call entry to identify.
24970
- * @returns Stable identity string for deduplication.
26382
+ * These constants coordinate the signal sent by the Agents Server streaming
26383
+ * endpoint and the parser in the SDK so we can distinguish between
26384
+ * real content and occasional pings.
24971
26385
  *
24972
- * @private function of <Chat/>
26386
+ * @private internal streaming helper for Promptbook chat connections
26387
+ */
26388
+ const CHAT_STREAM_KEEP_ALIVE_TOKEN = 'STREAM_KEEP_ALIVE';
26389
+ /**
26390
+ * Note: [💞] Ignore a discrepancy between file name and entity name
24973
26391
  */
24974
- function getToolCallIdentity(toolCall) {
24975
- const rawToolCall = toolCall.rawToolCall;
24976
- const rawId = (rawToolCall === null || rawToolCall === void 0 ? void 0 : rawToolCall.id) || (rawToolCall === null || rawToolCall === void 0 ? void 0 : rawToolCall.callId) || (rawToolCall === null || rawToolCall === void 0 ? void 0 : rawToolCall.call_id);
24977
- if (rawId) {
24978
- return `id:${rawId}`;
24979
- }
24980
- if (toolCall.createdAt) {
24981
- return `time:${toolCall.createdAt}:${toolCall.name}`;
24982
- }
24983
- const argsKey = (() => {
24984
- if (typeof toolCall.arguments === 'string') {
24985
- return toolCall.arguments;
24986
- }
24987
- if (!toolCall.arguments) {
24988
- return '';
24989
- }
24990
- try {
24991
- return JSON.stringify(toolCall.arguments);
24992
- }
24993
- catch (_a) {
24994
- return '';
24995
- }
24996
- })();
24997
- return `fallback:${toolCall.name}:${argsKey}`;
24998
- }
24999
26392
 
25000
26393
  /**
25001
26394
  * Resolve a remote META IMAGE value into an absolute URL when possible.
@@ -25071,7 +26464,9 @@
25071
26464
  static async connect(options) {
25072
26465
  var _a, _b, _c;
25073
26466
  const agentProfileUrl = `${options.agentUrl}/api/profile`;
25074
- const profileResponse = await fetch(agentProfileUrl);
26467
+ const profileResponse = await fetch(agentProfileUrl, {
26468
+ headers: attachClientVersionHeader(),
26469
+ });
25075
26470
  // <- TODO: [🐱‍🚀] What about closed-source agents?
25076
26471
  // <- TODO: [🐱‍🚀] Maybe use promptbookFetch
25077
26472
  if (!profileResponse.ok) {
@@ -25172,6 +26567,7 @@
25172
26567
  }
25173
26568
  const response = await fetch(`${this.agentUrl}/api/voice`, {
25174
26569
  method: 'POST',
26570
+ headers: attachClientVersionHeader(),
25175
26571
  body: formData,
25176
26572
  });
25177
26573
  if (!response.ok) {
@@ -25201,13 +26597,14 @@
25201
26597
  const chatPrompt = prompt;
25202
26598
  const bookResponse = await fetch(`${this.agentUrl}/api/chat`, {
25203
26599
  method: 'POST',
25204
- headers: {
26600
+ headers: attachClientVersionHeader({
25205
26601
  'Content-Type': 'application/json',
25206
- },
26602
+ }),
25207
26603
  body: JSON.stringify({
25208
26604
  message: prompt.content,
25209
26605
  thread: chatPrompt.thread,
25210
26606
  attachments: chatPrompt.attachments,
26607
+ parameters: chatPrompt.parameters,
25211
26608
  }),
25212
26609
  });
25213
26610
  // <- TODO: [🐱‍🚀] What about closed-source agents?
@@ -25289,6 +26686,9 @@
25289
26686
  const lines = textChunk.split(/\r?\n/);
25290
26687
  for (const line of lines) {
25291
26688
  const trimmedLine = line.trim();
26689
+ if (trimmedLine === CHAT_STREAM_KEEP_ALIVE_TOKEN) {
26690
+ continue;
26691
+ }
25292
26692
  let isToolCallLine = false;
25293
26693
  if (trimmedLine.startsWith('{') && trimmedLine.endsWith('}')) {
25294
26694
  try {
@@ -26374,49 +27774,6 @@
26374
27774
  return name.startsWith(TEAM_TOOL_PREFIX);
26375
27775
  }
26376
27776
 
26377
- /**
26378
- * Builds display-ready timestamp and duration labels for a chat message.
26379
- *
26380
- * @private utility of `<Chat/>` component
26381
- */
26382
- function getChatMessageTimingDisplay(message) {
26383
- if (!message.createdAt) {
26384
- return null;
26385
- }
26386
- const timestamp = moment__default["default"](message.createdAt);
26387
- if (!timestamp.isValid()) {
26388
- return null;
26389
- }
26390
- const durationLabel = message.generationDurationMs === undefined
26391
- ? undefined
26392
- : formatGenerationDurationLabel(message.generationDurationMs);
26393
- return {
26394
- timeLabel: timestamp.format('LT'),
26395
- fullLabel: timestamp.format('YYYY-MM-DD HH:mm:ss'),
26396
- durationLabel,
26397
- };
26398
- }
26399
- /**
26400
- * Formats a generation duration value into a compact label.
26401
- */
26402
- function formatGenerationDurationLabel(durationMs) {
26403
- if (!Number.isFinite(durationMs) || durationMs < 0) {
26404
- return '0ms';
26405
- }
26406
- const duration = moment__default["default"].duration(durationMs);
26407
- const totalSeconds = duration.asSeconds();
26408
- if (totalSeconds < 1) {
26409
- return `${Math.max(1, Math.round(duration.asMilliseconds()))}ms`;
26410
- }
26411
- if (totalSeconds < 60) {
26412
- const precision = totalSeconds < 10 ? 1 : 0;
26413
- return `${totalSeconds.toFixed(precision)}s`;
26414
- }
26415
- const minutes = Math.floor(duration.asMinutes());
26416
- const seconds = Math.round(totalSeconds - minutes * 60);
26417
- return `${minutes}m ${seconds}s`;
26418
- }
26419
-
26420
27777
  /**
26421
27778
  * @@@
26422
27779
  *
@@ -26644,130 +28001,6 @@
26644
28001
  * <- TODO: But maybe split into multiple files later?
26645
28002
  */
26646
28003
 
26647
- /**
26648
- * Builds display text for a tool call chiplet.
26649
- *
26650
- * @param chipletInfo - Chiplet metadata for the tool call.
26651
- *
26652
- * @private utility of `<Chat/>`
26653
- */
26654
- function buildToolCallChipText(chipletInfo) {
26655
- return chipletInfo.text;
26656
- }
26657
- /**
26658
- * Technical to user-friendly tool names and emojis
26659
- *
26660
- * @private utility of `<Chat/>` [🧠] Maybe public?
26661
- */
26662
- const TOOL_TITLES = {
26663
- [ASSISTANT_PREPARATION_TOOL_CALL_NAME]: { title: 'Preparing agent', emoji: '...' },
26664
- 'self-learning': { title: 'self-learning', emoji: '🧠' },
26665
- web_search: { title: 'Searching the web', emoji: '🔎' },
26666
- useSearchEngine: { title: 'Searching the web', emoji: '🔎' },
26667
- search: { title: 'Searching the web', emoji: '🔎' },
26668
- useBrowser: { title: 'Browsing the web', emoji: '🌐' },
26669
- browse: { title: 'Browsing the web', emoji: '🌐' },
26670
- fetch_url_content: { title: 'Fetching URL content', emoji: '🌐' },
26671
- run_browser: { title: 'Running browser', emoji: '🌐' },
26672
- get_current_time: { title: 'Checking time', emoji: '🕒' },
26673
- useTime: { title: 'Checking time', emoji: '🕒' },
26674
- send_email: { title: 'Sending email', emoji: '📧' },
26675
- useEmail: { title: 'Sending email', emoji: '📧' },
26676
- // Add more tools here as needed
26677
- };
26678
- /**
26679
- * Gets the chiplet information including text and agent data (for team tools).
26680
- *
26681
- * @private [🧠] Maybe public?
26682
- */
26683
- function getToolCallChipletInfo(toolCall) {
26684
- const toolInfo = TOOL_TITLES[toolCall.name];
26685
- const baseTitle = (toolInfo === null || toolInfo === void 0 ? void 0 : toolInfo.title) || toolCall.name;
26686
- const emoji = (toolInfo === null || toolInfo === void 0 ? void 0 : toolInfo.emoji) || '🛠️';
26687
- const args = parseToolCallArguments(toolCall);
26688
- const isTimeTool = toolCall.name === 'get_current_time' || toolCall.name === 'useTime';
26689
- const isEmailTool = toolCall.name === 'send_email' || toolCall.name === 'useEmail';
26690
- const resultRaw = parseToolCallResult(toolCall.result);
26691
- const teamResult = parseTeamToolResult(resultRaw);
26692
- if (teamResult === null || teamResult === void 0 ? void 0 : teamResult.teammate) {
26693
- const label = teamResult.teammate.label || teamResult.teammate.url || baseTitle;
26694
- const agentData = {
26695
- url: teamResult.teammate.url,
26696
- label,
26697
- };
26698
- return {
26699
- text: label,
26700
- agentData,
26701
- };
26702
- }
26703
- if (isTimeTool) {
26704
- const resultDate = getToolCallResultDate(resultRaw);
26705
- if (resultDate) {
26706
- return {
26707
- text: `${emoji} ${resultDate.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`,
26708
- };
26709
- }
26710
- }
26711
- if (isEmailTool) {
26712
- if (args.subject) {
26713
- return {
26714
- text: `${emoji} ${args.subject}`,
26715
- };
26716
- }
26717
- }
26718
- if (args.query) {
26719
- return {
26720
- text: `${emoji} ${args.query}`,
26721
- };
26722
- }
26723
- if (args.url) {
26724
- try {
26725
- const url = new URL(args.url);
26726
- return {
26727
- text: `${emoji} ${url.hostname}`,
26728
- };
26729
- }
26730
- catch (e) {
26731
- return {
26732
- text: `${emoji} ${args.url}`,
26733
- };
26734
- }
26735
- }
26736
- return {
26737
- text: `${emoji} ${baseTitle}`,
26738
- };
26739
- }
26740
-
26741
- /**
26742
- * Parses markdown buttons in the format [Button Text](?message=Message%20to%20send)
26743
- * Returns both the content without buttons and the extracted buttons
26744
- *
26745
- * @param content The markdown content that may contain buttons
26746
- * @returns Object with contentWithoutButtons and buttons array
26747
- *
26748
- * @public exported from `@promptbook/components`
26749
- */
26750
- function parseMessageButtons(content) {
26751
- const buttonRegex = /\[([^\]]+)\]\(\?message=([^)]+)\)/g;
26752
- const buttons = [];
26753
- let match;
26754
- // Extract all buttons
26755
- while ((match = buttonRegex.exec(content)) !== null) {
26756
- const [, text, encodedMessage] = match;
26757
- if (text && encodedMessage) {
26758
- // Decode URL-encoded message
26759
- const message = decodeURIComponent(encodedMessage);
26760
- buttons.push({ text, message });
26761
- }
26762
- }
26763
- // Remove buttons from content
26764
- const contentWithoutButtons = content.replace(buttonRegex, '').trim();
26765
- return {
26766
- contentWithoutButtons,
26767
- buttons,
26768
- };
26769
- }
26770
-
26771
28004
  /**
26772
28005
  * Collects tool calls and citations from TEAM tool call results, resolving nested teammate chains.
26773
28006
  *
@@ -26900,15 +28133,361 @@
26900
28133
  return `${origin.label}:${citation.id}:${citation.source}`;
26901
28134
  }
26902
28135
 
28136
+ const MEMORY_CHIP_MAX_LENGTH = 48;
28137
+ const MEMORY_CHIP_TRUNCATE_LENGTH = 45;
26903
28138
  /**
26904
- * @deprecated use `isComplete` instead
26905
- * @private util of `<Chat />`
28139
+ * Builds display text for a tool call chiplet.
28140
+ *
28141
+ * @param chipletInfo - Chiplet metadata for the tool call.
28142
+ *
28143
+ * @private utility of `<Chat/>`
26906
28144
  */
26907
- const LOADING_INTERACTIVE_IMAGE = 'Loading...';
26908
- /**
26909
- * Note: [💞] Ignore a discrepancy between file name and entity name
28145
+ function buildToolCallChipText(chipletInfo) {
28146
+ return chipletInfo.text;
28147
+ }
28148
+ /**
28149
+ * Technical to user-friendly tool names and emojis
28150
+ *
28151
+ * @private utility of `<Chat/>` [🧠] Maybe public?
28152
+ */
28153
+ const TOOL_TITLES = {
28154
+ [ASSISTANT_PREPARATION_TOOL_CALL_NAME]: { title: 'Preparing agent', emoji: '...' },
28155
+ 'self-learning': { title: 'self-learning', emoji: '🧠' },
28156
+ retrieve_user_memory: { title: 'Reading memory', emoji: '🧠' },
28157
+ store_user_memory: { title: 'Storing memory', emoji: '🧠' },
28158
+ web_search: { title: 'Searching the web', emoji: '🔎' },
28159
+ useSearchEngine: { title: 'Searching the web', emoji: '🔎' },
28160
+ search: { title: 'Searching the web', emoji: '🔎' },
28161
+ useBrowser: { title: 'Browsing the web', emoji: '🌐' },
28162
+ browse: { title: 'Browsing the web', emoji: '🌐' },
28163
+ fetch_url_content: { title: 'Fetching URL content', emoji: '🌐' },
28164
+ run_browser: { title: 'Running browser', emoji: '🌐' },
28165
+ get_current_time: { title: 'Checking time', emoji: '🕒' },
28166
+ useTime: { title: 'Checking time', emoji: '🕒' },
28167
+ send_email: { title: 'Sending email', emoji: '📧' },
28168
+ useEmail: { title: 'Sending email', emoji: '📧' },
28169
+ // Add more tools here as needed
28170
+ };
28171
+ /**
28172
+ * Gets the chiplet information including text and agent data (for team tools).
28173
+ *
28174
+ * @private [🧠] Maybe public?
28175
+ */
28176
+ function getToolCallChipletInfo(toolCall) {
28177
+ const toolInfo = TOOL_TITLES[toolCall.name];
28178
+ const baseTitle = (toolInfo === null || toolInfo === void 0 ? void 0 : toolInfo.title) || toolCall.name;
28179
+ const emoji = (toolInfo === null || toolInfo === void 0 ? void 0 : toolInfo.emoji) || '🛠️';
28180
+ const args = parseToolCallArguments(toolCall);
28181
+ const isTimeTool = toolCall.name === 'get_current_time' || toolCall.name === 'useTime';
28182
+ const isEmailTool = toolCall.name === 'send_email' || toolCall.name === 'useEmail';
28183
+ const isMemoryTool = toolCall.name === 'retrieve_user_memory' || toolCall.name === 'store_user_memory';
28184
+ const resultRaw = parseToolCallResult(toolCall.result);
28185
+ const teamResult = parseTeamToolResult(resultRaw);
28186
+ if (teamResult === null || teamResult === void 0 ? void 0 : teamResult.teammate) {
28187
+ const label = teamResult.teammate.label || teamResult.teammate.url || baseTitle;
28188
+ const agentData = {
28189
+ url: teamResult.teammate.url,
28190
+ label,
28191
+ };
28192
+ return {
28193
+ text: label,
28194
+ agentData,
28195
+ };
28196
+ }
28197
+ if (isTimeTool) {
28198
+ const resultDate = getToolCallResultDate(resultRaw);
28199
+ if (resultDate) {
28200
+ return {
28201
+ text: `${emoji} ${resultDate.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`,
28202
+ };
28203
+ }
28204
+ }
28205
+ if (isEmailTool) {
28206
+ if (args.subject) {
28207
+ return {
28208
+ text: `${emoji} ${args.subject}`,
28209
+ };
28210
+ }
28211
+ }
28212
+ if (isMemoryTool) {
28213
+ const memoryPreview = getMemoryPreviewText(args, resultRaw);
28214
+ if (memoryPreview) {
28215
+ return {
28216
+ text: `${emoji} ${memoryPreview}`,
28217
+ };
28218
+ }
28219
+ }
28220
+ if (args.query) {
28221
+ return {
28222
+ text: `${emoji} ${args.query}`,
28223
+ };
28224
+ }
28225
+ if (args.url) {
28226
+ try {
28227
+ const url = new URL(args.url);
28228
+ return {
28229
+ text: `${emoji} ${url.hostname}`,
28230
+ };
28231
+ }
28232
+ catch (e) {
28233
+ return {
28234
+ text: `${emoji} ${args.url}`,
28235
+ };
28236
+ }
28237
+ }
28238
+ return {
28239
+ text: `${emoji} ${baseTitle}`,
28240
+ };
28241
+ }
28242
+ /**
28243
+ * Builds memory preview text for MEMORY commitment tool calls.
28244
+ */
28245
+ function getMemoryPreviewText(args, resultRaw) {
28246
+ var _a, _b, _c;
28247
+ if (!resultRaw || typeof resultRaw !== 'object') {
28248
+ return typeof args.content === 'string' ? shortenMemoryPreview(args.content) : null;
28249
+ }
28250
+ const result = resultRaw;
28251
+ if (result.action === 'store') {
28252
+ const content = ((_a = result.memory) === null || _a === void 0 ? void 0 : _a.content) || (typeof args.content === 'string' ? args.content : '');
28253
+ return content ? shortenMemoryPreview(content) : null;
28254
+ }
28255
+ const firstMemoryContent = (_c = (_b = result.memories) === null || _b === void 0 ? void 0 : _b.find((memory) => typeof memory.content === 'string')) === null || _c === void 0 ? void 0 : _c.content;
28256
+ if (firstMemoryContent) {
28257
+ return shortenMemoryPreview(firstMemoryContent);
28258
+ }
28259
+ if (typeof result.query === 'string' && result.query.trim()) {
28260
+ return `No match for "${result.query.trim()}"`;
28261
+ }
28262
+ return null;
28263
+ }
28264
+ /**
28265
+ * Shortens long memory content for compact chip display.
28266
+ */
28267
+ function shortenMemoryPreview(content) {
28268
+ const trimmed = content.trim().replace(/\s+/g, ' ');
28269
+ if (trimmed.length <= MEMORY_CHIP_MAX_LENGTH) {
28270
+ return trimmed;
28271
+ }
28272
+ return `${trimmed.slice(0, MEMORY_CHIP_TRUNCATE_LENGTH)}...`;
28273
+ }
28274
+
28275
+ const IMAGE_PROMPT_REGEX = /!\[([^\]]*)\]\(\?image-prompt=([^)]+)\)/gi;
28276
+ function decodePrompt(value) {
28277
+ try {
28278
+ return decodeURIComponent(value);
28279
+ }
28280
+ catch (_a) {
28281
+ return value;
28282
+ }
28283
+ }
28284
+ /**
28285
+ * Splits a chat message into text and image prompt segments.
28286
+ *
28287
+ * @param content - Raw markdown string produced by the agent.
28288
+ * @returns Ordered list of segments that preserves the original message flow.
28289
+ * @private internal helper of `<ChatMessageItem/>`
28290
+ */
28291
+ function splitMessageContentByImagePrompts(content) {
28292
+ if (!content) {
28293
+ return [{ type: 'text', content }];
28294
+ }
28295
+ const segments = [];
28296
+ let lastIndex = 0;
28297
+ IMAGE_PROMPT_REGEX.lastIndex = 0;
28298
+ let match;
28299
+ while ((match = IMAGE_PROMPT_REGEX.exec(content)) !== null) {
28300
+ const [fullMatch, alt = '', rawPrompt = ''] = match;
28301
+ const start = match.index;
28302
+ if (start > lastIndex) {
28303
+ segments.push({
28304
+ type: 'text',
28305
+ content: content.slice(lastIndex, start),
28306
+ });
28307
+ }
28308
+ const decodedPrompt = decodePrompt(rawPrompt);
28309
+ const prompt = spaceTrim__default["default"](decodedPrompt) || decodedPrompt || 'Generated image';
28310
+ const decodedAlt = decodePrompt(alt);
28311
+ segments.push({
28312
+ type: 'image',
28313
+ alt: spaceTrim__default["default"](decodedAlt) || 'Generated image',
28314
+ prompt,
28315
+ });
28316
+ lastIndex = start + fullMatch.length;
28317
+ }
28318
+ if (lastIndex < content.length) {
28319
+ segments.push({
28320
+ type: 'text',
28321
+ content: content.slice(lastIndex),
28322
+ });
28323
+ }
28324
+ if (segments.length === 0) {
28325
+ return [{ type: 'text', content }];
28326
+ }
28327
+ return segments;
28328
+ }
28329
+ /**
28330
+ * Note: [💞] Ignore a discrepancy between file name and entity name
28331
+ */
28332
+
28333
+ /**
28334
+ * Parses markdown buttons in the format [Button Text](?message=Message%20to%20send)
28335
+ * Returns both the content without buttons and the extracted buttons
28336
+ *
28337
+ * @param content The markdown content that may contain buttons
28338
+ * @returns Object with contentWithoutButtons and buttons array
28339
+ *
28340
+ * @public exported from `@promptbook/components`
28341
+ */
28342
+ function parseMessageButtons(content) {
28343
+ const buttonRegex = /\[([^\]]+)\]\(\?message=([^)]+)\)/g;
28344
+ const buttons = [];
28345
+ let match;
28346
+ // Extract all buttons
28347
+ while ((match = buttonRegex.exec(content)) !== null) {
28348
+ const [, text, encodedMessage] = match;
28349
+ if (text && encodedMessage) {
28350
+ // Decode URL-encoded message
28351
+ const message = decodeURIComponent(encodedMessage);
28352
+ buttons.push({ text, message });
28353
+ }
28354
+ }
28355
+ // Remove buttons from content
28356
+ const contentWithoutButtons = content.replace(buttonRegex, '').trim();
28357
+ return {
28358
+ contentWithoutButtons,
28359
+ buttons,
28360
+ };
28361
+ }
28362
+
28363
+ /**
28364
+ * @deprecated use `isComplete` instead
28365
+ * @private util of `<Chat />`
28366
+ */
28367
+ const LOADING_INTERACTIVE_IMAGE = 'Loading...';
28368
+ /**
28369
+ * Note: [💞] Ignore a discrepancy between file name and entity name
28370
+ */
28371
+
28372
+ /**
28373
+ * Constructs a standardized filename for a generated image based on its prompt and parameters.
28374
+ *
28375
+ * @param params - The parameters for the image generation
28376
+ * @returns The constructed filename
28377
+ *
28378
+ * @private internal helper for image generation pipeline
28379
+ */
28380
+ function constructImageFilename(params) {
28381
+ const { prompt, model, size, quality, style, attachments } = params;
28382
+ const promptTrimmed = spaceTrim$1.spaceTrim(prompt);
28383
+ return (promptTrimmed
28384
+ .toLowerCase()
28385
+ .replace(/[^a-z0-9]+/g, '-')
28386
+ .replace(/^-+|-+$/g, '') +
28387
+ // Note: Default model 'dall-e-3' is omitted for backward compatibility
28388
+ (model && model !== 'dall-e-3' ? `-${model.toLowerCase().replace(/[^a-z0-9]+/g, '-')}` : '') +
28389
+ (size === '1024x1024' || size === undefined ? '' : `-${size}`) +
28390
+ (quality === 'standard' || quality === undefined ? '' : `-${quality}`) +
28391
+ (style === 'vivid' || style === undefined ? '' : `-${style}`) +
28392
+ (attachments && attachments.length > 0 ? `-attach-${hashAttachments(attachments)}` : '') +
28393
+ '.png');
28394
+ }
28395
+ function hashAttachments(attachments) {
28396
+ const urls = attachments
28397
+ .map((a) => a.url)
28398
+ .sort()
28399
+ .join('|');
28400
+ let hash = 0;
28401
+ for (let i = 0; i < urls.length; i++) {
28402
+ const char = urls.charCodeAt(i);
28403
+ hash = (hash << 5) - hash + char;
28404
+ hash = hash & hash; // Convert to 32bit integer
28405
+ }
28406
+ return (hash >>> 0).toString(36);
28407
+ }
28408
+
28409
+ const generatedImageCache = new Map();
28410
+ const pendingImageFetches = new Map();
28411
+ async function fetchGeneratedImageUrl(filename) {
28412
+ const cached = generatedImageCache.get(filename);
28413
+ if (cached) {
28414
+ return cached;
28415
+ }
28416
+ if (pendingImageFetches.has(filename)) {
28417
+ return pendingImageFetches.get(filename);
28418
+ }
28419
+ const request = (async () => {
28420
+ const response = await fetch(`/api/images/${encodeURIComponent(filename)}?raw=true`, {
28421
+ headers: {
28422
+ 'X-Promptbook-Client': 'chat',
28423
+ },
28424
+ });
28425
+ if (!response.ok) {
28426
+ const text = await response.text();
28427
+ throw new Error(text || `Image generation failed (${response.status})`);
28428
+ }
28429
+ const payload = await response.json();
28430
+ if (!(payload === null || payload === void 0 ? void 0 : payload.cdnUrl)) {
28431
+ throw new Error('Image generation API did not return a valid URL');
28432
+ }
28433
+ generatedImageCache.set(filename, payload.cdnUrl);
28434
+ return payload.cdnUrl;
28435
+ })();
28436
+ pendingImageFetches.set(filename, request);
28437
+ request.finally(() => pendingImageFetches.delete(filename));
28438
+ return request;
28439
+ }
28440
+ /**
28441
+ * Renders a preview area for the `![alt](?image-prompt=...)` notation.
28442
+ *
28443
+ * @private internal component of `<ChatMessageItem/>`
26910
28444
  */
28445
+ function ImagePromptRenderer({ alt, prompt }) {
28446
+ const trimmedPrompt = react.useMemo(() => spaceTrim__default["default"](prompt), [prompt]);
28447
+ const filename = react.useMemo(() => constructImageFilename({
28448
+ prompt: trimmedPrompt,
28449
+ }), [trimmedPrompt]);
28450
+ const [status, setStatus] = react.useState('loading');
28451
+ const [imageUrl, setImageUrl] = react.useState(null);
28452
+ const [error, setError] = react.useState(null);
28453
+ react.useEffect(() => {
28454
+ let isMounted = true;
28455
+ setStatus('loading');
28456
+ setImageUrl(null);
28457
+ setError(null);
28458
+ void fetchGeneratedImageUrl(filename)
28459
+ .then((url) => {
28460
+ if (!isMounted) {
28461
+ return;
28462
+ }
28463
+ setImageUrl(url);
28464
+ setStatus('success');
28465
+ })
28466
+ .catch((fetchError) => {
28467
+ if (!isMounted) {
28468
+ return;
28469
+ }
28470
+ setStatus('error');
28471
+ setError((fetchError === null || fetchError === void 0 ? void 0 : fetchError.message) || 'Failed to generate image');
28472
+ });
28473
+ return () => {
28474
+ isMounted = false;
28475
+ };
28476
+ }, [filename]);
28477
+ const statusLabel = status === 'loading'
28478
+ ? 'Generating image...'
28479
+ : status === 'error'
28480
+ ? 'Failed to generate image'
28481
+ : 'Image generated';
28482
+ return (jsxRuntime.jsxs("div", { className: styles$4.imagePrompt, "aria-live": "polite", children: [jsxRuntime.jsxs("div", { className: styles$4.imagePromptPreview, children: [status === 'success' && imageUrl ? (jsxRuntime.jsx("img", { src: imageUrl, alt: alt, className: styles$4.imagePromptImage })) : (jsxRuntime.jsx("div", { className: styles$4.imagePromptPlaceholder, children: jsxRuntime.jsx("div", { className: styles$4.imagePromptSpinner }) })), status === 'error' && error && (jsxRuntime.jsx("div", { className: styles$4.imagePromptError, children: error }))] }), jsxRuntime.jsxs("div", { className: styles$4.imagePromptMeta, children: [jsxRuntime.jsx("span", { className: styles$4.imagePromptPrompt, children: trimmedPrompt || 'Generated image' }), jsxRuntime.jsx("span", { className: styles$4.imagePromptStatus, children: statusLabel })] })] }));
28483
+ }
26911
28484
 
28485
+ /**
28486
+ * Maximum characters allowed in a single ElevenLabs speech request.
28487
+ *
28488
+ * @private
28489
+ */
28490
+ const MAX_MESSAGE_SPEECH_LENGTH = 4500;
26912
28491
  /**
26913
28492
  * Finds teammate metadata by tool name, falling back to the toolName field when needed.
26914
28493
  */
@@ -27126,16 +28705,11 @@
27126
28705
  const color = Color.fromSafe((participant && participant.color) || (isMe ? USER_CHAT_COLOR : PROMPTBOOK_CHAT_COLOR));
27127
28706
  const colorOfText = color.then(textColor);
27128
28707
  const { contentWithoutButtons, buttons } = parseMessageButtons(message.content);
28708
+ const contentSegments = react.useMemo(() => splitMessageContentByImagePrompts(contentWithoutButtons), [contentWithoutButtons]);
27129
28709
  const completedToolCalls = dedupeToolCalls((_a = (message.toolCalls || message.completedToolCalls)) === null || _a === void 0 ? void 0 : _a.filter((toolCall) => !isAssistantPreparationToolCall(toolCall)));
27130
28710
  const teamToolCallSummary = react.useMemo(() => collectTeamToolCallSummary(completedToolCalls), [completedToolCalls]);
27131
28711
  const transitiveToolCalls = teamToolCallSummary.toolCalls;
27132
28712
  const transitiveCitations = teamToolCallSummary.citations;
27133
- const ongoingToolCallGroups = react.useMemo(() => groupOngoingToolCalls(message.ongoingToolCalls, toolTitles, teammates), [message.ongoingToolCalls, toolTitles, teammates]);
27134
- const completedToolCallCount = (_b = completedToolCalls === null || completedToolCalls === void 0 ? void 0 : completedToolCalls.length) !== null && _b !== void 0 ? _b : 0;
27135
- const transitiveToolCallCount = transitiveToolCalls.length;
27136
- const ongoingToolCallCount = ongoingToolCallGroups.length;
27137
- const toolCallChipCount = completedToolCallCount + transitiveToolCallCount + ongoingToolCallCount;
27138
- const shouldShowButtons = isLastMessage && buttons.length > 0 && onMessage;
27139
28713
  // Extract citations from message content
27140
28714
  const messageWithCitations = extractCitationsFromMessage(message);
27141
28715
  const citations = messageWithCitations.citations || [];
@@ -27144,12 +28718,151 @@
27144
28718
  const [copied, setCopied] = react.useState(false);
27145
28719
  const [tooltipAlign, setTooltipAlign] = react.useState('center');
27146
28720
  const copyTooltipRef = react.useRef(null);
28721
+ const contentWithoutButtonsRef = react.useRef(null);
28722
+ const audioRef = react.useRef(null);
28723
+ const [audioUrl, setAudioUrl] = react.useState(null);
28724
+ const [isAudioLoading, setIsAudioLoading] = react.useState(false);
28725
+ const [isAudioPlaying, setIsAudioPlaying] = react.useState(false);
28726
+ const [audioError, setAudioError] = react.useState(null);
28727
+ const ongoingToolCallGroups = react.useMemo(() => groupOngoingToolCalls(message.ongoingToolCalls, toolTitles, teammates), [message.ongoingToolCalls, toolTitles, teammates]);
28728
+ const completedToolCallCount = (_b = completedToolCalls === null || completedToolCalls === void 0 ? void 0 : completedToolCalls.length) !== null && _b !== void 0 ? _b : 0;
28729
+ const transitiveToolCallCount = transitiveToolCalls.length;
28730
+ const ongoingToolCallCount = ongoingToolCallGroups.length;
28731
+ const toolCallChipCount = completedToolCallCount + transitiveToolCallCount + ongoingToolCallCount;
28732
+ const shouldShowButtons = isLastMessage && buttons.length > 0 && onMessage;
28733
+ const playButtonTitle = audioError !== null && audioError !== void 0 ? audioError : (isAudioPlaying ? 'Pause message playback' : 'Read message aloud');
28734
+ const trimmedMessageContent = message.content.trim();
28735
+ const shouldShowPlayButton = trimmedMessageContent.length > 0;
28736
+ /**
28737
+ * Attaches playback listeners to keep the UI in sync with the audio element.
28738
+ *
28739
+ * @private
28740
+ */
28741
+ const attachMessageAudioListeners = react.useCallback((element) => {
28742
+ element.onplay = () => {
28743
+ setIsAudioPlaying(true);
28744
+ };
28745
+ element.onpause = () => {
28746
+ setIsAudioPlaying(false);
28747
+ };
28748
+ element.onended = () => {
28749
+ setIsAudioPlaying(false);
28750
+ element.currentTime = 0;
28751
+ };
28752
+ }, []);
28753
+ /**
28754
+ * Derives the plain text that should be spoken, preferring the rendered node over raw markdown.
28755
+ *
28756
+ * @private
28757
+ */
28758
+ const getMessageTextForSpeech = react.useCallback(() => {
28759
+ var _a, _b;
28760
+ const renderedText = (_b = (_a = contentWithoutButtonsRef.current) === null || _a === void 0 ? void 0 : _a.innerText) === null || _b === void 0 ? void 0 : _b.trim();
28761
+ if (renderedText) {
28762
+ return renderedText;
28763
+ }
28764
+ return trimmedMessageContent;
28765
+ }, [trimmedMessageContent]);
28766
+ /**
28767
+ * Fetches ElevenLabs speech audio (or replays cached audio) when the play button is pressed.
28768
+ *
28769
+ * @private
28770
+ */
28771
+ const handlePlayMessage = react.useCallback(async () => {
28772
+ var _a;
28773
+ if (isAudioLoading) {
28774
+ return;
28775
+ }
28776
+ if (!shouldShowPlayButton) {
28777
+ setAudioError('Nothing to read aloud.');
28778
+ return;
28779
+ }
28780
+ const speechText = getMessageTextForSpeech();
28781
+ if (!speechText) {
28782
+ setAudioError('Nothing to read aloud.');
28783
+ return;
28784
+ }
28785
+ const payloadText = speechText.length > MAX_MESSAGE_SPEECH_LENGTH
28786
+ ? speechText.slice(0, MAX_MESSAGE_SPEECH_LENGTH).trim()
28787
+ : speechText;
28788
+ if (!payloadText) {
28789
+ setAudioError('Nothing to read aloud.');
28790
+ return;
28791
+ }
28792
+ setAudioError(null);
28793
+ const playAudio = async (element) => {
28794
+ try {
28795
+ await element.play();
28796
+ }
28797
+ catch (playError) {
28798
+ setAudioError(playError instanceof Error ? playError.message : 'Browser blocked audio playback.');
28799
+ }
28800
+ };
28801
+ if (audioUrl) {
28802
+ const audio = (_a = audioRef.current) !== null && _a !== void 0 ? _a : new Audio(audioUrl);
28803
+ audioRef.current = audio;
28804
+ attachMessageAudioListeners(audio);
28805
+ if (audio.paused) {
28806
+ await playAudio(audio);
28807
+ }
28808
+ else {
28809
+ audio.pause();
28810
+ }
28811
+ return;
28812
+ }
28813
+ setIsAudioLoading(true);
28814
+ try {
28815
+ const response = await fetch('/api/elevenlabs/tts', {
28816
+ method: 'POST',
28817
+ headers: attachClientVersionHeader({
28818
+ 'Content-Type': 'application/json',
28819
+ }),
28820
+ body: JSON.stringify({ text: payloadText }),
28821
+ });
28822
+ if (!response.ok) {
28823
+ const body = await response.text();
28824
+ throw new Error(body || 'Unable to request speech audio.');
28825
+ }
28826
+ const buffer = await response.arrayBuffer();
28827
+ const blob = new Blob([buffer], { type: 'audio/mpeg' });
28828
+ const url = URL.createObjectURL(blob);
28829
+ const audio = new Audio(url);
28830
+ audioRef.current = audio;
28831
+ attachMessageAudioListeners(audio);
28832
+ setAudioUrl((previousUrl) => {
28833
+ if (previousUrl) {
28834
+ URL.revokeObjectURL(previousUrl);
28835
+ }
28836
+ return url;
28837
+ });
28838
+ await playAudio(audio);
28839
+ }
28840
+ catch (error) {
28841
+ setAudioError(error instanceof Error ? error.message : 'Failed to generate speech.');
28842
+ }
28843
+ finally {
28844
+ setIsAudioLoading(false);
28845
+ }
28846
+ }, [attachMessageAudioListeners, audioUrl, getMessageTextForSpeech, isAudioLoading, shouldShowPlayButton]);
27147
28847
  react.useEffect(() => {
27148
28848
  if (!isExpanded) {
27149
28849
  setLocalHoveredRating(0);
27150
28850
  }
27151
28851
  }, [isExpanded]);
27152
- const contentWithoutButtonsRef = react.useRef(null);
28852
+ react.useEffect(() => {
28853
+ return () => {
28854
+ var _a;
28855
+ (_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.pause();
28856
+ audioRef.current = null;
28857
+ };
28858
+ }, []);
28859
+ react.useEffect(() => {
28860
+ return () => {
28861
+ if (audioUrl) {
28862
+ URL.revokeObjectURL(audioUrl);
28863
+ }
28864
+ };
28865
+ }, [audioUrl]);
27153
28866
  react.useEffect(() => {
27154
28867
  if (toolCallChipCount > toolCallChipCountRef.current) {
27155
28868
  if (soundSystem) {
@@ -27180,54 +28893,64 @@
27180
28893
  } }), isAvatarTooltipVisible && (participant === null || participant === void 0 ? void 0 : participant.agentSource) && avatarTooltipPosition && (jsxRuntime.jsx(AvatarProfileTooltip, { ref: tooltipRef, agentSource: participant.agentSource, position: avatarTooltipPosition }))] })), jsxRuntime.jsxs("div", { className: styles$4.messageStack, children: [shouldShowParticipantLabel && participantLabel && (jsxRuntime.jsx("div", { className: styles$4.participantLabel, children: participantLabel })), jsxRuntime.jsxs("div", { className: styles$4.messageText, style: {
27181
28894
  '--message-bg-color': color.toHex(),
27182
28895
  '--message-text-color': colorOfText.toHex(),
27183
- }, children: [isCopyButtonEnabled && isComplete && (jsxRuntime.jsx("div", { className: styles$4.copyButtonContainer, children: jsxRuntime.jsxs("button", { className: styles$4.copyButton, title: "Copy message", onClick: async (e) => {
27184
- e.stopPropagation();
27185
- if (navigator.clipboard && window.ClipboardItem) {
27186
- const clipboardItems = {};
27187
- if (contentWithoutButtonsRef.current) {
27188
- const html = contentWithoutButtonsRef.current.innerHTML;
27189
- clipboardItems['text/html'] = new Blob([html], {
27190
- type: 'text/html',
27191
- });
27192
- }
27193
- if (contentWithoutButtonsRef.current) {
27194
- const plain = contentWithoutButtonsRef.current.innerText;
27195
- clipboardItems['text/plain'] = new Blob([plain], {
27196
- type: 'text/plain',
27197
- });
27198
- }
27199
- await navigator.clipboard.write([new window.ClipboardItem(clipboardItems)]);
27200
- setCopied(true);
27201
- setTimeout(() => setCopied(false), 2000);
27202
- // Tooltip positioning logic
27203
- setTimeout(() => {
27204
- const tooltip = copyTooltipRef.current;
27205
- if (tooltip) {
27206
- const rect = tooltip.getBoundingClientRect();
27207
- if (rect.left < 8) {
27208
- setTooltipAlign('left');
28896
+ }, children: [isCopyButtonEnabled && isComplete && (jsxRuntime.jsx("div", { className: styles$4.copyButtonContainer, children: jsxRuntime.jsxs("div", { className: styles$4.messageControlGroup, children: [shouldShowPlayButton && (jsxRuntime.jsx("button", { type: "button", className: styles$4.playButton, title: playButtonTitle, "aria-label": playButtonTitle, onClick: (event) => {
28897
+ event.stopPropagation();
28898
+ void handlePlayMessage();
28899
+ }, disabled: isAudioLoading, children: isAudioLoading ? (jsxRuntime.jsx("span", { className: styles$4.playButtonSpinner, "aria-hidden": "true" })) : isAudioPlaying ? (jsxRuntime.jsx(lucideReact.Pause, { className: styles$4.playButtonIcon, "aria-hidden": "true" })) : (jsxRuntime.jsx(lucideReact.Play, { className: styles$4.playButtonIcon, "aria-hidden": "true" })) })), jsxRuntime.jsxs("button", { className: styles$4.copyButton, title: "Copy message", onClick: async (e) => {
28900
+ e.stopPropagation();
28901
+ if (navigator.clipboard && window.ClipboardItem) {
28902
+ const clipboardItems = {};
28903
+ if (contentWithoutButtonsRef.current) {
28904
+ const html = contentWithoutButtonsRef.current.innerHTML;
28905
+ clipboardItems['text/html'] = new Blob([html], {
28906
+ type: 'text/html',
28907
+ });
27209
28908
  }
27210
- else if (rect.right > window.innerWidth - 8) {
27211
- setTooltipAlign('right');
28909
+ if (contentWithoutButtonsRef.current) {
28910
+ const plain = contentWithoutButtonsRef.current.innerText;
28911
+ clipboardItems['text/plain'] = new Blob([plain], {
28912
+ type: 'text/plain',
28913
+ });
27212
28914
  }
27213
- else {
27214
- setTooltipAlign('center');
28915
+ await navigator.clipboard.write([
28916
+ new window.ClipboardItem(clipboardItems),
28917
+ ]);
28918
+ setCopied(true);
28919
+ setTimeout(() => setCopied(false), 2000);
28920
+ // Tooltip positioning logic
28921
+ setTimeout(() => {
28922
+ const tooltip = copyTooltipRef.current;
28923
+ if (tooltip) {
28924
+ const rect = tooltip.getBoundingClientRect();
28925
+ if (rect.left < 8) {
28926
+ setTooltipAlign('left');
28927
+ }
28928
+ else if (rect.right > window.innerWidth - 8) {
28929
+ setTooltipAlign('right');
28930
+ }
28931
+ else {
28932
+ setTooltipAlign('center');
28933
+ }
28934
+ }
28935
+ }, 10);
28936
+ if (typeof onCopy === 'function') {
28937
+ onCopy();
27215
28938
  }
27216
28939
  }
27217
- }, 10);
27218
- if (typeof onCopy === 'function') {
27219
- onCopy();
27220
- }
27221
- }
27222
- else {
27223
- throw new Error(`Your browser does not support copying to clipboard: navigator.clipboard && window.ClipboardItem.`);
27224
- }
27225
- }, children: [jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", children: [jsxRuntime.jsx("rect", { x: "7", y: "7", width: "10", height: "14", rx: "2", fill: "#fff", stroke: "#bbb", strokeWidth: "1.5" }), jsxRuntime.jsx("rect", { x: "3", y: "3", width: "10", height: "14", rx: "2", fill: "#fff", stroke: "#bbb", strokeWidth: "1.5" })] }), copied && (jsxRuntime.jsx("span", { ref: copyTooltipRef, className: styles$4.copiedTooltip +
27226
- (tooltipAlign === 'left'
27227
- ? ' ' + styles$4.copiedTooltipLeft
27228
- : tooltipAlign === 'right'
27229
- ? ' ' + styles$4.copiedTooltipRight
27230
- : ''), children: "Copied!" }))] }) })), message.isVoiceCall && (jsxRuntime.jsx("div", { className: styles$4.voiceCallIndicator, children: jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsxRuntime.jsx("path", { d: "M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" }) }) })), message.content === LOADING_INTERACTIVE_IMAGE ? (jsxRuntime.jsx(jsxRuntime.Fragment, {})) : (jsxRuntime.jsx("div", { ref: contentWithoutButtonsRef, children: jsxRuntime.jsx(MarkdownContent, { content: contentWithoutButtons, onCreateAgent: onCreateAgent }) })), message.attachments && message.attachments.length > 0 && (jsxRuntime.jsx("div", { className: styles$4.attachments, children: message.attachments.map((attachment, index) => (jsxRuntime.jsxs("a", { href: attachment.url, target: "_blank", rel: "noopener noreferrer", className: styles$4.attachment, title: attachment.name, children: [jsxRuntime.jsx("span", { className: styles$4.attachmentIcon, children: "\uD83D\uDCCE" }), jsxRuntime.jsx("span", { className: styles$4.attachmentName, children: attachment.name })] }, index))) })), completedToolCalls && completedToolCalls.length > 0 && (jsxRuntime.jsxs("div", { className: styles$4.completedToolCalls, children: [completedToolCalls.map((toolCall, index) => {
28940
+ else {
28941
+ throw new Error(`Your browser does not support copying to clipboard: navigator.clipboard && window.ClipboardItem.`);
28942
+ }
28943
+ }, children: [jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", children: [jsxRuntime.jsx("rect", { x: "7", y: "7", width: "10", height: "14", rx: "2", fill: "#fff", stroke: "#bbb", strokeWidth: "1.5" }), jsxRuntime.jsx("rect", { x: "3", y: "3", width: "10", height: "14", rx: "2", fill: "#fff", stroke: "#bbb", strokeWidth: "1.5" })] }), copied && (jsxRuntime.jsx("span", { ref: copyTooltipRef, className: styles$4.copiedTooltip +
28944
+ (tooltipAlign === 'left'
28945
+ ? ' ' + styles$4.copiedTooltipLeft
28946
+ : tooltipAlign === 'right'
28947
+ ? ' ' + styles$4.copiedTooltipRight
28948
+ : ''), children: "Copied!" }))] })] }) })), message.isVoiceCall && (jsxRuntime.jsx("div", { className: styles$4.voiceCallIndicator, children: jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: jsxRuntime.jsx("path", { d: "M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z" }) }) })), message.content === LOADING_INTERACTIVE_IMAGE ? (jsxRuntime.jsx(jsxRuntime.Fragment, {})) : (jsxRuntime.jsx("div", { ref: contentWithoutButtonsRef, children: contentSegments.map((segment, segmentIndex) => {
28949
+ if (segment.type === 'text') {
28950
+ return (jsxRuntime.jsx(MarkdownContent, { content: segment.content, onCreateAgent: onCreateAgent }, `text-${segmentIndex}`));
28951
+ }
28952
+ return (jsxRuntime.jsx(ImagePromptRenderer, { alt: segment.alt, prompt: segment.prompt }, `image-${segmentIndex}`));
28953
+ }) })), message.attachments && message.attachments.length > 0 && (jsxRuntime.jsx("div", { className: styles$4.attachments, children: message.attachments.map((attachment, index) => (jsxRuntime.jsxs("a", { href: attachment.url, target: "_blank", rel: "noopener noreferrer", className: styles$4.attachment, title: attachment.name, children: [jsxRuntime.jsx("span", { className: styles$4.attachmentIcon, children: "\uD83D\uDCCE" }), jsxRuntime.jsx("span", { className: styles$4.attachmentName, children: attachment.name })] }, index))) })), completedToolCalls && completedToolCalls.length > 0 && (jsxRuntime.jsxs("div", { className: styles$4.completedToolCalls, children: [completedToolCalls.map((toolCall, index) => {
27231
28954
  const chipletInfo = getToolCallChipletInfo(toolCall);
27232
28955
  const chipletText = buildToolCallChipText(chipletInfo);
27233
28956
  const teamAgentData = resolveTeamAgentChipData(toolCall, teammates, chipletInfo);
@@ -27775,21 +29498,6 @@
27775
29498
  onMessage: isSimulationComplete && chatProps.onMessage ? chatProps.onMessage : undefined }));
27776
29499
  }
27777
29500
 
27778
- /**
27779
- * Renders a nice clock icon with a specific time.
27780
- *
27781
- * @private internal subcomponent of `<Chat>` component
27782
- */
27783
- function ClockIcon({ date, size = 100 }) {
27784
- const hours = date.getHours();
27785
- const minutes = date.getMinutes();
27786
- const seconds = date.getSeconds();
27787
- const hourDeg = (hours % 12) * 30 + minutes * 0.5;
27788
- const minuteDeg = minutes * 6;
27789
- const secondDeg = seconds * 6;
27790
- return (jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: "0 0 100 100", style: { filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.1))' }, children: [jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "45", fill: "white", stroke: "#333", strokeWidth: "2" }), [...Array(12)].map((_, i) => (jsxRuntime.jsx("line", { x1: "50", y1: "12", x2: "50", y2: "18", transform: `rotate(${i * 30} 50 50)`, stroke: "#333", strokeWidth: "2" }, i))), jsxRuntime.jsx("line", { x1: "50", y1: "50", x2: "50", y2: "25", transform: `rotate(${hourDeg} 50 50)`, stroke: "#333", strokeWidth: "4", strokeLinecap: "round" }), jsxRuntime.jsx("line", { x1: "50", y1: "50", x2: "50", y2: "15", transform: `rotate(${minuteDeg} 50 50)`, stroke: "#666", strokeWidth: "3", strokeLinecap: "round" }), jsxRuntime.jsx("line", { x1: "50", y1: "50", x2: "50", y2: "12", transform: `rotate(${secondDeg} 50 50)`, stroke: "#ff4444", strokeWidth: "1.5", strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "2", fill: "#333" })] }));
27791
- }
27792
-
27793
29501
  /**
27794
29502
  * Parses ISO timestamps into Date instances.
27795
29503
  *
@@ -27878,6 +29586,21 @@
27878
29586
  return (jsxRuntime.jsx("div", { className: classNames(styles$4.selfLearningAvatar, className), style: avatarStyle, role: "img", "aria-label": label, title: label, children: !avatarSrc && (children || jsxRuntime.jsx("span", { className: styles$4.selfLearningAvatarInitial, children: initial })) }));
27879
29587
  }
27880
29588
 
29589
+ /**
29590
+ * Renders a nice clock icon with a specific time.
29591
+ *
29592
+ * @private internal subcomponent of `<Chat>` component
29593
+ */
29594
+ function ClockIcon({ date, size = 100 }) {
29595
+ const hours = date.getHours();
29596
+ const minutes = date.getMinutes();
29597
+ const seconds = date.getSeconds();
29598
+ const hourDeg = (hours % 12) * 30 + minutes * 0.5;
29599
+ const minuteDeg = minutes * 6;
29600
+ const secondDeg = seconds * 6;
29601
+ return (jsxRuntime.jsxs("svg", { width: size, height: size, viewBox: "0 0 100 100", style: { filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.1))' }, children: [jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "45", fill: "white", stroke: "#333", strokeWidth: "2" }), [...Array(12)].map((_, i) => (jsxRuntime.jsx("line", { x1: "50", y1: "12", x2: "50", y2: "18", transform: `rotate(${i * 30} 50 50)`, stroke: "#333", strokeWidth: "2" }, i))), jsxRuntime.jsx("line", { x1: "50", y1: "50", x2: "50", y2: "25", transform: `rotate(${hourDeg} 50 50)`, stroke: "#333", strokeWidth: "4", strokeLinecap: "round" }), jsxRuntime.jsx("line", { x1: "50", y1: "50", x2: "50", y2: "15", transform: `rotate(${minuteDeg} 50 50)`, stroke: "#666", strokeWidth: "3", strokeLinecap: "round" }), jsxRuntime.jsx("line", { x1: "50", y1: "50", x2: "50", y2: "12", transform: `rotate(${secondDeg} 50 50)`, stroke: "#ff4444", strokeWidth: "1.5", strokeLinecap: "round" }), jsxRuntime.jsx("circle", { cx: "50", cy: "50", r: "2", fill: "#333" })] }));
29602
+ }
29603
+
27881
29604
  /**
27882
29605
  * Modal that renders rich tool call details for chat chiplets.
27883
29606
  *
@@ -28035,6 +29758,199 @@
28035
29758
  }
28036
29759
  }, children: jsxRuntime.jsxs("div", { className: classNames(styles$4.ratingModalContent, styles$4.toolCallModal), children: [jsxRuntime.jsx("button", { type: "button", className: styles$4.modalCloseButton, onClick: onClose, "aria-label": "Close dialog", children: jsxRuntime.jsx(CloseIcon, {}) }), modalContent] }) }));
28037
29760
  }
29761
+ /**
29762
+ * Maximum number of memory cards rendered inside the modal at once.
29763
+ *
29764
+ * @private internal utility of `<ChatToolCallModal/>`
29765
+ */
29766
+ const MEMORY_DISPLAY_LIMIT = 3;
29767
+ /**
29768
+ * CSS classes mapped by memory status tone.
29769
+ *
29770
+ * @private internal utility of `<ChatToolCallModal/>`
29771
+ */
29772
+ const MEMORY_STATUS_CLASS_BY_TONE = {
29773
+ success: styles$4.memoryStatusSuccess,
29774
+ warning: styles$4.memoryStatusWarning,
29775
+ error: styles$4.memoryStatusError,
29776
+ neutral: styles$4.memoryStatusNeutral,
29777
+ };
29778
+ /**
29779
+ * Renders a friendly memory summary screen when a MEMORY tool call is selected.
29780
+ *
29781
+ * @param options - View fragments required to render the memory modal.
29782
+ * @returns Memory-specific modal JSX or `null` when the tool is unrelated.
29783
+ * @private internal utility of `<ChatToolCallModal/>`
29784
+ */
29785
+ function renderMemoryToolCall(options) {
29786
+ var _a;
29787
+ const { toolCall, args, resultRaw, toolCallDate } = options;
29788
+ if (toolCall.name !== 'retrieve_user_memory' && toolCall.name !== 'store_user_memory') {
29789
+ return null;
29790
+ }
29791
+ const isStoreAction = toolCall.name === 'store_user_memory';
29792
+ const memoryResult = buildMemoryToolResult(resultRaw, isStoreAction ? 'store' : 'retrieve');
29793
+ if (!memoryResult) {
29794
+ return null;
29795
+ }
29796
+ const heroTitle = isStoreAction ? 'Memory saved' : 'Memories retrieved';
29797
+ const heroSubtitle = isStoreAction
29798
+ ? 'This detail is now stored so future chats will remember it.'
29799
+ : 'The agent pulled these facts from the memory vault.';
29800
+ const callTimeLabel = (_a = toolCallDate === null || toolCallDate === void 0 ? void 0 : toolCallDate.toLocaleString(undefined, {
29801
+ dateStyle: 'medium',
29802
+ timeStyle: 'short',
29803
+ })) !== null && _a !== void 0 ? _a : 'Call time unavailable';
29804
+ const statusInfo = buildMemoryStatusInfo(memoryResult.status, memoryResult.action);
29805
+ const statusClass = MEMORY_STATUS_CLASS_BY_TONE[statusInfo.tone] || styles$4.memoryStatusNeutral;
29806
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: styles$4.memoryModalHeader, children: [jsxRuntime.jsx("div", { className: styles$4.memoryModalIcon, children: "\uD83E\uDDE0" }), jsxRuntime.jsxs("div", { className: styles$4.memoryModalHeaderText, children: [jsxRuntime.jsx("h3", { className: styles$4.memoryModalTitle, children: heroTitle }), jsxRuntime.jsx("p", { className: styles$4.memoryModalSubtitle, children: heroSubtitle }), jsxRuntime.jsxs("p", { className: styles$4.memoryModalCallTime, children: ["Call recorded ", callTimeLabel] })] }), jsxRuntime.jsxs("div", { className: classNames(styles$4.memoryModalStatus, statusClass), children: [jsxRuntime.jsx("span", { className: styles$4.memoryStatusDot }), statusInfo.label] })] }), jsxRuntime.jsxs("div", { className: styles$4.memoryModalContent, children: [memoryResult.message && jsxRuntime.jsx("p", { className: styles$4.memoryMessage, children: memoryResult.message }), isStoreAction
29807
+ ? renderMemoryStoreSection({ memoryResult, args })
29808
+ : renderMemoryRetrieveSection({ memoryResult, args })] })] }));
29809
+ }
29810
+ /**
29811
+ * Renders the stored memory detail pane.
29812
+ *
29813
+ * @param options - Store action payload and arguments.
29814
+ * @private internal utility of `<ChatToolCallModal/>`
29815
+ */
29816
+ function renderMemoryStoreSection(options) {
29817
+ var _a, _b, _c, _d, _e, _f, _g;
29818
+ const { memoryResult, args } = options;
29819
+ const storedScope = (_b = (_a = memoryResult.memory) === null || _a === void 0 ? void 0 : _a.isGlobal) !== null && _b !== void 0 ? _b : (typeof args.isGlobal === 'boolean' ? args.isGlobal : false);
29820
+ const scopeLabel = storedScope ? 'Global memory' : 'Personal memory';
29821
+ const scopeBadge = storedScope ? 'Global' : 'Personal';
29822
+ const storedContent = ((_d = (_c = memoryResult.memory) === null || _c === void 0 ? void 0 : _c.content) === null || _d === void 0 ? void 0 : _d.trim()) || (typeof args.content === 'string' ? args.content.trim() : '');
29823
+ const timestamp = (_f = formatMemoryTimestamp((_e = memoryResult.memory) === null || _e === void 0 ? void 0 : _e.updatedAt)) !== null && _f !== void 0 ? _f : formatMemoryTimestamp((_g = memoryResult.memory) === null || _g === void 0 ? void 0 : _g.createdAt);
29824
+ return (jsxRuntime.jsxs("div", { className: styles$4.memoryStoreSection, children: [jsxRuntime.jsxs("div", { className: styles$4.memoryMetaRow, children: [jsxRuntime.jsx("span", { className: styles$4.memoryMetaLabel, children: "Scope" }), jsxRuntime.jsx("span", { className: styles$4.memoryMetaValue, children: scopeLabel })] }), jsxRuntime.jsxs("div", { className: styles$4.memoryCard, children: [jsxRuntime.jsx("div", { className: styles$4.memoryCardContent, children: storedContent || 'No memory content was provided for this call.' }), jsxRuntime.jsxs("div", { className: styles$4.memoryCardMeta, children: [jsxRuntime.jsx("span", { className: styles$4.memoryScopeBadge, children: scopeBadge }), timestamp && jsxRuntime.jsx("span", { children: timestamp })] })] })] }));
29825
+ }
29826
+ /**
29827
+ * Renders the retrieved memories list.
29828
+ *
29829
+ * @param options - Retrieve action payload and arguments.
29830
+ * @private internal utility of `<ChatToolCallModal/>`
29831
+ */
29832
+ function renderMemoryRetrieveSection(options) {
29833
+ var _a;
29834
+ const { memoryResult, args } = options;
29835
+ const queryLabel = ((_a = memoryResult.query) === null || _a === void 0 ? void 0 : _a.trim()) || (typeof args.query === 'string' ? args.query.trim() : '');
29836
+ const memories = (memoryResult.memories || [])
29837
+ .map((entry) => entry && normalizeMemoryRecord(entry))
29838
+ .filter((entry) => Boolean(entry && entry.content && entry.content.trim().length > 0));
29839
+ const displayedMemories = memories.slice(0, MEMORY_DISPLAY_LIMIT);
29840
+ const extraCount = memories.length - displayedMemories.length;
29841
+ return (jsxRuntime.jsxs("div", { className: styles$4.memoryRetrieveSection, children: [queryLabel && (jsxRuntime.jsxs("div", { className: styles$4.memoryMetaRow, children: [jsxRuntime.jsx("span", { className: styles$4.memoryMetaLabel, children: "Search" }), jsxRuntime.jsxs("span", { className: styles$4.memoryMetaValue, children: ["\u201C", queryLabel, "\u201D"] })] })), jsxRuntime.jsxs("div", { className: styles$4.memoryMetaRow, children: [jsxRuntime.jsx("span", { className: styles$4.memoryMetaLabel, children: "Matches" }), jsxRuntime.jsx("span", { className: styles$4.memoryMetaValue, children: memories.length })] }), memories.length === 0 ? (jsxRuntime.jsx("div", { className: styles$4.memoryEmptyState, children: memoryResult.message ||
29842
+ (queryLabel
29843
+ ? `No memories match “${queryLabel}”.`
29844
+ : 'No memories were available for this conversation.') })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: styles$4.memoryList, children: displayedMemories.map((memory, index) => {
29845
+ var _a;
29846
+ const timestamp = (_a = formatMemoryTimestamp(memory.updatedAt)) !== null && _a !== void 0 ? _a : formatMemoryTimestamp(memory.createdAt);
29847
+ return (jsxRuntime.jsxs("div", { className: styles$4.memoryCard, children: [jsxRuntime.jsx("div", { className: styles$4.memoryCardContent, children: memory.content }), jsxRuntime.jsxs("div", { className: styles$4.memoryCardMeta, children: [jsxRuntime.jsx("span", { className: styles$4.memoryScopeBadge, children: memory.isGlobal ? 'Global' : 'Personal' }), timestamp && jsxRuntime.jsx("span", { children: timestamp })] })] }, memory.id || `${memory.content}-${index}`));
29848
+ }) }), extraCount > 0 && (jsxRuntime.jsxs("div", { className: styles$4.memoryListFooter, children: [extraCount, " more ", extraCount === 1 ? 'memory' : 'memories', " available."] }))] }))] }));
29849
+ }
29850
+ /**
29851
+ * Transforms the raw tool result (or fallback data) into a normalized memory payload.
29852
+ *
29853
+ * @param raw - Raw data returned by the tool call.
29854
+ * @param fallbackAction - Action to assume when the payload does not declare one.
29855
+ * @returns Normalized memory details or `null` when no payload exists.
29856
+ * @private internal utility of `<ChatToolCallModal/>`
29857
+ */
29858
+ function buildMemoryToolResult(raw, fallbackAction) {
29859
+ var _a, _b;
29860
+ if (raw && typeof raw === 'object') {
29861
+ const normalizedMemories = Array.isArray(raw.memories)
29862
+ ? raw.memories
29863
+ .map((entry) => entry && normalizeMemoryRecord(entry))
29864
+ .filter((entry) => Boolean(entry))
29865
+ : [];
29866
+ const normalizedMemory = raw.memory ? (_a = normalizeMemoryRecord(raw.memory)) !== null && _a !== void 0 ? _a : undefined : undefined;
29867
+ return {
29868
+ action: raw.action === 'store' ? 'store' : fallbackAction,
29869
+ status: (_b = (typeof raw.status === 'string' ? raw.status : undefined)) !== null && _b !== void 0 ? _b : (fallbackAction === 'store' ? 'stored' : 'ok'),
29870
+ message: typeof raw.message === 'string' ? raw.message : undefined,
29871
+ query: typeof raw.query === 'string' ? raw.query : undefined,
29872
+ memory: normalizedMemory,
29873
+ memories: normalizedMemories.length > 0 ? normalizedMemories : undefined,
29874
+ };
29875
+ }
29876
+ if (typeof raw === 'string') {
29877
+ return {
29878
+ action: fallbackAction,
29879
+ status: 'error',
29880
+ message: raw,
29881
+ };
29882
+ }
29883
+ return {
29884
+ action: fallbackAction,
29885
+ status: fallbackAction === 'store' ? 'stored' : 'ok',
29886
+ };
29887
+ }
29888
+ /**
29889
+ * Normalizes a memory record payload.
29890
+ *
29891
+ * @param entry - Input record from the memory tool.
29892
+ * @returns Normalized record or `null` when the entry is invalid.
29893
+ * @private internal utility of `<ChatToolCallModal/>`
29894
+ */
29895
+ function normalizeMemoryRecord(entry) {
29896
+ if (!entry || typeof entry !== 'object') {
29897
+ return null;
29898
+ }
29899
+ return {
29900
+ id: typeof entry.id === 'string' ? entry.id : undefined,
29901
+ content: typeof entry.content === 'string' ? entry.content.trim() : undefined,
29902
+ isGlobal: entry.isGlobal === true,
29903
+ createdAt: typeof entry.createdAt === 'string' ? entry.createdAt : undefined,
29904
+ updatedAt: typeof entry.updatedAt === 'string' ? entry.updatedAt : undefined,
29905
+ };
29906
+ }
29907
+ /**
29908
+ * Builds friendly status text and tone for memory actions.
29909
+ *
29910
+ * @param status - Raw status string returned by the tool.
29911
+ * @param action - Optional action to better describe neutral statuses.
29912
+ * @returns Label and tone for badge styling.
29913
+ * @private internal utility of `<ChatToolCallModal/>`
29914
+ */
29915
+ function buildMemoryStatusInfo(status, action) {
29916
+ const normalized = (status || (action === 'store' ? 'stored' : 'ok')).toString().toLowerCase();
29917
+ if (normalized === 'stored') {
29918
+ return { label: 'Saved', tone: 'success' };
29919
+ }
29920
+ if (normalized === 'ok') {
29921
+ return { label: 'Loaded', tone: 'success' };
29922
+ }
29923
+ if (normalized === 'disabled') {
29924
+ return { label: 'Memory disabled', tone: 'warning' };
29925
+ }
29926
+ if (normalized === 'error') {
29927
+ return { label: 'Something went wrong', tone: 'error' };
29928
+ }
29929
+ return {
29930
+ label: action === 'store' ? 'Memory saved' : 'Memory retrieved',
29931
+ tone: 'neutral',
29932
+ };
29933
+ }
29934
+ /**
29935
+ * Formats ISO timestamps returned by memory records.
29936
+ *
29937
+ * @param value - Potential ISO timestamp string.
29938
+ * @returns Formatted label or `null` when the timestamp is invalid.
29939
+ * @private internal utility of `<ChatToolCallModal/>`
29940
+ */
29941
+ function formatMemoryTimestamp(value) {
29942
+ if (!value) {
29943
+ return null;
29944
+ }
29945
+ const parsed = new Date(value);
29946
+ if (Number.isNaN(parsed.getTime())) {
29947
+ return null;
29948
+ }
29949
+ return parsed.toLocaleString(undefined, {
29950
+ dateStyle: 'medium',
29951
+ timeStyle: 'short',
29952
+ });
29953
+ }
28038
29954
  /**
28039
29955
  * Renders the detail view for a single tool call.
28040
29956
  *
@@ -28045,6 +29961,15 @@
28045
29961
  const resultRaw = parseToolCallResult(toolCall.result);
28046
29962
  const args = parseToolCallArguments(toolCall);
28047
29963
  const toolCallDate = getToolCallTimestamp(toolCall);
29964
+ const memoryView = renderMemoryToolCall({
29965
+ toolCall,
29966
+ args,
29967
+ resultRaw,
29968
+ toolCallDate,
29969
+ });
29970
+ if (memoryView) {
29971
+ return memoryView;
29972
+ }
28048
29973
  const isSearch = toolCall.name === 'web_search' || toolCall.name === 'useSearchEngine' || toolCall.name === 'search';
28049
29974
  const isTime = toolCall.name === 'get_current_time' || toolCall.name === 'useTime';
28050
29975
  const isEmail = toolCall.name === 'send_email' || toolCall.name === 'useEmail';
@@ -28099,7 +30024,223 @@
28099
30024
  const status = typeof (emailResult === null || emailResult === void 0 ? void 0 : emailResult.status) === 'string' ? emailResult.status : null;
28100
30025
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: classNames(styles$4.searchModalHeader, styles$4.emailModalHeader), children: [jsxRuntime.jsx("span", { className: styles$4.searchModalIcon, children: jsxRuntime.jsx(EmailIcon, { size: 26 }) }), jsxRuntime.jsxs("div", { className: styles$4.emailHeaderText, children: [jsxRuntime.jsx("span", { className: styles$4.emailHeaderLabel, children: "Email" }), jsxRuntime.jsx("h3", { className: styles$4.searchModalQuery, children: subject })] })] }), jsxRuntime.jsxs("div", { className: styles$4.searchModalContent, children: [jsxRuntime.jsxs("div", { className: styles$4.emailContainer, children: [jsxRuntime.jsxs("div", { className: styles$4.emailMetadata, children: [jsxRuntime.jsxs("div", { className: styles$4.emailField, children: [jsxRuntime.jsx("strong", { children: "From:" }), jsxRuntime.jsx("span", { className: styles$4.emailRecipients, children: from })] }), jsxRuntime.jsxs("div", { className: styles$4.emailField, children: [jsxRuntime.jsx("strong", { children: "To:" }), jsxRuntime.jsx("span", { className: styles$4.emailRecipients, children: recipients.join(', ') })] }), ccRecipients.length > 0 && (jsxRuntime.jsxs("div", { className: styles$4.emailField, children: [jsxRuntime.jsx("strong", { children: "CC:" }), jsxRuntime.jsx("span", { className: styles$4.emailRecipients, children: ccRecipients.join(', ') })] })), jsxRuntime.jsxs("div", { className: styles$4.emailField, children: [jsxRuntime.jsx("strong", { children: "Subject:" }), jsxRuntime.jsx("span", { children: subject })] }), sentAt && (jsxRuntime.jsxs("div", { className: styles$4.emailField, children: [jsxRuntime.jsx("strong", { children: "Sent:" }), jsxRuntime.jsx("span", { children: sentAt })] })), status && (jsxRuntime.jsxs("div", { className: styles$4.emailField, children: [jsxRuntime.jsx("strong", { children: "Status:" }), jsxRuntime.jsx("span", { className: styles$4.emailStatus, children: status })] }))] }), jsxRuntime.jsxs("div", { className: styles$4.emailBody, children: [jsxRuntime.jsx("strong", { children: "Message:" }), jsxRuntime.jsx("div", { className: styles$4.emailBodyContent, children: jsxRuntime.jsx(MarkdownContent, { content: body }) })] })] }), jsxRuntime.jsxs("div", { className: styles$4.toolCallDetails, children: [jsxRuntime.jsx("p", { children: jsxRuntime.jsx("strong", { children: "Result:" }) }), jsxRuntime.jsx("div", { className: styles$4.toolCallDataContainer, children: jsxRuntime.jsx("pre", { className: styles$4.toolCallData, children: typeof resultRaw === 'object' ? JSON.stringify(resultRaw, null, 2) : String(resultRaw) }) })] })] })] }));
28101
30026
  }
28102
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("h3", { children: ["Tool Call: ", (toolTitles === null || toolTitles === void 0 ? void 0 : toolTitles[toolCall.name]) || toolCall.name] }), jsxRuntime.jsxs("div", { className: styles$4.toolCallDetails, children: [jsxRuntime.jsx("p", { children: jsxRuntime.jsx("strong", { children: "Arguments:" }) }), jsxRuntime.jsx("div", { className: styles$4.toolCallDataContainer, children: args && typeof args === 'object' ? (jsxRuntime.jsx("ul", { className: styles$4.toolCallArgsList, children: Object.entries(args).map(([key, value]) => (jsxRuntime.jsxs("li", { children: [jsxRuntime.jsxs("strong", { children: [key, ":"] }), ' ', typeof value === 'object' ? JSON.stringify(value) : String(value)] }, key))) })) : (jsxRuntime.jsx("pre", { className: styles$4.toolCallData, children: String(args) })) }), jsxRuntime.jsx("p", { children: jsxRuntime.jsx("strong", { children: "Result:" }) }), jsxRuntime.jsx("div", { className: styles$4.toolCallDataContainer, children: jsxRuntime.jsx("pre", { className: styles$4.toolCallData, children: typeof resultRaw === 'object' ? JSON.stringify(resultRaw, null, 4) : String(resultRaw) }) })] })] }));
30027
+ const chipletInfo = getToolCallChipletInfo(toolCall);
30028
+ const toolMetadata = TOOL_TITLES[toolCall.name];
30029
+ const headerEmoji = (toolMetadata === null || toolMetadata === void 0 ? void 0 : toolMetadata.emoji) || extractLeadingEmoji(chipletInfo.text) || '🛠️';
30030
+ const headerTitle = (toolTitles === null || toolTitles === void 0 ? void 0 : toolTitles[toolCall.name]) || (toolMetadata === null || toolMetadata === void 0 ? void 0 : toolMetadata.title) || chipletInfo.text || toolCall.name;
30031
+ const callTimestamp = toolCallDate
30032
+ ? toolCallDate.toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' })
30033
+ : 'Time unavailable';
30034
+ const relativeTimestamp = toolCallDate ? moment__default["default"](toolCallDate).fromNow() : null;
30035
+ const argumentEntries = buildArgumentEntries(args);
30036
+ const resultSummary = buildToolCallResultSummary(resultRaw);
30037
+ const resultKindLabel = describeResultKind(resultRaw);
30038
+ const resultCount = getResultItemCount(resultRaw);
30039
+ const toolCallIssues = normalizeToolCallIssues(toolCall);
30040
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("header", { className: styles$4.toolCallHeader, children: [jsxRuntime.jsx("span", { className: styles$4.toolCallIcon, "aria-hidden": "true", children: headerEmoji }), jsxRuntime.jsxs("div", { className: styles$4.toolCallHeaderMeta, children: [jsxRuntime.jsx("p", { className: styles$4.toolCallLabel, children: "Tool call" }), jsxRuntime.jsx("h3", { className: styles$4.toolCallTitle, children: headerTitle }), jsxRuntime.jsxs("p", { className: styles$4.toolCallSubtitle, children: [relativeTimestamp ? `Executed ${relativeTimestamp}` : 'Executed just now', " \u00B7 ", callTimestamp] })] })] }), jsxRuntime.jsxs("div", { className: styles$4.toolCallGrid, children: [jsxRuntime.jsxs("section", { className: styles$4.toolCallPanel, children: [jsxRuntime.jsx("p", { className: styles$4.toolCallPanelTitle, children: "What the agent requested" }), argumentEntries.length > 0 ? (jsxRuntime.jsx("ul", { className: styles$4.toolCallList, children: argumentEntries.map((entry) => (jsxRuntime.jsxs("li", { className: styles$4.toolCallItem, children: [jsxRuntime.jsx("span", { className: styles$4.toolCallItemLabel, children: entry.label }), jsxRuntime.jsx("span", { className: styles$4.toolCallItemValue, children: entry.value })] }, entry.label))) })) : (jsxRuntime.jsx("p", { className: styles$4.toolCallEmpty, children: "No inputs were provided for this tool call." }))] }), jsxRuntime.jsxs("section", { className: styles$4.toolCallPanel, children: [jsxRuntime.jsx("p", { className: styles$4.toolCallPanelTitle, children: "What happened" }), resultSummary ? (jsxRuntime.jsx("p", { className: styles$4.toolCallSummary, children: resultSummary })) : (jsxRuntime.jsx("p", { className: styles$4.toolCallEmpty, children: "The tool responded, but no friendly summary is available." })), jsxRuntime.jsxs("div", { className: styles$4.toolCallSummaryMeta, children: [jsxRuntime.jsx("span", { className: styles$4.toolCallSummaryMetaBadge, children: resultKindLabel }), typeof resultCount === 'number' && (jsxRuntime.jsxs("span", { className: styles$4.toolCallSummaryMetaBadge, children: ["Returned ", resultCount, " ", resultCount === 1 ? 'item' : 'items'] }))] })] })] }), toolCallIssues.length > 0 && (jsxRuntime.jsx("div", { className: styles$4.toolCallIssues, children: toolCallIssues.map((issue, index) => (jsxRuntime.jsxs("span", { className: classNames(styles$4.toolCallIssueBadge, issue.type === 'warning' ? styles$4.toolCallIssueWarning : styles$4.toolCallIssueError), children: [jsxRuntime.jsx("strong", { children: issue.label }), ": ", issue.message] }, `${issue.type}-${index}`))) })), jsxRuntime.jsxs("footer", { className: styles$4.toolCallFooter, children: [jsxRuntime.jsx("span", { className: styles$4.toolCallTimestamp, children: toolCallDate ? `Recorded ${toolCallDate.toLocaleString()}` : 'Timestamp unavailable' }), jsxRuntime.jsxs("details", { className: styles$4.toolCallRawDetails, children: [jsxRuntime.jsx("summary", { className: styles$4.toolCallRawSummary, children: "View raw payload" }), jsxRuntime.jsxs("div", { className: styles$4.toolCallRawColumns, children: [jsxRuntime.jsxs("div", { className: styles$4.toolCallRawColumn, children: [jsxRuntime.jsx("h4", { className: styles$4.toolCallRawColumnTitle, children: "Arguments" }), jsxRuntime.jsx("div", { className: styles$4.toolCallDataContainer, children: argumentEntries.length > 0 ? (jsxRuntime.jsx("ul", { className: styles$4.toolCallArgsList, children: argumentEntries.map((entry) => (jsxRuntime.jsxs("li", { children: [jsxRuntime.jsxs("strong", { children: [entry.label, ":"] }), " ", entry.value] }, `raw-${entry.label}`))) })) : (jsxRuntime.jsx("pre", { className: styles$4.toolCallData, children: "No arguments provided." })) })] }), jsxRuntime.jsxs("div", { className: styles$4.toolCallRawColumn, children: [jsxRuntime.jsx("h4", { className: styles$4.toolCallRawColumnTitle, children: "Result" }), jsxRuntime.jsx("div", { className: styles$4.toolCallDataContainer, children: jsxRuntime.jsx("pre", { className: styles$4.toolCallData, children: typeof resultRaw === 'object'
30041
+ ? JSON.stringify(resultRaw, null, 2)
30042
+ : String(resultRaw !== null && resultRaw !== void 0 ? resultRaw : 'No result') }) })] })] })] })] })] }));
30043
+ }
30044
+ /**
30045
+ * Builds a list of argument entries for the friendly summary view.
30046
+ *
30047
+ * @param args - Parsed tool call arguments.
30048
+ * @returns Array of display-ready argument entries.
30049
+ */
30050
+ function buildArgumentEntries(args) {
30051
+ return Object.entries(args).map(([key, value]) => ({
30052
+ label: formatArgumentLabel(key),
30053
+ value: formatArgumentValue(value),
30054
+ }));
30055
+ }
30056
+ /**
30057
+ * Normalizes a tool call argument key into human-readable text.
30058
+ *
30059
+ * @param key - Raw argument key.
30060
+ * @returns Humanized label.
30061
+ */
30062
+ function formatArgumentLabel(key) {
30063
+ const replaced = key.replace(/_/g, ' ').replace(/([a-z])([A-Z])/g, '$1 $2');
30064
+ return replaced.charAt(0).toUpperCase() + replaced.slice(1);
30065
+ }
30066
+ /**
30067
+ * Converts a value into a display-friendly string without exposing raw JSON.
30068
+ *
30069
+ * @param value - Arbitrary tool call argument value.
30070
+ * @returns Friendly string.
30071
+ */
30072
+ function formatArgumentValue(value) {
30073
+ if (value === null || value === undefined) {
30074
+ return 'Not provided';
30075
+ }
30076
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
30077
+ const text = String(value);
30078
+ return text === '' ? 'Empty string' : text;
30079
+ }
30080
+ if (Array.isArray(value)) {
30081
+ const items = value.map((entry) => formatArgumentValue(entry)).filter(Boolean);
30082
+ return items.length > 0 ? items.join(', ') : '[array]';
30083
+ }
30084
+ if (typeof value === 'object') {
30085
+ const entries = Object.entries(value)
30086
+ .map(([childKey, childValue]) => `${childKey}: ${formatArgumentValue(childValue)}`)
30087
+ .filter(Boolean);
30088
+ if (entries.length > 0) {
30089
+ const joined = entries.join('; ');
30090
+ return joined.length > 80 ? `${joined.slice(0, 80)}…` : joined;
30091
+ }
30092
+ const solo = JSON.stringify(value);
30093
+ return solo.length > 80 ? `${solo.slice(0, 80)}…` : solo;
30094
+ }
30095
+ return String(value);
30096
+ }
30097
+ /**
30098
+ * Extracts a short natural-language summary from the raw tool call result.
30099
+ *
30100
+ * @param resultRaw - Decoded tool call result.
30101
+ * @returns Friendly summary or `null` when nothing suitable is found.
30102
+ */
30103
+ function buildToolCallResultSummary(resultRaw) {
30104
+ if (!resultRaw) {
30105
+ return null;
30106
+ }
30107
+ if (typeof resultRaw === 'string' && resultRaw.trim()) {
30108
+ return resultRaw.trim();
30109
+ }
30110
+ const candidate = findStringCandidate(resultRaw, [
30111
+ 'summary',
30112
+ 'text',
30113
+ 'content',
30114
+ 'description',
30115
+ 'message',
30116
+ 'result',
30117
+ ]);
30118
+ if (candidate) {
30119
+ return candidate;
30120
+ }
30121
+ if (Array.isArray(resultRaw) && resultRaw.length > 0) {
30122
+ const firstEntry = resultRaw[0];
30123
+ if (typeof firstEntry === 'string' && firstEntry.trim()) {
30124
+ return firstEntry.trim();
30125
+ }
30126
+ const nested = findStringCandidate(firstEntry, ['title', 'snippet', 'summary']);
30127
+ if (nested) {
30128
+ return nested;
30129
+ }
30130
+ }
30131
+ return null;
30132
+ }
30133
+ /**
30134
+ * Searches for the first non-empty string field inside an object.
30135
+ *
30136
+ * @param value - Object to scan.
30137
+ * @param keys - Keys to try in order.
30138
+ * @returns First matching string or `null`.
30139
+ */
30140
+ function findStringCandidate(value, keys) {
30141
+ if (!value || typeof value !== 'object') {
30142
+ return null;
30143
+ }
30144
+ for (const key of keys) {
30145
+ const candidate = value[key];
30146
+ if (typeof candidate === 'string' && candidate.trim()) {
30147
+ return candidate.trim();
30148
+ }
30149
+ }
30150
+ return null;
30151
+ }
30152
+ /**
30153
+ * Describes the kind of result that was returned to guide the summary badge row.
30154
+ *
30155
+ * @param resultRaw - Tool call result payload.
30156
+ * @returns Friendly label describing the result type.
30157
+ */
30158
+ function describeResultKind(resultRaw) {
30159
+ if (resultRaw === null || resultRaw === undefined) {
30160
+ return 'No response';
30161
+ }
30162
+ if (typeof resultRaw === 'string') {
30163
+ return 'Text response';
30164
+ }
30165
+ if (typeof resultRaw === 'number') {
30166
+ return 'Numeric response';
30167
+ }
30168
+ if (Array.isArray(resultRaw)) {
30169
+ return 'List response';
30170
+ }
30171
+ if (typeof resultRaw === 'object') {
30172
+ return 'Structured response';
30173
+ }
30174
+ return 'Unknown response';
30175
+ }
30176
+ /**
30177
+ * Counts items returned by the tool call when the payload is iterable.
30178
+ *
30179
+ * @param resultRaw - Tool call result payload.
30180
+ * @returns Item count or `null` when the result is not a collection.
30181
+ */
30182
+ function getResultItemCount(resultRaw) {
30183
+ if (Array.isArray(resultRaw)) {
30184
+ return resultRaw.length;
30185
+ }
30186
+ if (resultRaw && typeof resultRaw === 'object') {
30187
+ const candidates = ['results', 'items', 'data'];
30188
+ for (const key of candidates) {
30189
+ const candidate = resultRaw[key];
30190
+ if (Array.isArray(candidate)) {
30191
+ return candidate.length;
30192
+ }
30193
+ }
30194
+ }
30195
+ return null;
30196
+ }
30197
+ /**
30198
+ * Normalizes raw tool call errors and warnings for display badges.
30199
+ *
30200
+ * @param toolCall - Tool call payload to inspect.
30201
+ * @returns Array of structured issues.
30202
+ */
30203
+ function normalizeToolCallIssues(toolCall) {
30204
+ const warnings = (toolCall.warnings || []).map((value) => ({
30205
+ type: 'warning',
30206
+ label: 'Warning',
30207
+ message: formatIssueValue(value),
30208
+ }));
30209
+ const errors = (toolCall.errors || []).map((value) => ({
30210
+ type: 'error',
30211
+ label: 'Error',
30212
+ message: formatIssueValue(value),
30213
+ }));
30214
+ return [...warnings, ...errors];
30215
+ }
30216
+ /**
30217
+ * Formats an error/warning payload into a single-line string.
30218
+ *
30219
+ * @param value - Raw issue payload.
30220
+ * @returns String suitable for badge display.
30221
+ */
30222
+ function formatIssueValue(value) {
30223
+ if (typeof value === 'string' && value.trim()) {
30224
+ return value.trim();
30225
+ }
30226
+ if (typeof value === 'object' && value !== null) {
30227
+ const json = JSON.stringify(value);
30228
+ return json.length > 120 ? `${json.slice(0, 120)}…` : json;
30229
+ }
30230
+ return String(value !== null && value !== void 0 ? value : 'Unknown issue');
30231
+ }
30232
+ /**
30233
+ * Grabs the leading emoji (if present) from a chiplet label for fallback icons.
30234
+ *
30235
+ * @param text - Chiplet label text.
30236
+ * @returns First character or `null` when empty.
30237
+ */
30238
+ function extractLeadingEmoji(text) {
30239
+ if (!text) {
30240
+ return null;
30241
+ }
30242
+ const trimmed = text.trim();
30243
+ return trimmed ? trimmed[0] : null;
28103
30244
  }
28104
30245
 
28105
30246
  /**
@@ -28409,6 +30550,16 @@
28409
30550
  }
28410
30551
  ChatPersistence.STORAGE_PREFIX = 'promptbook_chat_';
28411
30552
 
30553
+ /**
30554
+ * Default user-facing error text shown in chats when the generator fails.
30555
+ *
30556
+ * @private internal fallback for `LlmChat` so the same string can be reused across the stack without repetition.
30557
+ */
30558
+ const DEFAULT_CHAT_FAIL_MESSAGE = 'Sorry, I encountered an error processing your message. Please, try again later.';
30559
+ /**
30560
+ * Note: [💞] Ignore a discrepancy between file name and entity name
30561
+ */
30562
+
28412
30563
  /**
28413
30564
  * Builds a teammates lookup map from a list of teammate metadata entries.
28414
30565
  */
@@ -28481,7 +30632,8 @@
28481
30632
  * @public exported from `@promptbook/components`
28482
30633
  */
28483
30634
  function LlmChat(props) {
28484
- const { llmTools, persistenceKey, onChange, onReset, onError, initialMessages, sendMessage, userParticipantName = 'USER', llmParticipantName = 'ASSISTANT', autoExecuteMessage, buttonColor, toolTitles, thinkingMessages, ...restProps } = props;
30635
+ const { llmTools, persistenceKey, onChange, onReset, onError, initialMessages, sendMessage, userParticipantName = 'USER', llmParticipantName = 'ASSISTANT', autoExecuteMessage, buttonColor, toolTitles, thinkingMessages, chatFailMessage, ...restProps } = props;
30636
+ const resolvedChatFailMessage = chatFailMessage || DEFAULT_CHAT_FAIL_MESSAGE;
28485
30637
  // Internal state management
28486
30638
  // DRY: Single factory for seeding initial messages (used on mount and after reset)
28487
30639
  const buildInitialMessages = react.useCallback(() => initialMessages ? ([...initialMessages]) : ([]), [initialMessages]);
@@ -28721,7 +30873,7 @@
28721
30873
  id: loadingMessage.id,
28722
30874
  createdAt: $getCurrentDate(),
28723
30875
  sender: llmParticipantName,
28724
- content: `Sorry, I encountered an error processing your message. ${error instanceof Error ? error.message : 'Please try again.'}`,
30876
+ content: resolvedChatFailMessage,
28725
30877
  isComplete: true,
28726
30878
  generationDurationMs: Date.now() - generationStartedAtMs,
28727
30879
  };