@agentplat/trust 0.3.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +14 -0
  3. package/dist/canonical.d.ts +20 -0
  4. package/dist/canonical.d.ts.map +1 -0
  5. package/dist/canonical.js +173 -0
  6. package/dist/canonical.js.map +1 -0
  7. package/dist/causal.d.ts +7 -0
  8. package/dist/causal.d.ts.map +1 -0
  9. package/dist/causal.js +155 -0
  10. package/dist/causal.js.map +1 -0
  11. package/dist/eligibility.d.ts +8 -0
  12. package/dist/eligibility.d.ts.map +1 -0
  13. package/dist/eligibility.js +325 -0
  14. package/dist/eligibility.js.map +1 -0
  15. package/dist/evidence.d.ts +20 -0
  16. package/dist/evidence.d.ts.map +1 -0
  17. package/dist/evidence.js +424 -0
  18. package/dist/evidence.js.map +1 -0
  19. package/dist/fusion.d.ts +8 -0
  20. package/dist/fusion.d.ts.map +1 -0
  21. package/dist/fusion.js +1278 -0
  22. package/dist/fusion.js.map +1 -0
  23. package/dist/index.d.ts +13 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +13 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lifecycle.d.ts +41 -0
  28. package/dist/lifecycle.d.ts.map +1 -0
  29. package/dist/lifecycle.js +1369 -0
  30. package/dist/lifecycle.js.map +1 -0
  31. package/dist/mesh-records.d.ts +36 -0
  32. package/dist/mesh-records.d.ts.map +1 -0
  33. package/dist/mesh-records.js +133 -0
  34. package/dist/mesh-records.js.map +1 -0
  35. package/dist/policy.d.ts +9 -0
  36. package/dist/policy.d.ts.map +1 -0
  37. package/dist/policy.js +598 -0
  38. package/dist/policy.js.map +1 -0
  39. package/dist/profile.d.ts +21 -0
  40. package/dist/profile.d.ts.map +1 -0
  41. package/dist/profile.js +253 -0
  42. package/dist/profile.js.map +1 -0
  43. package/dist/quarantine.d.ts +53 -0
  44. package/dist/quarantine.d.ts.map +1 -0
  45. package/dist/quarantine.js +742 -0
  46. package/dist/quarantine.js.map +1 -0
  47. package/dist/sha256.d.ts +2 -0
  48. package/dist/sha256.d.ts.map +1 -0
  49. package/dist/sha256.js +66 -0
  50. package/dist/sha256.js.map +1 -0
  51. package/dist/state.d.ts +18 -0
  52. package/dist/state.d.ts.map +1 -0
  53. package/dist/state.js +1015 -0
  54. package/dist/state.js.map +1 -0
  55. package/dist/types.d.ts +862 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +60 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/validation.d.ts +18 -0
  60. package/dist/validation.d.ts.map +1 -0
  61. package/dist/validation.js +223 -0
  62. package/dist/validation.js.map +1 -0
  63. package/package.json +43 -0
@@ -0,0 +1,325 @@
1
+ import { deepFreeze, digestTrustJsonV1, TrustValidationError, } from "./canonical.js";
2
+ import { digestScopeV1, digestSubjectV1 } from "./evidence.js";
3
+ import { digestEvidenceFusionPolicyV1 } from "./policy.js";
4
+ import { digestTrustProfileKeyV1 } from "./profile.js";
5
+ import { validateEvidenceTrustStateV1 } from "./state.js";
6
+ import { assertExactKeys, assertIdentifier, assertSafeInteger, assertTrustDigest, validateEvidenceScopeV1, validateReasonCodeV1, validateTrustSubjectV1, } from "./validation.js";
7
+ const compare = (left, right) => left < right ? -1 : left > right ? 1 : 0;
8
+ const requestKeys = [
9
+ "schemaVersion",
10
+ "tenantId",
11
+ "subject",
12
+ "subjectDigest",
13
+ "scope",
14
+ "scopeDigest",
15
+ "policyId",
16
+ "policyVersion",
17
+ "policyDigest",
18
+ "profileId",
19
+ "profileDigest",
20
+ "maximumProfileAgeMs",
21
+ "requirements",
22
+ ];
23
+ const decisionKeys = [
24
+ "schemaVersion",
25
+ "eligibilityDecisionId",
26
+ "requestDigest",
27
+ "subjectDigest",
28
+ "scopeDigest",
29
+ "policyDigest",
30
+ "profileId",
31
+ "profileDigest",
32
+ "quarantineRecordIds",
33
+ "evaluatedAtLogicalMs",
34
+ "disposition",
35
+ "requirementResults",
36
+ "reasonCodes",
37
+ ];
38
+ function validateRequirements(value) {
39
+ if (!Array.isArray(value) || value.length === 0)
40
+ throw new TrustValidationError("eligibility requirements are invalid");
41
+ const result = value.map((item) => {
42
+ assertExactKeys(item, [
43
+ "dimensionId",
44
+ "minimumScoreBasisPoints",
45
+ "maximumUncertaintyBasisPoints",
46
+ ], "eligibility requirement");
47
+ const requirement = item;
48
+ assertIdentifier(requirement.dimensionId, "dimensionId");
49
+ assertSafeInteger(requirement.minimumScoreBasisPoints, "minimumScoreBasisPoints");
50
+ assertSafeInteger(requirement.maximumUncertaintyBasisPoints, "maximumUncertaintyBasisPoints");
51
+ if (requirement.minimumScoreBasisPoints > 10_000 ||
52
+ requirement.maximumUncertaintyBasisPoints > 10_000)
53
+ throw new TrustValidationError("eligibility threshold is invalid");
54
+ return requirement;
55
+ });
56
+ if (result.some((item, index) => index > 0 &&
57
+ compare(result[index - 1].dimensionId, item.dimensionId) >= 0))
58
+ throw new TrustValidationError("eligibility requirements must be canonically ordered and unique");
59
+ return deepFreeze(structuredClone(result));
60
+ }
61
+ function requirementsEqual(left, right) {
62
+ return (left.length === right.length &&
63
+ left.every((item, index) => item.dimensionId === right[index].dimensionId &&
64
+ item.minimumScoreBasisPoints === right[index].minimumScoreBasisPoints &&
65
+ item.maximumUncertaintyBasisPoints ===
66
+ right[index].maximumUncertaintyBasisPoints));
67
+ }
68
+ export function validateTrustEligibilityRequestV1(value) {
69
+ assertExactKeys(value, requestKeys, "eligibility request");
70
+ const request = value;
71
+ if (request.schemaVersion !== 1)
72
+ throw new TrustValidationError("eligibility request schema is invalid");
73
+ assertIdentifier(request.tenantId, "tenantId");
74
+ const subject = validateTrustSubjectV1(request.subject);
75
+ const scope = validateEvidenceScopeV1(request.scope);
76
+ if (scope.tenantId !== request.tenantId ||
77
+ request.subjectDigest !== digestSubjectV1(subject) ||
78
+ request.scopeDigest !== digestScopeV1(scope))
79
+ throw new TrustValidationError("eligibility request binding is invalid");
80
+ for (const key of [
81
+ "subjectDigest",
82
+ "scopeDigest",
83
+ "policyDigest",
84
+ "profileDigest",
85
+ ])
86
+ assertTrustDigest(request[key], key);
87
+ for (const key of ["policyId", "profileId"])
88
+ assertIdentifier(request[key], key);
89
+ if (request.profileId !== `profile:${request.profileDigest}`)
90
+ throw new TrustValidationError("eligibility profile binding is invalid");
91
+ assertSafeInteger(request.policyVersion, "policyVersion", 1);
92
+ assertSafeInteger(request.maximumProfileAgeMs, "maximumProfileAgeMs", 1);
93
+ return deepFreeze({
94
+ ...request,
95
+ subject,
96
+ scope,
97
+ requirements: validateRequirements(request.requirements),
98
+ });
99
+ }
100
+ export const createTrustEligibilityRequestV1 = validateTrustEligibilityRequestV1;
101
+ export function digestTrustEligibilityRequestV1(value) {
102
+ return digestTrustJsonV1("eligibility-request", validateTrustEligibilityRequestV1(value));
103
+ }
104
+ function decisionBody(value) {
105
+ const { eligibilityDecisionId: _id, ...body } = value;
106
+ return body;
107
+ }
108
+ export function digestTrustEligibilityDecisionV1(value) {
109
+ return digestTrustJsonV1("eligibility-decision", decisionBody(value));
110
+ }
111
+ export function validateTrustEligibilityDecisionV1(value) {
112
+ assertExactKeys(value, decisionKeys, "eligibility decision");
113
+ const decision = value;
114
+ if (decision.schemaVersion !== 1)
115
+ throw new TrustValidationError("eligibility decision schema is invalid");
116
+ for (const key of ["eligibilityDecisionId", "profileId"])
117
+ assertIdentifier(decision[key], key);
118
+ for (const key of [
119
+ "requestDigest",
120
+ "subjectDigest",
121
+ "scopeDigest",
122
+ "policyDigest",
123
+ "profileDigest",
124
+ ])
125
+ assertTrustDigest(decision[key], key);
126
+ if (decision.profileId !== `profile:${decision.profileDigest}`)
127
+ throw new TrustValidationError("eligibility profile binding is invalid");
128
+ assertSafeInteger(decision.evaluatedAtLogicalMs, "evaluatedAtLogicalMs");
129
+ if (!Array.isArray(decision.quarantineRecordIds) ||
130
+ decision.quarantineRecordIds.some((item) => {
131
+ try {
132
+ assertIdentifier(item, "quarantineRecordId");
133
+ return false;
134
+ }
135
+ catch {
136
+ return true;
137
+ }
138
+ }) ||
139
+ decision.quarantineRecordIds.some((item, index) => index > 0 &&
140
+ compare(decision.quarantineRecordIds[index - 1], item) >= 0))
141
+ throw new TrustValidationError("quarantine IDs are invalid");
142
+ if (!Array.isArray(decision.requirementResults))
143
+ throw new TrustValidationError("eligibility requirement results are invalid");
144
+ for (const result of decision.requirementResults) {
145
+ assertExactKeys(result, [
146
+ "dimensionId",
147
+ "observedScoreBasisPoints",
148
+ "observedUncertaintyBasisPoints",
149
+ "met",
150
+ ], "eligibility requirement result");
151
+ assertIdentifier(result.dimensionId, "dimensionId");
152
+ const bothUnavailable = result.observedScoreBasisPoints === null &&
153
+ result.observedUncertaintyBasisPoints === null;
154
+ const bothAvailable = result.observedScoreBasisPoints !== null &&
155
+ result.observedUncertaintyBasisPoints !== null;
156
+ if (!bothUnavailable && !bothAvailable)
157
+ throw new TrustValidationError("eligibility observations are inconsistent");
158
+ for (const key of [
159
+ "observedScoreBasisPoints",
160
+ "observedUncertaintyBasisPoints",
161
+ ]) {
162
+ const observation = result[key];
163
+ if (observation !== null) {
164
+ assertSafeInteger(observation, key);
165
+ if (observation > 10_000)
166
+ throw new TrustValidationError("observed eligibility value is invalid");
167
+ }
168
+ }
169
+ if (typeof result.met !== "boolean" || (bothUnavailable && result.met))
170
+ throw new TrustValidationError("eligibility met is invalid");
171
+ }
172
+ if (decision.requirementResults.some((item, index) => index > 0 &&
173
+ compare(decision.requirementResults[index - 1].dimensionId, item.dimensionId) >= 0))
174
+ throw new TrustValidationError("eligibility results must be canonically ordered and unique");
175
+ if (!["eligible", "restricted", "quarantined", "unavailable"].includes(decision.disposition))
176
+ throw new TrustValidationError("eligibility disposition is invalid");
177
+ if (!Array.isArray(decision.reasonCodes) ||
178
+ decision.reasonCodes.some((reason) => {
179
+ try {
180
+ validateReasonCodeV1(reason);
181
+ return false;
182
+ }
183
+ catch {
184
+ return true;
185
+ }
186
+ }) ||
187
+ decision.reasonCodes.some((item, index) => index > 0 && compare(decision.reasonCodes[index - 1], item) >= 0))
188
+ throw new TrustValidationError("eligibility reasons are invalid");
189
+ if (decision.eligibilityDecisionId !==
190
+ `eligibility-decision:${digestTrustEligibilityDecisionV1(decision)}`)
191
+ throw new TrustValidationError("eligibility decision digest is invalid");
192
+ return deepFreeze(structuredClone(decision));
193
+ }
194
+ export function evaluateTrustEligibilityV1(stateValue, requestValue, logicalTimeMs) {
195
+ const state = validateEvidenceTrustStateV1(stateValue);
196
+ const request = validateTrustEligibilityRequestV1(requestValue);
197
+ assertSafeInteger(logicalTimeMs, "logicalTimeMs");
198
+ if (logicalTimeMs < state.logicalTimeHighWaterMs)
199
+ throw new TrustValidationError("logical time rollback");
200
+ const policy = state.policies.find((item) => item.policyId === request.policyId &&
201
+ item.policyVersion === request.policyVersion &&
202
+ digestEvidenceFusionPolicyV1(item) === request.policyDigest);
203
+ const templates = policy?.eligibilityRules.filter((rule) => rule.maximumProfileAgeMs === request.maximumProfileAgeMs &&
204
+ requirementsEqual(rule.requirements, request.requirements)) ?? [];
205
+ if (templates.length !== 1)
206
+ throw new TrustValidationError("eligibility request is not an exact policy template");
207
+ const reasons = new Set();
208
+ const policyHead = state.policyHeads.find((head) => head.policyId === request.policyId);
209
+ if (!policyHead ||
210
+ policyHead.policyVersion !== request.policyVersion ||
211
+ policyHead.policyDigest !== request.policyDigest)
212
+ reasons.add("policy_mismatch");
213
+ const profileKey = digestTrustProfileKeyV1({
214
+ tenantId: request.tenantId,
215
+ subjectDigest: request.subjectDigest,
216
+ scopeDigest: request.scopeDigest,
217
+ policyDigest: request.policyDigest,
218
+ });
219
+ const profile = state.profiles.find((item) => item.profileId === request.profileId &&
220
+ item.profileDigest === request.profileDigest) ?? null;
221
+ const profileHead = state.profileHeads.find((head) => head.profileKey === profileKey);
222
+ const hasUnmaterializedSuccessor = state.fusionDecisions.some((decision) => decision.tenantId === request.tenantId &&
223
+ decision.subjectDigest === request.subjectDigest &&
224
+ decision.scopeDigest === request.scopeDigest &&
225
+ decision.policyId === request.policyId &&
226
+ decision.policyVersion === request.policyVersion &&
227
+ decision.policyDigest === request.policyDigest &&
228
+ decision.previousProfileDigest === request.profileDigest &&
229
+ decision.evaluatedAtLogicalMs <= logicalTimeMs &&
230
+ !state.profiles.some((candidate) => candidate.fusionDecisionId === decision.fusionDecisionId &&
231
+ candidate.fusionDecisionDigest === decision.fusionDecisionDigest));
232
+ const profileAvailable = profile !== null &&
233
+ !hasUnmaterializedSuccessor &&
234
+ profileHead?.profileId === request.profileId &&
235
+ profileHead.profileDigest === request.profileDigest &&
236
+ profile.tenantId === request.tenantId &&
237
+ profile.subjectDigest === request.subjectDigest &&
238
+ profile.scopeDigest === request.scopeDigest &&
239
+ profile.policyId === request.policyId &&
240
+ profile.policyVersion === request.policyVersion &&
241
+ profile.policyDigest === request.policyDigest &&
242
+ profile.updatedAtLogicalMs <= logicalTimeMs;
243
+ if (!profileAvailable)
244
+ reasons.add("profile_unavailable");
245
+ else if (logicalTimeMs - profile.updatedAtLogicalMs >
246
+ request.maximumProfileAgeMs)
247
+ reasons.add("profile_stale");
248
+ const dimensions = new Map(profileAvailable
249
+ ? profile.dimensions.map((item) => [item.dimensionId, item])
250
+ : []);
251
+ let hasUnavailableRequirement = false;
252
+ let hasRestrictedRequirement = false;
253
+ const requirementResults = request.requirements.map((requirement) => {
254
+ const dimension = dimensions.get(requirement.dimensionId);
255
+ if (!dimension)
256
+ hasUnavailableRequirement = true;
257
+ else if (dimension.uncertaintyBasisPoints >
258
+ requirement.maximumUncertaintyBasisPoints)
259
+ hasUnavailableRequirement = true;
260
+ else if (dimension.scoreBasisPoints < requirement.minimumScoreBasisPoints)
261
+ hasRestrictedRequirement = true;
262
+ return {
263
+ dimensionId: requirement.dimensionId,
264
+ observedScoreBasisPoints: dimension?.scoreBasisPoints ?? null,
265
+ observedUncertaintyBasisPoints: dimension?.uncertaintyBasisPoints ?? null,
266
+ met: dimension !== undefined &&
267
+ dimension.scoreBasisPoints >= requirement.minimumScoreBasisPoints &&
268
+ dimension.uncertaintyBasisPoints <=
269
+ requirement.maximumUncertaintyBasisPoints,
270
+ };
271
+ });
272
+ if (hasUnavailableRequirement)
273
+ reasons.add("profile_unavailable");
274
+ if (hasRestrictedRequirement)
275
+ reasons.add("eligibility_restricted");
276
+ const quarantineHeads = new Map(state.quarantineHeads.map((head) => [head.quarantineKey, head]));
277
+ const quarantines = state.quarantines
278
+ .filter((item) => {
279
+ const head = quarantineHeads.get(item.quarantineKey);
280
+ return (item.tenantId === request.tenantId &&
281
+ item.subjectDigest === request.subjectDigest &&
282
+ item.scopeDigest === request.scopeDigest &&
283
+ item.policyDigest === request.policyDigest &&
284
+ request.requirements.some((requirement) => requirement.dimensionId === item.dimensionId) &&
285
+ (item.status === "active" || item.status === "review_required") &&
286
+ head?.quarantineId === item.quarantineId &&
287
+ head.status === item.status);
288
+ })
289
+ .sort((left, right) => compare(left.quarantineId, right.quarantineId));
290
+ if (quarantines.some((item) => item.status === "active" && item.reviewAfterLogicalMs > logicalTimeMs))
291
+ reasons.add("quarantine_activated");
292
+ if (quarantines.some((item) => item.status === "review_required" ||
293
+ (item.status === "active" &&
294
+ item.reviewAfterLogicalMs <= logicalTimeMs)))
295
+ reasons.add("quarantine_review_required");
296
+ const disposition = reasons.has("policy_mismatch") ||
297
+ reasons.has("profile_unavailable") ||
298
+ reasons.has("profile_stale")
299
+ ? "unavailable"
300
+ : quarantines.length > 0
301
+ ? "quarantined"
302
+ : reasons.has("eligibility_restricted")
303
+ ? "restricted"
304
+ : "eligible";
305
+ const body = {
306
+ schemaVersion: 1,
307
+ requestDigest: digestTrustEligibilityRequestV1(request),
308
+ subjectDigest: request.subjectDigest,
309
+ scopeDigest: request.scopeDigest,
310
+ policyDigest: request.policyDigest,
311
+ profileId: request.profileId,
312
+ profileDigest: request.profileDigest,
313
+ quarantineRecordIds: quarantines.map((item) => item.quarantineId),
314
+ evaluatedAtLogicalMs: logicalTimeMs,
315
+ disposition,
316
+ requirementResults,
317
+ reasonCodes: [...reasons].sort(compare),
318
+ };
319
+ const digest = digestTrustJsonV1("eligibility-decision", body);
320
+ return validateTrustEligibilityDecisionV1({
321
+ ...body,
322
+ eligibilityDecisionId: `eligibility-decision:${digest}`,
323
+ });
324
+ }
325
+ //# sourceMappingURL=eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../src/eligibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { EvidenceAttestationV1, EvidenceChallengeV1, EvidenceClaimV1, EvidenceContentV1, EvidenceReferenceV1, EvidenceRetractionV1, EvidenceScopeV1, TrustObservationV1, TrustSubjectV1 } from "./types.js";
2
+ export declare function digestScopeV1(scope: EvidenceScopeV1): string;
3
+ export declare function digestSubjectV1(subject: TrustSubjectV1): string;
4
+ export declare function digestRootBasisV1(references: readonly EvidenceReferenceV1[]): string;
5
+ export declare function digestClaimRelationV1(claim: Pick<EvidenceClaimV1, "sourceId" | "sourceKind" | "subject" | "scope" | "criterionId" | "rootBasisDigest">): string;
6
+ export declare function digestAttestationRelationV1(record: Pick<EvidenceAttestationV1, "sourceId" | "sourceKind" | "claimId" | "claimDigest">): string;
7
+ export declare function digestChallengeRelationV1(record: Pick<EvidenceChallengeV1, "sourceId" | "sourceKind" | "targetKind" | "targetId" | "targetDigest">): string;
8
+ export declare function digestRetractionRelationV1(record: Pick<EvidenceRetractionV1, "sourceId" | "sourceKind" | "targetKind" | "targetId" | "targetDigest">): string;
9
+ export declare function validateEvidenceContentV1(value: unknown): EvidenceContentV1;
10
+ export declare function createEvidenceClaimV1(input: Omit<EvidenceClaimV1, "claimId" | "claimRelationDigest" | "rootBasisDigest" | "assertionDigest">): EvidenceClaimV1;
11
+ export declare function validateEvidenceClaimV1(value: unknown): EvidenceClaimV1;
12
+ export declare function validateEvidenceAttestationV1(value: unknown): EvidenceAttestationV1;
13
+ export declare function validateEvidenceChallengeV1(value: unknown): EvidenceChallengeV1;
14
+ export declare function validateEvidenceRetractionV1(value: unknown): EvidenceRetractionV1;
15
+ export declare function createEvidenceAttestationV1(input: Omit<EvidenceAttestationV1, "attestationId" | "attestationRelationDigest">): EvidenceAttestationV1;
16
+ export declare function createEvidenceChallengeV1(input: Omit<EvidenceChallengeV1, "challengeId" | "challengeRelationDigest">): EvidenceChallengeV1;
17
+ export declare function createEvidenceRetractionV1(input: Omit<EvidenceRetractionV1, "retractionId" | "retractionRelationDigest">): EvidenceRetractionV1;
18
+ export declare function createTrustObservationV1(input: Omit<TrustObservationV1, "observationId">): TrustObservationV1;
19
+ export declare function validateTrustObservationV1(value: unknown): TrustObservationV1;
20
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACf,MAAM,YAAY,CAAC;AA+CpB,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAE5D;AACD,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAE/D;AACD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,mBAAmB,EAAE,GACzC,MAAM,CAER;AACD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,CACT,eAAe,EACb,UAAU,GACV,YAAY,GACZ,SAAS,GACT,OAAO,GACP,aAAa,GACb,iBAAiB,CACpB,GACA,MAAM,CAYR;AACD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,IAAI,CACV,qBAAqB,EACrB,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,CACtD,GACA,MAAM,CAUR;AACD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,IAAI,CACV,mBAAmB,EACnB,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CACvE,GACA,MAAM,CAWR;AACD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,IAAI,CACV,oBAAoB,EACpB,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CACvE,GACA,MAAM,CAWR;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAiD3E;AAoDD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,IAAI,CACT,eAAe,EACf,SAAS,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,iBAAiB,CAC1E,GACA,eAAe,CA8BjB;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CA0BvE;AA6ID,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,qBAAqB,CAEvB;AACD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,mBAAmB,CAErB;AACD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,oBAAoB,CAEtB;AACD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,IAAI,CACT,qBAAqB,EACrB,eAAe,GAAG,2BAA2B,CAC9C,GACA,qBAAqB,CAOvB;AACD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa,GAAG,yBAAyB,CAAC,GAC1E,mBAAmB,CAOrB;AACD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,IAAI,CACT,oBAAoB,EACpB,cAAc,GAAG,0BAA0B,CAC5C,GACA,oBAAoB,CAOtB;AAgCD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,GAC/C,kBAAkB,CAUpB;AA0FD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAU7E"}