@3d-print-shop/client 1.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.
@@ -0,0 +1,8 @@
1
+ /** What a caller may do. Authority, not occupation - a script can be an admin and a person a user. */
2
+ export type Role = 'admin' | 'user';
3
+ /** Who is asking. The id is what outlives them; the name is what a log and a UI say. */
4
+ export interface Caller {
5
+ id: string;
6
+ name: string;
7
+ role: Role;
8
+ }
package/dist/Caller.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ import type { Caller } from './Caller.js';
2
+ import type { FilamentDemand, Job, JobDetails, JobsHeld, Verdict } from './Job.js';
3
+ import type { PrinterRecord, RegisteredPrinter } from './Printer.js';
4
+ import type { PrinterAdded, Shop } from './Shop.js';
5
+ /** The shop does not know who is asking. A browser answers this by logging in. */
6
+ export declare class NotAuthenticated extends Error {
7
+ }
8
+ /** The shop over its HTTP API, which is the only way in - it runs as its own process. */
9
+ export declare class HttpShop implements Shop {
10
+ private readonly url;
11
+ private readonly token?;
12
+ constructor(url: string, token?: string | undefined, howToReach?: typeof fetch);
13
+ private readonly howToReach;
14
+ whoAmI(): Promise<Caller>;
15
+ /** Log in, and answer with who the shop takes you to be. The session rides on a cookie. */
16
+ logIn(id: string, password: string): Promise<Caller>;
17
+ /** End the session, at the shop as well as in this browser. */
18
+ logOut(): Promise<void>;
19
+ changeMyPassword(current: string, password: string): Promise<void>;
20
+ jobs(): Promise<JobsHeld>;
21
+ job(id: number): Promise<Job>;
22
+ submit(details: JobDetails, gcode: Blob): Promise<Job>;
23
+ verdict(id: number, verdict: Verdict): Promise<Job | undefined>;
24
+ waitingOn(printer?: string): Promise<FilamentDemand[]>;
25
+ printers(): Promise<RegisteredPrinter[]>;
26
+ addPrinter(record: PrinterRecord, key?: string): Promise<PrinterAdded>;
27
+ removePrinter(name: string): Promise<void>;
28
+ pause(name: string, reason: string): Promise<RegisteredPrinter>;
29
+ resume(name: string): Promise<RegisteredPrinter>;
30
+ load(name: string, filaments: string[]): Promise<RegisteredPrinter>;
31
+ shutDown(): Promise<void>;
32
+ private answered;
33
+ private reach;
34
+ private attempt;
35
+ }
36
+ export declare function sending(body: unknown): {
37
+ headers?: Record<string, string>;
38
+ body?: FormData | string;
39
+ };
40
+ export declare function printerPath(name: string): string;
41
+ export declare function refusal(response: Response): Promise<string>;
42
+ type WireJob = Omit<Job, 'submittedAt'> & {
43
+ submittedAt: string;
44
+ };
45
+ type WireTrouble = {
46
+ reason: string;
47
+ since: string;
48
+ };
49
+ type WirePrinter = Omit<RegisteredPrinter, 'paused' | 'unreachable' | 'refused' | 'outOfContact'> & {
50
+ paused?: WireTrouble;
51
+ unreachable?: WireTrouble;
52
+ refused?: WireTrouble;
53
+ outOfContact?: WireTrouble;
54
+ };
55
+ export declare function asJob(job: WireJob): Job;
56
+ export declare function asPrinter(printer: WirePrinter): RegisteredPrinter;
57
+ export declare function since(trouble: WireTrouble | undefined): {
58
+ reason: string;
59
+ since: Date;
60
+ } | undefined;
61
+ export {};
@@ -0,0 +1,170 @@
1
+ const DESCRIPTION_PART = 'job';
2
+ const GCODE_PART = 'gcode';
3
+ // AIDEV-NOTE: apart from every other refusal because a page has something to DO about this one -
4
+ // show somebody a login rather than an error. Everything else the shop says no to is a thing the
5
+ // caller got wrong; this is the shop not knowing who they are yet.
6
+ /** The shop does not know who is asking. A browser answers this by logging in. */
7
+ export class NotAuthenticated extends Error {
8
+ }
9
+ /** The shop over its HTTP API, which is the only way in - it runs as its own process. */
10
+ export class HttpShop {
11
+ // AIDEV-NOTE: the token is taken once, here, so every request carries it without a caller
12
+ // remembering to. Undefined is a caller that has none to present, which every shop refuses - it
13
+ // is not a mode, it is the 401 a caller gets for not having been set up yet.
14
+ //
15
+ // Handed in rather than looked up. Finding a token on THIS machine - an environment variable, a
16
+ // file under a home directory - is a thing only a program on a machine can do, and this class is
17
+ // also what a browser talks to the shop with, where none of that exists and importing `node:fs`
18
+ // to reach the default would sink the whole bundle. `defaultToken()` is still what a command line
19
+ // passes; see index.ts.
20
+ // AIDEV-NOTE: how it reaches the shop, handed in for the same reason the token is - so that what
21
+ // this client SENDS and what it makes of the answer can be asked without a socket between them.
22
+ // The shop's own suite drives a real `createApi` through one of these, which is the only place
23
+ // both halves of the contract are live at once. Nothing else ever passes it: over the wire is what
24
+ // a client of this shop does, and a second way to reach one would be a second way to be wrong.
25
+ constructor(url, token, howToReach) {
26
+ this.url = url;
27
+ this.token = token;
28
+ this.howToReach = howToReach ?? ((asked, sent) => fetch(asked, sent));
29
+ }
30
+ async whoAmI() {
31
+ return (await this.answered('GET', '/me'));
32
+ }
33
+ // AIDEV-NOTE: nothing is answered with but the caller. The session is a cookie the shop set, which
34
+ // this never sees and could not read if it tried - that is the whole reason it is a cookie rather
35
+ // than something a page keeps: a script that can read a credential is a script that can send one
36
+ // somewhere else.
37
+ /** Log in, and answer with who the shop takes you to be. The session rides on a cookie. */
38
+ async logIn(id, password) {
39
+ return (await this.answered('POST', '/sessions', { id, password }));
40
+ }
41
+ /** End the session, at the shop as well as in this browser. */
42
+ async logOut() {
43
+ await this.reach('DELETE', '/sessions');
44
+ }
45
+ // AIDEV-NOTE: `current` travels with it rather than being checked by a login first, so the shop
46
+ // judges one request rather than trusting that a previous one was the same person. A wrong one is
47
+ // refused 403 and not 401 - the session is still good, and a client that treats it as expired
48
+ // would throw somebody out of a page for mistyping.
49
+ async changeMyPassword(current, password) {
50
+ await this.reach('PUT', '/me/password', { current, password });
51
+ }
52
+ async jobs() {
53
+ const held = (await this.answered('GET', '/jobs'));
54
+ return { accessibleJobs: held.accessibleJobs.map(asJob), totalJobs: held.totalJobs };
55
+ }
56
+ async job(id) {
57
+ return asJob((await this.answered('GET', `/jobs/${id}`)));
58
+ }
59
+ // AIDEV-NOTE: the description part is appended FIRST because the shop requires that order - it
60
+ // validates the description before reading a byte of gcode, which is what lets it refuse a job
61
+ // nothing could print without being sent tens of megabytes to say so. FormData keeps the order.
62
+ //
63
+ // A Blob rather than a path or a stream: it is what fetch will stream without reading whole, and
64
+ // `openAsBlob` gives a caller with a file on disk one backed by that file.
65
+ async submit(details, gcode) {
66
+ const body = new FormData();
67
+ body.append(DESCRIPTION_PART, JSON.stringify(details));
68
+ body.append(GCODE_PART, gcode, details.remotePath ?? 'print.gcode');
69
+ return asJob((await this.answered('POST', '/jobs', body)));
70
+ }
71
+ // One route, and a value rather than an endpoint per verdict - so the third one this shop expects
72
+ // ("abandon": do not reprint, but it was not a success) arrives without a new way in.
73
+ async verdict(id, verdict) {
74
+ const answer = (await this.answered('PUT', `/jobs/${id}/verdict`, { verdict }));
75
+ return answer && asJob(answer);
76
+ }
77
+ async waitingOn(printer) {
78
+ const forPrinter = printer === undefined ? '' : `?printer=${encodeURIComponent(printer)}`;
79
+ return (await this.answered('GET', `/filaments${forPrinter}`));
80
+ }
81
+ async printers() {
82
+ return (await this.answered('GET', '/printers')).map(asPrinter);
83
+ }
84
+ // 201 or 200: the shop says whether it made a printer or changed one it already had, and an
85
+ // operator correcting a typo in a name needs to be told which.
86
+ async addPrinter(record, key) {
87
+ const response = await this.reach('POST', '/printers', key === undefined ? record : { ...record, key });
88
+ return { printer: asPrinter((await bodyOf(response))), created: response.status === 201 };
89
+ }
90
+ async removePrinter(name) {
91
+ await this.reach('DELETE', printerPath(name));
92
+ }
93
+ async pause(name, reason) {
94
+ return asPrinter((await this.answered('PUT', `${printerPath(name)}/status`, { stopped: true, reason })));
95
+ }
96
+ async resume(name) {
97
+ return asPrinter((await this.answered('PUT', `${printerPath(name)}/status`, { stopped: false })));
98
+ }
99
+ async load(name, filaments) {
100
+ return asPrinter((await this.answered('PUT', `${printerPath(name)}/filament`, { loaded: filaments })));
101
+ }
102
+ async shutDown() {
103
+ await this.reach('POST', '/shutdown');
104
+ }
105
+ async answered(method, path, body) {
106
+ return bodyOf(await this.reach(method, path, body));
107
+ }
108
+ // AIDEV-NOTE: the shop's own words reach the caller. The far end is what knows WHY - a printer
109
+ // that is not here, a bed nothing has room for, a job nobody has printed yet; this end knows only
110
+ // that something was refused.
111
+ async reach(method, path, body) {
112
+ const response = await this.attempt(method, path, body);
113
+ if (response.status === 401)
114
+ throw new NotAuthenticated(await refusal(response));
115
+ if (!response.ok)
116
+ throw new Error(await refusal(response));
117
+ return response;
118
+ }
119
+ async attempt(method, path, body) {
120
+ const sent = sending(body);
121
+ try {
122
+ return await this.howToReach(`${this.url}${path}`, {
123
+ method,
124
+ ...sent,
125
+ // AIDEV-NOTE: so that a browser sends the session cookie the shop set. In node there is no
126
+ // cookie store for this to mean anything, and a token is what names a caller there.
127
+ credentials: 'include',
128
+ headers: { ...sent.headers, ...(this.token === undefined ? {} : { authorization: `Bearer ${this.token}` }) },
129
+ });
130
+ }
131
+ catch {
132
+ throw new Error(`Cannot reach the print shop at ${this.url}. Is it running? Start it with: 3d-print-shop serve`);
133
+ }
134
+ }
135
+ }
136
+ // A multipart body carries its own content type, boundary and all; JSON has to say so itself.
137
+ export function sending(body) {
138
+ if (body === undefined)
139
+ return {};
140
+ if (body instanceof FormData)
141
+ return { body };
142
+ return { headers: { 'content-type': 'application/json' }, body: JSON.stringify(body) };
143
+ }
144
+ // A name is whatever an operator typed, and one carrying a `#` would otherwise make a URL whose
145
+ // path stops there.
146
+ export function printerPath(name) {
147
+ return `/printers/${encodeURIComponent(name)}`;
148
+ }
149
+ async function bodyOf(response) {
150
+ return response.status === 204 ? undefined : response.json();
151
+ }
152
+ export async function refusal(response) {
153
+ const said = (await response.json().catch(() => undefined));
154
+ return typeof said?.error === 'string' ? said.error : `${response.status} ${response.statusText}`;
155
+ }
156
+ export function asJob(job) {
157
+ return { ...job, submittedAt: new Date(job.submittedAt) };
158
+ }
159
+ export function asPrinter(printer) {
160
+ return {
161
+ ...printer,
162
+ paused: since(printer.paused),
163
+ unreachable: since(printer.unreachable),
164
+ refused: since(printer.refused),
165
+ outOfContact: since(printer.outOfContact),
166
+ };
167
+ }
168
+ export function since(trouble) {
169
+ return trouble && { ...trouble, since: new Date(trouble.since) };
170
+ }
package/dist/Job.d.ts ADDED
@@ -0,0 +1,105 @@
1
+ /** Millimetres, as the printer measures its bed and its height. */
2
+ export interface BuildVolume {
3
+ x: number;
4
+ y: number;
5
+ z: number;
6
+ }
7
+ /**
8
+ * What a client says about a job. NOT the gcode - that is sent beside this, because a kit's gcode
9
+ * runs to tens of megabytes and holding one in memory to describe it is backwards.
10
+ */
11
+ export interface JobDetails {
12
+ /**
13
+ * What this needs, in the PRINTER's names for materials. A client with its own vocabulary resolves
14
+ * it before submitting.
15
+ *
16
+ * The FIRST is the one that must be loaded before it can start; every printer has one extruder.
17
+ * More may be named, and they are carried but not scheduled on.
18
+ */
19
+ filaments: string[];
20
+ /** What a human should see. Absent, the shop names it. */
21
+ displayName?: string;
22
+ /** Where to push it on the printer. Absent, the shop chooses. */
23
+ remotePath?: string;
24
+ /** Which printer, by name. Absent, any printer it fits will do. */
25
+ printer?: string;
26
+ /** The room the SLICED result needs, compared axis for axis with no rotation. */
27
+ requiredBuildVolume?: BuildVolume;
28
+ /**
29
+ * How long printing this is expected to take, in seconds, as whatever sliced it estimated. The
30
+ * shop never measures one and never corrects one; it only adds them up.
31
+ *
32
+ * A field of its own rather than something in `metadata`, because the shop RANKS demand by it and
33
+ * metadata is carried without ever being interpreted. Absent is a client that does not know, which
34
+ * costs a total rather than counting as no work - see `FilamentDemand`.
35
+ */
36
+ estimatedPrintSeconds?: number;
37
+ /**
38
+ * Carried by the shop and never interpreted - how a client keeps its own meaning attached.
39
+ *
40
+ * Names against text, and nothing nested: the shop stores this and hands it back, so what it will
41
+ * take is what it can hand back unchanged. A client with structure of its own encodes it into one
42
+ * of these values and decodes it again on the way out.
43
+ */
44
+ metadata?: Record<string, string>;
45
+ }
46
+ /**
47
+ * What a caller may see of the work a shop is holding, and how much of it there is altogether.
48
+ *
49
+ * One answer rather than a list and a count asked for separately: a submission landing between two
50
+ * questions would give a caller three jobs and a total of two, and the two have to agree. `totalJobs`
51
+ * is every job the shop holds, whoever owns them - enough to see that the queue is busy, and
52
+ * nothing about whose work it is.
53
+ */
54
+ export interface JobsHeld {
55
+ accessibleJobs: Job[];
56
+ totalJobs: number;
57
+ }
58
+ /**
59
+ * What queued work is waiting for, and how much of it there is - the answer to "what should I load
60
+ * next". Counted by the filament each job STARTS with, because that is the one that has to be on the
61
+ * machine before it can begin.
62
+ *
63
+ * Busiest first, which is by WORK when the shop knows all of it and by count when it does not.
64
+ */
65
+ export interface FilamentDemand {
66
+ filament: string;
67
+ jobs: number;
68
+ /**
69
+ * How much printing is waiting on this filament, in seconds - present only when EVERY job counted
70
+ * here said how long it takes. A total summed over the ones that did would understate the queue,
71
+ * and a number that is quietly short is worse to choose by than no number at all.
72
+ */
73
+ estimatedPrintSeconds?: number;
74
+ }
75
+ /** Where a job is. Derived by the shop from what its printers are holding. */
76
+ export type JobState = 'queued' | 'printing' | 'awaiting-approval';
77
+ /** What a printer is holding a job FOR. */
78
+ export type JobPhase = Exclude<JobState, 'queued'>;
79
+ /** How the printer stopped. None of these is a verdict on whether the print is usable. */
80
+ export type PrinterOutcome = 'finished' | 'failed' | 'cancelled';
81
+ /**
82
+ * What a person says about a print that has finished. `abandoned` is the one that is neither: the
83
+ * print was no good and it is not worth another - the job leaves the shop as an approved one does.
84
+ */
85
+ export type Verdict = 'approved' | 'rejected' | 'abandoned';
86
+ /** A job as the shop reports it. */
87
+ export interface Job extends JobDetails {
88
+ id: number;
89
+ /**
90
+ * The id of the caller who submitted it, written with the record and never rewritten.
91
+ *
92
+ * Absent is a job that belongs to nobody: its submitter was revoked - their entry left the shop's
93
+ * callers and the id it carried is nobody's - or it was submitted before the shop recorded this
94
+ * at all. An admin is then who is left to read and judge it.
95
+ */
96
+ owner?: string;
97
+ displayName: string;
98
+ submittedAt: Date;
99
+ gcodeBytes: number;
100
+ state: JobState;
101
+ /** The printer holding it, when one is. */
102
+ heldBy?: string;
103
+ /** What the printer said when it stopped, which is not a verdict. */
104
+ lastPrinterOutcome?: PrinterOutcome;
105
+ }
package/dist/Job.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,100 @@
1
+ import type { BuildVolume, JobPhase, PrinterOutcome } from './Job.js';
2
+ /** Which protocol a printer speaks, and so which client the shop builds to reach it. */
3
+ export type PrinterApi = 'octoprint';
4
+ /** What the operator says a machine IS. It changes when the shop's machines change. */
5
+ export interface PrinterRecord {
6
+ name: string;
7
+ buildVolume: BuildVolume;
8
+ api: PrinterApi;
9
+ /** Where the machine answers, e.g. `http://octopi.local`. */
10
+ address: string;
11
+ }
12
+ /** What a printer is holding, and what for. */
13
+ export interface Holding {
14
+ job: number;
15
+ phase: JobPhase;
16
+ /**
17
+ * Where the machine said it filed the gcode, which is not always where it was asked to.
18
+ *
19
+ * Recorded once the upload has been answered, so a print started before the shop read that answer
20
+ * back - or interrupted between the upload and the write - has none.
21
+ */
22
+ remotePath?: string;
23
+ /** What the machine said when it stopped. Present once it has stopped. */
24
+ outcome?: PrinterOutcome;
25
+ }
26
+ /** What a printer is DOING. It changes as the shop runs. */
27
+ export interface PrinterStatus {
28
+ /** What is on the machine now, positionally by extruder. Empty when nothing is. */
29
+ loaded: string[];
30
+ /**
31
+ * An OPERATOR stopped this printer, with the reason they gave and when. Only an operator lifts
32
+ * it: a reason given by a person is a fact about the room, and no machine can contradict it.
33
+ */
34
+ paused?: {
35
+ reason: string;
36
+ since: Date;
37
+ };
38
+ /**
39
+ * The shop could not get to the machine, with what it saw and when.
40
+ *
41
+ * Kept apart from `paused` because it is the shop's own reading of a machine rather than
42
+ * anybody's instruction: nobody is asked to clear it, and the shop clears it itself once it can
43
+ * reach the machine again.
44
+ */
45
+ unreachable?: {
46
+ reason: string;
47
+ since: Date;
48
+ };
49
+ /**
50
+ * The machine would not take the file, with what it said and when.
51
+ *
52
+ * Its own fact rather than a stop, because nobody stopped anything: the machine answered and gave
53
+ * a considered no. Nothing about that changes by asking again - and asking costs a whole plate -
54
+ * so this is the one thing the shop writes that waits for a person, and `printer start` is how a
55
+ * person says they have dealt with it.
56
+ */
57
+ refused?: {
58
+ reason: string;
59
+ since: Date;
60
+ };
61
+ /**
62
+ * The shop is holding a print it can no longer hear about, with what took the watch and when.
63
+ *
64
+ * Not a stop and not a fault of the machine's: as far as anyone knows it is still printing, and
65
+ * nothing is idled by this that the print was not idling already. The shop listens again on a
66
+ * backoff, and the machine's own status settles what happened while nobody was there.
67
+ */
68
+ outOfContact?: {
69
+ reason: string;
70
+ since: Date;
71
+ };
72
+ /** The job it has, or undefined when the bed is clear and it can take another. */
73
+ holding?: Holding;
74
+ }
75
+ /** A printer as the shop reports it: what it is, what it is doing, and where it can be watched. */
76
+ export interface RegisteredPrinter extends PrinterRecord, PrinterStatus {
77
+ /**
78
+ * Where a person can watch this machine, when the protocol it speaks says where that is.
79
+ *
80
+ * Derived from the record rather than recorded, and never asked of the machine: where a camera
81
+ * lives is a fact about the protocol, not something an operator should have to retype, and this
82
+ * is a URL for a BROWSER to open rather than anything the shop fetches. Absent is a machine whose
83
+ * protocol says nothing about one.
84
+ */
85
+ camera?: string;
86
+ /**
87
+ * The shop cannot read what this printer is DOING - its status file is there and is not JSON.
88
+ *
89
+ * Derived when the printer is read rather than recorded, the way `camera` is, and for a reason
90
+ * the others do not have: it is a fact about a file the shop was unable to read, so there is
91
+ * nowhere to write it that it could be read back from. Nothing schedules onto a printer carrying
92
+ * one, and what it is holding is not known - so what it says is that a person has to look.
93
+ *
94
+ * No `since`: the other four are written down at the moment they happen, and this one is found
95
+ * when the file is read. The shop knows the file is bad now and not when it went bad.
96
+ */
97
+ unreadable?: {
98
+ reason: string;
99
+ };
100
+ }
@@ -0,0 +1 @@
1
+ export {};
package/dist/Shop.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ import type { Caller } from './Caller.js';
2
+ import type { FilamentDemand, Job, JobDetails, JobsHeld, Verdict } from './Job.js';
3
+ import type { PrinterRecord, RegisteredPrinter } from './Printer.js';
4
+ /** Whether the shop had this printer already, which is the difference between adding and changing. */
5
+ export interface PrinterAdded {
6
+ printer: RegisteredPrinter;
7
+ created: boolean;
8
+ }
9
+ export interface Shop {
10
+ /** Who the shop takes this caller to be, by what they presented. */
11
+ whoAmI(): Promise<Caller>;
12
+ /** Log in with a password, for a caller who is a person rather than a program. */
13
+ logIn(id: string, password: string): Promise<Caller>;
14
+ /** End the session, at the shop rather than only in the browser holding it. */
15
+ logOut(): Promise<void>;
16
+ /**
17
+ * What this caller may see, and how many jobs the shop holds altogether. An admin sees a list as
18
+ * long as the total; everybody else sees their own beside a number that says how busy it is.
19
+ */
20
+ jobs(): Promise<JobsHeld>;
21
+ /** Refused as a job that is not here when it is not this caller's to read - see `jobs`. */
22
+ job(id: number): Promise<Job>;
23
+ /**
24
+ * The description goes first and the gcode second, which is the shop's own rule: it refuses a job
25
+ * no printer could take before reading a byte, so a hopeless submission costs no upload.
26
+ */
27
+ submit(details: JobDetails, gcode: Blob): Promise<Job>;
28
+ /**
29
+ * What a person made of a finished print. Answers with the job when it is back in the queue, and
30
+ * with nothing when it has left the shop.
31
+ */
32
+ verdict(id: number, verdict: Verdict): Promise<Job | undefined>;
33
+ /**
34
+ * Change your own password, presenting the one you have now.
35
+ *
36
+ * The one this asks for is asked for even though the shop already knows who is asking: a session
37
+ * is a screen somebody walked away from, and a password nobody has to know to change is a password
38
+ * the next person at that screen owns. Every OTHER session this caller holds ends with it.
39
+ */
40
+ changeMyPassword(current: string, password: string): Promise<void>;
41
+ /**
42
+ * What the queued work is waiting for, busiest first - the operator's question rather than the
43
+ * shop's. It counts every job the shop holds, so it is not a caller's own view of the queue.
44
+ *
45
+ * Named a printer, it counts only what that machine could take - which is what an operator
46
+ * standing at one of several wants to know.
47
+ */
48
+ waitingOn(printer?: string): Promise<FilamentDemand[]>;
49
+ printers(): Promise<RegisteredPrinter[]>;
50
+ /**
51
+ * Add a printer, or change what the shop knows about one it already has.
52
+ *
53
+ * The key is what the shop reaches the machine with. Given, it is in force at once - nothing has
54
+ * to be signalled and nothing restarted. Left out, whatever key the shop already had is kept.
55
+ */
56
+ addPrinter(record: PrinterRecord, key?: string): Promise<PrinterAdded>;
57
+ removePrinter(name: string): Promise<void>;
58
+ pause(name: string, reason: string): Promise<RegisteredPrinter>;
59
+ resume(name: string): Promise<RegisteredPrinter>;
60
+ load(name: string, filaments: string[]): Promise<RegisteredPrinter>;
61
+ /** Answers once the shop has agreed to stop, which is before it has. */
62
+ shutDown(): Promise<void>;
63
+ }
package/dist/Shop.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export { HttpShop, NotAuthenticated } from './HttpShop.js';
2
+ export { SHOP_ROUTES } from './routes.js';
3
+ export type { Caller, Role } from './Caller.js';
4
+ export type { BuildVolume, FilamentDemand, Job, JobDetails, JobPhase, JobState, JobsHeld, PrinterOutcome, Verdict } from './Job.js';
5
+ export type { Holding, PrinterApi, PrinterRecord, PrinterStatus, RegisteredPrinter } from './Printer.js';
6
+ export type { PrinterAdded, Shop } from './Shop.js';
@@ -0,0 +1,2 @@
1
+ export { HttpShop, NotAuthenticated } from './HttpShop.js';
2
+ export { SHOP_ROUTES } from './routes.js';
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../../../node_modules/typescript/lib/lib.es5.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../../../node_modules/@types/node/globals.typedarray.d.ts","../../../../../node_modules/@types/node/buffer.buffer.d.ts","../../../../../node_modules/@types/node/globals.d.ts","../../../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../../../node_modules/@types/node/web-globals/events.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/utility.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/client-stats.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/round-robin-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/h2c-client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-call-history.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/snapshot-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cache-interceptor.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../../../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../../../node_modules/@types/node/web-globals/storage.d.ts","../../../../../node_modules/@types/node/web-globals/streams.d.ts","../../../../../node_modules/@types/node/assert.d.ts","../../../../../node_modules/@types/node/assert/strict.d.ts","../../../../../node_modules/@types/node/async_hooks.d.ts","../../../../../node_modules/@types/node/buffer.d.ts","../../../../../node_modules/@types/node/child_process.d.ts","../../../../../node_modules/@types/node/cluster.d.ts","../../../../../node_modules/@types/node/console.d.ts","../../../../../node_modules/@types/node/constants.d.ts","../../../../../node_modules/@types/node/crypto.d.ts","../../../../../node_modules/@types/node/dgram.d.ts","../../../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../../../node_modules/@types/node/dns.d.ts","../../../../../node_modules/@types/node/dns/promises.d.ts","../../../../../node_modules/@types/node/domain.d.ts","../../../../../node_modules/@types/node/events.d.ts","../../../../../node_modules/@types/node/fs.d.ts","../../../../../node_modules/@types/node/fs/promises.d.ts","../../../../../node_modules/@types/node/http.d.ts","../../../../../node_modules/@types/node/http2.d.ts","../../../../../node_modules/@types/node/https.d.ts","../../../../../node_modules/@types/node/inspector.d.ts","../../../../../node_modules/@types/node/inspector.generated.d.ts","../../../../../node_modules/@types/node/module.d.ts","../../../../../node_modules/@types/node/net.d.ts","../../../../../node_modules/@types/node/os.d.ts","../../../../../node_modules/@types/node/path.d.ts","../../../../../node_modules/@types/node/perf_hooks.d.ts","../../../../../node_modules/@types/node/process.d.ts","../../../../../node_modules/@types/node/punycode.d.ts","../../../../../node_modules/@types/node/querystring.d.ts","../../../../../node_modules/@types/node/readline.d.ts","../../../../../node_modules/@types/node/readline/promises.d.ts","../../../../../node_modules/@types/node/repl.d.ts","../../../../../node_modules/@types/node/sea.d.ts","../../../../../node_modules/@types/node/sqlite.d.ts","../../../../../node_modules/@types/node/stream.d.ts","../../../../../node_modules/@types/node/stream/promises.d.ts","../../../../../node_modules/@types/node/stream/consumers.d.ts","../../../../../node_modules/@types/node/stream/web.d.ts","../../../../../node_modules/@types/node/string_decoder.d.ts","../../../../../node_modules/@types/node/test.d.ts","../../../../../node_modules/@types/node/timers.d.ts","../../../../../node_modules/@types/node/timers/promises.d.ts","../../../../../node_modules/@types/node/tls.d.ts","../../../../../node_modules/@types/node/trace_events.d.ts","../../../../../node_modules/@types/node/tty.d.ts","../../../../../node_modules/@types/node/url.d.ts","../../../../../node_modules/@types/node/util.d.ts","../../../../../node_modules/@types/node/v8.d.ts","../../../../../node_modules/@types/node/vm.d.ts","../../../../../node_modules/@types/node/wasi.d.ts","../../../../../node_modules/@types/node/worker_threads.d.ts","../../../../../node_modules/@types/node/zlib.d.ts","../../../../../node_modules/@types/node/index.d.ts","../../../../../node_modules/@types/yargs-parser/index.d.ts","../../../../../node_modules/@types/yargs/index.d.ts","../../../../../node_modules/@types/yargs/index.d.mts","../../../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../../../node_modules/chalk/index.d.ts","../../../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../../../node_modules/@types/istanbul-reports/index.d.ts","../../../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../../../node_modules/@jest/schemas/build/index.d.ts","../../../../../node_modules/@jest/types/build/index.d.ts","../../../../../node_modules/jest-mock/build/index.d.ts","../../../../../node_modules/@types/stack-utils/index.d.ts","../../../../../node_modules/jest-message-util/build/index.d.ts","../../../../../node_modules/@jest/fake-timers/build/index.d.ts","../../../../../node_modules/@jest/environment/build/index.d.ts","../../../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../../../node_modules/pretty-format/build/index.d.ts","../../../../../node_modules/jest-diff/build/index.d.ts","../../../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../../../node_modules/expect/build/index.d.ts","../../../../../node_modules/jest-snapshot/build/index.d.ts","../../../../../node_modules/@jest/expect/build/index.d.ts","../../../../../node_modules/@jest/globals/build/index.d.ts","../../../src/caller.ts","../../../src/job.ts","../../../src/printer.ts","../../../src/shop.ts","../../../src/httpshop.ts","../../../tests/httpshop.test.ts","../../../src/routes.ts","../../../src/shopurl.ts","../../../src/token.ts","../../../src/index.ts","../../../tests/routes.test.ts","../../../tests/token.test.ts","../../../tests/whattheclientsends.test.ts","../../../tests/assumptions/whatfetchdoes.test.ts","../../../src/browser.ts","../../../../../node_modules/@types/jest/node_modules/@jest/expect-utils/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbols/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/any/any.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/any/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/async-iterator/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/literal/literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/literal/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/enum/enum.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/enum/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/function/function.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/function/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/computed/computed.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/computed/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/never/never.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/never/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intersect/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/union.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/union/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/recursive/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unsafe/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/ref/ref.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/ref/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/tuple/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/error/error.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/error/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/string/string.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/string/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/boolean/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/number/number.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/number/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/integer/integer.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/integer/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/bigint/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/template-literal/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/indexed/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/iterator/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/promise/promise.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/promise/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/sets/set.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/sets/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/mapped/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/optional.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/optional/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/awaited/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-entries.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/keyof/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/omit/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/pick/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/null/null.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/null/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/symbol/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/undefined/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/partial.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/partial/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/regexp/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/record/record.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/record/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/required.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/required/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/transform/transform.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/transform/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/compute.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/infer.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/module.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/module/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/not/not.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/not/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/static/static.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/static/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/object/object.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/object/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/helpers/helpers.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/helpers/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/array/array.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/array/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/date/date.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/date/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/uint8array/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/unknown/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/void/void.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/void/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/schema.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/anyschema.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/schema/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/value.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/clone/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/create/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/create/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/argument/argument.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/argument/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/kind.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/value.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/guard/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/patterns/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/format.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/registry/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/composite/composite.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/composite/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/const/const.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/const/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/exclude/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/extends-undefined.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extends/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/extract/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instance-type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/instantiate/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/intrinsic/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/parameters/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/rest/rest.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/rest/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/return-type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/json.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/javascript.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/type/type/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@sinclair/typebox/build/esm/index.d.mts","../../../../../node_modules/@types/jest/node_modules/@jest/schemas/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-matcher-utils/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/jest-mock/build/index.d.ts","../../../../../node_modules/@types/jest/node_modules/expect/build/index.d.ts","../../../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[50,105,122,123,151,155,165,166,169],[50,105,122,123],[50,105,122,123,175,176],[50,105,122,123,165,166,168],[50,105,122,123,165,166,170,177],[50,105,122,123,163],[50,105,122,123,155,158,159,160,162,164],[50,105,122,123,159],[50,105,122,123,161],[50,105,122,123,388,392],[50,105,122,123,386],[50,105,122,123,196,198,202,205,207,209,211,213,215,219,223,227,229,231,233,235,237,239,241,243,245,247,255,260,262,264,266,268,271,273,278,282,286,288,290,292,295,297,299,302,304,308,310,312,314,316,318,320,322,324,326,329,332,334,336,340,342,345,347,349,351,355,361,365,367,369,376,378,380,382,385],[50,105,122,123,196,329],[50,105,122,123,197],[50,105,122,123,335],[50,105,122,123,196,312,316,329],[50,105,122,123,317],[50,105,122,123,196,312,329],[50,105,122,123,201],[50,105,122,123,217,223,227,233,264,316,329],[50,105,122,123,272],[50,105,122,123,246],[50,105,122,123,240],[50,105,122,123,330,331],[50,105,122,123,329],[50,105,122,123,219,223,260,266,278,314,316,329],[50,105,122,123,346],[50,105,122,123,195,329],[50,105,122,123,216],[50,105,122,123,198,205,211,215,219,235,247,288,290,292,314,316,320,322,324,329],[50,105,122,123,348],[50,105,122,123,209,219,235,329],[50,105,122,123,350],[50,105,122,123,196,205,207,271,312,316,329],[50,105,122,123,208],[50,105,122,123,333],[50,105,122,123,327],[50,105,122,123,319],[50,105,122,123,196,211,329],[50,105,122,123,212],[50,105,122,123,236],[50,105,122,123,268,314,329,353],[50,105,122,123,255,329,353],[50,105,122,123,219,227,255,268,312,316,329,352,354],[50,105,122,123,352,353,354],[50,105,122,123,237,329],[50,105,122,123,211,268,314,316,329,358],[50,105,122,123,268,314,329,358],[50,105,122,123,227,268,312,316,329,357,359],[50,105,122,123,356,357,358,359,360],[50,105,122,123,268,314,329,363],[50,105,122,123,255,329,363],[50,105,122,123,219,227,255,268,312,316,329,362,364],[50,105,122,123,362,363,364],[50,105,122,123,214],[50,105,122,123,337,338,339],[50,105,122,123,196,198,202,205,209,211,215,217,219,223,227,229,231,233,235,239,241,243,245,247,255,262,264,268,271,288,290,292,297,299,304,308,310,314,318,320,322,324,326,329,336],[50,105,122,123,196,198,202,205,209,211,215,217,219,223,227,229,231,233,235,237,239,241,243,245,247,255,262,264,268,271,288,290,292,297,299,304,308,310,314,318,320,322,324,326,329,336],[50,105,122,123,219,314,329],[50,105,122,123,315],[50,105,122,123,256,257,258,259],[50,105,122,123,258,268,314,316,329],[50,105,122,123,256,260,268,314,329],[50,105,122,123,211,227,243,245,255,329],[50,105,122,123,217,219,223,227,229,233,235,256,257,259,268,314,316,318,329],[50,105,122,123,366],[50,105,122,123,209,219,329],[50,105,122,123,368],[50,105,122,123,202,205,207,209,215,223,227,235,262,264,271,299,314,318,324,329,336],[50,105,122,123,244],[50,105,122,123,220,221,222],[50,105,122,123,205,219,220,271,329],[50,105,122,123,219,220,329],[50,105,122,123,329,371],[50,105,122,123,370,371,372,373,374,375],[50,105,122,123,211,268,314,316,329,371],[50,105,122,123,211,227,255,268,329,370],[50,105,122,123,261],[50,105,122,123,274,275,276,277],[50,105,122,123,268,275,314,316,329],[50,105,122,123,223,227,229,235,266,314,316,318,329],[50,105,122,123,211,217,227,233,243,268,274,276,316,329],[50,105,122,123,210],[50,105,122,123,199,200,267],[50,105,122,123,196,314,329],[50,105,122,123,199,200,202,205,209,211,213,215,223,227,235,260,262,264,266,271,314,316,318,329],[50,105,122,123,202,205,209,213,215,217,219,223,227,233,235,260,262,271,273,278,282,286,295,299,302,304,314,316,318,329],[50,105,122,123,307],[50,105,122,123,202,205,209,213,215,223,227,229,233,235,262,271,299,312,314,316,318,329],[50,105,122,123,196,305,306,312,314,329],[50,105,122,123,218],[50,105,122,123,309],[50,105,122,123,287],[50,105,122,123,242],[50,105,122,123,313],[50,105,122,123,196,205,271,312,316,329],[50,105,122,123,279,280,281],[50,105,122,123,268,280,314,329],[50,105,122,123,268,280,314,316,329],[50,105,122,123,211,217,223,227,229,233,260,268,279,281,314,316,329],[50,105,122,123,269,270],[50,105,122,123,268,269,314],[50,105,122,123,196,268,270,316,329],[50,105,122,123,377],[50,105,122,123,215,219,235,329],[50,105,122,123,293,294],[50,105,122,123,268,293,314,316,329],[50,105,122,123,205,207,211,217,223,227,229,233,239,241,243,245,247,268,271,288,290,292,294,314,316,329],[50,105,122,123,341],[50,105,122,123,283,284,285],[50,105,122,123,268,284,314,329],[50,105,122,123,268,284,314,316,329],[50,105,122,123,211,217,223,227,229,233,260,268,283,285,314,316,329],[50,105,122,123,263],[50,105,122,123,206],[50,105,122,123,205,271,329],[50,105,122,123,203,204],[50,105,122,123,203,268,314],[50,105,122,123,196,204,268,316,329],[50,105,122,123,298],[50,105,122,123,196,198,211,213,219,227,239,241,243,245,255,297,312,314,316,329],[50,105,122,123,228],[50,105,122,123,232],[50,105,122,123,196,231,312,329],[50,105,122,123,296],[50,105,122,123,343,344],[50,105,122,123,300,301],[50,105,122,123,268,300,314,316,329],[50,105,122,123,205,207,211,217,223,227,229,233,239,241,243,245,247,268,271,288,290,292,301,314,316,329],[50,105,122,123,379],[50,105,122,123,223,227,235,329],[50,105,122,123,381],[50,105,122,123,215,219,329],[50,105,122,123,198,202,209,211,213,215,223,227,229,233,235,239,241,243,245,247,255,262,264,288,290,292,297,299,310,314,318,320,322,324,326,327],[50,105,122,123,327,328],[50,105,122,123,196],[50,105,122,123,265],[50,105,122,123,311],[50,105,122,123,202,205,209,213,215,219,223,227,229,231,233,235,262,264,271,299,304,308,310,314,316,318,329],[50,105,122,123,238],[50,105,122,123,289],[50,105,122,123,195],[50,105,122,123,211,227,237,239,241,243,245,247,248,255],[50,105,122,123,211,227,237,241,248,249,255,316],[50,105,122,123,248,249,250,251,252,253,254],[50,105,122,123,237],[50,105,122,123,237,255],[50,105,122,123,211,227,239,241,243,247,255,316],[50,105,122,123,196,211,219,227,239,241,243,245,247,251,312,316,329],[50,105,122,123,211,227,253,312,316],[50,105,122,123,303],[50,105,122,123,234],[50,105,122,123,383,384],[50,105,122,123,202,209,215,247,262,264,273,290,292,297,320,322,326,329,336,351,367,369,378,382,383],[50,105,122,123,198,205,207,211,213,219,223,227,229,231,233,235,239,241,243,245,255,260,268,271,278,282,286,288,295,299,302,304,308,310,314,318,324,329,347,349,355,361,365,376,380],[50,105,122,123,321],[50,105,122,123,291],[50,105,122,123,224,225,226],[50,105,122,123,205,219,224,271,329],[50,105,122,123,219,224,329],[50,105,122,123,323],[50,105,122,123,230],[50,105,122,123,325],[50,105,122,123,194,390,391],[50,105,122,123,388],[50,105,122,123,160,389],[50,105,122,123,194],[50,105,122,123,387],[50,102,103,105,122,123],[50,104,105,122,123],[105,122,123],[50,105,110,122,123,140],[50,105,106,111,116,122,123,125,137,148],[50,105,106,107,116,122,123,125],[50,105,108,122,123,149],[50,105,109,110,117,122,123,126],[50,105,110,122,123,137,145],[50,105,111,113,116,122,123,125],[50,104,105,112,122,123],[50,105,113,114,122,123],[50,105,115,116,122,123],[50,104,105,116,122,123],[50,105,116,117,118,122,123,137,148],[50,105,116,117,118,122,123,132,137,140],[50,97,105,113,116,119,122,123,125,137,148],[50,105,116,117,119,120,122,123,125,137,145,148],[50,105,119,121,122,123,137,145,148],[48,49,50,51,52,53,54,55,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[50,105,116,122,123],[50,105,122,123,124,148],[50,105,113,116,122,123,125,137],[50,62,65,68,69,105,122,123,148],[50,65,105,122,123,137,148],[50,65,69,105,122,123,148],[50,105,122,123,137],[50,59,105,122,123],[50,63,105,122,123],[50,61,62,65,105,122,123,148],[50,105,122,123,125,145],[50,105,122,123,155],[50,59,105,122,123,155],[50,61,65,105,122,123,125,148],[50,56,57,58,60,64,105,116,122,123,137,148],[50,65,74,82,105,122,123],[50,57,63,105,122,123],[50,65,91,92,105,122,123],[50,57,60,65,105,122,123,140,148,155],[50,65,105,122,123],[50,61,65,105,122,123,148],[50,56,105,122,123],[50,59,60,61,63,64,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92,93,94,95,96,105,122,123],[50,65,84,87,105,113,122,123],[50,65,74,75,76,105,122,123],[50,63,65,75,77,105,122,123],[50,64,105,122,123],[50,57,59,65,105,122,123],[50,65,69,75,77,105,122,123],[50,69,105,122,123],[50,63,65,68,105,122,123,148],[50,57,61,65,74,105,122,123],[50,65,84,105,122,123],[50,77,105,122,123],[50,59,65,91,105,122,123,140,153,155],[50,105,122,123,126],[50,105,122,123,127],[50,104,105,122,123,128],[50,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],[50,105,122,123,130],[50,105,122,123,131],[50,105,116,122,123,132,133],[50,105,122,123,132,134,149,151],[50,105,117,122,123],[50,105,116,122,123,137,138,140],[50,105,122,123,139,140],[50,105,122,123,137,138],[50,105,122,123,140],[50,105,122,123,141],[50,102,105,122,123,137,142,148],[50,105,116,122,123,143,144],[50,105,122,123,143,144],[50,105,110,122,123,125,137,145],[50,105,122,123,146],[50,105,122,123,125,147],[50,105,119,122,123,131,148],[50,105,110,122,123,149],[50,105,122,123,137,150],[50,105,122,123,124,151],[50,105,122,123,152],[50,105,110,122,123],[50,97,105,122,123],[50,105,122,123,153],[50,97,105,116,118,122,123,128,137,140,148,150,151,153],[50,105,122,123,137,154],[50,105,122,123,157],[50,105,122,123,156],[50,105,122,123,171,174],[50,105,122,123,172],[50,105,122,123,160,173],[50,105,122,123,165,167],[50,105,122,123,165,172,175],[50,105,122,123,164],[50,105,122,123,179,180,181,182,183,185],[50,105,122,123,179,180,181,182],[50,105,122,123,179,180,181,182,183,185,186,187],[50,105,122,123,180],[50,105,122,123,179,180,181],[50,105,117,122,123,126,127],[50,105,122,123,178],[50,105,122,123,178,183],[50,105,122,123,178,188],[50,105,118,122,123,126,127,178,186,187],[50,105,122,123,178,183,188]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"24371e69a38fc33e268d4a8716dbcda430d6c2c414a99ff9669239c4b8f40dea","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"c63b9ada8c72f95aac5db92aea07e5e87ec810353cdf63b2d78f49a58662cf6c","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"1cbdcdef62bf42688e5d825898c3a59458466c48ad8a4ef3f88d8a1cd04310d6","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"67e435fa530778903f5525904e6645b7368eb5ac622055febd19bb399e328ccd","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"5b22bf96be06fca1e134e3a85351ffe7aa2edf0c9a5bd175b7239ee48186dbf5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"5b48cc670da1dfe926036deaf349085caf822def460a6d50de23f1cc12a5f8cd","impliedFormat":1},{"version":"418f34087d52d001e2688a6282a5de9bf583ff771ed5546af0ae36e4f60a458b","affectsGlobalScope":true,"impliedFormat":1},{"version":"036c9a03b01281f99f8251fdc7088e894566be44b3f139a9d48501a978b611df","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1569ad5969ae0de6ad0bdfaaab0dabcd8878bc3147ab096206eed2019bb84e7f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"42a350ce4f6f291198dc89833afcc4fd078248b4e1fdc9d05c846c66a670f710","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"b03754211d839cdc48979996525a32eb62130682c2f9801dfc2f25533ce7238d","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"f4d99ac08c4097a3cc202bec2c7198c19dcdd80d4ec6c62d1356b10d03b119d5","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ca77e83162eccec633513723d178d4203bdd5465297267696be08013bab0aa1d","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"f61c153d5abbe4381a1fba0d41be0babdd5de51c626ee7ff14cede14dedc33f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7803171d745ab18e77f16bf82e742268ff72b7f7382ab191e4277527580c2d89","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e9ba65cd3d6d194bdda7343f9f2917f7144ead96a924ca58d1a14919992dc20","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"0b0dfb2d3e8420ead06f6a11acfb02ddcec42257e6ce391993e895ba0af86de4","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"dd5115b329c19c4385af13eda13e3ab03355e711c3f313173fd54ed7d08cfd39","impliedFormat":99},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"e00243d23c495ca2170c9b9e20b5c92331239100b51efdc2b4401cdad859bbef","impliedFormat":1},{"version":"41ea7fd137518560e0d2af581edadadd236b685b5e2f80f083127a28e01cf0ac","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"6fa5d56af71f07dc276aae3f6f30807a9cccf758517fb39742af72e963553d80","impliedFormat":1},{"version":"819dddfec57391f8458929ca8e4377f030d42107ff6ec431e620b70b0695d530","impliedFormat":1},{"version":"701bdef1f4a13932f64c4ce89537f2c66301eb46daf30a16a436c991df568686","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"ac5f598a09eed39b957ae3d909b88126f3faf605bd4589c19e9ae85d23ef71e3","impliedFormat":1},{"version":"92abba98a71c0244a6bcdd3ad4d2e04f1d0a8bcae57d2bb865bf53d1ac86e3d0","impliedFormat":1},{"version":"d2afa0d86bc6f2e72c1cf2ecb2372bf1b0f002493706a81f2b9a3ee4f944e219","impliedFormat":1},{"version":"a4c6c1d6362be3898f007d493d5dd4079be1b2e5b9b0235d7fb1603776f70c33","signature":"aa5bf6559b83d7ea1ca6e9c25d5023889bc675790c0394618d6737b47034c88d"},{"version":"3faab4c171e9087c883642890aca9eebb7a6b7cd8c4e649a74ad813fc63b8064","signature":"c66b21484c525adab03e4508bb41ec6e85c1cfddabdfeb8c8830111a3ca5a340"},{"version":"962484830ac14dd39f731f6662179c07e91079bfa7c51c8e8161155100e9d2ec","signature":"203ea02e5e63347dd75444723b5f7afe01279a2c88d5a3f913646fb9b078e437"},{"version":"fdf53ccd232a5bf55c40b5bf84a18bdeb066c3e812706c59d3185a6309ba301b","signature":"0a99e716dc19b41023dfc452c5dc0f113431e007fef5676b87ed6d0ba3e73ae6"},{"version":"a8527fc329ec9722c7a6f63700dbf381ea5bb0caab11afee3e248c1589e61ba0","signature":"386443026576ffd3abee69067d3bfb9a7431ecef70db5423dd9c63960514574f"},"a4763c81e3ddb14c7881f8749520bceead4644b2afa094c246878ad6b20e40eb",{"version":"76ad5b471368d0da9777645c5985f026a20234f07d6d10c1df15cd7253d58e7a","signature":"a55401e3f4a54ef0f1028385f957fbc8ce99c5e270a31e61b4a7579ef3f9fea5"},{"version":"d70b99ae6c47c24d616ce785a9774b993ab450df2946870b2690121e75d0fd55","signature":"bdaedc05ac0bdb3601d0ae0283bc1f26819dfd508cf33d19126fd61228742157"},{"version":"cdd7abc16df3802139af0a41294aebcd8f48aaf2ea385f774ba88b5b20d2ad16","signature":"d0201f51a5efd0e8b4d39203162de7d4296aea8557ab6c11810d8c8ef970a8cf"},"61c73df1af8c14917cfb2b1b6201d64799bb9dcc0d36783d4511a3763a6615fd",{"version":"1eae6c77db8b8d518b1f9fd014c8042cf58f4cff6cd435cd7fb41e9893f8ac78","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"1297f624f2e649bdf426471eb84defe14d988772c2d862a8bd7296d077485740","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e802ea05dd654fc639fa7867aac7def50a52a46e55bcceb0f75427bca03c6382","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"619cd7789fdbfaaa25555de83d6323dcbc7b8ab0bab43d38a86b9b4428c2fe3f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"4e23d76a539f0d4774adcaf10bc144db0fe191910a225ac932d4527a4c36aa09",{"version":"c6ff85f84b43c93a20b42b3c494ecd7ad05630656e766063060c83cb9b2242a9","impliedFormat":1},{"version":"b104e2da53231a529373174880dc0abfbc80184bb473b6bf2a9a0746bebb663d","impliedFormat":99},{"version":"3d4bb4d84af5f0b348f01c85537da1c7afabc174e48806c8b20901377c57b8e4","impliedFormat":99},{"version":"a2500b15294325d9784a342145d16ef13d9efb1c3c6cb4d89934b2c0d521b4ab","impliedFormat":99},{"version":"79d5c409e84764fabdd276976a31928576dcf9aea37be3b5a81f74943f01f3ff","impliedFormat":99},{"version":"8ea020ea63ecc981b9318fc532323e31270c911a7ade4ba74ab902fcf8281c45","impliedFormat":99},{"version":"c81e1a9b03e4de1225b33ac84aaf50a876837057828e0806d025daf919bf2d51","impliedFormat":99},{"version":"bb7264d8bd6152524f2ef5dae5c260ae60d459bf406202258bd0ce57c79e5a6d","impliedFormat":99},{"version":"fb66165c4976bc21a4fde14101e36c43d46f907489b7b6a5f2a2679108335d4a","impliedFormat":99},{"version":"628c2e0a0b61be3e44f296083e6af9b5a9b6881037dd43e7685ee473930a4404","impliedFormat":99},{"version":"4776f1e810184f538d55c5da92da77f491999054a1a1ee69a2d995ab2e8d1bc0","impliedFormat":99},{"version":"11544c4e626eab113df9432e97a371693c98c17ae4291d2ad425af5ef00e580b","impliedFormat":99},{"version":"e1847b81166d25f29213d37115253c5b82ec9ee78f19037592aa173e017636d5","impliedFormat":99},{"version":"fe0bd60f36509711c4a69c0e00c0111f5ecdc685e6c1a2ae99bd4d56c76c07fc","impliedFormat":99},{"version":"b8f3f4ee9aae88a9cec9797d166209eb2a7e4beb8a15e0fc3c8b90c9682c337d","impliedFormat":99},{"version":"ea3c4f5121fe2e86101c155ebe60b435c729027ae50025b2a4e1d12a476002ae","impliedFormat":99},{"version":"372db10bea0dbe1f8588f82b339152b11847e6a4535d57310292660c8a9acfc5","impliedFormat":99},{"version":"6f9fba6349c16eed21d139d5562295e8d5aafa5abe6e8ebcde43615a80c69ac1","impliedFormat":99},{"version":"1474533e27d0e3e45a417ea153d4612f0adbff055f244a29606a1fae6db56cda","impliedFormat":99},{"version":"c7fd8a79d0495955d55bfea34bbdb85235b0f27b417a81afc395655ef43d091d","impliedFormat":99},{"version":"987405949bfafbb1c93d976c3352fe33bfb85303a79fc5d9588b681e4af6c3b3","impliedFormat":99},{"version":"867bc1f5a168fd86d12d828dfafd77c557f13b4326588615b19e301f6856f70c","impliedFormat":99},{"version":"6beddab08d635b4c16409a748dcd8de38a8e444a501b8e79d89f458ae88579d1","impliedFormat":99},{"version":"1dea5c7bf28569228ffcc83e69e1c759e7f0133c232708e09cfa4d7ed3ec7079","impliedFormat":99},{"version":"6114545678bb75e581982c990597ca3ba7eeef185256a14c906edfc949db2cd1","impliedFormat":99},{"version":"5c8625f8dbbd94ab6ca171d621049c810cce4fce6ec1fd1c24c331d9858dce17","impliedFormat":99},{"version":"af36e5f207299ba2013f981dffacd4a04cdce2dd4bd255fff084e7257bf8b947","impliedFormat":99},{"version":"c69c720b733cdaa3b4542f4c1206d9f0fcf3696f87a6e88adb15db6882fbcd69","impliedFormat":99},{"version":"9c37e66916cbbe7d96301934b665ec712679c3cb99081ccaae4034b987533a59","impliedFormat":99},{"version":"2e1a163ab5b5c2640d7f5a100446bbcaeda953a06439c901b2ae307f7088dc30","impliedFormat":99},{"version":"f0b3406d2bc2c262f218c42a125832e026997278a890ef3549fa49e62177ce86","impliedFormat":99},{"version":"756cf223ca25eb36c413b2a286fa108f19a5ac39dc6d65f2c590dc118f6150df","impliedFormat":99},{"version":"70ce03da8740ca786a1a78b8a61394ecf812dd1acf2564d0ce6be5caf29e58d9","impliedFormat":99},{"version":"e0f5707d91bb950edb6338e83dd31b6902b6620018f6aa5fd0f504c2b0ea61f5","impliedFormat":99},{"version":"0dc7ae20eab8097b0c7a48b5833f6329e976f88af26055cdae6337141ff2c12e","impliedFormat":99},{"version":"76b6db79c0f5b326ff98b15829505efd25d36ce436b47fe59781ac9aec0d7f1b","impliedFormat":99},{"version":"786f3f186af874ea3e34c2aeef56a0beab90926350f3375781c0a3aa844cd76e","impliedFormat":99},{"version":"63dbc8fa1dcbfb8af6c48f004a1d31988f42af171596c5cca57e4c9d5000d291","impliedFormat":99},{"version":"aa235b26568b02c10d74007f577e0fa21a266745029f912e4fba2c38705b3abe","impliedFormat":99},{"version":"3d6d570b5f36cf08d9ad8d93db7ddc90fa7ccc0c177de2e9948bb23cde805d32","impliedFormat":99},{"version":"9a60faaa0d582db70f85a94a3439bd83720a9468928b76b4db561a1a0137fa90","impliedFormat":99},{"version":"627e2ac450dcd71bdd8c1614b5d3a02b214ad92a1621ebeb2642dffb9be93715","impliedFormat":99},{"version":"813514ef625cb8fc3befeec97afddfb3b80b80ced859959339d99f3ad538d8fe","impliedFormat":99},{"version":"624f8a7a76f26b9b0af9524e6b7fa50f492655ab7489c3f5f0ddd2de5461b0c3","impliedFormat":99},{"version":"d6b6fa535b18062680e96b2f9336e301312a2f7bdaeb47c4a5b3114c3de0c08b","impliedFormat":99},{"version":"818e8f95d3851073e92bcad7815367dd8337863aaf50d79e703ac479cca0b6a4","impliedFormat":99},{"version":"29b716ff24d0db64060c9a90287f9de2863adf0ef1efef71dbaba33ebc20b390","impliedFormat":99},{"version":"2530c36527a988debd39fed6504d8c51a3e0f356aaf2d270edd492f4223bdeff","impliedFormat":99},{"version":"2553cfd0ec0164f3ea228c5badd1ba78607d034fc2dec96c781026a28095204b","impliedFormat":99},{"version":"6e943693dbc91aa2c6c520e7814316469c8482d5d93df51178d8ded531bb29ee","impliedFormat":99},{"version":"e74e1249b69d9f49a6d9bfa5305f2a9f501e18de6ab0829ab342abf6d55d958b","impliedFormat":99},{"version":"16f60d6924a9e0b4b9961e42b5e586b28ffd57cdfa236ae4408f7bed9855a816","impliedFormat":99},{"version":"493c2d42f1b6cfe3b13358ff3085b90fa9a65d4858ea4d02d43772c0795006ec","impliedFormat":99},{"version":"3702c7cbcd937d7b96e5376fe562fd77b4598fe93c7595ee696ebbfefddac70f","impliedFormat":99},{"version":"848621f6b65b3963f86c51c8b533aea13eadb045da52515e6e1407dea19b8457","impliedFormat":99},{"version":"c15b679c261ce17551e17a40a42934aeba007580357f1a286c79e8e091ee3a76","impliedFormat":99},{"version":"156108cedad653a6277b1cb292b18017195881f5fe837fb7f9678642da8fa8f2","impliedFormat":99},{"version":"0a0bb42c33e9faf63e0b49a429e60533ab392f4f02528732ecbd62cfc2d54c10","impliedFormat":99},{"version":"70fa95cd7cb511e55c9262246de1f35f3966c50e8795a147a93c538db824cdc8","impliedFormat":99},{"version":"bc28d8cec56b5f91c8a2ec131444744b13f63c53ce670cb31d4dffdfc246ba34","impliedFormat":99},{"version":"7bd87c0667376e7d6325ada642ec29bf28e940cb146d21d270cac46b127e5313","impliedFormat":99},{"version":"0318969deede7190dd3567433a24133f709874c5414713aac8b706a5cb0fe347","impliedFormat":99},{"version":"3770586d5263348c664379f748428e6f17e275638f8620a60490548d1fada8b4","impliedFormat":99},{"version":"ff65e6f720ba4bf3da5815ca1c2e0df2ece2911579f307c72f320d692410e03d","impliedFormat":99},{"version":"edb4f17f49580ebcec71e1b7217ad1139a52c575e83f4f126db58438a549b6df","impliedFormat":99},{"version":"353c0cbb6e39e73e12c605f010fddc912c8212158ee0c49a6b2e16ede22cdaab","impliedFormat":99},{"version":"e125fdbea060b339306c30c33597b3c677e00c9e78cd4bf9a15b3fb9474ebb5d","impliedFormat":99},{"version":"ee141f547382d979d56c3b059fc12b01a88b7700d96f085e74268bc79f48c40a","impliedFormat":99},{"version":"1d64132735556e2a1823044b321c929ad4ede45b81f3e04e0e23cf76f4cbf638","impliedFormat":99},{"version":"8b4a3550a3cac035fe928701bc046f5fac76cca32c7851376424b37312f4b4ca","impliedFormat":99},{"version":"5fd7f9b36f48d6308feba95d98817496274be1939a9faa5cd9ed0f8adf3adf3a","impliedFormat":99},{"version":"15a8f79b1557978d752c0be488ee5a70daa389638d79570507a3d4cfc620d49d","impliedFormat":99},{"version":"d4c14ea7d76619ef4244e2c220c2caeec78d10f28e1490eeac89df7d2556b79f","impliedFormat":99},{"version":"8096207a00346207d9baf7bc8f436ef45a20818bf306236a4061d6ccc45b0372","impliedFormat":99},{"version":"040f2531989793c4846be366c100455789834ba420dfd6f36464fe73b68e35b6","impliedFormat":99},{"version":"c5c7020a1d11b7129eb8ddffb7087f59c83161a3792b3560dcd43e7528780ab0","impliedFormat":99},{"version":"d1f97ea020060753089059e9b6de1ab05be4cb73649b595c475e2ec197cbce0f","impliedFormat":99},{"version":"b5ddca6fd676daf45113412aa2b8242b8ee2588e99d68c231ab7cd3d88b392fa","impliedFormat":99},{"version":"77404ec69978995e3278f4a2d42940acbf221da672ae9aba95ffa485d0611859","impliedFormat":99},{"version":"4e6672fb142798b69bcb8d6cd5cc2ec9628dbea9744840ee3599b3dcd7b74b09","impliedFormat":99},{"version":"609653f5b74ef61422271a28dea232207e7ab8ad1446de2d57922e3678160f01","impliedFormat":99},{"version":"9f96251a94fbff4038b464ee2d99614bca48e086e1731ae7a2b5b334826d3a86","impliedFormat":99},{"version":"cacbb7f3e679bdea680c6c609f4403574a5de8b66167b8867967083a40821e2a","impliedFormat":99},{"version":"ee4cf97e8bad27c9e13a17a9f9cbd86b32e9fbc969a5c3f479dafb219209848c","impliedFormat":99},{"version":"3a4e35b6e99ed398e77583ffc17f8774cb4253f8796c0e04ce07c26636fed4a9","impliedFormat":99},{"version":"08d323cb848564baef1ecbe29df14f7ad84e5b2eaf2e02ea8cb422f069dcb2fa","impliedFormat":99},{"version":"a05b53646fa669b87d8b97c1fb7c0183d771680fdd1276b12e68bed4e84cf556","impliedFormat":99},{"version":"c3b9c02a31b36dd3a4067f420316c550f93d463e46b2704391100428e145fd7f","impliedFormat":99},{"version":"b2a4d01fcf005530c3f8689ac0197e5fd6b75eb031e73ca39e5a27d41793a5d8","impliedFormat":99},{"version":"e99d9167596f997dd2da0de0751a9f0e2f4100f07bddf049378719191aee87f6","impliedFormat":99},{"version":"40cc853264e24e0578580194c76e25628acdd1111b54ec8abf59b834c4942839","impliedFormat":99},{"version":"403971c465292dedc8dff308f430c6b69ec5e19ea98d650dae40c70f2399dc14","impliedFormat":99},{"version":"fd3774aa27a30b17935ad360d34570820b26ec70fa5fcfd44c7e884247354d37","impliedFormat":99},{"version":"7b149b38e54fe0149fe500c5d5a049654ce17b1705f6a1f72dd50d84c6a678b9","impliedFormat":99},{"version":"3eb76327823b6288eb4ed4648ebf4e75cf47c6fbc466ed920706b801399f7dc3","impliedFormat":99},{"version":"c6a219d0d39552594a4cc75970768004f99684f28890fc36a42b853af04997b7","impliedFormat":99},{"version":"2110d74b178b022ca8c5ae8dcc46e759c34cf3b7e61cb2f8891fd8d24cb614ef","impliedFormat":99},{"version":"38f5e025404a3108f5bb41e52cead694a86d16ad0005e0ef7718a2a31e959d1e","impliedFormat":99},{"version":"8db133d270ebb1ba3fa8e2c4ab48df2cc79cb03a705d47ca9f959b0756113d3d","impliedFormat":99},{"version":"fc9294185089a62f8287130bc100fa5ab11f3e6af8874127bbdf7600f19913ee","impliedFormat":99},{"version":"f06e5783d10123b74b14e141426a80234b9d6e5ad94bfc4850ea912719f4987c","impliedFormat":99},{"version":"de9466be4b561ad0079ac95ca7445c99fdf45ef115a93af8e2e933194b3cdf4c","impliedFormat":99},{"version":"0c1eed961c15e1242389b0497628709f59d7afd50d5a1955daa10b5bd3b68fc2","impliedFormat":99},{"version":"5e07a9f7f130e5404c202bf7b0625a624c9d266b980576f5d62608ef21d96eab","impliedFormat":99},{"version":"2f97d5063ab69bf32d6417d71765fc154dc6ff7c16700db7c4af5341a965c277","impliedFormat":99},{"version":"a8a9459dd76ef5eeef768da4ce466c5539d73b26334131bd1dd6cbd74ce48fa2","impliedFormat":99},{"version":"123ff203ffba727213e5095b9a59091cdbc9d1d94bae0d6adb98060ef410016c","impliedFormat":99},{"version":"9e4d81dd52d5a8b6c159c0b2f2b5fbe2566f12fcc81f7ba7ebb46ca604657b45","impliedFormat":99},{"version":"9ee245e7c6aa2d81ee0d7f30ff6897334842c469b0e20da24b3cddc6f635cc06","impliedFormat":99},{"version":"e7d5132674ddcd01673b0517eebc44c17f478126284c3eabd0a552514cb992bb","impliedFormat":99},{"version":"a820710a917f66fa88a27564465a033c393e1322a61eb581d1f20e0680b498f1","impliedFormat":99},{"version":"19086752f80202e6a993e2e45c0e7fc7c7fc4315c4805f3464625f54d919fa2e","impliedFormat":99},{"version":"141aebe2ee4fecd417d44cf0dabf6b80592c43164e1fbd9bfaf03a4ec377c18e","impliedFormat":99},{"version":"72c35a5291e2e913387583717521a25d15f1e77d889191440dc855c7e821b451","impliedFormat":99},{"version":"ec1c67b32d477ceeebf18bdeb364646d6572e9dd63bb736f461d7ea8510aca4f","impliedFormat":99},{"version":"fb555843022b96141c2bfaf9adcc3e5e5c2d3f10e2bcbd1b2b666bd701cf9303","impliedFormat":99},{"version":"f851083fc20ecc00ff8aaf91ba9584e924385768940654518705423822de09e8","impliedFormat":99},{"version":"c8d53cdb22eedf9fc0c8e41a1d9a147d7ad8997ed1e306f1216ed4e8daedb6b3","impliedFormat":99},{"version":"6c052f137bab4ba9ed6fd76f88a8d00484df9d5cb921614bb4abe60f51970447","impliedFormat":99},{"version":"e182c297b81a8cb2614ebf5d5d29500987deb641ea310802754d2fec3ef3ff00","impliedFormat":99},{"version":"7d5c2df0c3706f45b77970232aa3a38952561311ccc8fcb7591e1b7a469ad761","impliedFormat":99},{"version":"2c41502b030205006ea3849c83063c4327342fbf925d8ed93b18309428fdd832","impliedFormat":99},{"version":"d12eecede214f8807a719178d7d7e2fc32f227d4705d123c3f45d8a3b5765f38","impliedFormat":99},{"version":"c8893abd114f341b860622b92c9ffc8c9eb9f21f6541bd3cbc9a4aa9b1097e42","impliedFormat":99},{"version":"825674da70d892b7e32c53f844c5dfce5b15ea67ceda4768f752eed2f02d8077","impliedFormat":99},{"version":"2c676d27ef1afbc8f8e514bb46f38550adf177ae9b0102951111116fa7ea2e10","impliedFormat":99},{"version":"a6072f5111ea2058cb4d592a4ee241f88b198498340d9ad036499184f7798ae2","impliedFormat":99},{"version":"ab87c99f96d9b1bf93684b114b27191944fef9a164476f2c6c052b93eaac0a4f","impliedFormat":99},{"version":"13e48eaca1087e1268f172607ae2f39c72c831a482cab597076c6073c97a15e7","impliedFormat":99},{"version":"19597dbe4500c782a4252755510be8324451847354cd8e204079ae81ab8d0ef6","impliedFormat":99},{"version":"f7d487e5f0104f0737951510ea361bc919f5b5f3ebc51807f81ce54934a3556f","impliedFormat":99},{"version":"efa8c5897e0239017e5b53e3f465d106b00d01ee94c9ead378a33284a2998356","impliedFormat":99},{"version":"fe3c53940b26832930246d4c39d6e507c26a86027817882702cf03bff314fa1d","impliedFormat":99},{"version":"53ee33b91d4dc2787eccebdbd396291e063db1405514bb3ab446e1ca3fd81a90","impliedFormat":99},{"version":"c4a97da118b4e6dde7c1daa93c4da17f0c4eedece638fc6dcc84f4eb1d370808","impliedFormat":99},{"version":"71666363fbdb0946bfc38a8056c6010060d1a526c0584145a9560151c6962b4f","impliedFormat":99},{"version":"1326f3630d26716257e09424f33074a945940afd64f2482e2bbc885258fca6bb","impliedFormat":99},{"version":"cc2eb5b23140bbceadf000ef2b71d27ac011d1c325b0fc5ecd42a3221db5fb2e","impliedFormat":99},{"version":"d04f5f3e90755ed40b25ed4c6095b6ad13fc9ce98b34a69c8da5ed38e2dbab5a","impliedFormat":99},{"version":"280b04a2238c0636dad2f25bbbbac18cf7bb933c80e8ec0a44a1d6a9f9d69537","impliedFormat":99},{"version":"0e9a2d784877b62ad97ed31816b1f9992563fdda58380cd696e796022a46bfdf","impliedFormat":99},{"version":"1b1411e7a3729bc632d8c0a4d265de9c6cbba4dc36d679c26dad87507faedee3","impliedFormat":99},{"version":"c478cfb0a2474672343b932ea69da64005bbfc23af5e661b907b0df8eb87bcb7","impliedFormat":99},{"version":"1a7bff494148b6e66642db236832784b8b2c9f5ad9bff82de14bcdb863dadcd9","impliedFormat":99},{"version":"65e6ad2d939dd38d03b157450ba887d2e9c7fd0f8f9d3008c0d1e59a0d8a73b4","impliedFormat":99},{"version":"f72b400dbf8f27adbda4c39a673884cb05daf8e0a1d8152eec2480f5700db36c","impliedFormat":99},{"version":"347f6fe4308288802eb123596ad9caf06755e80cfc7f79bbe56f4141a8ee4c50","impliedFormat":99},{"version":"5f5baa59149d3d6d6cef2c09d46bb4d19beb10d6bee8c05b7850c33535b3c438","impliedFormat":99},{"version":"a8f0c99380c9e91a73ecfc0a8582fbdefde3a1351e748079dc8c0439ea97b6db","impliedFormat":99},{"version":"be02e3c3cb4e187fd252e7ae12f6383f274e82288c8772bb0daf1a4e4af571ad","impliedFormat":99},{"version":"82ca40fb541799273571b011cd9de6ee9b577ef68acc8408135504ae69365b74","impliedFormat":99},{"version":"e671e3fc9b6b2290338352606f6c92e6ecf1a56459c3f885a11080301ca7f8de","impliedFormat":99},{"version":"a2e4b90260194318b1fa1e6b0554d257a0862c10e982c8907d30d1e7f3d463af","impliedFormat":99},{"version":"5559ab4aa1ba9fac7225398231a179d63a4c4dccd982a17f09404b536980dae8","impliedFormat":99},{"version":"2d7b9e1626f44684252d826a8b35770b77ce7c322734a5d3236b629a301efdcf","impliedFormat":99},{"version":"5b8dafbb90924201f655931d429a4eceb055f11c836a6e9cbc7c3aecf735912d","impliedFormat":99},{"version":"0b9be1f90e5e154b61924a28ed2de133fd1115b79c682b1e3988ac810674a5c4","impliedFormat":99},{"version":"7a9477ba5fc17786ee74340780083f39f437904229a0cd57fc9a468fd6567eb8","impliedFormat":99},{"version":"3da1dd252145e279f23d85294399ed2120bf8124ed574d34354a0a313c8554b6","impliedFormat":99},{"version":"e5c4080de46b1a486e25a54ddbb6b859312359f9967a7dc3c9d5cf4676378201","impliedFormat":99},{"version":"cfe1cdf673d2db391fd1a1f123e0e69c7ca06c31d9ac8b35460130c5817c8d29","impliedFormat":99},{"version":"b9701f688042f44529f99fd312c49fea853e66538c19cfcbb9ef024fdb5470cc","impliedFormat":99},{"version":"6daa62c5836cc12561d12220d385a4a243a4a5a89afd6f2e48009a8dd8f0ad83","impliedFormat":99},{"version":"c74550758053cf21f7fea90c7f84fa66c27c5f5ac1eca77ce6c2877dbfdec4d1","impliedFormat":99},{"version":"bd8310114a3a5283faac25bfbfc0d75b685a3a3e0d827ee35d166286bdd4f82e","impliedFormat":99},{"version":"1459ae97d13aeb6e457ccffac1fbb5c5b6d469339729d9ef8aeb8f0355e1e2c9","impliedFormat":99},{"version":"1bf03857edaebf4beba27459edf97f9407467dc5c30195425cb8a5d5a573ea52","impliedFormat":99},{"version":"f6b4833d66c12c9106a3299e520ed46f9a4c443cefc22c993315c4bb97a28db1","impliedFormat":99},{"version":"746c02f8b99bd90c4d135badaab575c6cfce0d030528cf90190c8914b0934ea3","impliedFormat":99},{"version":"a858ba8df5e703977dee467b10af084398919e99c9e42559180e75953a1f6ef6","impliedFormat":99},{"version":"d2dcd6105c195d0409abd475b41363789c63ae633282f04465e291a68a151685","impliedFormat":99},{"version":"0b569ed836f0431c2efaef9b6017e8b700a7fed319866d7667f1189957275045","impliedFormat":99},{"version":"9371612fd8638d7f6a249a14843132e7adb0b5c84edba9ed7905e835b644c013","impliedFormat":99},{"version":"0c72189b6ec67331476a36ec70a2b8ce6468dc4db5d3eb52deb9fefbd6981ebb","impliedFormat":99},{"version":"af8dd6bb70bfcb2c6b2de0d42240c2c952b9040af259a287e78eaf883ef1ce0d","impliedFormat":99},{"version":"7e4a27fd17dbb256314c2513784236f2ae2023573e83d0e65ebddfda336701db","impliedFormat":99},{"version":"131ecac1c7c961041df80a1dc353223af4e658d56ba1516317f79bd5400cffeb","impliedFormat":99},{"version":"f3a55347fb874828e442c2916716d56552ac3478204c29c0d47e698c00eb5d28","impliedFormat":99},{"version":"49ebbdfe7427d784ccdc8325bdecc8dda1719a7881086f14751879b4f8d70c21","impliedFormat":99},{"version":"c1692845412646f17177eb62feb9588c8b5d5013602383f02ae9d38f3915020c","impliedFormat":99},{"version":"b1b440e6c973d920935591a3d360d79090b8cf58947c0230259225b02cf98a83","impliedFormat":99},{"version":"defc2ae12099f46649d12aa4872ce23ba43fba275920c00c398487eaf091bbae","impliedFormat":99},{"version":"620390fbef44884902e4911e7473531e9be4db37eeef2da52a34449d456b4617","impliedFormat":99},{"version":"e60440cbd3ec916bc5f25ada3a6c174619745c38bfca58d3554f7d62905dc376","impliedFormat":99},{"version":"86388eda63dcb65b4982786eec9f80c3ef21ca9fb2808ff58634e712f1f39a27","impliedFormat":99},{"version":"022cd098956e78c9644e4b3ad1fe460fac6914ca9349d6213f518386baf7c96b","impliedFormat":99},{"version":"dfc67e73325643e92f71f94276b5fb3be09c59a1eeee022e76c61ae99f3eda4b","impliedFormat":99},{"version":"8c3d6c9abaa0b383f43cac0c227f063dc4018d851a14b6c2142745a78553c426","impliedFormat":99},{"version":"ee551dc83df0963c1ee03dc32ce36d83b3db9793f50b1686dc57ec2bbffc98af","impliedFormat":99},{"version":"968832c4ffd675a0883e3d208b039f205e881ae0489cc13060274cf12e0e4370","impliedFormat":99},{"version":"c593ca754961cfd13820add8b34da35a114cda7215d214e4177a1b0e1a7f3377","impliedFormat":99},{"version":"ed88c51aa3b33bb2b6a8f2434c34f125946ba7b91ed36973169813fdad57f1ec","impliedFormat":99},{"version":"a9ea477d5607129269848510c2af8bcfd8e262ebfbd6cd33a6c451f0cd8f5257","impliedFormat":99},{"version":"c9b868ce3c992a9f81fa8aa3d7839356d677c3f03c0b4584dce4ecd710ee601b","impliedFormat":1},{"version":"68f7865785fea7b6822ee8b9975b7934f6f6c3a908393ffca96ce3d0f0bc8122","impliedFormat":1},{"version":"3bf23090b94bda18a619623d2652b48ea904e26304267b10fcbdb85e032b7351","impliedFormat":1},{"version":"d4d6aab35ead2fbdafc31c9b0cb8a5b5939c7d24c63356c979757194eaa282cf","impliedFormat":1},{"version":"41e505053447b27c132cab048c148ece25b79d688e7f221e915994c4151dfeec","impliedFormat":1},{"version":"6a2c60605a0cf6b80e7e563159c55ea3c25d32871a9e4c3ec8ec231c2cba5e80","impliedFormat":1},{"version":"3e2f739bdfb6b194ae2af13316b4c5bb18b3fe81ac340288675f92ba2061b370","affectsGlobalScope":true,"impliedFormat":1}],"root":[[179,193]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":99,"outDir":"../..","rootDir":"../../../..","skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[170,1],[171,2],[177,3],[169,4],[178,5],[164,6],[165,7],[163,2],[159,2],[161,8],[162,9],[393,10],[194,2],[387,11],[386,12],[197,13],[198,14],[335,13],[336,15],[317,16],[318,17],[201,18],[202,19],[272,20],[273,21],[246,13],[247,22],[240,13],[241,23],[332,24],[330,25],[331,2],[346,26],[347,27],[216,28],[217,29],[348,30],[349,31],[350,32],[351,33],[208,34],[209,35],[334,36],[333,37],[319,13],[320,38],[212,39],[213,40],[236,2],[237,41],[354,42],[352,43],[353,44],[355,45],[356,46],[359,47],[357,48],[360,25],[358,49],[361,50],[364,51],[362,52],[363,53],[365,54],[214,34],[215,55],[340,56],[337,57],[338,58],[339,2],[315,59],[316,60],[260,61],[259,62],[257,63],[256,64],[258,65],[367,66],[366,67],[369,68],[368,69],[245,70],[244,13],[223,71],[221,72],[220,18],[222,73],[372,74],[376,75],[370,76],[371,77],[373,74],[374,74],[375,74],[262,78],[261,18],[278,79],[276,80],[277,25],[274,81],[275,82],[211,83],[210,13],[268,84],[199,13],[200,85],[267,86],[305,87],[308,88],[306,89],[307,90],[219,91],[218,13],[310,92],[309,18],[288,93],[287,13],[243,94],[242,13],[314,95],[313,96],[282,97],[281,98],[279,99],[280,100],[271,101],[270,102],[269,103],[378,104],[377,105],[295,106],[294,107],[293,108],[342,109],[341,2],[286,110],[285,111],[283,112],[284,113],[264,114],[263,18],[207,115],[206,116],[205,117],[204,118],[203,119],[299,120],[298,121],[229,122],[228,18],[233,123],[232,124],[297,125],[296,13],[343,2],[345,126],[344,2],[302,127],[301,128],[300,129],[380,130],[379,131],[382,132],[381,133],[328,134],[329,135],[327,136],[266,137],[265,2],[312,138],[311,139],[239,140],[238,13],[290,141],[289,13],[196,142],[195,2],[249,143],[250,144],[255,145],[248,146],[252,147],[251,148],[253,149],[254,150],[304,151],[303,18],[235,152],[234,18],[385,153],[384,154],[383,155],[322,156],[321,13],[292,157],[291,13],[227,158],[225,159],[224,18],[226,160],[324,161],[323,13],[231,162],[230,13],[326,163],[325,13],[392,164],[389,165],[390,166],[391,167],[388,168],[102,169],[103,169],[104,170],[50,171],[105,172],[106,173],[107,174],[48,2],[108,175],[109,176],[110,177],[111,178],[112,179],[113,180],[114,180],[115,181],[116,182],[117,183],[118,184],[51,2],[49,2],[119,185],[120,186],[121,187],[155,188],[122,189],[123,2],[124,190],[125,191],[74,192],[86,193],[71,194],[87,195],[96,196],[62,197],[63,198],[61,199],[95,200],[90,201],[94,202],[65,203],[83,204],[64,205],[93,206],[59,207],[60,201],[66,208],[67,2],[73,209],[70,208],[57,210],[97,211],[88,212],[77,213],[76,208],[78,214],[81,215],[75,216],[79,217],[91,200],[68,218],[69,219],[82,220],[58,195],[85,221],[84,208],[72,219],[80,222],[89,2],[56,2],[92,223],[126,224],[127,225],[128,226],[129,227],[130,228],[131,229],[132,230],[133,230],[134,231],[135,2],[136,232],[137,233],[139,234],[138,235],[140,236],[141,237],[142,238],[143,239],[144,240],[145,241],[146,242],[147,243],[148,244],[149,245],[150,246],[151,247],[152,248],[52,2],[53,249],[54,2],[55,2],[98,250],[99,251],[100,2],[101,236],[153,252],[154,253],[167,2],[156,2],[158,254],[157,255],[160,2],[175,256],[173,257],[174,258],[168,259],[166,2],[176,260],[172,261],[46,2],[47,2],[9,2],[8,2],[2,2],[10,2],[11,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[3,2],[18,2],[19,2],[4,2],[20,2],[24,2],[21,2],[22,2],[23,2],[25,2],[26,2],[27,2],[5,2],[28,2],[29,2],[30,2],[31,2],[6,2],[35,2],[32,2],[33,2],[34,2],[36,2],[7,2],[37,2],[42,2],[43,2],[38,2],[39,2],[40,2],[41,2],[1,2],[44,2],[45,2],[193,262],[179,2],[183,263],[188,264],[180,2],[181,265],[185,2],[182,266],[186,2],[187,267],[192,268],[184,269],[189,270],[190,271],[191,272]],"affectedFilesPendingEmit":[[193,17],[179,17],[183,17],[188,17],[180,17],[181,17],[185,17],[182,17],[186,17],[187,17],[192,17],[184,17],[189,17],[190,17],[191,17]],"emitSignatures":[179,180,181,182,183,184,185,186,187,188,189,190,191,192,193],"version":"5.9.3"}
@@ -0,0 +1,8 @@
1
+ export { HttpShop, NotAuthenticated } from './HttpShop.js';
2
+ export { SHOP_ROUTES } from './routes.js';
3
+ export type { Caller, Role } from './Caller.js';
4
+ export type { BuildVolume, FilamentDemand, Job, JobDetails, JobPhase, JobState, JobsHeld, PrinterOutcome, Verdict } from './Job.js';
5
+ export type { Holding, PrinterApi, PrinterRecord, PrinterStatus, RegisteredPrinter } from './Printer.js';
6
+ export type { PrinterAdded, Shop } from './Shop.js';
7
+ export { DEFAULT_PORT, DEFAULT_SHOP_URL, SHOP_URL_ENV, defaultShopUrl } from './shopUrl.js';
8
+ export { TOKEN_ENV, UnusableToken, defaultToken, defaultTokenFile } from './token.js';
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { HttpShop, NotAuthenticated } from './HttpShop.js';
2
+ export { SHOP_ROUTES } from './routes.js';
3
+ export { DEFAULT_PORT, DEFAULT_SHOP_URL, SHOP_URL_ENV, defaultShopUrl } from './shopUrl.js';
4
+ export { TOKEN_ENV, UnusableToken, defaultToken, defaultTokenFile } from './token.js';
@@ -0,0 +1,2 @@
1
+ /** The first segment of every path this shop answers, for whoever has to route to it. */
2
+ export declare const SHOP_ROUTES: readonly ["/jobs", "/printers", "/filaments", "/sessions", "/me", "/shutdown"];
package/dist/routes.js ADDED
@@ -0,0 +1,8 @@
1
+ // AIDEV-NOTE: the shop answers at the ROOT rather than under a prefix, so anything else serving a
2
+ // page beside it - a dev server, a proxy - has to know which paths are the shop's. That was a list
3
+ // kept by hand in vite.config.ts, and a route added to the contract without being added there was a
4
+ // browser getting index.html back and a page reporting "unexpected character at line 1 column 1",
5
+ // which says nothing about what is wrong. So the list lives here, beside the client that asks for
6
+ // them, and `everyPathHttpShopAsksFor` in the tests fails when one of them is missing.
7
+ /** The first segment of every path this shop answers, for whoever has to route to it. */
8
+ export const SHOP_ROUTES = ['/jobs', '/printers', '/filaments', '/sessions', '/me', '/shutdown'];
@@ -0,0 +1,5 @@
1
+ export declare const SHOP_URL_ENV = "PRINT_SHOP_URL";
2
+ export declare const DEFAULT_PORT = 7373;
3
+ /** The shop on this machine. What a client falls back to when nobody says where to look. */
4
+ export declare const DEFAULT_SHOP_URL = "http://localhost:7373";
5
+ export declare function defaultShopUrl(): string;
@@ -0,0 +1,9 @@
1
+ // AIDEV-NOTE: the shop on this machine, which is the overwhelmingly likely one. Named like the
2
+ // data root, and for the same reason: `3D_` is not a legal start for an environment variable.
3
+ export const SHOP_URL_ENV = 'PRINT_SHOP_URL';
4
+ export const DEFAULT_PORT = 7373;
5
+ /** The shop on this machine. What a client falls back to when nobody says where to look. */
6
+ export const DEFAULT_SHOP_URL = `http://localhost:${DEFAULT_PORT}`;
7
+ export function defaultShopUrl() {
8
+ return process.env[SHOP_URL_ENV] ?? DEFAULT_SHOP_URL;
9
+ }
@@ -0,0 +1,13 @@
1
+ export declare const TOKEN_ENV = "PRINT_SHOP_TOKEN";
2
+ /** A token file somebody other than its owner can read. Refused rather than presented. */
3
+ export declare class UnusableToken extends Error {
4
+ }
5
+ export declare function defaultTokenFile(): string;
6
+ /**
7
+ * The token to present, or undefined when there is none to present - which every shop refuses,
8
+ * because no route there answers a caller it cannot name.
9
+ *
10
+ * Read synchronously and once: every caller needs it before its first request, and a token that
11
+ * changed part way through a run would be worse than one that did not.
12
+ */
13
+ export declare function defaultToken(): string | undefined;
package/dist/token.js ADDED
@@ -0,0 +1,70 @@
1
+ import { readFileSync, statSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import * as path from 'node:path';
4
+ export const TOKEN_ENV = 'PRINT_SHOP_TOKEN';
5
+ /** A token file somebody other than its owner can read. Refused rather than presented. */
6
+ export class UnusableToken extends Error {
7
+ }
8
+ // AIDEV-NOTE: a caller's own token, and nothing like the shop's /etc files - it is ONE string, it
9
+ // belongs to whoever is calling rather than to the machine, and the caller is often not on the same
10
+ // machine at all. The environment suits a program; the file suits a person's shell, where an
11
+ // environment variable would have to be set by something.
12
+ export function defaultTokenFile() {
13
+ const configured = process.env.XDG_CONFIG_HOME;
14
+ return path.join(configured ?? path.join(homedir(), '.config'), '3d-print-shop', 'token');
15
+ }
16
+ /**
17
+ * The token to present, or undefined when there is none to present - which every shop refuses,
18
+ * because no route there answers a caller it cannot name.
19
+ *
20
+ * Read synchronously and once: every caller needs it before its first request, and a token that
21
+ * changed part way through a run would be worse than one that did not.
22
+ */
23
+ export function defaultToken() {
24
+ const said = process.env[TOKEN_ENV]?.trim();
25
+ if (said !== undefined && said !== '')
26
+ return said;
27
+ // The file is only judged when it is the thing being used. An environment that named a token has
28
+ // already answered, and what a file nobody is reading is set to is nobody's business.
29
+ const file = defaultTokenFile();
30
+ const found = whatIsThere(file);
31
+ if (found === undefined)
32
+ return undefined;
33
+ requireOnlyItsOwnerCanRead(file, found.mode);
34
+ try {
35
+ const held = readFileSync(file, 'utf-8').trim();
36
+ return held === '' ? undefined : held;
37
+ }
38
+ catch {
39
+ return undefined;
40
+ }
41
+ }
42
+ // Not there is no token, which is what it has always been - and so is a directory this cannot look
43
+ // into. Neither is a thing to complain about; what is, is a file that IS there and is open to others.
44
+ function whatIsThere(file) {
45
+ try {
46
+ return statSync(file, { throwIfNoEntry: false });
47
+ }
48
+ catch {
49
+ return undefined;
50
+ }
51
+ }
52
+ // AIDEV-NOTE: the mode is checked rather than assumed, the way ssh refuses a private key anyone can
53
+ // read and the way the shop refuses its own credential files - see `readOnlyByItsOwner` in the
54
+ // server's credentials.ts, which says the same thing about the files at the other end. What is in
55
+ // here is a BEARER credential: whoever presents it is that caller with that caller's role, and on an
56
+ // ordinary install it is the first admin's, which is every printer and every job and the power to
57
+ // stop the shop. So a file left 0644 by a stray redirect hands all of that to any account on the
58
+ // machine, silently, while every command still works - and the installer already tells whoever pastes
59
+ // a token in here to chmod it 600.
60
+ //
61
+ // Refused rather than ignored. Ignoring it would answer 401 - "this shop does not know that token" -
62
+ // with the right token sitting on disk, which sends somebody looking anywhere but at the mode.
63
+ //
64
+ // Group and other, not owner: what matters is that nobody ELSE can read it.
65
+ function requireOnlyItsOwnerCanRead(file, mode) {
66
+ if ((mode & 0o077) === 0)
67
+ return;
68
+ throw new UnusableToken(`${file} can be read by somebody other than its owner (mode ${(mode & 0o777).toString(8)}) - ` +
69
+ `it is the token this shop knows you by, so it must be 0600: chmod 600 ${file}`);
70
+ }
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@3d-print-shop/client",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/index.js",
16
+ "types": "./dist/index.d.ts"
17
+ },
18
+ "./browser": {
19
+ "import": "./dist/browser.js",
20
+ "types": "./dist/browser.d.ts"
21
+ }
22
+ },
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tests/tsconfig.json",
26
+ "test": "echo \"tests run from root\" && exit 0"
27
+ },
28
+ "author": "dcorbin",
29
+ "license": "PolyForm-Noncommercial-1.0.0",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/dcorbin-apps/3d-print-shop.git",
33
+ "directory": "packages/client"
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "^5.9.3"
37
+ }
38
+ }