hacklab 0.12.7 → 0.13.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 (55) hide show
  1. package/README.md +38 -39
  2. package/dist/cli.js +5 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/drops.d.ts +7 -0
  5. package/dist/commands/drops.d.ts.map +1 -0
  6. package/dist/commands/drops.js +63 -0
  7. package/dist/commands/drops.js.map +1 -0
  8. package/dist/commands/essay.d.ts +18 -2
  9. package/dist/commands/essay.d.ts.map +1 -1
  10. package/dist/commands/essay.js +496 -279
  11. package/dist/commands/essay.js.map +1 -1
  12. package/dist/commands/hacker.d.ts.map +1 -1
  13. package/dist/commands/hacker.js +13 -15
  14. package/dist/commands/hacker.js.map +1 -1
  15. package/dist/commands/profile.d.ts.map +1 -1
  16. package/dist/commands/profile.js +40 -10
  17. package/dist/commands/profile.js.map +1 -1
  18. package/dist/commands/project.d.ts +0 -22
  19. package/dist/commands/project.d.ts.map +1 -1
  20. package/dist/commands/project.js +308 -738
  21. package/dist/commands/project.js.map +1 -1
  22. package/dist/commands/scan.d.ts +9 -4
  23. package/dist/commands/scan.d.ts.map +1 -1
  24. package/dist/commands/scan.js +131 -69
  25. package/dist/commands/scan.js.map +1 -1
  26. package/dist/commands/sync.js +1 -1
  27. package/dist/commands/sync.js.map +1 -1
  28. package/dist/daily-sync.d.ts +2 -0
  29. package/dist/daily-sync.d.ts.map +1 -1
  30. package/dist/daily-sync.js +21 -0
  31. package/dist/daily-sync.js.map +1 -1
  32. package/dist/dossier.d.ts +73 -0
  33. package/dist/dossier.d.ts.map +1 -0
  34. package/dist/dossier.js +141 -0
  35. package/dist/dossier.js.map +1 -0
  36. package/dist/registry.d.ts.map +1 -1
  37. package/dist/registry.js +14 -6
  38. package/dist/registry.js.map +1 -1
  39. package/dist/scanners/index.d.ts +2 -0
  40. package/dist/scanners/index.d.ts.map +1 -1
  41. package/dist/scanners/index.js +8 -0
  42. package/dist/scanners/index.js.map +1 -1
  43. package/dist/scanners/util.d.ts +2 -0
  44. package/dist/scanners/util.d.ts.map +1 -1
  45. package/dist/scanners/util.js +23 -0
  46. package/dist/scanners/util.js.map +1 -1
  47. package/dist/share-card.d.ts +0 -1
  48. package/dist/share-card.d.ts.map +1 -1
  49. package/dist/share-card.js +2 -28
  50. package/dist/share-card.js.map +1 -1
  51. package/dist/share.d.ts +4 -2
  52. package/dist/share.d.ts.map +1 -1
  53. package/dist/share.js +30 -27
  54. package/dist/share.js.map +1 -1
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -6,29 +6,31 @@ a card.
6
6
 
7
7
  ## Install
8
8
 
9
- Install, sign in, then summon the daemon:
9
+ Install, sign in, then scan this machine:
10
10
 
11
11
  ```bash
12
12
  curl -fsSL https://hacklab.so/install | sh
13
13
  hacklab login
14
- hacklab daemon
14
+ hacklab scan
15
15
  ```
16
16
 
17
17
  The script checks for Node 20+ and installs the CLI globally — that's all it
18
18
  does. After it, `hacklab` is a real command on your PATH; `login` creates or
19
- restores your account and `daemon` schedules the background sync. If you already
20
- have Node 20 or newer (including a version manager), you can skip the script:
19
+ restores your account and `scan` uploads this machine's usage, shares the card,
20
+ and turns on the background daemon. If you already have Node 20 or newer
21
+ (including a version manager), you can skip the script:
21
22
 
22
23
  ```bash
23
24
  npm i -g hacklab@latest
24
25
  hacklab login
25
- hacklab daemon
26
+ hacklab scan
26
27
  ```
27
28
 
28
29
  ### Windows
29
30
 
30
31
  On native Windows (PowerShell), use the `.ps1` installer instead — it checks
31
- for Node 20+ and installs the CLI globally, then points you at `hacklab login`:
32
+ for Node 20+ and installs the CLI globally, then points you at `hacklab login`
33
+ and `hacklab scan`:
32
34
 
33
35
  ```powershell
34
36
  irm https://hacklab.so/install.ps1 | iex
@@ -54,18 +56,23 @@ most once a day); update with `npm i -g hacklab@latest`.
54
56
  ## Scan
55
57
 
56
58
  ```
57
- scan local AI usage → card → optional X share
59
+ login → scan this machine → upload → card → share on X → daemon on
58
60
  ```
59
61
 
60
- `hacklab scan` reads your local AI token usage from Claude Code, Codex, Cursor,
61
- OpenClaw, Hermes, OpenCode, and Grok Build. Nothing leaves your machine unless
62
- you share the card. Cursor users with no API key are offered one (local Cursor
63
- data is only an estimate). Then it renders the belt/level/token card in the
64
- terminal and asks whether to share it on X.
62
+ `hacklab scan` requires `hacklab login`. It reads local AI token usage from
63
+ Claude Code, Codex, Cursor, OpenClaw, Hermes, OpenCode, and Grok Build, uploads
64
+ it to your profile, and draws the card from the live account (real rank, belt,
65
+ streak — not a local postcard). Then it asks whether to share that card on X.
66
+ A successful scan summons the daemon so the card stays current; `hacklab scan
67
+ --no-daemon` skips the schedule, and `hacklab daemon off` tears it down.
68
+ Skip the whole command if this computer isn't yours — it would upload that
69
+ machine's usage to your profile. Cursor users with no API key are offered one
70
+ (local Cursor data is only an estimate).
65
71
 
66
72
  ## Commands
67
73
 
68
- - `hacklab scan` — scan local AI usage and generate a share card.
74
+ - `hacklab scan` — scan this machine, upload to your profile, share the card.
75
+ Requires login. Summons the daemon afterwards (`--no-daemon` to skip).
69
76
  - `hacklab sync` — re-scan local AI usage and sync it to your profile.
70
77
  - `hacklab daemon` — summon the daemon: two OS-native background jobs (launchd on
71
78
  macOS, systemd user timers on Linux, Task Scheduler tasks on Windows) so your
@@ -91,32 +98,24 @@ terminal and asks whether to share it on X.
91
98
  - `hacklab config <key> <value>` — set config (`cursor-api-key`, `cursor-email`,
92
99
  `prompt-stats`).
93
100
  Bare `hacklab config` prints the effective values and where each came from.
94
- - `hacklab project` — publish and manage the projects on your profile. Add one
95
- with `project add --title "…"` plus any of `--desc`, `--url` (github.com URLs
96
- become the repo link, anything else the live link), `--repo`, `--live`,
97
- `--tags`, and `--slug`; it shows a preview and publishes on confirm (`--yes`
98
- to skip, `--json` for agents). Set the long-form page content
99
- with `--content <md>` or `--content-file <file>`. Agents can publish every
100
- field at once from a manifest with `project apply project.yaml --yes --json`,
101
- including up to five remote PNG, JPEG, or WebP screenshots (max 3MB each) that
102
- Hacklab downloads and hosts. Re-running `add`/`apply` refreshes the same slug
103
- without losing its publish date. Manage the set with `hacklab project list`,
104
- `project view <slug>`, `project edit <slug> --title/--desc/--url/--tags`, and
105
- `project delete <slug>`.
106
-
107
- ```yaml
108
- title: My project
109
- repoUrl: https://github.com/me/my-project
110
- liveUrl: https://my-project.dev
111
- description: The short profile-card summary.
112
- content: |
113
- ## Why I built it
114
- Long-form markdown for the project page.
115
- tags: [ai, typescript]
116
- screenshots:
117
- - url: https://my-project.dev/thumbnail.webp
118
- caption: Main screen
119
- ```
101
+ - `hacklab project` — agent help for publishing a project to your profile.
102
+ `project add --title "…" [--repo <git url>] [--url <live url>] [--desc "…"]`
103
+ posts it (`--json` for agents); one of `--repo`/`--url` is required. `--repo`
104
+ takes any git host; a github.com `--url` with no `--repo` is treated as the
105
+ repo. A github repo is probed for visibility so a private one stays hidden on
106
+ the web; `--private`/`--public` override that. Re-run with the same title to
107
+ update. `project list` shows yours, `project view <slug>` prints one full
108
+ page, and `project edit <slug> [--title/--desc/--repo/--url/--private/--public]`
109
+ changes fields — editing a GitHub-synced project ends that sync, so it needs
110
+ `--yes`. `project delete <slug>` removes one; it confirms first, and `--yes`
111
+ is required when there's no terminal to ask (scripts, agents, `--json`).
112
+ - `hacklab essay` — agent help for posting an essay. `essay post --title "…"
113
+ --content <md>` publishes it (`--file <path.md>`, or a bare `<path.md>`, for
114
+ a file on disk; `--json` for agents). `essay update <id>` replaces the body at
115
+ the same URL. `essay list` shows yours — `essay list <handle>` a hacker's,
116
+ `essay list org <slug>` an org's, `--page N` for more. `essay view <id>` reads
117
+ one essay. `essay delete <id>` removes one of yours; like `project delete` it
118
+ confirms first and needs `--yes` when nothing can ask.
120
119
  - `hacklab org` — hub for company management. If you already own a company, pick
121
120
  a field, type the new value, and it saves as you go. If you don't own one yet,
122
121
  it offers to claim or create. Subcommands: `hacklab org claim` (take ownership
package/dist/cli.js CHANGED
@@ -90,16 +90,17 @@ const HELP_GROUPS = [
90
90
  title: 'game',
91
91
  rows: [
92
92
  { label: 'rules', summary: 'understand how the ranking works' },
93
- { label: 'scan', summary: 'scan local AI usage and share a card' },
93
+ { label: 'scan', summary: 'scan this machine and share the card' },
94
94
  { label: 'sync', summary: 'upload local AI usage to your profile' },
95
95
  ],
96
96
  },
97
97
  {
98
98
  title: 'posting',
99
99
  rows: [
100
- { label: 'drop <message>', summary: 'post to your feed' },
101
- { label: 'project', summary: 'add a project to your profile' },
102
- { label: 'essay', summary: 'post and manage essays' },
100
+ { label: 'drop <message>', summary: 'post a drop' },
101
+ { label: 'drops', summary: 'your drops' },
102
+ { label: 'project', summary: 'add, list, and edit your projects' },
103
+ { label: 'essay', summary: 'post, list, and update your essays' },
103
104
  ],
104
105
  },
105
106
  {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `hacklab drops` — the feed. Prints every drop on the caller's profile, then
3
+ * the tab URL. `--json` is the list. Looking up someone else is not this
4
+ * command (`hacklab hacker <user>` already includes recent drops).
5
+ */
6
+ export declare function drops(args: string[]): Promise<void>;
7
+ //# sourceMappingURL=drops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drops.d.ts","sourceRoot":"","sources":["../../src/commands/drops.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEzD"}
@@ -0,0 +1,63 @@
1
+ import { emitJsonError, requireSession } from '../api-client.js';
2
+ import { agentProfilePath } from '../dossier.js';
3
+ import { resolveAppUrl } from '../session.js';
4
+ import { dim, error, link, stripControl } from '../ui.js';
5
+ /**
6
+ * `hacklab drops` — the feed. Prints every drop on the caller's profile, then
7
+ * the tab URL. `--json` is the list. Looking up someone else is not this
8
+ * command (`hacklab hacker <user>` already includes recent drops).
9
+ */
10
+ export async function drops(args) {
11
+ const json = args.includes('--json');
12
+ const session = await requireSession(json);
13
+ const handle = session.handle;
14
+ if (!handle) {
15
+ const message = 'claim a username first with `hacklab login`';
16
+ if (json)
17
+ emitJsonError('no_handle', message);
18
+ error('no drops yet — you have not claimed a username');
19
+ process.exit(1);
20
+ }
21
+ const feedUrl = `${resolveAppUrl(session).replace(/\/$/, '')}/${handle}?tab=drops`;
22
+ let res;
23
+ try {
24
+ res = await fetch(`${resolveAppUrl(session)}${agentProfilePath(handle)}`, {
25
+ headers: { Authorization: `Bearer ${session.token}` },
26
+ });
27
+ }
28
+ catch (err) {
29
+ const message = err instanceof Error ? err.message : String(err);
30
+ if (json)
31
+ emitJsonError('network', `couldn't reach hacklab: ${message}`);
32
+ error(`couldn't reach hacklab: ${message}`);
33
+ process.exit(1);
34
+ }
35
+ if (!res.ok) {
36
+ const data = await res.json().catch(() => null);
37
+ if (json)
38
+ emitJsonError('request_failed', data?.error ?? `failed (${res.status})`);
39
+ error(data?.error ?? `failed (${res.status})`);
40
+ process.exit(1);
41
+ }
42
+ const body = (await res.json().catch(() => null));
43
+ const items = [];
44
+ for (const raw of body?.hacker?.recent?.drops ?? []) {
45
+ if (typeof raw?.text === 'string' && typeof raw.createdAt === 'string') {
46
+ items.push({ text: raw.text, createdAt: raw.createdAt });
47
+ }
48
+ }
49
+ if (json) {
50
+ console.log(JSON.stringify({ schemaVersion: 1, drops: items, url: feedUrl }, null, 2));
51
+ return;
52
+ }
53
+ if (items.length === 0) {
54
+ console.log('nothing yet');
55
+ return;
56
+ }
57
+ for (const item of items) {
58
+ console.log(`${dim(item.createdAt.slice(0, 10))} ${stripControl(item.text)}`);
59
+ }
60
+ console.log('');
61
+ console.log(link(feedUrl));
62
+ }
63
+ //# sourceMappingURL=drops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drops.js","sourceRoot":"","sources":["../../src/commands/drops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAIzD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAc;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,6CAA6C,CAAA;QAC7D,IAAI,IAAI;YAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7C,KAAK,CAAC,gDAAgD,CAAC,CAAA;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,YAAY,CAAA;IAElF,IAAI,GAAa,CAAA;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE;YACxE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE;SACtD,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChE,IAAI,IAAI;YAAE,aAAa,CAAC,SAAS,EAAE,2BAA2B,OAAO,EAAE,CAAC,CAAA;QACxE,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,IAAI;YACN,aAAa,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,IAAI,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;QAC1E,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAIxC,CAAA;IACR,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;QACpD,IAAI,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAC1E,CAAA;QACD,OAAM;IACR,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAM;IACR,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAA;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AAC5B,CAAC"}
@@ -1,6 +1,20 @@
1
1
  import { type Session } from '../session.js';
2
- export declare function readError(res: Response, session?: Session | null): Promise<string>;
3
- export declare function formatEssayDate(iso: string): string;
2
+ export type EssayViewTarget = {
3
+ kind: 'one';
4
+ id: string;
5
+ } | {
6
+ kind: 'not-an-id';
7
+ token: string;
8
+ } | {
9
+ kind: 'missing';
10
+ };
11
+ /**
12
+ * `view` takes an essay id only. Anything that can't be an id prefix is a
13
+ * usage error pointing at `essay list <handle>` — a handle and a short hex id
14
+ * are indistinguishable, so guessing between them silently reads the wrong
15
+ * thing.
16
+ */
17
+ export declare function parseViewTarget(token: string | undefined): EssayViewTarget;
4
18
  /**
5
19
  * The `essay list` target grammar, decided by argument count so a user
6
20
  * literally named "org" still works as the bare one-arg form:
@@ -20,5 +34,7 @@ export declare function parseListTarget(positionals: string[]): {
20
34
  } | {
21
35
  kind: 'invalid';
22
36
  };
37
+ export declare function readError(res: Response, session?: Session | null): Promise<string>;
38
+ export declare function formatEssayDate(iso: string): string;
23
39
  export declare function essay(args: string[]): Promise<void>;
24
40
  //# sourceMappingURL=essay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"essay.d.ts","sourceRoot":"","sources":["../../src/commands/essay.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,OAAO,EAEb,MAAM,eAAe,CAAA;AA+DtB,wBAAsB,SAAS,CAC7B,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,CAIjB;AA4CD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAInD;AAoQD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,GAEnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CActB;AA8GD,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,iBA4BzC"}
1
+ {"version":3,"file":"essay.d.ts","sourceRoot":"","sources":["../../src/commands/essay.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,OAAO,EAEb,MAAM,eAAe,CAAA;AAgDtB,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAQ1E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,GAEnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CActB;AA2ED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAiBD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAInD;AA+fD,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzD"}