@bobfrankston/rmfmail 1.2.309 → 1.2.312
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.
- package/.commitmsg +39 -11
- package/.llm/trusted-lists.md +46 -0
- package/TODO.md +2 -2
- package/client/android-bootstrap.bundle.js +80 -15
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +57 -2
- package/client/app.bundle.js.map +2 -2
- package/client/components/message-viewer.js +82 -1
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +79 -2
- package/client/compose/compose.bundle.js +1 -1
- package/client/compose/compose.bundle.js.map +2 -2
- package/client/lib/api-client.js +1 -1
- package/client/lib/api-client.js.map +1 -1
- package/client/lib/api-client.ts +3 -3
- package/docs/allowlist.md +25 -2
- package/docs/spam-false-positives.md +23 -0
- package/npmchanges.md +30 -0
- package/package.json +5 -5
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/index.d.ts +3 -1
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +4 -2
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +6 -4
- package/packages/mailx-service/package.json +1 -1
- package/packages/mailx-settings/docs/allowlist.md +25 -2
- package/packages/mailx-settings/docs/spam-false-positives.md +23 -0
- package/packages/mailx-settings/index.d.ts +1 -0
- package/packages/mailx-settings/index.d.ts.map +1 -1
- package/packages/mailx-settings/index.js +7 -0
- package/packages/mailx-settings/index.js.map +1 -1
- package/packages/mailx-settings/index.ts +7 -0
- package/packages/mailx-settings/package.json +1 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store/store.d.ts.map +1 -1
- package/packages/mailx-store/store.js +3 -0
- package/packages/mailx-store/store.js.map +1 -1
- package/packages/mailx-store/store.ts +3 -0
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-service.d.ts +3 -2
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +4 -2
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +6 -4
- package/packages/mailx-store-web/web-settings.d.ts +1 -0
- package/packages/mailx-store-web/web-settings.d.ts.map +1 -1
- package/packages/mailx-store-web/web-settings.js +2 -0
- package/packages/mailx-store-web/web-settings.js.map +1 -1
- package/packages/mailx-store-web/web-settings.ts +2 -0
- package/packages/mailx-types/index.d.ts +2 -2
- package/packages/mailx-types/index.d.ts.map +1 -1
- package/packages/mailx-types/index.js +1 -1
- package/packages/mailx-types/index.js.map +1 -1
- package/packages/mailx-types/index.ts +2 -2
- package/packages/mailx-types/package.json +1 -1
- package/packages/mailx-types/trust.d.ts +35 -0
- package/packages/mailx-types/trust.d.ts.map +1 -1
- package/packages/mailx-types/trust.js +129 -8
- package/packages/mailx-types/trust.js.map +1 -1
- package/packages/mailx-types/trust.ts +152 -8
|
@@ -28,6 +28,18 @@
|
|
|
28
28
|
* be you. Forwarded mail fails SPF constantly, and flagging that would be
|
|
29
29
|
* exactly the cry-wolf banner this is trying not to be.
|
|
30
30
|
*/
|
|
31
|
+
/** What the reader can vouch for, and the allowlist.jsonc key each one is
|
|
32
|
+
* written to. One table, shared by the desktop service and the Android
|
|
33
|
+
* web-service, so "trust X" cannot land in different keys on the two
|
|
34
|
+
* platforms — the merge is by key. (Claude Code 2026-09-09; the two
|
|
35
|
+
* services each carried their own ternary before, and adding `list` to one
|
|
36
|
+
* and not the other is exactly the drift this prevents.) */
|
|
37
|
+
export const TRUST_LIST_KEYS = {
|
|
38
|
+
sender: "trustedSenders",
|
|
39
|
+
domain: "trustedDomains",
|
|
40
|
+
intermediary: "trustedIntermediaries",
|
|
41
|
+
list: "trustedLists",
|
|
42
|
+
};
|
|
31
43
|
/** First value of a header, case-insensitive. */
|
|
32
44
|
function header(lines, name) {
|
|
33
45
|
const want = name.toLowerCase();
|
|
@@ -135,7 +147,28 @@ const NEUTRAL_RULES = [
|
|
|
135
147
|
/^DKIMWL_/, /^RCVD_IN_(DNSWL|MSPIKE_H|IADB)/,
|
|
136
148
|
/^SHORTCIRCUIT$/, /^AWL$/, /^NO_RELAYS$/, /^ALL_TRUSTED$/,
|
|
137
149
|
];
|
|
138
|
-
|
|
150
|
+
/** Rules that test whether the From domain matches the path the message took
|
|
151
|
+
* — which a mailing list breaks BY DESIGN. Mailman re-sends the poster's
|
|
152
|
+
* message from its own host with its own bounce address, so a Gmail From
|
|
153
|
+
* arrives without a Google hop or a Google envelope, and the author's
|
|
154
|
+
* signature no longer verifies over the tagged subject and appended footer.
|
|
155
|
+
* Every one of these fired on an ordinary IEEE-CS meeting announcement
|
|
156
|
+
* (Bob 2026-09-09) and together they painted it as a phish. They are
|
|
157
|
+
* evidence of forgery only when nothing else explains the mismatch; on a
|
|
158
|
+
* message a list PROVABLY delivered (see listProof) the list is the
|
|
159
|
+
* explanation, and they are set to neutral. URL and phishing listings are
|
|
160
|
+
* not in this set: a list member can post a bad link like anyone else. */
|
|
161
|
+
const LIST_RELAY_RULES = [
|
|
162
|
+
/^POSSIBLE_GMAIL_PHISHER$/, // From gmail.com, not sent through Google
|
|
163
|
+
/^FREEMAIL_FORGED_FROMDOMAIN$/, // From and envelope are different freemail domains
|
|
164
|
+
/^(NML_|DKIM_)ADSP_/, // author domain did not sign what arrived
|
|
165
|
+
/^FORGED_[A-Z]+_RCVD$/, // From ‹provider› without ‹provider›'s Received
|
|
166
|
+
];
|
|
167
|
+
function classifyRule(name, dmarcFailed, listRelayed = false) {
|
|
168
|
+
if (listRelayed)
|
|
169
|
+
for (const re of LIST_RELAY_RULES)
|
|
170
|
+
if (re.test(name))
|
|
171
|
+
return "neutral";
|
|
139
172
|
if (dmarcFailed && name === "DKIM_INVALID")
|
|
140
173
|
return "forgery";
|
|
141
174
|
for (const re of FORGERY_RULES)
|
|
@@ -199,6 +232,49 @@ function provedIntermediary(input) {
|
|
|
199
232
|
return entry;
|
|
200
233
|
return "";
|
|
201
234
|
}
|
|
235
|
+
/** The mailing list this message came through, and whether the receiving
|
|
236
|
+
* server proved the list sent it. (2026-09-09)
|
|
237
|
+
*
|
|
238
|
+
* Identity is the List-Id (RFC 2919), the one header that is the same on
|
|
239
|
+
* every post to the list whoever wrote it — `<ieee-cs.mit.edu>` — so it is
|
|
240
|
+
* what `trustedLists` is keyed on. The list's HOST is the Sender: domain
|
|
241
|
+
* (Mailman sets `Sender: list-bounces@host`) or the List-Id's own domain.
|
|
242
|
+
*
|
|
243
|
+
* Proof is the topmost Authentication-Results, which the sender cannot
|
|
244
|
+
* write: `spf=pass` for a bounce address at the list's host — SPF is checked
|
|
245
|
+
* against the envelope, and a list's envelope IS the list — or `dkim=pass`
|
|
246
|
+
* for the list's domain, which Mailman 3 and Sympa add. A List-Id alone is
|
|
247
|
+
* a header anyone can type; without the server's pass it proves nothing,
|
|
248
|
+
* and `trustedLists` never counts on such a message. */
|
|
249
|
+
function listProof(input) {
|
|
250
|
+
const none = { id: "", proved: false, host: "" };
|
|
251
|
+
const raw = header(input.headerLines, "list-id");
|
|
252
|
+
if (!raw)
|
|
253
|
+
return none;
|
|
254
|
+
// `Meeting Announcements <ieee-cs.mit.edu>` or bare `<ieee-cs.mit.edu>`;
|
|
255
|
+
// the angle-bracketed token is the identifier, the rest is a comment.
|
|
256
|
+
const id = (raw.match(/<([^>]+)>/)?.[1] || raw).trim().toLowerCase();
|
|
257
|
+
if (!id)
|
|
258
|
+
return none;
|
|
259
|
+
const senderDomain = (bare(header(input.headerLines, "sender")).split("@")[1] || "").toLowerCase();
|
|
260
|
+
const hosts = [senderDomain, id].filter(Boolean);
|
|
261
|
+
const auth = headerAll(input.headerLines, "authentication-results")[0] || "";
|
|
262
|
+
for (const part of auth.split(";")) {
|
|
263
|
+
if (/\bspf=pass\b/i.test(part)) {
|
|
264
|
+
// iecc writes `spf.mailfrom=user@host`, Microsoft `smtp.mailfrom=host`.
|
|
265
|
+
const mailfrom = (part.match(/(?:spf|smtp)\.mailfrom=([^\s;,]+)/i)?.[1] || "").toLowerCase();
|
|
266
|
+
const domain = mailfrom.includes("@") ? mailfrom.split("@")[1] : mailfrom;
|
|
267
|
+
if (domain && hosts.some(h => sameOrg(domain, h)))
|
|
268
|
+
return { id, proved: true, host: domain };
|
|
269
|
+
}
|
|
270
|
+
if (/\bdkim=pass\b/i.test(part)) {
|
|
271
|
+
const d = (part.match(/header\.d=([^\s;,]+)/i)?.[1] || "").toLowerCase();
|
|
272
|
+
if (d && hosts.some(h => sameOrg(d, h)))
|
|
273
|
+
return { id, proved: true, host: d };
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return { id, proved: false, host: "" };
|
|
277
|
+
}
|
|
202
278
|
function dmarcProof(input) {
|
|
203
279
|
const auth = headerAll(input.headerLines, "authentication-results")[0] || "";
|
|
204
280
|
if (!auth)
|
|
@@ -275,6 +351,20 @@ function analyzeServerSpam(input) {
|
|
|
275
351
|
const threshold = Number(status.match(/required=(-?[\d.]+)/)?.[1]);
|
|
276
352
|
const flagged = /^yes/i.test(status) || /^yes/i.test(flag);
|
|
277
353
|
const dmarc = dmarcProof(input);
|
|
354
|
+
// A list the server proved delivered this message explains two things
|
|
355
|
+
// that otherwise read as forgery: the author's signature no longer
|
|
356
|
+
// verifying (the list tagged the subject and appended a footer), and the
|
|
357
|
+
// From domain not matching the path (the list re-sent it from its own
|
|
358
|
+
// host). Both are removed from the evidence on a PROVED list whether or
|
|
359
|
+
// not the reader trusts it — the explanation is a fact about the
|
|
360
|
+
// headers, and the trust is a separate question answered below. SPF and
|
|
361
|
+
// DMARC failures stay: SPF is checked against the list's own envelope,
|
|
362
|
+
// and a list that lets a DMARC failure through is not one to be quiet
|
|
363
|
+
// about. (2026-09-09)
|
|
364
|
+
const listFound = listProof(input);
|
|
365
|
+
const trustedLists = (input.trustedLists || []).map(l => (l || "").trim().toLowerCase());
|
|
366
|
+
const list = { ...listFound, trusted: listFound.proved && trustedLists.includes(listFound.id) };
|
|
367
|
+
const authFailures = list.proved && !dmarc.failed ? dmarc.authFailures.filter(f => f !== "DKIM") : dmarc.authFailures;
|
|
278
368
|
const report = parseSpamReport(header(input.headerLines, "x-spam-report"));
|
|
279
369
|
// Everything up to the first lowercase key=value — SpamAssassin's trailing
|
|
280
370
|
// shortcircuit=/autolearn=/version= fields. Cutting on "not a rule name"
|
|
@@ -288,7 +378,7 @@ function analyzeServerSpam(input) {
|
|
|
288
378
|
name,
|
|
289
379
|
score: found ? found.score : NaN,
|
|
290
380
|
description: found ? found.description : "",
|
|
291
|
-
cls: classifyRule(name, dmarc.failed),
|
|
381
|
+
cls: classifyRule(name, dmarc.failed, list.proved),
|
|
292
382
|
};
|
|
293
383
|
});
|
|
294
384
|
// A rule that scored zero or negative did not put this message over any
|
|
@@ -325,7 +415,7 @@ function analyzeServerSpam(input) {
|
|
|
325
415
|
// blocklist rules" — with 3.2 of its 8.3 coming from KAM_ACCOUNTPHISH,
|
|
326
416
|
// which is neither, listed directly underneath.
|
|
327
417
|
const bulkOnly = rules.every(r => !scored(r) || r.cls === "bulk" || r.cls === "neutral");
|
|
328
|
-
const kind = (
|
|
418
|
+
const kind = (authFailures.length || present("forgery")) ? "forgery"
|
|
329
419
|
: present("association") ? "association"
|
|
330
420
|
: unknownCouldFlagAlone ? "unclassified"
|
|
331
421
|
: rules.length ? "bulk"
|
|
@@ -365,10 +455,11 @@ function analyzeServerSpam(input) {
|
|
|
365
455
|
proved: !!provedBy, provedBy, bulkOnly,
|
|
366
456
|
provedDomain: dmarc.domain || fromDomain, provedPolicy: dmarc.policy,
|
|
367
457
|
bayesHam: rules.some(r => r.name === "BAYES_00" || r.name === "BAYES_01"),
|
|
368
|
-
authFailures
|
|
458
|
+
authFailures,
|
|
369
459
|
reasons,
|
|
370
460
|
intermediary: provedIntermediary(input),
|
|
371
461
|
signers: dkimSigners(input),
|
|
462
|
+
list,
|
|
372
463
|
};
|
|
373
464
|
}
|
|
374
465
|
/**
|
|
@@ -423,7 +514,10 @@ function serverSpamVerdict(input) {
|
|
|
423
514
|
// A trusted INTERMEDIARY that provably handled the message answers the
|
|
424
515
|
// same question the same way — Google Calendar's invitation on Aaron's
|
|
425
516
|
// behalf is wanted because the reader said google.com is (2026-09-08).
|
|
426
|
-
|
|
517
|
+
// A trusted mailing LIST answers it for every post the list provably
|
|
518
|
+
// delivered, whoever wrote it — the From line is the list's word, not
|
|
519
|
+
// the author's, and the reader subscribed to the list (2026-09-09).
|
|
520
|
+
const trustedAndProved = (input.senderTrusted && a.proved) || !!a.intermediary || a.list.trusted;
|
|
427
521
|
if (trustedAndProved && a.kind !== "forgery" && !a.authFailures.length)
|
|
428
522
|
return null;
|
|
429
523
|
// The party that sent this on the author's behalf, when it signed: the
|
|
@@ -439,6 +533,14 @@ function serverSpamVerdict(input) {
|
|
|
439
533
|
const relayNote = relay && !a.proved
|
|
440
534
|
? `. Sent on the author's behalf by ${relay}, which signed it; "Trust ${relay} as an intermediary" stops this note for mail ${relay} signs.`
|
|
441
535
|
: "";
|
|
536
|
+
// The list that provably delivered this, named the same way, with the
|
|
537
|
+
// action that writes `trustedLists`. Offered only while the author is
|
|
538
|
+
// unproved and the list is not yet trusted: a proved author needs no
|
|
539
|
+
// list, and a trusted list returned above.
|
|
540
|
+
const listNote = a.list.proved && !a.list.trusted && !a.proved
|
|
541
|
+
? `. Delivered by the ${a.list.id} mailing list — ${a.list.host} proved it sent this — which re-sent the author's message from its own host, so nothing proves the From line; "Trust the ${a.list.id} list" stops this note for mail the list delivers.`
|
|
542
|
+
: "";
|
|
543
|
+
const viaList = listNote ? { list: a.list.id } : {};
|
|
442
544
|
const numbers = Number.isFinite(a.score) && Number.isFinite(a.threshold)
|
|
443
545
|
? `SpamAssassin score ${a.score} of ${a.threshold}`
|
|
444
546
|
: "flagged by SpamAssassin";
|
|
@@ -483,14 +585,16 @@ function serverSpamVerdict(input) {
|
|
|
483
585
|
id: "server-spam-verdict",
|
|
484
586
|
severity: "caution",
|
|
485
587
|
text: "This claims to be a sender you trust, but nothing proves it is.",
|
|
486
|
-
detail: `No DMARC pass, no valid signature from the sending domain, and it passed through hosts your server does not trust. ${numbers}${why}`,
|
|
588
|
+
detail: `No DMARC pass, no valid signature from the sending domain, and it passed through hosts your server does not trust. ${numbers}${why}${listNote}`,
|
|
589
|
+
...viaList,
|
|
487
590
|
};
|
|
488
591
|
return {
|
|
489
592
|
id: "server-spam-verdict",
|
|
490
593
|
severity: "caution",
|
|
491
594
|
text: "Your mail server classified this as spam before delivering it.",
|
|
492
|
-
detail: `${proof}${numbers}${why}${bayes}${relayNote}`,
|
|
595
|
+
detail: `${proof}${numbers}${why}${bayes}${relayNote}${listNote}`,
|
|
493
596
|
...via,
|
|
597
|
+
...viaList,
|
|
494
598
|
};
|
|
495
599
|
}
|
|
496
600
|
/**
|
|
@@ -631,6 +735,18 @@ function provedSenderDomain(input) {
|
|
|
631
735
|
*
|
|
632
736
|
* 1. The redirector and the destination are the same organisation. A site
|
|
633
737
|
* bouncing through its own hostnames is routing, not hiding.
|
|
738
|
+
* 4. The link ENDS at the proved sender (2026-09-08). Microsoft 365's
|
|
739
|
+
* Message center mail, dmarc=pass header.from=microsoft.com with
|
|
740
|
+
* policy reject, links through its click-tracker
|
|
741
|
+
* `nam.safelink.emails.azure.net` to `admin.microsoft.com`: two
|
|
742
|
+
* organisations by hostname, nobody signed for azure.net, and the
|
|
743
|
+
* sender is not the redirector — rules 1 to 3 all miss (Bob: "another
|
|
744
|
+
* safe message flagged"). But the reader lands on the site of the party
|
|
745
|
+
* that provably sent the mail, which is exactly where a plain link
|
|
746
|
+
* would have taken them; the hop hides nothing from the reader. The
|
|
747
|
+
* redirector's reputation may be borrowed, but that is the
|
|
748
|
+
* redirector's problem, not this reader's — and the sender who chose
|
|
749
|
+
* the route is the proved sender, who could have linked openly.
|
|
634
750
|
* 2. The redirector IS the proved sender. Google's account-security notice
|
|
635
751
|
* (2026-09-02, Bob: "this is valid") links through
|
|
636
752
|
* `accounts.google.com/AccountChooser?continue=https://myaccount.google.com/…`
|
|
@@ -682,6 +798,8 @@ function redirectorLink(input) {
|
|
|
682
798
|
continue;
|
|
683
799
|
if (sameOrg(target.hostname, url.hostname))
|
|
684
800
|
continue; // same site, not laundering
|
|
801
|
+
if (senderDomain && sameOrg(target.hostname, senderDomain))
|
|
802
|
+
continue; // ends at the proved sender (rule 4)
|
|
685
803
|
// Name the signer behind this redirector, if there is one, so the
|
|
686
804
|
// viewer can offer "trust google.com as an intermediary" — and
|
|
687
805
|
// only then: a redirector nobody signed for has no party to vouch
|
|
@@ -819,8 +937,11 @@ export function spamScoreOf(input) {
|
|
|
819
937
|
proved: a.proved,
|
|
820
938
|
provedBy: a.provedBy,
|
|
821
939
|
bulkOnly: a.bulkOnly,
|
|
822
|
-
trusted: ((!!input.senderTrusted && a.proved) || !!a.intermediary) && a.kind !== "forgery" && !a.authFailures.length,
|
|
940
|
+
trusted: ((!!input.senderTrusted && a.proved) || !!a.intermediary || a.list.trusted) && a.kind !== "forgery" && !a.authFailures.length,
|
|
823
941
|
reasons: a.reasons,
|
|
942
|
+
listId: a.list.id,
|
|
943
|
+
listProved: a.list.proved,
|
|
944
|
+
listTrusted: a.list.trusted,
|
|
824
945
|
};
|
|
825
946
|
}
|
|
826
947
|
//# sourceMappingURL=trust.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.js","sourceRoot":"","sources":["trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AA4DH,iDAAiD;AACjD,SAAS,MAAM,CAAC,KAAgC,EAAE,IAAY;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE,SAAS;QACnD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,uCAAuC;AACvC,SAAS,SAAS,CAAC,KAAgC,EAAE,IAAY;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI;YAAE,SAAS;QACnD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,IAAI,CAAC,IAAY;IACtB,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;iEAMiE;AACjE,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACjC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACjE,CAAC;AAuBD;;;gDAGgD;AAChD,MAAM,aAAa,GAAa;IAC5B,+BAA+B;IAC/B,kCAAkC;IAClC,oCAAoC;IACpC,UAAU;IACV,OAAO;IACP,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;CAC3C,CAAC;AAEF;;gFAEgF;AAChF,MAAM,iBAAiB,GAAa;IAChC,kCAAkC;IAClC,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,mEAAmE;IACnE,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,qEAAqE;IACrE,0EAA0E;IAC1E,6CAA6C;IAC7C,0BAA0B,EAAE,SAAS,EAAE,mBAAmB;CAC7D,CAAC;AAEF;;iFAEiF;AACjF,MAAM,UAAU,GAAa;IACzB,OAAO,EAAE,SAAS,EAAE,UAAU;IAC9B,eAAe,EAAE,QAAQ;IACzB,0EAA0E;IAC1E,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,0BAA0B,EAAE,YAAY,EAAE,kBAAkB;IAC5D,wBAAwB,EAAE,oBAAoB,EAAE,aAAa;IAC7D,QAAQ,EAAE,YAAY,EAAE,cAAc;IACtC,oCAAoC,EAAE,aAAa;IACnD,iCAAiC,EAAW,gCAAgC;IAC5E,iBAAiB,EAAE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB;IACrE,sEAAsE;IACtE,mEAAmE;IACnE,+DAA+D;IAC/D,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe;CAC9D,CAAC;AAEF;;;;;iDAKiD;AACjD,MAAM,aAAa,GAAa;IAC5B,SAAS;IACT,4CAA4C;IAC5C,iDAAiD;IACjD,UAAU,EAAE,gCAAgC;IAC5C,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe;CAC5D,CAAC;AAEF,SAAS,YAAY,CAAC,IAAY,EAAE,WAAoB;IACpD,IAAI,WAAW,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC;IAC7D,KAAK,MAAM,EAAE,IAAI,aAAa;QAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;IACpE,KAAK,MAAM,EAAE,IAAI,iBAAiB;QAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,aAAa,CAAC;IAC5E,KAAK,MAAM,EAAE,IAAI,aAAa;QAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;IACpE,KAAK,MAAM,EAAE,IAAI,UAAU;QAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC;IAC9D,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH;;;;kEAIkE;AAClE,SAAS,WAAW,CAAC,KAAiB;IAClC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;yEAEyE;AACzE,SAAS,kBAAkB,CAAC,KAAiB;IACzC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1G,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI,IAAI;QACpB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACjC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAE3F,sEAAsE;IACtE,wEAAwE;IACxE,mEAAmE;IACnE,6DAA6D;IAC7D,MAAM,YAAY,GAAG;QACjB,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAClD,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACrD,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;KAC1D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAExG,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjF,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClF,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,IAAI,MAAM,IAAI,UAAU;WACjB,MAAM,KAAK,UAAU;WACrB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,CAAC;WAClC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;AAC7F,CAAC;AAYD;;;;;kDAKkD;AAClD,SAAS,MAAM,CAAC,KAAa;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;yCAOyC;AACzC,SAAS,eAAe,CAAC,MAAc;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkD,CAAC;IACtE,IAAI,OAAO,GAA2C,IAAI,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACzE,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3B,SAAS;QACb,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC;IAC5E,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;aAC9B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;aAC9C,IAAI,EAAE,CAAC;IAChB,OAAO,GAAG,CAAC;AACf,CAAC;AA0CD,SAAS,iBAAiB,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,2EAA2E;IAC3E,wDAAwD;IACxD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACvE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAe,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO;YACH,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;YAChC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAC3C,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;SACxC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,uEAAuE;IACvE,yEAAyE;IACzE,iDAAiD;IACjD,MAAM,MAAM,GAAG,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,GAAc,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhF,yEAAyE;IACzE,iEAAiE;IACjE,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,qEAAqE;IACrE,2EAA2E;IAC3E,4BAA4B;IAC5B,EAAE;IACF,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,uCAAuC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACjD,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;YACvE,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC;IACjC,2EAA2E;IAC3E,oEAAoE;IACpE,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,yEAAyE;IACzE,kEAAkE;IAClE,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IAEzF,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACtE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa;YACxC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc;gBACxC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oBACvB,CAAC,CAAC,cAAc,CAAC;IAErB,uEAAuE;IACvE,8EAA8E;IAC9E,6EAA6E;IAC7E,uEAAuE;IACvE,uEAAuE;IACvE,EAAE;IACF,8DAA8D;IAC9D,iFAAiF;IACjF,EAAE;IACF,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,wEAAwE;IACxE,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QACjC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM;YAC/B,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE/E,MAAM,OAAO,GAAG,KAAK;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;SAC7C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;SAC/C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE;QACL,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpF,CAAC,CAAC,CAAC;IAEP,OAAO;QACH,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI;QACtC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ;QACtC,YAAY,EAAE,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM;QACpE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;QACzE,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,OAAO;QACP,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC;QACvC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;KAC9B,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;wDACwD;AACxD,SAAS,UAAU,CAAC,CAAqB;IACrC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACR,OAAO,sBAAsB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QACvF,KAAK,MAAM;YACP,OAAO,wBAAwB,CAAC,CAAC,YAAY,8CAA8C,CAAC;QAChG,KAAK,SAAS;YACV,OAAO,oFAAoF,CAAC;QAChG;YACI,OAAO,EAAE,CAAC;IAClB,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAiB;IACxC,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAElC,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,0EAA0E;IAC1E,gEAAgE;IAChE,wEAAwE;IACxE,uCAAuC;IACvC,uEAAuE;IACvE,uEAAuE;IACvE,uEAAuE;IACvE,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/E,IAAI,gBAAgB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACpF,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnG,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,4CAA4C;IAC5C,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;QAChC,CAAC,CAAC,oCAAoC,KAAK,6BAA6B,KAAK,iDAAiD,KAAK,SAAS;QAC5I,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,CAAC,CAAC,sBAAsB,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE;QACnD,CAAC,CAAC,yBAAyB,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5F,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;QACpB,OAAO;YACH,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,sFAAsF;YAC5F,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBACzB,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,0CAA0C,OAAO,GAAG,GAAG,EAAE;gBAC1F,CAAC,CAAC,GAAG,OAAO,GAAG,GAAG,EAAE;SAC3B,CAAC;IAEN,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;QACrC,OAAO;YACH,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,QAAQ,KAAK,SAAS;gBAC1B,CAAC,CAAC,4FAA4F;gBAC9F,CAAC,CAAC,6CAA6C,CAAC,CAAC,YAAY,uBAAuB;YACxF,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,EAAE;SACtD,CAAC;IAEN,0EAA0E;IAC1E,mEAAmE;IACnE,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,uCAAuC;IACvC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QACjB,OAAO;YACH,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,QAAQ;gBACZ,CAAC,CAAC,gFAAgF;gBAClF,CAAC,CAAC,wCAAwC;YAC9C,MAAM,EAAE,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,EAAE;SACrC,CAAC;IAEN,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,MAAM;QAChC,OAAO;YACH,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,iEAAiE;YACvE,MAAM,EAAE,sHAAsH,OAAO,GAAG,GAAG,EAAE;SAChJ,CAAC;IACN,OAAO;QACH,EAAE,EAAE,qBAAqB;QACzB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,gEAAgE;QACtE,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,GAAG,SAAS,EAAE;QACtD,GAAG,GAAG;KACT,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAS,SAAS,CAAC,KAAiB;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG;QACX,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAClD,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACrD,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;KAC1D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,0EAA0E;IAC1E,+DAA+D;IAC/D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,YAAY,IAAI,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,OAAO;YACH,EAAE,EAAE,YAAY;YAChB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,4CAA4C,IAAI,iDAAiD;YACvG,MAAM,EAAE,gDAAgD,IAAI,2FAA2F;SAC1J,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO;QACH,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,4CAA4C,IAAI,0CAA0C;QAChG,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,YAAY,EAAE;KACzE,CAAC;AACN,CAAC;AAED;;6DAE6D;AAC7D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,mBAAmB,IAAI,MAAM,GAAG,mBAAmB;YAAE,SAAS;QAC1E,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;QACxE,OAAO;YACH,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,wGAAwG;YAC9G,MAAM,EAAE,GAAG,KAAK,IAAI,MAAM,+CAA+C,IAAI,EAAE;SAClF,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;0EAQ0E;AAC1E,SAAS,kBAAkB,CAAC,KAAiB;IACzC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC;IAC9C,OAAO,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAS,cAAc,CAAC,KAAiB;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/C,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,sEAAsE;IACtE,2DAA2D;IAC3D,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACjE,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC9C,IAAI,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC;YAAE,SAAS,CAAE,wBAAwB;QAC5F,IAAI,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC;YAAE,SAAS,CAAE,6BAA6B;QACjG,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,MAAW,CAAC;YAChB,IAAI,CAAC;gBAAC,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACjD,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS,CAAG,4BAA4B;YACpF,kEAAkE;YAClE,+DAA+D;YAC/D,kEAAkE;YAClE,mDAAmD;YACnD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3D,oEAAoE;YACpE,MAAM,GAAG,GAAG,MAAM;gBACd,CAAC,CAAC,IAAI,MAAM,gCAAgC,MAAM,6DAA6D,MAAM,oBAAoB;gBACzI,CAAC,CAAC,mCAAmC,GAAG,CAAC,QAAQ,mFAAmF,CAAC;YACzI,OAAO;gBACH,EAAE,EAAE,iBAAiB;gBACrB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,iDAAiD,GAAG,CAAC,QAAQ,gBAAgB,MAAM,CAAC,QAAQ,GAAG;gBACrG,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,OAAO,MAAM,CAAC,QAAQ,IAAI,GAAG,EAAE;gBACtD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrC,CAAC;QACN,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAChD,MAAM,QAAQ,GAAG;QACb,iBAAiB,CAAC,KAAK,CAAC;QACxB,SAAS,CAAC,KAAK,CAAC;QAChB,iBAAiB,CAAC,KAAK,CAAC;QACxB,oBAAoB,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC1C,iBAAiB,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvC,cAAc,CAAC,KAAK,CAAC;KACxB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAChD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,sBAAsB,GAAG;IAC3B,eAAe,EAAY,yDAAyD;IACpF,wBAAwB,EAAG,wBAAwB;IACnD,WAAW;IACX,sBAAsB;CACzB,CAAC;AAEF,SAAS,iBAAiB,CAAC,KAAiB;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,gEAAgE;QAChE,kEAAkE;QAClE,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;YAAE,SAAS;QACnE,OAAO;YACH,EAAE,EAAE,qBAAqB;YACzB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,gEAAgE,aAAa,SAAS,UAAU,GAAG;YACzG,MAAM,EAAE,+BAA+B,OAAO,qEAAqE,IAAI,EAAE;SAC5H,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC,SAAS,oBAAoB,CAAC,QAAgB;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAG,0BAA0B;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO;QACH,EAAE,EAAE,wBAAwB;QAC5B,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,2FAA2F;QACjG,MAAM,EAAE,GAAG,KAAK,uFAAuF;KAC1G,CAAC;AACN,CAAC;AA+CD,MAAM,UAAU,WAAW,CAAC,KAAiB;IACzC,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO;QACH,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;QACpH,OAAO,EAAE,CAAC,CAAC,OAAO;KACrB,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,20 @@
|
|
|
29
29
|
* exactly the cry-wolf banner this is trying not to be.
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
/** What the reader can vouch for, and the allowlist.jsonc key each one is
|
|
33
|
+
* written to. One table, shared by the desktop service and the Android
|
|
34
|
+
* web-service, so "trust X" cannot land in different keys on the two
|
|
35
|
+
* platforms — the merge is by key. (Claude Code 2026-09-09; the two
|
|
36
|
+
* services each carried their own ternary before, and adding `list` to one
|
|
37
|
+
* and not the other is exactly the drift this prevents.) */
|
|
38
|
+
export const TRUST_LIST_KEYS = {
|
|
39
|
+
sender: "trustedSenders",
|
|
40
|
+
domain: "trustedDomains",
|
|
41
|
+
intermediary: "trustedIntermediaries",
|
|
42
|
+
list: "trustedLists",
|
|
43
|
+
} as const;
|
|
44
|
+
export type TrustListType = keyof typeof TRUST_LIST_KEYS;
|
|
45
|
+
|
|
32
46
|
/** One piece of evidence that a message is not what it claims to be. */
|
|
33
47
|
export interface TrustFinding {
|
|
34
48
|
/** Stable identifier — for tests, logs, and any future suppression UI. */
|
|
@@ -48,6 +62,10 @@ export interface TrustFinding {
|
|
|
48
62
|
* the author's behalf. Set only when such a party exists and is not yet
|
|
49
63
|
* trusted, so the viewer can offer the action by name. (2026-09-08) */
|
|
50
64
|
via?: string;
|
|
65
|
+
/** The mailing list that provably delivered this message (its List-Id),
|
|
66
|
+
* when the list is not yet in allowlist.jsonc `trustedLists`, so the
|
|
67
|
+
* viewer can offer "Trust the ‹list› list". (2026-09-09) */
|
|
68
|
+
list?: string;
|
|
51
69
|
}
|
|
52
70
|
|
|
53
71
|
export interface TrustInput {
|
|
@@ -85,6 +103,17 @@ export interface TrustInput {
|
|
|
85
103
|
* list that cleared it on sight would be a switch any forger could
|
|
86
104
|
* flip by pasting the link. See provedIntermediary. */
|
|
87
105
|
trustedIntermediaries?: string[];
|
|
106
|
+
/** Mailing lists the reader subscribes to, by List-Id ("ieee-cs.mit.edu"),
|
|
107
|
+
* from allowlist.jsonc `trustedLists`. Bob 2026-09-09: "how do I say
|
|
108
|
+
* that this is a valid mailing list message". A list that does not
|
|
109
|
+
* rewrite From (Mailman only does so when the author's domain publishes
|
|
110
|
+
* a DMARC policy; gmail.com does not) delivers the poster's own address,
|
|
111
|
+
* and its subject tag and footer break every signature on the way — so
|
|
112
|
+
* the author can never be proved, and per-sender trust has nothing to
|
|
113
|
+
* hold on to. The LIST can be proved: the receiving server records
|
|
114
|
+
* spf=pass for the list's bounce address, or dkim=pass for its domain.
|
|
115
|
+
* An entry counts only on such a message. See listProof. */
|
|
116
|
+
trustedLists?: string[];
|
|
88
117
|
}
|
|
89
118
|
|
|
90
119
|
/** First value of a header, case-insensitive. */
|
|
@@ -219,7 +248,26 @@ const NEUTRAL_RULES: RegExp[] = [
|
|
|
219
248
|
/^SHORTCIRCUIT$/, /^AWL$/, /^NO_RELAYS$/, /^ALL_TRUSTED$/,
|
|
220
249
|
];
|
|
221
250
|
|
|
222
|
-
|
|
251
|
+
/** Rules that test whether the From domain matches the path the message took
|
|
252
|
+
* — which a mailing list breaks BY DESIGN. Mailman re-sends the poster's
|
|
253
|
+
* message from its own host with its own bounce address, so a Gmail From
|
|
254
|
+
* arrives without a Google hop or a Google envelope, and the author's
|
|
255
|
+
* signature no longer verifies over the tagged subject and appended footer.
|
|
256
|
+
* Every one of these fired on an ordinary IEEE-CS meeting announcement
|
|
257
|
+
* (Bob 2026-09-09) and together they painted it as a phish. They are
|
|
258
|
+
* evidence of forgery only when nothing else explains the mismatch; on a
|
|
259
|
+
* message a list PROVABLY delivered (see listProof) the list is the
|
|
260
|
+
* explanation, and they are set to neutral. URL and phishing listings are
|
|
261
|
+
* not in this set: a list member can post a bad link like anyone else. */
|
|
262
|
+
const LIST_RELAY_RULES: RegExp[] = [
|
|
263
|
+
/^POSSIBLE_GMAIL_PHISHER$/, // From gmail.com, not sent through Google
|
|
264
|
+
/^FREEMAIL_FORGED_FROMDOMAIN$/, // From and envelope are different freemail domains
|
|
265
|
+
/^(NML_|DKIM_)ADSP_/, // author domain did not sign what arrived
|
|
266
|
+
/^FORGED_[A-Z]+_RCVD$/, // From ‹provider› without ‹provider›'s Received
|
|
267
|
+
];
|
|
268
|
+
|
|
269
|
+
function classifyRule(name: string, dmarcFailed: boolean, listRelayed = false): RuleClass {
|
|
270
|
+
if (listRelayed) for (const re of LIST_RELAY_RULES) if (re.test(name)) return "neutral";
|
|
223
271
|
if (dmarcFailed && name === "DKIM_INVALID") return "forgery";
|
|
224
272
|
for (const re of FORGERY_RULES) if (re.test(name)) return "forgery";
|
|
225
273
|
for (const re of ASSOCIATION_RULES) if (re.test(name)) return "association";
|
|
@@ -272,6 +320,47 @@ function provedIntermediary(input: TrustInput): string {
|
|
|
272
320
|
return "";
|
|
273
321
|
}
|
|
274
322
|
|
|
323
|
+
/** The mailing list this message came through, and whether the receiving
|
|
324
|
+
* server proved the list sent it. (2026-09-09)
|
|
325
|
+
*
|
|
326
|
+
* Identity is the List-Id (RFC 2919), the one header that is the same on
|
|
327
|
+
* every post to the list whoever wrote it — `<ieee-cs.mit.edu>` — so it is
|
|
328
|
+
* what `trustedLists` is keyed on. The list's HOST is the Sender: domain
|
|
329
|
+
* (Mailman sets `Sender: list-bounces@host`) or the List-Id's own domain.
|
|
330
|
+
*
|
|
331
|
+
* Proof is the topmost Authentication-Results, which the sender cannot
|
|
332
|
+
* write: `spf=pass` for a bounce address at the list's host — SPF is checked
|
|
333
|
+
* against the envelope, and a list's envelope IS the list — or `dkim=pass`
|
|
334
|
+
* for the list's domain, which Mailman 3 and Sympa add. A List-Id alone is
|
|
335
|
+
* a header anyone can type; without the server's pass it proves nothing,
|
|
336
|
+
* and `trustedLists` never counts on such a message. */
|
|
337
|
+
function listProof(input: TrustInput): { id: string; proved: boolean; host: string } {
|
|
338
|
+
const none = { id: "", proved: false, host: "" };
|
|
339
|
+
const raw = header(input.headerLines, "list-id");
|
|
340
|
+
if (!raw) return none;
|
|
341
|
+
// `Meeting Announcements <ieee-cs.mit.edu>` or bare `<ieee-cs.mit.edu>`;
|
|
342
|
+
// the angle-bracketed token is the identifier, the rest is a comment.
|
|
343
|
+
const id = (raw.match(/<([^>]+)>/)?.[1] || raw).trim().toLowerCase();
|
|
344
|
+
if (!id) return none;
|
|
345
|
+
|
|
346
|
+
const senderDomain = (bare(header(input.headerLines, "sender")).split("@")[1] || "").toLowerCase();
|
|
347
|
+
const hosts = [senderDomain, id].filter(Boolean);
|
|
348
|
+
const auth = headerAll(input.headerLines, "authentication-results")[0] || "";
|
|
349
|
+
for (const part of auth.split(";")) {
|
|
350
|
+
if (/\bspf=pass\b/i.test(part)) {
|
|
351
|
+
// iecc writes `spf.mailfrom=user@host`, Microsoft `smtp.mailfrom=host`.
|
|
352
|
+
const mailfrom = (part.match(/(?:spf|smtp)\.mailfrom=([^\s;,]+)/i)?.[1] || "").toLowerCase();
|
|
353
|
+
const domain = mailfrom.includes("@") ? mailfrom.split("@")[1] : mailfrom;
|
|
354
|
+
if (domain && hosts.some(h => sameOrg(domain, h))) return { id, proved: true, host: domain };
|
|
355
|
+
}
|
|
356
|
+
if (/\bdkim=pass\b/i.test(part)) {
|
|
357
|
+
const d = (part.match(/header\.d=([^\s;,]+)/i)?.[1] || "").toLowerCase();
|
|
358
|
+
if (d && hosts.some(h => sameOrg(d, h))) return { id, proved: true, host: d };
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return { id, proved: false, host: "" };
|
|
362
|
+
}
|
|
363
|
+
|
|
275
364
|
function dmarcProof(input: TrustInput): { pass: boolean; failed: boolean; authFailures: string[]; domain: string; policy: string } {
|
|
276
365
|
const auth = headerAll(input.headerLines, "authentication-results")[0] || "";
|
|
277
366
|
if (!auth) return { pass: false, failed: false, authFailures: [], domain: "", policy: "" };
|
|
@@ -388,6 +477,10 @@ interface ServerSpamAnalysis {
|
|
|
388
477
|
intermediary: string;
|
|
389
478
|
/** Domains whose DKIM signature verified — candidates for that list. */
|
|
390
479
|
signers: string[];
|
|
480
|
+
/** The mailing list that delivered this (List-Id), whether the server
|
|
481
|
+
* proved the list sent it, and whether the reader has listed it in
|
|
482
|
+
* `trustedLists`. `trusted` is true only when `proved` is. (2026-09-09) */
|
|
483
|
+
list: { id: string; proved: boolean; host: string; trusted: boolean };
|
|
391
484
|
}
|
|
392
485
|
|
|
393
486
|
function analyzeServerSpam(input: TrustInput): ServerSpamAnalysis {
|
|
@@ -400,6 +493,20 @@ function analyzeServerSpam(input: TrustInput): ServerSpamAnalysis {
|
|
|
400
493
|
const flagged = /^yes/i.test(status) || /^yes/i.test(flag);
|
|
401
494
|
|
|
402
495
|
const dmarc = dmarcProof(input);
|
|
496
|
+
// A list the server proved delivered this message explains two things
|
|
497
|
+
// that otherwise read as forgery: the author's signature no longer
|
|
498
|
+
// verifying (the list tagged the subject and appended a footer), and the
|
|
499
|
+
// From domain not matching the path (the list re-sent it from its own
|
|
500
|
+
// host). Both are removed from the evidence on a PROVED list whether or
|
|
501
|
+
// not the reader trusts it — the explanation is a fact about the
|
|
502
|
+
// headers, and the trust is a separate question answered below. SPF and
|
|
503
|
+
// DMARC failures stay: SPF is checked against the list's own envelope,
|
|
504
|
+
// and a list that lets a DMARC failure through is not one to be quiet
|
|
505
|
+
// about. (2026-09-09)
|
|
506
|
+
const listFound = listProof(input);
|
|
507
|
+
const trustedLists = (input.trustedLists || []).map(l => (l || "").trim().toLowerCase());
|
|
508
|
+
const list = { ...listFound, trusted: listFound.proved && trustedLists.includes(listFound.id) };
|
|
509
|
+
const authFailures = list.proved && !dmarc.failed ? dmarc.authFailures.filter(f => f !== "DKIM") : dmarc.authFailures;
|
|
403
510
|
const report = parseSpamReport(header(input.headerLines, "x-spam-report"));
|
|
404
511
|
// Everything up to the first lowercase key=value — SpamAssassin's trailing
|
|
405
512
|
// shortcircuit=/autolearn=/version= fields. Cutting on "not a rule name"
|
|
@@ -414,7 +521,7 @@ function analyzeServerSpam(input: TrustInput): ServerSpamAnalysis {
|
|
|
414
521
|
name,
|
|
415
522
|
score: found ? found.score : NaN,
|
|
416
523
|
description: found ? found.description : "",
|
|
417
|
-
cls: classifyRule(name, dmarc.failed),
|
|
524
|
+
cls: classifyRule(name, dmarc.failed, list.proved),
|
|
418
525
|
};
|
|
419
526
|
});
|
|
420
527
|
|
|
@@ -454,7 +561,7 @@ function analyzeServerSpam(input: TrustInput): ServerSpamAnalysis {
|
|
|
454
561
|
// which is neither, listed directly underneath.
|
|
455
562
|
const bulkOnly = rules.every(r => !scored(r) || r.cls === "bulk" || r.cls === "neutral");
|
|
456
563
|
|
|
457
|
-
const kind = (
|
|
564
|
+
const kind = (authFailures.length || present("forgery")) ? "forgery"
|
|
458
565
|
: present("association") ? "association"
|
|
459
566
|
: unknownCouldFlagAlone ? "unclassified"
|
|
460
567
|
: rules.length ? "bulk"
|
|
@@ -497,10 +604,11 @@ function analyzeServerSpam(input: TrustInput): ServerSpamAnalysis {
|
|
|
497
604
|
proved: !!provedBy, provedBy, bulkOnly,
|
|
498
605
|
provedDomain: dmarc.domain || fromDomain, provedPolicy: dmarc.policy,
|
|
499
606
|
bayesHam: rules.some(r => r.name === "BAYES_00" || r.name === "BAYES_01"),
|
|
500
|
-
authFailures
|
|
607
|
+
authFailures,
|
|
501
608
|
reasons,
|
|
502
609
|
intermediary: provedIntermediary(input),
|
|
503
610
|
signers: dkimSigners(input),
|
|
611
|
+
list,
|
|
504
612
|
};
|
|
505
613
|
}
|
|
506
614
|
|
|
@@ -557,7 +665,10 @@ function serverSpamVerdict(input: TrustInput): TrustFinding {
|
|
|
557
665
|
// A trusted INTERMEDIARY that provably handled the message answers the
|
|
558
666
|
// same question the same way — Google Calendar's invitation on Aaron's
|
|
559
667
|
// behalf is wanted because the reader said google.com is (2026-09-08).
|
|
560
|
-
|
|
668
|
+
// A trusted mailing LIST answers it for every post the list provably
|
|
669
|
+
// delivered, whoever wrote it — the From line is the list's word, not
|
|
670
|
+
// the author's, and the reader subscribed to the list (2026-09-09).
|
|
671
|
+
const trustedAndProved = (input.senderTrusted && a.proved) || !!a.intermediary || a.list.trusted;
|
|
561
672
|
if (trustedAndProved && a.kind !== "forgery" && !a.authFailures.length) return null;
|
|
562
673
|
// The party that sent this on the author's behalf, when it signed: the
|
|
563
674
|
// Sender: header names it and a verified signature backs the claim. That
|
|
@@ -572,6 +683,14 @@ function serverSpamVerdict(input: TrustInput): TrustFinding {
|
|
|
572
683
|
const relayNote = relay && !a.proved
|
|
573
684
|
? `. Sent on the author's behalf by ${relay}, which signed it; "Trust ${relay} as an intermediary" stops this note for mail ${relay} signs.`
|
|
574
685
|
: "";
|
|
686
|
+
// The list that provably delivered this, named the same way, with the
|
|
687
|
+
// action that writes `trustedLists`. Offered only while the author is
|
|
688
|
+
// unproved and the list is not yet trusted: a proved author needs no
|
|
689
|
+
// list, and a trusted list returned above.
|
|
690
|
+
const listNote = a.list.proved && !a.list.trusted && !a.proved
|
|
691
|
+
? `. Delivered by the ${a.list.id} mailing list — ${a.list.host} proved it sent this — which re-sent the author's message from its own host, so nothing proves the From line; "Trust the ${a.list.id} list" stops this note for mail the list delivers.`
|
|
692
|
+
: "";
|
|
693
|
+
const viaList = listNote ? { list: a.list.id } : {};
|
|
575
694
|
|
|
576
695
|
const numbers = Number.isFinite(a.score) && Number.isFinite(a.threshold)
|
|
577
696
|
? `SpamAssassin score ${a.score} of ${a.threshold}`
|
|
@@ -621,14 +740,16 @@ function serverSpamVerdict(input: TrustInput): TrustFinding {
|
|
|
621
740
|
id: "server-spam-verdict",
|
|
622
741
|
severity: "caution",
|
|
623
742
|
text: "This claims to be a sender you trust, but nothing proves it is.",
|
|
624
|
-
detail: `No DMARC pass, no valid signature from the sending domain, and it passed through hosts your server does not trust. ${numbers}${why}`,
|
|
743
|
+
detail: `No DMARC pass, no valid signature from the sending domain, and it passed through hosts your server does not trust. ${numbers}${why}${listNote}`,
|
|
744
|
+
...viaList,
|
|
625
745
|
};
|
|
626
746
|
return {
|
|
627
747
|
id: "server-spam-verdict",
|
|
628
748
|
severity: "caution",
|
|
629
749
|
text: "Your mail server classified this as spam before delivering it.",
|
|
630
|
-
detail: `${proof}${numbers}${why}${bayes}${relayNote}`,
|
|
750
|
+
detail: `${proof}${numbers}${why}${bayes}${relayNote}${listNote}`,
|
|
631
751
|
...via,
|
|
752
|
+
...viaList,
|
|
632
753
|
};
|
|
633
754
|
}
|
|
634
755
|
|
|
@@ -764,6 +885,18 @@ function provedSenderDomain(input: TrustInput): string {
|
|
|
764
885
|
*
|
|
765
886
|
* 1. The redirector and the destination are the same organisation. A site
|
|
766
887
|
* bouncing through its own hostnames is routing, not hiding.
|
|
888
|
+
* 4. The link ENDS at the proved sender (2026-09-08). Microsoft 365's
|
|
889
|
+
* Message center mail, dmarc=pass header.from=microsoft.com with
|
|
890
|
+
* policy reject, links through its click-tracker
|
|
891
|
+
* `nam.safelink.emails.azure.net` to `admin.microsoft.com`: two
|
|
892
|
+
* organisations by hostname, nobody signed for azure.net, and the
|
|
893
|
+
* sender is not the redirector — rules 1 to 3 all miss (Bob: "another
|
|
894
|
+
* safe message flagged"). But the reader lands on the site of the party
|
|
895
|
+
* that provably sent the mail, which is exactly where a plain link
|
|
896
|
+
* would have taken them; the hop hides nothing from the reader. The
|
|
897
|
+
* redirector's reputation may be borrowed, but that is the
|
|
898
|
+
* redirector's problem, not this reader's — and the sender who chose
|
|
899
|
+
* the route is the proved sender, who could have linked openly.
|
|
767
900
|
* 2. The redirector IS the proved sender. Google's account-security notice
|
|
768
901
|
* (2026-09-02, Bob: "this is valid") links through
|
|
769
902
|
* `accounts.google.com/AccountChooser?continue=https://myaccount.google.com/…`
|
|
@@ -800,6 +933,7 @@ function redirectorLink(input: TrustInput): TrustFinding {
|
|
|
800
933
|
try { target = new URL(value); } catch { continue; }
|
|
801
934
|
if (!/^https?:$/.test(target.protocol)) continue;
|
|
802
935
|
if (sameOrg(target.hostname, url.hostname)) continue; // same site, not laundering
|
|
936
|
+
if (senderDomain && sameOrg(target.hostname, senderDomain)) continue; // ends at the proved sender (rule 4)
|
|
803
937
|
// Name the signer behind this redirector, if there is one, so the
|
|
804
938
|
// viewer can offer "trust google.com as an intermediary" — and
|
|
805
939
|
// only then: a redirector nobody signed for has no party to vouch
|
|
@@ -971,6 +1105,13 @@ export interface SpamScore {
|
|
|
971
1105
|
/** The reader approved this sender AND the sender is proved: the score is
|
|
972
1106
|
* still true, and no longer worth showing. The viewer hides the chip. */
|
|
973
1107
|
trusted: boolean;
|
|
1108
|
+
/** The mailing list that delivered this (List-Id), or "". With
|
|
1109
|
+
* `listProved` — the receiving server recorded the list's host sending
|
|
1110
|
+
* it — the viewer can offer "Trust the ‹list› list"; `listTrusted` says
|
|
1111
|
+
* the reader already has. (2026-09-09) */
|
|
1112
|
+
listId: string;
|
|
1113
|
+
listProved: boolean;
|
|
1114
|
+
listTrusted: boolean;
|
|
974
1115
|
}
|
|
975
1116
|
|
|
976
1117
|
export function spamScoreOf(input: TrustInput): SpamScore {
|
|
@@ -984,7 +1125,10 @@ export function spamScoreOf(input: TrustInput): SpamScore {
|
|
|
984
1125
|
proved: a.proved,
|
|
985
1126
|
provedBy: a.provedBy,
|
|
986
1127
|
bulkOnly: a.bulkOnly,
|
|
987
|
-
trusted: ((!!input.senderTrusted && a.proved) || !!a.intermediary) && a.kind !== "forgery" && !a.authFailures.length,
|
|
1128
|
+
trusted: ((!!input.senderTrusted && a.proved) || !!a.intermediary || a.list.trusted) && a.kind !== "forgery" && !a.authFailures.length,
|
|
988
1129
|
reasons: a.reasons,
|
|
1130
|
+
listId: a.list.id,
|
|
1131
|
+
listProved: a.list.proved,
|
|
1132
|
+
listTrusted: a.list.trusted,
|
|
989
1133
|
};
|
|
990
1134
|
}
|