@quiltdata/benchling-webhook 0.4.13 → 0.5.0-20251029T180511Z

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 (87) hide show
  1. package/dist/bin/benchling-webhook.d.ts +50 -0
  2. package/dist/bin/benchling-webhook.d.ts.map +1 -0
  3. package/dist/bin/benchling-webhook.js +268 -0
  4. package/dist/bin/benchling-webhook.js.map +1 -0
  5. package/dist/bin/cli.d.ts +3 -0
  6. package/dist/bin/cli.d.ts.map +1 -0
  7. package/dist/bin/cli.js +83 -0
  8. package/dist/bin/cli.js.map +1 -0
  9. package/dist/bin/commands/deploy.d.ts +7 -0
  10. package/dist/bin/commands/deploy.d.ts.map +1 -0
  11. package/dist/bin/commands/deploy.js +154 -0
  12. package/dist/bin/commands/deploy.js.map +1 -0
  13. package/dist/bin/commands/init.d.ts +9 -0
  14. package/dist/bin/commands/init.d.ts.map +1 -0
  15. package/dist/bin/commands/init.js +155 -0
  16. package/dist/bin/commands/init.js.map +1 -0
  17. package/dist/bin/commands/validate.d.ts +5 -0
  18. package/dist/bin/commands/validate.d.ts.map +1 -0
  19. package/dist/bin/commands/validate.js +135 -0
  20. package/dist/bin/commands/validate.js.map +1 -0
  21. package/dist/bin/get-env.js +180 -0
  22. package/dist/bin/publish.js +327 -0
  23. package/{bin → dist/bin}/version.js +73 -37
  24. package/dist/lib/alb-api-gateway.d.ts +17 -0
  25. package/dist/lib/alb-api-gateway.d.ts.map +1 -0
  26. package/dist/lib/alb-api-gateway.js +191 -0
  27. package/dist/lib/alb-api-gateway.js.map +1 -0
  28. package/dist/lib/benchling-webhook-stack.d.ts +25 -0
  29. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -0
  30. package/dist/lib/benchling-webhook-stack.js +165 -0
  31. package/dist/lib/benchling-webhook-stack.js.map +1 -0
  32. package/dist/lib/constants.d.ts +28 -0
  33. package/dist/lib/constants.d.ts.map +1 -0
  34. package/dist/lib/constants.js +31 -0
  35. package/dist/lib/constants.js.map +1 -0
  36. package/dist/lib/ecr-repository.d.ts +16 -0
  37. package/dist/lib/ecr-repository.d.ts.map +1 -0
  38. package/dist/lib/ecr-repository.js +90 -0
  39. package/dist/lib/ecr-repository.js.map +1 -0
  40. package/dist/lib/fargate-service.d.ts +32 -0
  41. package/dist/lib/fargate-service.d.ts.map +1 -0
  42. package/dist/lib/fargate-service.js +294 -0
  43. package/dist/lib/fargate-service.js.map +1 -0
  44. package/{lib/index.ts → dist/lib/index.d.ts} +5 -5
  45. package/dist/lib/index.d.ts.map +1 -0
  46. package/dist/lib/index.js +38 -0
  47. package/dist/lib/index.js.map +1 -0
  48. package/dist/lib/templates/base-template.d.ts +14 -0
  49. package/dist/lib/templates/base-template.d.ts.map +1 -0
  50. package/dist/lib/templates/base-template.js +68 -0
  51. package/dist/lib/templates/base-template.js.map +1 -0
  52. package/dist/lib/templates/readme.d.ts +11 -0
  53. package/dist/lib/templates/readme.d.ts.map +1 -0
  54. package/dist/lib/templates/readme.js +105 -0
  55. package/dist/lib/templates/readme.js.map +1 -0
  56. package/dist/lib/utils/config.d.ts +68 -0
  57. package/dist/lib/utils/config.d.ts.map +1 -0
  58. package/dist/lib/utils/config.js +195 -0
  59. package/dist/lib/utils/config.js.map +1 -0
  60. package/dist/lib/utils/stack-inference.d.ts +73 -0
  61. package/dist/lib/utils/stack-inference.d.ts.map +1 -0
  62. package/dist/lib/utils/stack-inference.js +410 -0
  63. package/dist/lib/utils/stack-inference.js.map +1 -0
  64. package/dist/package.json +90 -0
  65. package/package.json +31 -20
  66. package/AGENTS.md +0 -226
  67. package/CHANGELOG.md +0 -91
  68. package/bin/benchling-webhook.ts +0 -172
  69. package/bin/cli-auth.sh +0 -74
  70. package/bin/get-env.js +0 -564
  71. package/bin/publish-manual.js +0 -211
  72. package/bin/release-notes.sh +0 -82
  73. package/bin/sync-version.js +0 -72
  74. package/cdk.context.json +0 -58
  75. package/cdk.json +0 -85
  76. package/doc/NPM_OIDC_SETUP.md +0 -95
  77. package/doc/PARAMETERS.md +0 -203
  78. package/doc/RELEASE.md +0 -297
  79. package/doc/RELEASE_NOTES.md +0 -64
  80. package/jest.config.js +0 -14
  81. package/lib/README.md +0 -50
  82. package/lib/oauth-tester.json +0 -35
  83. package/tsconfig.json +0 -34
  84. /package/{bin → dist/bin}/check-logs.js +0 -0
  85. /package/{bin → dist/bin}/release.js +0 -0
  86. /package/{bin → dist/bin}/send-event.js +0 -0
  87. /package/{bin → dist/bin}/test-invalid-signature.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IAErB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IAGtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAGlC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBnE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAyExE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA0CvE"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadDotenv = loadDotenv;
4
+ exports.loadConfigSync = loadConfigSync;
5
+ exports.mergeInferredConfig = mergeInferredConfig;
6
+ exports.validateConfig = validateConfig;
7
+ exports.formatValidationErrors = formatValidationErrors;
8
+ const dotenv_1 = require("dotenv");
9
+ const dotenv_expand_1 = require("dotenv-expand");
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
12
+ /**
13
+ * Load .env file and expand variables
14
+ */
15
+ function loadDotenv(filePath) {
16
+ const resolvedPath = (0, path_1.resolve)(filePath);
17
+ if (!(0, fs_1.existsSync)(resolvedPath)) {
18
+ return {};
19
+ }
20
+ const result = (0, dotenv_1.config)({ path: resolvedPath });
21
+ if (result.error) {
22
+ throw new Error(`Failed to load ${filePath}: ${result.error.message}`);
23
+ }
24
+ // Expand variables like ${VAR}
25
+ if (result.parsed) {
26
+ (0, dotenv_expand_1.expand)(result);
27
+ }
28
+ return result.parsed || {};
29
+ }
30
+ /**
31
+ * Load configuration from multiple sources with priority:
32
+ * 1. CLI options (highest)
33
+ * 2. Environment variables
34
+ * 3. .env file
35
+ * 4. Inferred values (will be added separately)
36
+ */
37
+ function loadConfigSync(options = {}) {
38
+ // 1. Load .env file
39
+ const envFile = options.envFile || ".env";
40
+ const dotenvVars = (0, fs_1.existsSync)(envFile) ? loadDotenv(envFile) : {};
41
+ // 2. Merge with process.env
42
+ const envVars = { ...dotenvVars, ...process.env };
43
+ // 3. Build config with CLI options taking priority
44
+ const config = {
45
+ // Quilt
46
+ quiltCatalog: options.catalog || envVars.QUILT_CATALOG,
47
+ quiltUserBucket: options.bucket || envVars.QUILT_USER_BUCKET,
48
+ quiltDatabase: envVars.QUILT_DATABASE,
49
+ // Benchling
50
+ benchlingTenant: options.tenant || envVars.BENCHLING_TENANT,
51
+ benchlingClientId: options.clientId || envVars.BENCHLING_CLIENT_ID,
52
+ benchlingClientSecret: options.clientSecret || envVars.BENCHLING_CLIENT_SECRET,
53
+ benchlingAppDefinitionId: options.appId || envVars.BENCHLING_APP_DEFINITION_ID,
54
+ // AWS
55
+ cdkAccount: envVars.CDK_DEFAULT_ACCOUNT,
56
+ cdkRegion: options.region || envVars.CDK_DEFAULT_REGION || envVars.AWS_REGION,
57
+ awsProfile: options.profile || envVars.AWS_PROFILE,
58
+ // SQS
59
+ queueName: envVars.QUEUE_NAME,
60
+ sqsQueueUrl: envVars.SQS_QUEUE_URL,
61
+ // Optional
62
+ pkgPrefix: envVars.PKG_PREFIX || "benchling",
63
+ pkgKey: envVars.PKG_KEY || "experiment_id",
64
+ logLevel: envVars.LOG_LEVEL || "INFO",
65
+ webhookAllowList: envVars.WEBHOOK_ALLOW_LIST,
66
+ enableWebhookVerification: envVars.ENABLE_WEBHOOK_VERIFICATION ?? "true",
67
+ createEcrRepository: envVars.CREATE_ECR_REPOSITORY,
68
+ ecrRepositoryName: envVars.ECR_REPOSITORY_NAME || "quiltdata/benchling",
69
+ };
70
+ // Remove undefined values
71
+ return Object.fromEntries(Object.entries(config).filter(([, v]) => v !== undefined));
72
+ }
73
+ /**
74
+ * Merge inferred configuration with loaded config
75
+ */
76
+ function mergeInferredConfig(config, inferredVars) {
77
+ // Only use inferred values if not already set
78
+ return {
79
+ cdkAccount: config.cdkAccount || inferredVars.CDK_DEFAULT_ACCOUNT,
80
+ cdkRegion: config.cdkRegion || inferredVars.CDK_DEFAULT_REGION,
81
+ queueName: config.queueName || inferredVars.QUEUE_NAME,
82
+ sqsQueueUrl: config.sqsQueueUrl || inferredVars.SQS_QUEUE_URL,
83
+ quiltDatabase: config.quiltDatabase || inferredVars.QUILT_DATABASE,
84
+ ...config, // User values always take precedence
85
+ };
86
+ }
87
+ /**
88
+ * Validate configuration and return detailed errors
89
+ */
90
+ function validateConfig(config) {
91
+ const errors = [];
92
+ const warnings = [];
93
+ // Required user-provided values
94
+ const requiredUserFields = [
95
+ ["quiltCatalog", "Quilt catalog URL", "Your Quilt catalog domain (e.g., quilt-catalog.company.com)"],
96
+ ["quiltUserBucket", "S3 bucket for data", "The S3 bucket where you want to store Benchling exports"],
97
+ ["benchlingTenant", "Benchling tenant", "Your Benchling tenant name (use XXX if you login to XXX.benchling.com)"],
98
+ ["benchlingClientId", "Benchling OAuth client ID", "OAuth client ID from your Benchling app"],
99
+ ["benchlingClientSecret", "Benchling OAuth client secret", "OAuth client secret from your Benchling app"],
100
+ ];
101
+ for (const [field, message, helpText] of requiredUserFields) {
102
+ if (!config[field]) {
103
+ errors.push({
104
+ field: field,
105
+ message,
106
+ canInfer: false,
107
+ helpText,
108
+ });
109
+ }
110
+ }
111
+ // Conditional requirement for app definition ID
112
+ if (config.enableWebhookVerification !== "false" && !config.benchlingAppDefinitionId) {
113
+ errors.push({
114
+ field: "benchlingAppDefinitionId",
115
+ message: "Benchling app definition ID",
116
+ canInfer: false,
117
+ helpText: "Required when webhook verification is enabled (ENABLE_WEBHOOK_VERIFICATION=true). Set ENABLE_WEBHOOK_VERIFICATION=false to skip this.",
118
+ });
119
+ }
120
+ // Required inferred values
121
+ const requiredInferredFields = [
122
+ ["cdkAccount", "AWS account ID"],
123
+ ["cdkRegion", "AWS region"],
124
+ ["queueName", "SQS queue name"],
125
+ ["sqsQueueUrl", "SQS queue URL"],
126
+ ["quiltDatabase", "Quilt database name"],
127
+ ];
128
+ for (const [field, message] of requiredInferredFields) {
129
+ if (!config[field]) {
130
+ errors.push({
131
+ field: field,
132
+ message,
133
+ canInfer: true,
134
+ helpText: "This value should be automatically inferred from your Quilt catalog configuration",
135
+ });
136
+ }
137
+ }
138
+ // Validation rules for existing values
139
+ if (config.quiltCatalog && !/^[a-z0-9.-]+\.[a-z]{2,}$/i.test(config.quiltCatalog)) {
140
+ warnings.push("QUILT_CATALOG should be a domain name without protocol (e.g., catalog.company.com, not https://catalog.company.com)");
141
+ }
142
+ if (config.quiltUserBucket && !/^[a-z0-9.-]{3,63}$/.test(config.quiltUserBucket)) {
143
+ warnings.push("QUILT_USER_BUCKET does not look like a valid S3 bucket name");
144
+ }
145
+ // Security warnings
146
+ if (config.enableWebhookVerification === "false") {
147
+ warnings.push("Webhook verification is disabled - this is NOT recommended for production use");
148
+ }
149
+ return {
150
+ valid: errors.length === 0,
151
+ errors,
152
+ warnings,
153
+ };
154
+ }
155
+ /**
156
+ * Format validation errors for CLI display
157
+ */
158
+ function formatValidationErrors(result) {
159
+ const lines = [];
160
+ if (result.errors.length > 0) {
161
+ lines.push("Missing required configuration:");
162
+ lines.push("");
163
+ const userErrors = result.errors.filter(e => !e.canInfer);
164
+ const inferErrors = result.errors.filter(e => e.canInfer);
165
+ if (userErrors.length > 0) {
166
+ lines.push("Values you must provide:");
167
+ for (const error of userErrors) {
168
+ lines.push(` • ${error.message}`);
169
+ if (error.helpText) {
170
+ lines.push(` ${error.helpText}`);
171
+ }
172
+ }
173
+ lines.push("");
174
+ }
175
+ if (inferErrors.length > 0) {
176
+ lines.push("Values that could not be inferred:");
177
+ for (const error of inferErrors) {
178
+ lines.push(` • ${error.message}`);
179
+ if (error.helpText) {
180
+ lines.push(` ${error.helpText}`);
181
+ }
182
+ }
183
+ lines.push("");
184
+ }
185
+ }
186
+ if (result.warnings.length > 0) {
187
+ lines.push("Warnings:");
188
+ for (const warning of result.warnings) {
189
+ lines.push(` ⚠ ${warning}`);
190
+ }
191
+ lines.push("");
192
+ }
193
+ return lines.join("\n");
194
+ }
195
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Stack inference utilities for discovering CloudFormation stacks
3
+ * and extracting configuration from Quilt catalogs
4
+ */
5
+ export interface QuiltCatalogConfig {
6
+ region: string;
7
+ apiGatewayEndpoint: string;
8
+ analyticsBucket: string;
9
+ serviceBucket: string;
10
+ stackVersion?: string;
11
+ [key: string]: unknown;
12
+ }
13
+ export interface StackDetails {
14
+ outputs: Array<{
15
+ OutputKey: string;
16
+ OutputValue: string;
17
+ }>;
18
+ parameters: Array<{
19
+ ParameterKey: string;
20
+ ParameterValue: string;
21
+ }>;
22
+ }
23
+ export interface InferredStackInfo {
24
+ config: QuiltCatalogConfig;
25
+ stackName: string | null;
26
+ stackDetails: StackDetails;
27
+ inferredVars: Record<string, string>;
28
+ }
29
+ /**
30
+ * Fetch JSON from a URL using native Node.js modules
31
+ */
32
+ export declare function fetchJson(url: string): Promise<unknown>;
33
+ /**
34
+ * Extract bucket name from S3 ARN or bucket name string
35
+ */
36
+ export declare function extractBucketName(bucketString: string): string;
37
+ /**
38
+ * Try to find CloudFormation stack by searching for resource
39
+ */
40
+ export declare function findStackByResource(region: string, resourceId: string): string | null;
41
+ /**
42
+ * Search for stacks by name pattern
43
+ */
44
+ export declare function searchStacksByPattern(region: string, pattern: string): string[];
45
+ /**
46
+ * Get stack outputs and parameters
47
+ */
48
+ export declare function getStackDetails(region: string, stackName: string): StackDetails;
49
+ /**
50
+ * Get AWS account ID
51
+ */
52
+ export declare function getAwsAccountId(): string | null;
53
+ /**
54
+ * Extract API Gateway ID from endpoint URL
55
+ */
56
+ export declare function extractApiGatewayId(endpoint: string): string | null;
57
+ /**
58
+ * Extract stack name prefix from bucket names
59
+ */
60
+ export declare function inferStackPrefix(analyticsBucket?: string, serviceBucket?: string): string;
61
+ /**
62
+ * Find CloudFormation stack using multiple search strategies
63
+ */
64
+ export declare function findStack(region: string, apiGatewayId: string | null, analyticsBucket: string, serviceBucket: string, stackPrefix: string, verbose?: boolean): string | null;
65
+ /**
66
+ * Build inferred configuration from stack details
67
+ */
68
+ export declare function buildInferredConfig(config: QuiltCatalogConfig, stackName: string | null, stackDetails: StackDetails, region: string, accountId: string | null, catalogDomain: string): Record<string, string>;
69
+ /**
70
+ * Parse config.json and infer stack information
71
+ */
72
+ export declare function inferStackConfig(catalogUrl: string, verbose?: boolean): Promise<InferredStackInfo>;
73
+ //# sourceMappingURL=stack-inference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-inference.d.ts","sourceRoot":"","sources":["../../../lib/utils/stack-inference.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAU/E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAsB/E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAS/C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAYzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CACrB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,UAAO,GACf,MAAM,GAAG,IAAI,CAuDf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,EAAE,MAAM,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuFxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,UAAO,GACf,OAAO,CAAC,iBAAiB,CAAC,CAuH5B"}