@oktis-works/cms 0.1.14 → 0.2.1

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 (81) hide show
  1. package/dist/assets.d.ts +94 -0
  2. package/dist/assets.d.ts.map +1 -0
  3. package/dist/assets.js +671 -0
  4. package/dist/assets.js.map +1 -0
  5. package/dist/bluegreen.d.ts +121 -0
  6. package/dist/bluegreen.d.ts.map +1 -0
  7. package/dist/bluegreen.js +393 -0
  8. package/dist/bluegreen.js.map +1 -0
  9. package/dist/commands.d.ts +6 -0
  10. package/dist/commands.d.ts.map +1 -1
  11. package/dist/commands.js +158 -61
  12. package/dist/commands.js.map +1 -1
  13. package/dist/config-wizard.d.ts +39 -0
  14. package/dist/config-wizard.d.ts.map +1 -0
  15. package/dist/config-wizard.js +308 -0
  16. package/dist/config-wizard.js.map +1 -0
  17. package/dist/deploy.d.ts +20 -0
  18. package/dist/deploy.d.ts.map +1 -0
  19. package/dist/deploy.js +304 -0
  20. package/dist/deploy.js.map +1 -0
  21. package/dist/docker.d.ts +148 -0
  22. package/dist/docker.d.ts.map +1 -0
  23. package/dist/docker.js +324 -0
  24. package/dist/docker.js.map +1 -0
  25. package/dist/docs-updater.d.ts +10 -0
  26. package/dist/docs-updater.d.ts.map +1 -0
  27. package/dist/docs-updater.js +45 -0
  28. package/dist/docs-updater.js.map +1 -0
  29. package/dist/doctor.d.ts +2 -0
  30. package/dist/doctor.d.ts.map +1 -1
  31. package/dist/doctor.js +51 -0
  32. package/dist/doctor.js.map +1 -1
  33. package/dist/env-file.d.ts +45 -0
  34. package/dist/env-file.d.ts.map +1 -0
  35. package/dist/env-file.js +200 -0
  36. package/dist/env-file.js.map +1 -0
  37. package/dist/env-schema.d.ts +28 -0
  38. package/dist/env-schema.d.ts.map +1 -0
  39. package/dist/env-schema.js +497 -0
  40. package/dist/env-schema.js.map +1 -0
  41. package/dist/guards.d.ts +40 -0
  42. package/dist/guards.d.ts.map +1 -0
  43. package/dist/guards.js +159 -0
  44. package/dist/guards.js.map +1 -0
  45. package/dist/history.d.ts +48 -0
  46. package/dist/history.d.ts.map +1 -0
  47. package/dist/history.js +104 -0
  48. package/dist/history.js.map +1 -0
  49. package/dist/parser.d.ts.map +1 -1
  50. package/dist/parser.js +12 -3
  51. package/dist/parser.js.map +1 -1
  52. package/dist/project-config.js +2 -2
  53. package/dist/prompt.d.ts +81 -0
  54. package/dist/prompt.d.ts.map +1 -0
  55. package/dist/prompt.js +379 -0
  56. package/dist/prompt.js.map +1 -0
  57. package/dist/redeploy.d.ts +109 -0
  58. package/dist/redeploy.d.ts.map +1 -0
  59. package/dist/redeploy.js +363 -0
  60. package/dist/redeploy.js.map +1 -0
  61. package/dist/rollback.d.ts +15 -0
  62. package/dist/rollback.d.ts.map +1 -0
  63. package/dist/rollback.js +170 -0
  64. package/dist/rollback.js.map +1 -0
  65. package/dist/scaffold-docs.d.ts +30 -6
  66. package/dist/scaffold-docs.d.ts.map +1 -1
  67. package/dist/scaffold-docs.js +728 -33
  68. package/dist/scaffold-docs.js.map +1 -1
  69. package/dist/scaffold.d.ts +17 -1
  70. package/dist/scaffold.d.ts.map +1 -1
  71. package/dist/scaffold.js +77 -14
  72. package/dist/scaffold.js.map +1 -1
  73. package/dist/theme-build.d.ts +35 -0
  74. package/dist/theme-build.d.ts.map +1 -0
  75. package/dist/theme-build.js +86 -0
  76. package/dist/theme-build.js.map +1 -0
  77. package/dist/update.d.ts +52 -0
  78. package/dist/update.d.ts.map +1 -0
  79. package/dist/update.js +273 -0
  80. package/dist/update.js.map +1 -0
  81. package/package.json +7 -7
package/dist/doctor.js CHANGED
@@ -113,6 +113,57 @@ export async function runDoctorChecks(opts = {}) {
113
113
  detail: configPath,
114
114
  required: true,
115
115
  });
116
+ // --- Deploy blue/green ---------------------------------------------------
117
+ // Nada aqui é `required: true`: projeto rodando local (`okcms start`) não
118
+ // precisa de Docker. O que importa é DIZER ao operador por que o deploy
119
+ // não vai funcionar, em vez de ele descobrir no meio de um swap.
120
+ //
121
+ // O módulo entra por dynamic import porque `env-schema` importa este
122
+ // arquivo — carregar os templates de deploy em `okcms config` seria peso
123
+ // morto em todo start de wizard.
124
+ const docker = await import('./docker.js');
125
+ const runner = opts.runner ?? docker.defaultRunner;
126
+ const dockerOk = docker.dockerAvailable(runner);
127
+ results.push({
128
+ name: 'docker',
129
+ ok: dockerOk,
130
+ detail: dockerOk
131
+ ? 'daemon acessível'
132
+ : 'ausente ou parado — só afeta `okcms update --mode deploy`',
133
+ required: false,
134
+ });
135
+ const compose = docker.composeAvailable(runner);
136
+ results.push({
137
+ name: 'compose',
138
+ ok: compose.ok,
139
+ detail: compose.ok
140
+ ? `plugin v2 (${compose.version || 'ok'})`
141
+ : 'plugin v2 ausente — `docker compose version` falhou (legado v1 não serve)',
142
+ required: false,
143
+ });
144
+ // Lane ativa: o estado salvo em .deploy/state.json, senão quem está no ar.
145
+ const lane = dockerOk ? docker.detectActiveLane(cwd, runner) : null;
146
+ results.push({
147
+ name: 'lane',
148
+ ok: dockerOk,
149
+ detail: !dockerOk
150
+ ? 'docker indisponível'
151
+ : lane
152
+ ? `lane ${lane} ativa (rollback: ${docker.otherLane(lane)})`
153
+ : 'nenhuma lane no ar — primeiro deploy',
154
+ required: false,
155
+ });
156
+ const proxy = dockerOk && docker.proxyRunning(runner);
157
+ results.push({
158
+ name: 'proxy',
159
+ ok: proxy || lane === null,
160
+ detail: proxy
161
+ ? 'okcms-proxy no ar'
162
+ : lane === null
163
+ ? 'ainda não implantado em Docker (uso local não precisa)'
164
+ : 'okcms-proxy parado com lane ativa — site inacessível',
165
+ required: false,
166
+ });
116
167
  return results;
117
168
  }
118
169
  //# sourceMappingURL=doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface EnvLine {
2
+ /** `assign` = KEY=value; `raw` = comentário, linha em branco ou lixo. */
3
+ kind: 'assign' | 'raw';
4
+ raw: string;
5
+ key?: string;
6
+ value?: string;
7
+ /** Prefixo antes da chave (` ` ou `export `). */
8
+ prefix?: string;
9
+ /** Separador ao redor do `=` (ex.: `=`, ` = `). */
10
+ sep?: string;
11
+ /** Comentario final da linha, já sem a `#` (ex.: ` # nota`). */
12
+ suffix?: string;
13
+ }
14
+ /**
15
+ * Volta a serializar um valor para o formato dotenv: cru quando não ambíguo,
16
+ * com aspas duplas quando contém espaço, `#`, aspas ou expansão de variável.
17
+ */
18
+ export declare function serializeEnvValue(value: string): string;
19
+ export declare class EnvFile {
20
+ lines: EnvLine[];
21
+ readonly path: string | null;
22
+ constructor(text?: string, path?: string | null);
23
+ /** Linhas exatamente como estão no disco. */
24
+ toString(): string;
25
+ get(key: string): string | undefined;
26
+ /** Valor bruto (com aspas/comentário removidos apenas das pontas). */
27
+ has(key: string): boolean;
28
+ keys(): string[];
29
+ /** Todas as chaves → valor (sem aspas). */
30
+ toRecord(): Record<string, string>;
31
+ /**
32
+ * Define/insere uma chave. Na substituição preserva prefixo, separador e
33
+ * comentário final — é o que faz o wizard não "sujar" o arquivo.
34
+ */
35
+ set(key: string, value: string): boolean;
36
+ /** Remove a linha de uma chave (mantém comentários em volta). */
37
+ delete(key: string): boolean;
38
+ /** Cria a chave abaixo do último comentário de uma seção (`# --- Foo ---`). */
39
+ setInSection(key: string, value: string, sectionHint: string): boolean;
40
+ save(path?: string | null, mode?: number): void;
41
+ }
42
+ export declare function parseEnv(text: string): EnvFile;
43
+ /** Lê `.env` (ou `.env.example` como fallback) — nunca lança se não existe. */
44
+ export declare function loadEnvFile(path: string): EnvFile;
45
+ //# sourceMappingURL=env-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,OAAO;IACtB,yEAAyE;IACzE,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,qBAAa,OAAO;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEjB,IAAI,SAAK,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;IAOjD,6CAA6C;IAC7C,QAAQ,IAAI,MAAM;IAIlB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAMpC,sEAAsE;IACtE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,IAAI,IAAI,MAAM,EAAE;IAQhB,2CAA2C;IAC3C,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQlC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IA2BxC,iEAAiE;IACjE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM5B,+EAA+E;IAC/E,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IA2BtE,IAAI,CAAC,IAAI,gBAAY,EAAE,IAAI,SAAQ,GAAG,IAAI;CAW3C;AAWD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD"}
@@ -0,0 +1,200 @@
1
+ // @oktis-works/cms - Leitor/editor de .env que preserva o arquivo do usuário
2
+ //
3
+ // O `.env` de um projeto é editado à mão: tem comentários, seções, linhas em
4
+ // branco e ordem que o autor escolheu. Regenerar o arquivo a partir de um
5
+ // mapa de chaves (como quase todo "env wizard" faz) destrói isso. Aqui o
6
+ // arquivo é parseado em LINHAS — só a linha da chave muda, o resto passa
7
+ // byte a byte.
8
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { dirname } from 'node:path';
10
+ const ASSIGN_RE = /^([ \t]*(?:export[ \t]+)?)([A-Za-z_][A-Za-z0-9_]*)([ \t]*=[ \t]*)(.*)$/;
11
+ /**
12
+ * Separa `valor # comentário` sem cortar `#` dentro de aspas nem fragmentos
13
+ * de URL (`http://x/#a`) — só considera `#` preceded de espaço ou no início.
14
+ */
15
+ function splitSuffix(value) {
16
+ let quote = null;
17
+ for (let i = 0; i < value.length; i++) {
18
+ const ch = value[i];
19
+ if (quote) {
20
+ if (ch === quote)
21
+ quote = null;
22
+ continue;
23
+ }
24
+ if (ch === '"' || ch === "'") {
25
+ quote = ch;
26
+ continue;
27
+ }
28
+ if (ch === '#') {
29
+ const prev = value[i - 1];
30
+ if (i === 0 || prev === ' ' || prev === '\t') {
31
+ // mantém o espaço que separava valor e comentário: o round-trip tem
32
+ // que devolver a linha idêntica (o autor do .env escolheu o alinhamento)
33
+ let start = i;
34
+ while (start > 0 && (value[start - 1] === ' ' || value[start - 1] === '\t'))
35
+ start--;
36
+ return { value: value.slice(0, start), suffix: value.slice(start) };
37
+ }
38
+ }
39
+ }
40
+ return { value, suffix: '' };
41
+ }
42
+ /** Remove aspas externas de um valor dotenv. */
43
+ function unquote(value) {
44
+ const trimmed = value.trim();
45
+ if (trimmed.length >= 2) {
46
+ const first = trimmed[0];
47
+ const last = trimmed[trimmed.length - 1];
48
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
49
+ return trimmed.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
50
+ }
51
+ }
52
+ return trimmed;
53
+ }
54
+ /**
55
+ * Volta a serializar um valor para o formato dotenv: cru quando não ambíguo,
56
+ * com aspas duplas quando contém espaço, `#`, aspas ou expansão de variável.
57
+ */
58
+ export function serializeEnvValue(value) {
59
+ if (value === '')
60
+ return '';
61
+ const needsQuotes = /[\s#"'$`\\]/.test(value);
62
+ if (!needsQuotes)
63
+ return value;
64
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
65
+ }
66
+ export class EnvFile {
67
+ lines;
68
+ path;
69
+ constructor(text = '', path = null) {
70
+ this.path = path;
71
+ this.lines = text.length > 0 ? text.split(/\r?\n/).map((raw) => parseLine(raw)) : [];
72
+ // um trailing newline final vira linha vazia no split — mantemos para
73
+ // round-trip fiel
74
+ }
75
+ /** Linhas exatamente como estão no disco. */
76
+ toString() {
77
+ return this.lines.map((line) => line.raw).join('\n');
78
+ }
79
+ get(key) {
80
+ const line = this.lines.find((candidate) => candidate.kind === 'assign' && candidate.key === key);
81
+ if (!line?.value)
82
+ return undefined;
83
+ return unquote(line.value);
84
+ }
85
+ /** Valor bruto (com aspas/comentário removidos apenas das pontas). */
86
+ has(key) {
87
+ return this.lines.some((line) => line.kind === 'assign' && line.key === key);
88
+ }
89
+ keys() {
90
+ const seen = new Set();
91
+ for (const line of this.lines) {
92
+ if (line.kind === 'assign' && line.key)
93
+ seen.add(line.key);
94
+ }
95
+ return [...seen];
96
+ }
97
+ /** Todas as chaves → valor (sem aspas). */
98
+ toRecord() {
99
+ const out = {};
100
+ for (const line of this.lines) {
101
+ if (line.kind === 'assign' && line.key)
102
+ out[line.key] = unquote(line.value ?? '');
103
+ }
104
+ return out;
105
+ }
106
+ /**
107
+ * Define/insere uma chave. Na substituição preserva prefixo, separador e
108
+ * comentário final — é o que faz o wizard não "sujar" o arquivo.
109
+ */
110
+ set(key, value) {
111
+ const serialized = serializeEnvValue(value);
112
+ const existing = this.lines.find((line) => line.kind === 'assign' && line.key === key);
113
+ if (existing) {
114
+ const comment = existing.suffix ? `${serialized}${existing.suffix}` : serialized;
115
+ const next = `${existing.prefix ?? ''}${existing.key ?? ''}${existing.sep ?? '='}${comment}`;
116
+ if (existing.raw === next)
117
+ return false;
118
+ existing.raw = next;
119
+ existing.value = serialized;
120
+ return true;
121
+ }
122
+ this.lines.push({
123
+ kind: 'assign',
124
+ raw: `${key}=${serialized}`,
125
+ key,
126
+ value: serialized,
127
+ prefix: '',
128
+ sep: '=',
129
+ suffix: '',
130
+ });
131
+ return true;
132
+ }
133
+ /** Remove a linha de uma chave (mantém comentários em volta). */
134
+ delete(key) {
135
+ const before = this.lines.length;
136
+ this.lines = this.lines.filter((line) => !(line.kind === 'assign' && line.key === key));
137
+ return this.lines.length !== before;
138
+ }
139
+ /** Cria a chave abaixo do último comentário de uma seção (`# --- Foo ---`). */
140
+ setInSection(key, value, sectionHint) {
141
+ if (this.has(key))
142
+ return this.set(key, value);
143
+ const hint = sectionHint.toLowerCase();
144
+ let insertAt = -1;
145
+ for (let i = 0; i < this.lines.length; i++) {
146
+ const line = this.lines[i];
147
+ if (line.kind !== 'raw')
148
+ continue;
149
+ const text = line.raw.toLowerCase();
150
+ if (text.includes('#') && text.includes(hint))
151
+ insertAt = i + 1;
152
+ }
153
+ const serialized = serializeEnvValue(value);
154
+ const entry = {
155
+ kind: 'assign',
156
+ raw: `${key}=${serialized}`,
157
+ key,
158
+ value: serialized,
159
+ prefix: '',
160
+ sep: '=',
161
+ suffix: '',
162
+ };
163
+ if (insertAt >= 0)
164
+ this.lines.splice(insertAt, 0, entry);
165
+ else
166
+ this.lines.push(entry);
167
+ return true;
168
+ }
169
+ save(path = this.path, mode = 0o600) {
170
+ if (!path)
171
+ throw new Error('EnvFile.save: sem caminho');
172
+ mkdirSync(dirname(path), { recursive: true });
173
+ writeFileSync(path, `${this.toString()}\n`, 'utf-8');
174
+ // .env carrega senha de banco e JWT_SECRET: dono só é o padrão aceitável
175
+ try {
176
+ chmodSync(path, mode);
177
+ }
178
+ catch {
179
+ // filesystem sem suporte a chmod (Windows) — não é bloqueante
180
+ }
181
+ }
182
+ }
183
+ function parseLine(raw) {
184
+ const match = ASSIGN_RE.exec(raw);
185
+ if (!match)
186
+ return { kind: 'raw', raw };
187
+ const [, prefix, key, sep, rest] = match;
188
+ const { value, suffix } = splitSuffix(rest);
189
+ return { kind: 'assign', raw, key, prefix, sep, value, suffix };
190
+ }
191
+ export function parseEnv(text) {
192
+ return new EnvFile(text, null);
193
+ }
194
+ /** Lê `.env` (ou `.env.example` como fallback) — nunca lança se não existe. */
195
+ export function loadEnvFile(path) {
196
+ if (!existsSync(path))
197
+ return new EnvFile('', path);
198
+ return new EnvFile(readFileSync(path, 'utf-8'), path);
199
+ }
200
+ //# sourceMappingURL=env-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.js","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type EnvType = 'string' | 'number' | 'boolean' | 'port' | 'duration' | 'url' | 'database-url' | 'path' | 'enum' | 'secret';
2
+ export interface EnvField {
3
+ key: string;
4
+ section: string;
5
+ label: string;
6
+ description: string;
7
+ type: EnvType;
8
+ default?: string;
9
+ options?: string[];
10
+ required?: boolean;
11
+ /** Mostra o campo só quando a condição é verdadeira (dependências). */
12
+ when?: (record: Record<string, string>) => boolean;
13
+ /** Minibloco de exemplo exibido no prompt. */
14
+ example?: string;
15
+ }
16
+ export interface EnvSection {
17
+ id: string;
18
+ title: string;
19
+ hint: string;
20
+ }
21
+ export declare const ENV_SECTIONS: EnvSection[];
22
+ export declare const ENV_FIELDS: EnvField[];
23
+ /** Mensagem de erro para o prompt, ou null quando o valor é válido. */
24
+ export declare function validateField(field: EnvField, value: string): string | null;
25
+ /** Campos de uma seção, já filtrados por dependência (`when`). */
26
+ export declare function fieldsForSection(sectionId: string, record: Record<string, string>): EnvField[];
27
+ export declare function sectionById(sectionId: string): EnvSection | undefined;
28
+ //# sourceMappingURL=env-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-schema.d.ts","sourceRoot":"","sources":["../src/env-schema.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,OAAO,GACf,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,UAAU,GACV,KAAK,GACL,cAAc,GACd,MAAM,GACN,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;IACnD,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,YAAY,EAAE,UAAU,EAWpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,QAAQ,EAoZhC,CAAC;AASF,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0D3E;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAI9F;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAErE"}