Repository: tmokmss/deploy-time-build (language: python)

Issue:
npm ERR! EMFILE: too many open files
When there are many dependencies in a package-lock.json, `npm ci` fails due to the error: `npm ERR! EMFILE: too many open files`.

Because the Lambda environment has a hard limit of [1024 file descriptors](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution), there are not many things we can do as long as we use Lambda for build environment. To overcome this limitation, we have to use other compute service like CodeBuild.

c.f. https://aws.amazon.com/blogs/infrastructure-and-automation/using-a-long-lived-compute-resource-as-a-custom-resource-in-aws-cloudformation/


Discussion / hints:

Fix patch:
diff --git a/API.md b/API.md
index 0eb44a3..dc854bd 100644
--- a/API.md
+++ b/API.md
@@ -126,6 +126,7 @@ const assetConfig: AssetConfig = { ... }
 | <code><a href="#deploy-time-build.AssetConfig.property.readers">readers</a></code> | <code>aws-cdk-lib.aws_iam.IGrantable[]</code> | A list of principals that should be able to read this asset from S3. |
 | <code><a href="#deploy-time-build.AssetConfig.property.path">path</a></code> | <code>string</code> | The disk location of the asset. |
 | <code><a href="#deploy-time-build.AssetConfig.property.commands">commands</a></code> | <code>string[]</code> | Shell commands executed right after the asset zip is extracted to the build environment. |
+| <code><a href="#deploy-time-build.AssetConfig.property.extractPath">extractPath</a></code> | <code>string</code> | Relative path from a build directory to the directory where the asset is extracted. |
 
 ---
 
@@ -273,6 +274,19 @@ Shell commands executed right after the asset zip is extracted to the build envi
 
 ---
 
+##### `extractPath`<sup>Optional</sup> <a name="extractPath" id="deploy-time-build.AssetConfig.property.extractPath"></a>
+
+```typescript
+public readonly extractPath: string;
+```
+
+- *Type:* string
+- *Default:* basename of the asset path.
+
+Relative path from a build directory to the directory where the asset is extracted.
+
+---
+
 ### NodejsBuildProps <a name="NodejsBuildProps" id="deploy-time-build.NodejsBuildProps"></a>
 
 #### Initializer <a name="Initializer" id="deploy-time-build.NodejsBuildProps.Initializer"></a>
@@ -289,12 +303,13 @@ const nodejsBuildProps: NodejsBuildProps = { ... }
 | --- | --- | --- |
 | <code><a href="#deploy-time-build.NodejsBuildProps.property.assets">assets</a></code> | <code><a href="#deploy-time-build.AssetConfig">AssetConfig</a>[]</code> | The AssetProps from which s3-assets are created and copied to the build environment. |
 | <code><a href="#deploy-time-build.NodejsBuildProps.property.destinationBucket">destinationBucket</a></code> | <code>aws-cdk-lib.aws_s3.IBucket</code> | S3 Bucket to which your build artifacts are finally deployed. |
-| <code><a href="#deploy-time-build.NodejsBuildProps.property.outputSourceDirectory">outputSourceDirectory</a></code> | <code>string</code> | The path to the directory that contains your build artifacts (relative to the working directory.). |
+| <code><a href="#deploy-time-build.NodejsBuildProps.property.outputSourceDirectory">outputSourceDirectory</a></code> | <code>string</code> | Relative path from the working directory to the directory where the build artifacts are output. |
 | <code><a href="#deploy-time-build.NodejsBuildProps.property.buildCommands">buildCommands</a></code> | <code>string[]</code> | Shell commands to build your project. |
 | <code><a href="#deploy-time-build.NodejsBuildProps.property.buildEnvironment">buildEnvironment</a></code> | <code>{[ key: string ]: string}</code> | Environment variables injected to the build environment. |
 | <code><a href="#deploy-time-build.NodejsBuildProps.property.destinationKeyPrefix">destinationKeyPrefix</a></code> | <code>string</code> | Key prefix to deploy your build artifact. |
 | <code><a href="#deploy-time-build.NodejsBuildProps.property.distribution">distribution</a></code> | <code>aws-cdk-lib.aws_cloudfront.IDistribution</code> | The distribution you are using to publish you build artifact. |
-| <code><a href="#deploy-time-build.NodejsBuildProps.property.workingDirectory">workingDirectory</a></code> | <code>string</code> | The name of the working directory of build process in the build enironment. |
+| <code><a href="#deploy-time-build.NodejsBuildProps.property.nodejsVersion">nodejsVersion</a></code> | <code>number</code> | The version of Node.js to use in a build environment. Available versions: 12, 14, 16, 18. |
+| <code><a href="#deploy-time-build.NodejsBuildProps.property.workingDirectory">workingDirectory</a></code> | <code>string</code> | Relative path from the build directory to the directory where build commands run. |
 
 ---
 
@@ -330,7 +345,7 @@ public readonly outputSourceDirectory: string;
 
 - *Type:* string
 
-The path to the directory that contains your build artifacts (relative to the working directory.).
+Relative path from the working directory to the directory where the build artifacts are output.
 
 ---
 
@@ -392,6 +407,19 @@ If any specified, the caches are invalidated on new artifact deployments.
 
 ---
 
+##### `nodejsVersion`<sup>Optional</sup> <a name="nodejsVersion" id="deploy-time-build.NodejsBuildProps.property.nodejsVersion"></a>
+
+```typescript
+public readonly nodejsVersion: number;
+```
+
+- *Type:* number
+- *Default:* 18
+
+The version of Node.js to use in a build environment. Available versions: 12, 14, 16, 18.
+
+---
+
 ##### `workingDirectory`<sup>Optional</sup> <a name="workingDirectory" id="deploy-time-build.NodejsBuildProps.property.workingDirectory"></a>
 
 ```typescript
@@ -399,9 +427,9 @@ public readonly workingDirectory: string;
 ```
 
 - *Type:* string
-- *Default:* assetProps[0].assetProps.path
+- *Default:* assetProps[0].extractPath
 
-The name of the working directory of build process in the build enironment.
+Relative path from the build directory to the directory where build commands run.
 
 ---
 
diff --git a/README.md b/README.md
index 6628ae4..77024a2 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,8 @@ Then, the extracted directories will be located as the following:
 └── module1               # extracted module1 assets
 ```
 
+You can also override the path where assets are extracted by `extractPath` property for each asset.
+
 Please also check [the example directory](./example/) for a complete example. 
 
 ## Motivation - why do we need this construct?
diff --git a/example/README.md b/example/README.md
index d1b933f..f03c679 100644
--- a/example/README.md
+++ b/example/README.md
@@ -1,7 +1,7 @@
 ## How to Deploy
 ```sh
 # Assume current directory is the example directory
-cd ../src/lambda/nodejs-build
+cd ../lambda/nodejs-build
 npm ci
 npm run build
 cd -
diff --git a/example/index.ts b/example/index.ts
index f32bebe..516c876 100644
--- a/example/index.ts
+++ b/example/index.ts
@@ -65,6 +65,7 @@ class TestStack extends Stack {
       buildEnvironment: {
         VITE_API_ENDPOINT: api.url,
       },
+      nodejsVersion: 18,
     });
 
     new CfnOutput(this, 'DistributionUrl', {
diff --git a/imgs/architecture.png b/imgs/architecture.png
index 007ae83..3e1de8a 100644
Binary files a/imgs/architecture.png and b/imgs/architecture.png differ
diff --git a/lambda/nodejs-build/index.ts b/lambda/nodejs-build/index.ts
index 792222f..4e06d30 100644
--- a/lambda/nodejs-build/index.ts
+++ b/lambda/nodejs-build/index.ts
@@ -1,13 +1,7 @@
-import * as fs from 'fs';
-import * as path from 'path';
-import AdmZip from 'adm-zip';
-import extract from 'extract-zip';
-import { execSync } from 'child_process';
-import { Readable } from 'stream';
-import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
+import { BatchGetBuildsCommand, CodeBuildClient, StartBuildCommand } from '@aws-sdk/client-codebuild';
 import type { ResourceProperties } from '../../src/types';
 
-const s3 = new S3Client({});
+const cb = new CodeBuildClient({});
 
 type Event = {
   RequestType: 'Create' | 'Update' | 'Delete';
@@ -20,53 +14,98 @@ type Event = {
 };
 
 export const handler = async (event: Event, context: any) => {
-  let rootDir = '';
   console.log(JSON.stringify(event));
 
   try {
     if (event.RequestType == 'Create' || event.RequestType == 'Update') {
       const props = event.ResourceProperties;
-      rootDir = fs.mkdtempSync('/tmp/extract');
 
-      // set npm cache directory under /tmp since other directories are read-only in Lambda env
-      process.env.NPM_CONFIG_CACHE = '/tmp/.npm';
+      // start code build project
+      const build = await cb.send(
+        new StartBuildCommand({
+          projectName: props.codeBuildProjectName,
+          environmentVariablesOverride: [
+            {
+              name: 'input',
+              value: JSON.stringify(
+                props.sources.map((source) => ({
+                  assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`,
+                  extractPath: source.extractPath,
+                  commands: (source.commands ?? []).join(' && '),
+                }))
+              ),
+            },
+            {
+              name: 'buildCommands',
+              value: props.buildCommands.join(' && '),
+            },
+            {
+              name: 'destinationBucketName',
+              value: props.destinationBucketName,
+            },
+            {
+              name: 'destinationObjectKey',
+              value: props.destinationObjectKey,
+            },
+            {
+              name: 'workingDirectory',
+              value: props.workingDirectory,
+            },
+            {
+              name: 'outputSourceDirectory',
+              value: props.outputSourceDirectory,
+            },
+            {
+              name: 'projectName',
+              value: props.codeBuildProjectName,
+            },
+            {
+              name: 'responseURL',
+              value: event.ResponseURL,
+            },
+            {
+              name: 'stackId',
+              value: event.StackId,
+            },
+            {
+              name: 'requestId',
+              value: event.RequestId,
+            },
+            {
+              name: 'logicalResourceId',
+              value: event.LogicalResourceId,
+            },
+            ...Object.entries(props.environment ?? {}).map(([name, value]) => ({
+              name,
+              value,
+            })),
+          ],
+        })
+      );
 
-      // inject environment variables from resource properties
-      Object.entries(props.environment ?? {}).forEach(([key, value]) => (process.env[key] = value));
+      // Sometimes CodeBuild build fails before running buildspec, without calling the CFn callback.
+      // We can poll the status of a build for a few minutes and sendStatus if such errors are detected.
+      // if (build.build?.id == null) {
+      //   throw new Error('build id is null');
+      // }
 
-      // Download and extract each asset, and execute commands if any specified.
-      const promises = props.sources.map(async (p) => {
-        const dir = await extractZip(rootDir, p.directoryName, p.sourceObjectKey, p.sourceBucketName);
-        if (p.commands != null) {
-          execSync(p.commands.join(' && '), { cwd: dir, stdio: 'inherit' });
-        }
-      });
+      // for (let i=0; i< 20; i++) {
+      //   const res = await cb.send(new BatchGetBuildsCommand({ ids: [build.build.id] }));
+      //   const status = res.builds?.[0].buildStatus;
+      //   if (status == null) {
+      //     throw new Error('build status is null');
+      //   }
 
-      await Promise.all(promises);
-
-      console.log(JSON.stringify(process.env));
-      const wd = path.join(rootDir, props.workingDirectory);
-      execSync(props.buildCommands.join(' && '), {
-        cwd: wd,
-        stdio: 'inherit',
-      });
-
-      // zip the artifact directory and upload it to a S3 bucket.
-      const srcPath = path.join(rootDir, props.outputSourceDirectory);
-      await uploadDistDirectory(srcPath, props.destinationBucketName, props.destinationObjectKey);
+      //   await new Promise((resolve) => setTimeout(resolve, 5000));
+      // }
     } else {
-      // how do we process 'Delete' event?
+      // Do nothing on a DELETE event.
+      await sendStatus('SUCCESS', event, context);
     }
-    await sendStatus('SUCCESS', event, context);
   } catch (e) {
     console.log(e);
     const err = e as Error;
     await sendStatus('FAILED', event, context, err.message);
-  } finally {
-    if (rootDir != '') {
-      // remove the working directory to prevent storage leakage
-      fs.rmSync(rootDir, { recursive: true, force: true });
-    }
   }
 };
 
@@ -91,37 +130,3 @@ const sendStatus = async (status: 'SUCCESS' | 'FAILED', event: Event, context: a
     },
   });
 };
-
-const uploadDistDirectory = async (srcPath: string, dstBucket: string, dstKey: string) => {
-  const zip = new AdmZip();
-  zip.addLocalFolder(srcPath);
-  await s3.send(
-    new PutObjectCommand({
-      Body: zip.toBuffer(),
-      Bucket: dstBucket,
-      Key: dstKey,
-    })
-  );
-};
-
-const extractZip = async (rootDir: string, dirName: string, key: string, bucket: string) => {
-  const dir = path.join(rootDir, dirName);
-  fs.mkdirSync(dir, { recursive: true });
-  const zipPath = path.join(dir, 'temp.zip');
-  await downloadS3File(key, bucket, zipPath);
-  await extract(zipPath, { dir });
-  console.log(`extracted to ${dir}`);
-  return dir;
-};
-
-const downloadS3File = async (key: string, bucket: string, dst: string) => {
-  const data = await s3.send(new GetObjectCommand({ Bucket: bucket, Key: key }));
-  await new Promise((resolve, reject) => {
-    if (data.Body instanceof Readable) {
-      data.Body
-        .pipe(fs.createWriteStream(dst))
-        .on('error', (err) => reject(err))
-        .on('close', () => resolve(1));
-    }
-  });
-};
diff --git a/lambda/nodejs-build/package-lock.json b/lambda/nodejs-build/package-lock.json
index 6a14f23..bab825c 100644
--- a/lambda/nodejs-build/package-lock.json
+++ b/lambda/nodejs-build/package-lock.json
@@ -8,1179 +8,945 @@
       "name": "lambda",
       "version": "1.0.0",
       "dependencies": {
-        "@aws-sdk/client-s3": "^3.245.0",
-        "adm-zip": "^0.5.9",
-        "extract-zip": "^2.0.1"
+        "@aws-sdk/client-codebuild": "^3.321.1"
       },
       "devDependencies": {
-        "@types/adm-zip": "^0.5.0",
         "@types/aws-lambda": "^8.10.95",
+        "@types/node": "^18.16.3",
         "esbuild": "^0.14.39"
       }
     },
-    "node_modules/@aws-crypto/crc32": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz",
-      "integrity": "sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==",
-      "dependencies": {
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "tslib": "^1.11.1"
-      }
-    },
-    "node_modules/@aws-crypto/crc32/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-    },
-    "node_modules/@aws-crypto/crc32c": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-2.0.0.tgz",
-      "integrity": "sha512-vF0eMdMHx3O3MoOXUfBZry8Y4ZDtcuskjjKgJz8YfIDjLStxTZrYXk+kZqtl6A0uCmmiN/Eb/JbC/CndTV1MHg==",
-      "dependencies": {
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "tslib": "^1.11.1"
-      }
-    },
-    "node_modules/@aws-crypto/crc32c/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-    },
-    "node_modules/@aws-crypto/ie11-detection": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz",
-      "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==",
-      "dependencies": {
-        "tslib": "^1.11.1"
-      }
-    },
-    "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-    },
-    "node_modules/@aws-crypto/sha1-browser": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-2.0.0.tgz",
-      "integrity": "sha512-3fIVRjPFY8EG5HWXR+ZJZMdWNRpwbxGzJ9IH9q93FpbgCH8u8GHRi46mZXp3cYD7gealmyqpm3ThZwLKJjWJhA==",
+    "node_modules/@aws-sdk/client-codebuild": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.321.1.tgz",
+      "integrity": "sha512-7CQKL9r0moamfD/7we6v5PJNcFahV9M1y/jkvPNkb+aIfbIkBV7EWi7exlUNwVt/ju+MwpGwdixX1QczHy1+3Q==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/client-sts": "3.321.1",
+        "@aws-sdk/config-resolver": "3.310.0",
+        "@aws-sdk/credential-provider-node": "3.321.1",
+        "@aws-sdk/fetch-http-handler": "3.310.0",
+        "@aws-sdk/hash-node": "3.310.0",
+        "@aws-sdk/invalid-dependency": "3.310.0",
+        "@aws-sdk/middleware-content-length": "3.310.0",
+        "@aws-sdk/middleware-endpoint": "3.310.0",
+        "@aws-sdk/middleware-host-header": "3.310.0",
+        "@aws-sdk/middleware-logger": "3.310.0",
+        "@aws-sdk/middleware-recursion-detection": "3.310.0",
+        "@aws-sdk/middleware-retry": "3.310.0",
+        "@aws-sdk/middleware-serde": "3.310.0",
+        "@aws-sdk/middleware-signing": "3.310.0",
+        "@aws-sdk/middleware-stack": "3.310.0",
+        "@aws-sdk/middleware-user-agent": "3.319.0",
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/node-http-handler": "3.321.1",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/smithy-client": "3.316.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "@aws-sdk/util-base64": "3.310.0",
+        "@aws-sdk/util-body-length-browser": "3.310.0",
+        "@aws-sdk/util-body-length-node": "3.310.0",
+        "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+        "@aws-sdk/util-defaults-mode-node": "3.316.0",
+        "@aws-sdk/util-endpoints": "3.319.0",
+        "@aws-sdk/util-retry": "3.310.0",
+        "@aws-sdk/util-user-agent-browser": "3.310.0",
+        "@aws-sdk/util-user-agent-node": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/ie11-detection": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
+      "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
       "dependencies": {
-        "@aws-crypto/ie11-detection": "^2.0.0",
-        "@aws-crypto/supports-web-crypto": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "@aws-sdk/util-locate-window": "^3.0.0",
-        "@aws-sdk/util-utf8-browser": "^3.0.0",
         "tslib": "^1.11.1"
       }
     },
-    "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": {
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/ie11-detection/node_modules/tslib": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
-    "node_modules/@aws-crypto/sha256-browser": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz",
-      "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==",
-      "dependencies": {
-        "@aws-crypto/ie11-detection": "^2.0.0",
-        "@aws-crypto/sha256-js": "^2.0.0",
-        "@aws-crypto/supports-web-crypto": "^2.0.0",
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-browser": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
+      "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+      "dependencies": {
+        "@aws-crypto/ie11-detection": "^3.0.0",
+        "@aws-crypto/sha256-js": "^3.0.0",
+        "@aws-crypto/supports-web-crypto": "^3.0.0",
+        "@aws-crypto/util": "^3.0.0",
+        "@aws-sdk/types": "^3.222.0",
         "@aws-sdk/util-locate-window": "^3.0.0",
         "@aws-sdk/util-utf8-browser": "^3.0.0",
         "tslib": "^1.11.1"
       }
     },
-    "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": {
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-browser/node_modules/tslib": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
-    "node_modules/@aws-crypto/sha256-js": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz",
-      "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-js": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
+      "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
       "dependencies": {
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
+        "@aws-crypto/util": "^3.0.0",
+        "@aws-sdk/types": "^3.222.0",
         "tslib": "^1.11.1"
       }
     },
-    "node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/sha256-js/node_modules/tslib": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
-    "node_modules/@aws-crypto/supports-web-crypto": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz",
-      "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/supports-web-crypto": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
+      "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
       "dependencies": {
         "tslib": "^1.11.1"
       }
     },
-    "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": {
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
-    "node_modules/@aws-crypto/util": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz",
-      "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/util": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
+      "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
       "dependencies": {
-        "@aws-sdk/types": "^3.110.0",
+        "@aws-sdk/types": "^3.222.0",
         "@aws-sdk/util-utf8-browser": "^3.0.0",
         "tslib": "^1.11.1"
       }
     },
-    "node_modules/@aws-crypto/util/node_modules/tslib": {
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-crypto/util/node_modules/tslib": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
-    "node_modules/@aws-sdk/abort-controller": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz",
-      "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==",
-      "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/abort-controller": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.310.0.tgz",
+      "integrity": "sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g==",
+      "dependencies": {
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/client-sso": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.321.1.tgz",
+      "integrity": "sha512-ecoT4tBGtRJR5G7oLBTMXZmgZZlff1amhSdKPEtkWxv6kWc8VPb5rRuRgVPsDR9HuesI6ZVlODptvGtnfkIJwA==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/config-resolver": "3.310.0",
+        "@aws-sdk/fetch-http-handler": "3.310.0",
+        "@aws-sdk/hash-node": "3.310.0",
+        "@aws-sdk/invalid-dependency": "3.310.0",
+        "@aws-sdk/middleware-content-length": "3.310.0",
+        "@aws-sdk/middleware-endpoint": "3.310.0",
+        "@aws-sdk/middleware-host-header": "3.310.0",
+        "@aws-sdk/middleware-logger": "3.310.0",
+        "@aws-sdk/middleware-recursion-detection": "3.310.0",
+        "@aws-sdk/middleware-retry": "3.310.0",
+        "@aws-sdk/middleware-serde": "3.310.0",
+        "@aws-sdk/middleware-stack": "3.310.0",
+        "@aws-sdk/middleware-user-agent": "3.319.0",
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/node-http-handler": "3.321.1",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/smithy-client": "3.316.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "@aws-sdk/util-base64": "3.310.0",
+        "@aws-sdk/util-body-length-browser": "3.310.0",
+        "@aws-sdk/util-body-length-node": "3.310.0",
+        "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+        "@aws-sdk/util-defaults-mode-node": "3.316.0",
+        "@aws-sdk/util-endpoints": "3.319.0",
+        "@aws-sdk/util-retry": "3.310.0",
+        "@aws-sdk/util-user-agent-browser": "3.310.0",
+        "@aws-sdk/util-user-agent-node": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/client-sso-oidc": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.321.1.tgz",
+      "integrity": "sha512-PBVfHQbyrsfzbnO6u9d9Sik8JlXGLhHj3zLd87iBkYXBdHwD5NuvwWu7OtjUtrHjP4SfzodVwfjmTbDAFqbtzw==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/config-resolver": "3.310.0",
+        "@aws-sdk/fetch-http-handler": "3.310.0",
+        "@aws-sdk/hash-node": "3.310.0",
+        "@aws-sdk/invalid-dependency": "3.310.0",
+        "@aws-sdk/middleware-content-length": "3.310.0",
+        "@aws-sdk/middleware-endpoint": "3.310.0",
+        "@aws-sdk/middleware-host-header": "3.310.0",
+        "@aws-sdk/middleware-logger": "3.310.0",
+        "@aws-sdk/middleware-recursion-detection": "3.310.0",
+        "@aws-sdk/middleware-retry": "3.310.0",
+        "@aws-sdk/middleware-serde": "3.310.0",
+        "@aws-sdk/middleware-stack": "3.310.0",
+        "@aws-sdk/middleware-user-agent": "3.319.0",
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/node-http-handler": "3.321.1",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/smithy-client": "3.316.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "@aws-sdk/util-base64": "3.310.0",
+        "@aws-sdk/util-body-length-browser": "3.310.0",
+        "@aws-sdk/util-body-length-node": "3.310.0",
+        "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+        "@aws-sdk/util-defaults-mode-node": "3.316.0",
+        "@aws-sdk/util-endpoints": "3.319.0",
+        "@aws-sdk/util-retry": "3.310.0",
+        "@aws-sdk/util-user-agent-browser": "3.310.0",
+        "@aws-sdk/util-user-agent-node": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "tslib": "^2.5.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/client-sts": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.321.1.tgz",
+      "integrity": "sha512-AB+N4a1TVEKl9Sd5O2TxTprEZp7Va6zPZLMraFAYMdmJVBmCmmwyBs7ygju685DpQ1dos5PRsKCRcossyY5pDQ==",
+      "dependencies": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/config-resolver": "3.310.0",
+        "@aws-sdk/credential-provider-node": "3.321.1",
+        "@aws-sdk/fetch-http-handler": "3.310.0",
+        "@aws-sdk/hash-node": "3.310.0",
+        "@aws-sdk/invalid-dependency": "3.310.0",
+        "@aws-sdk/middleware-content-length": "3.310.0",
+        "@aws-sdk/middleware-endpoint": "3.310.0",
+        "@aws-sdk/middleware-host-header": "3.310.0",
+        "@aws-sdk/middleware-logger": "3.310.0",
+        "@aws-sdk/middleware-recursion-detection": "3.310.0",
+        "@aws-sdk/middleware-retry": "3.310.0",
+        "@aws-sdk/middleware-sdk-sts": "3.310.0",
+        "@aws-sdk/middleware-serde": "3.310.0",
+        "@aws-sdk/middleware-signing": "3.310.0",
+        "@aws-sdk/middleware-stack": "3.310.0",
+        "@aws-sdk/middleware-user-agent": "3.319.0",
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/node-http-handler": "3.321.1",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/smithy-client": "3.316.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "@aws-sdk/util-base64": "3.310.0",
+        "@aws-sdk/util-body-length-browser": "3.310.0",
+        "@aws-sdk/util-body-length-node": "3.310.0",
+        "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+        "@aws-sdk/util-defaults-mode-node": "3.316.0",
+        "@aws-sdk/util-endpoints": "3.319.0",
+        "@aws-sdk/util-retry": "3.310.0",
+        "@aws-sdk/util-user-agent-browser": "3.310.0",
+        "@aws-sdk/util-user-agent-node": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "fast-xml-parser": "4.1.2",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/chunked-blob-reader": {
-      "version": "3.188.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.188.0.tgz",
-      "integrity": "sha512-zkPRFZZPL3eH+kH86LDYYXImiClA1/sW60zYOjse9Pgka+eDJlvBN6hcYxwDEKjcwATYiSRR1aVQHcfCinlGXg==",
-      "dependencies": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/chunked-blob-reader-native": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.208.0.tgz",
-      "integrity": "sha512-JeOZ95PW+fJ6bbuqPySYqLqHk1n4+4ueEEraJsiUrPBV0S1ZtyvOGHcnGztKUjr2PYNaiexmpWuvUve9K12HRA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/config-resolver": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz",
+      "integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==",
       "dependencies": {
-        "@aws-sdk/util-base64": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/client-s3": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.245.0.tgz",
-      "integrity": "sha512-wdCrEiqIfwtWebrK7A1giRggwO64S6I2iPXTwRmat4AR6sFlMO02jVFaIDyA8TTiVnBMz7ekT1QFmIjFAKc4uQ==",
-      "dependencies": {
-        "@aws-crypto/sha1-browser": "2.0.0",
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/client-sts": "3.245.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/credential-provider-node": "3.245.0",
-        "@aws-sdk/eventstream-serde-browser": "3.226.0",
-        "@aws-sdk/eventstream-serde-config-resolver": "3.226.0",
-        "@aws-sdk/eventstream-serde-node": "3.226.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-blob-browser": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/hash-stream-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/md5-js": "3.226.0",
-        "@aws-sdk/middleware-bucket-endpoint": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-expect-continue": "3.226.0",
-        "@aws-sdk/middleware-flexible-checksums": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-location-constraint": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-sdk-s3": "3.231.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-signing": "3.226.0",
-        "@aws-sdk/middleware-ssec": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4-multi-region": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-stream-browser": "3.226.0",
-        "@aws-sdk/util-stream-node": "3.226.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "@aws-sdk/util-waiter": "3.226.0",
-        "@aws-sdk/xml-builder": "3.201.0",
-        "fast-xml-parser": "4.0.11",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/client-sso": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz",
-      "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==",
-      "dependencies": {
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/client-sso-oidc": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz",
-      "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==",
-      "dependencies": {
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-config-provider": "3.310.0",
+        "@aws-sdk/util-middleware": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/client-sts": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz",
-      "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==",
-      "dependencies": {
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/credential-provider-node": "3.245.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-sdk-sts": "3.226.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-signing": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "fast-xml-parser": "4.0.11",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/config-resolver": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz",
-      "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-env": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz",
+      "integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==",
       "dependencies": {
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-config-provider": "3.208.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/credential-provider-env": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz",
-      "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-imds": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz",
+      "integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==",
       "dependencies": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/credential-provider-imds": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz",
-      "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-ini": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.321.1.tgz",
+      "integrity": "sha512-prndSVQhiikNaI40bYnM2Q8PkC35FCwhbQnBk6KXNvdtfo9RqatMC639F+6oryb3BuMy++Ij4Yoi8WnPBs5Sww==",
       "dependencies": {
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/credential-provider-env": "3.310.0",
+        "@aws-sdk/credential-provider-imds": "3.310.0",
+        "@aws-sdk/credential-provider-process": "3.310.0",
+        "@aws-sdk/credential-provider-sso": "3.321.1",
+        "@aws-sdk/credential-provider-web-identity": "3.310.0",
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/shared-ini-file-loader": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/credential-provider-ini": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz",
-      "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-node": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.321.1.tgz",
+      "integrity": "sha512-5B1waOwSvY2JMLGRebo7IUqnTaGoCnby9cRbG/dhi7Ke97M3V8380S9THDJ/bktjL8zHEVfBVZy7HhXHzhSjEg==",
       "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.226.0",
-        "@aws-sdk/credential-provider-imds": "3.226.0",
-        "@aws-sdk/credential-provider-process": "3.226.0",
-        "@aws-sdk/credential-provider-sso": "3.245.0",
-        "@aws-sdk/credential-provider-web-identity": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/credential-provider-node": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz",
-      "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==",
-      "dependencies": {
-        "@aws-sdk/credential-provider-env": "3.226.0",
-        "@aws-sdk/credential-provider-imds": "3.226.0",
-        "@aws-sdk/credential-provider-ini": "3.245.0",
-        "@aws-sdk/credential-provider-process": "3.226.0",
-        "@aws-sdk/credential-provider-sso": "3.245.0",
-        "@aws-sdk/credential-provider-web-identity": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/credential-provider-env": "3.310.0",
+        "@aws-sdk/credential-provider-imds": "3.310.0",
+        "@aws-sdk/credential-provider-ini": "3.321.1",
+        "@aws-sdk/credential-provider-process": "3.310.0",
+        "@aws-sdk/credential-provider-sso": "3.321.1",
+        "@aws-sdk/credential-provider-web-identity": "3.310.0",
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/shared-ini-file-loader": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/credential-provider-process": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz",
-      "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-process": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz",
+      "integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==",
       "dependencies": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/shared-ini-file-loader": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/credential-provider-sso": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz",
-      "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-sso": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.321.1.tgz",
+      "integrity": "sha512-kg0rc1OacJFgAvmZj0TOu+BSc+yRdnC5dO/RAag3XU6+hlQI5/C080RQp9Qj6V7ga0HtAJMRwJcUlCPA3RJPug==",
       "dependencies": {
-        "@aws-sdk/client-sso": "3.245.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/token-providers": "3.245.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/client-sso": "3.321.1",
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/shared-ini-file-loader": "3.310.0",
+        "@aws-sdk/token-providers": "3.321.1",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/credential-provider-web-identity": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz",
-      "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/credential-provider-web-identity": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz",
+      "integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==",
       "dependencies": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/eventstream-codec": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.226.0.tgz",
-      "integrity": "sha512-6uPtR8vSwz3fqoZk9hrb6qBYdp3PJ22+JxV5Wimdesvow4kJXSgDQXIxEkxbv6SxB9tNRB4uJHD84RetHEi15Q==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/fetch-http-handler": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz",
+      "integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==",
       "dependencies": {
-        "@aws-crypto/crc32": "2.0.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-hex-encoding": "3.201.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/querystring-builder": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-base64": "3.310.0",
+        "tslib": "^2.5.0"
       }
     },
-    "node_modules/@aws-sdk/eventstream-serde-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.226.0.tgz",
-      "integrity": "sha512-otYC5aZE9eJUqAlKpy8w0rPDQ1eKGvZPtgxWXmFYSO2lDVGfI1nBBNmdZ4MdHqNuQ7ucsKMQYF8BFJ65K2tYPA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/hash-node": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz",
+      "integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==",
       "dependencies": {
-        "@aws-sdk/eventstream-serde-universal": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-buffer-from": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/eventstream-serde-config-resolver": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.226.0.tgz",
-      "integrity": "sha512-A56Gypg+lyEfA5cna+EUH9XTrj0SvRG1gwNW7lrUzviN36SeA/LFTUIOEjxVML3Lowy+EPAcrSZ67h6aepoAig==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/invalid-dependency": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz",
+      "integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       }
     },
-    "node_modules/@aws-sdk/eventstream-serde-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.226.0.tgz",
-      "integrity": "sha512-KWLnKkKDzI9RNkiK6OiSYpG/XjZfue6Bsp/vRG+H5z3fbXdHv4X2+iW+Efu2Kvn7jsUyUv82TCl57DyJ/HKYhQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/is-array-buffer": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz",
+      "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==",
       "dependencies": {
-        "@aws-sdk/eventstream-serde-universal": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/eventstream-serde-universal": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.226.0.tgz",
-      "integrity": "sha512-Q8viYM1Sv90/yIUqyWNeG1GEvyVlAI3GIrInQcCMC+xT59jS+IKGy2y7ojCvSWXnhf5/HMXKcmG092QsqeKy0Q==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-content-length": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz",
+      "integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==",
       "dependencies": {
-        "@aws-sdk/eventstream-codec": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/fetch-http-handler": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz",
-      "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==",
-      "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/querystring-builder": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/hash-blob-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.226.0.tgz",
-      "integrity": "sha512-5DCvWE6L4xGoViEHyjcPFuUe1G2EtNx8TqswWaoaKgyasP/yuRm4H99Ra7rqIrjCcSTAGD9NVsUQvVVw1bGt9w==",
-      "dependencies": {
-        "@aws-sdk/chunked-blob-reader": "3.188.0",
-        "@aws-sdk/chunked-blob-reader-native": "3.208.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/hash-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz",
-      "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-endpoint": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz",
+      "integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/middleware-serde": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "@aws-sdk/util-middleware": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/hash-stream-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.226.0.tgz",
-      "integrity": "sha512-cgNTGlF8SdHaQXtjEmuLXz2U8SLM2JDKtIVPku/lHTMsUsEn+fuv2C+h1f/hvd4aNw5t1zggym7sO1/h/rv56Q==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-host-header": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz",
+      "integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/invalid-dependency": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz",
-      "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==",
-      "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/is-array-buffer": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz",
-      "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-logger": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz",
+      "integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/md5-js": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.226.0.tgz",
-      "integrity": "sha512-ENigJRNudqyh6xsch166SZ4gggHd3XzZJ8gkCU4CWPne04HcR3BkWSO774IuWooCHt8zkaEHKecPurRz6qR+Vw==",
-      "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/middleware-bucket-endpoint": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.226.0.tgz",
-      "integrity": "sha512-A1Vq5W2X7jgTfjqcKPmjoHohF0poP+9fxwL97fQMvzcwmjhtoCV3bLEpo6CGYx0pKPiSlRJXZkRwRPj2hDHDmA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-recursion-detection": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz",
+      "integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-arn-parser": "3.208.0",
-        "@aws-sdk/util-config-provider": "3.208.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-content-length": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz",
-      "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-retry": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz",
+      "integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/service-error-classification": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-middleware": "3.310.0",
+        "@aws-sdk/util-retry": "3.310.0",
+        "tslib": "^2.5.0",
+        "uuid": "^8.3.2"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-endpoint": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz",
-      "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-sdk-sts": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz",
+      "integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==",
       "dependencies": {
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-config-provider": "3.208.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/middleware-signing": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-expect-continue": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.226.0.tgz",
-      "integrity": "sha512-YxvQKTV/eA9P8AgW0hXOgj5Qa+TSnNFfyOkfeP089aP3f6p92b1cESf33TEOKsddive2mHT5LRCN6MuPcgWWrA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-serde": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz",
+      "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-flexible-checksums": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.226.0.tgz",
-      "integrity": "sha512-8A9Ot9A7794UP5tMGl2MnfTW/UM/jYy1wRWF9YkR/hPIcPb7OmE0hmlwIQGzb/7grxpYw66ETKf0WeH/41YfeQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-signing": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz",
+      "integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==",
       "dependencies": {
-        "@aws-crypto/crc32": "2.0.0",
-        "@aws-crypto/crc32c": "2.0.0",
-        "@aws-sdk/is-array-buffer": "3.201.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/signature-v4": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-middleware": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-host-header": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz",
-      "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-stack": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz",
+      "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-location-constraint": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.226.0.tgz",
-      "integrity": "sha512-qHiYaBYPc2R37KxG2uqsUUwh4usrQMHfGkrpTUnx5d4rGzM3mC+muPsTpSHnAL63K2/yJOHQJFjss3GGwV4SSA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/middleware-user-agent": {
+      "version": "3.319.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.319.0.tgz",
+      "integrity": "sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-endpoints": "3.319.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-logger": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz",
-      "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/node-config-provider": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz",
+      "integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/shared-ini-file-loader": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-recursion-detection": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz",
-      "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/node-http-handler": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.321.1.tgz",
+      "integrity": "sha512-DdQBrtFFDNtzphJIN3s93Vf+qd9LHSzH6WTQRrWoXhTDMHDzSI2Cn+c5KWfk89Nggp/n3+OTwUPQeCiBT5EBuw==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/abort-controller": "3.310.0",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/querystring-builder": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-retry": {
-      "version": "3.235.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz",
-      "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/property-provider": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz",
+      "integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/service-error-classification": "3.229.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "tslib": "^2.3.1",
-        "uuid": "^8.3.2"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-retry/node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
-    "node_modules/@aws-sdk/middleware-sdk-s3": {
-      "version": "3.231.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.231.0.tgz",
-      "integrity": "sha512-UGaSvevd2TanfKgStF46dDSHkh4bxOr1gdUkyHm9i+1pF5lx4KdbnBZv/5SKnn7XifhHRXrs1M3lTzemXREhTA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/protocol-http": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz",
+      "integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-arn-parser": "3.208.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-sdk-sts": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz",
-      "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/querystring-builder": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz",
+      "integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==",
       "dependencies": {
-        "@aws-sdk/middleware-signing": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-uri-escape": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-serde": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz",
-      "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/querystring-parser": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz",
+      "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-signing": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz",
-      "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==",
-      "dependencies": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "tslib": "^2.3.1"
-      },
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/service-error-classification": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz",
+      "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw==",
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-ssec": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.226.0.tgz",
-      "integrity": "sha512-DR97oWoLHiMdaUP/wu99HtzG7/ijvCrjZGDH37WBO1rxFtEti6L7T09wgHzwxMN8gtL8FJA7dU8IrffGSC9VmA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/shared-ini-file-loader": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz",
+      "integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-stack": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz",
-      "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/signature-v4": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz",
+      "integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "@aws-sdk/is-array-buffer": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/util-hex-encoding": "3.310.0",
+        "@aws-sdk/util-middleware": "3.310.0",
+        "@aws-sdk/util-uri-escape": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/middleware-user-agent": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz",
-      "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/smithy-client": {
+      "version": "3.316.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.316.0.tgz",
+      "integrity": "sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/middleware-stack": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/node-config-provider": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz",
-      "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/token-providers": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.321.1.tgz",
+      "integrity": "sha512-I1sXS4qXirSvgvrOIPf+e1D7GvC83DdeyMxHZvuhHgeMCqDAzToS8OLxOX0enN9xZRHWAQYja8xyeGbDL2I0Zw==",
       "dependencies": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/client-sso-oidc": "3.321.1",
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/shared-ini-file-loader": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/node-http-handler": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz",
-      "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/types": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz",
+      "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==",
       "dependencies": {
-        "@aws-sdk/abort-controller": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/querystring-builder": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/property-provider": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz",
-      "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/url-parser": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz",
+      "integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
+        "@aws-sdk/querystring-parser": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       }
     },
-    "node_modules/@aws-sdk/protocol-http": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz",
-      "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-base64": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz",
+      "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/util-buffer-from": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/querystring-builder": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz",
-      "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-body-length-browser": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz",
+      "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-uri-escape": "3.201.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
+        "tslib": "^2.5.0"
       }
     },
-    "node_modules/@aws-sdk/querystring-parser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz",
-      "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-body-length-node": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz",
+      "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/service-error-classification": {
-      "version": "3.229.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz",
-      "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg==",
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/shared-ini-file-loader": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz",
-      "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-buffer-from": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz",
+      "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/is-array-buffer": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/signature-v4": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz",
-      "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-config-provider": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz",
+      "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==",
       "dependencies": {
-        "@aws-sdk/is-array-buffer": "3.201.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-hex-encoding": "3.201.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "@aws-sdk/util-uri-escape": "3.201.0",
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/signature-v4-multi-region": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.226.0.tgz",
-      "integrity": "sha512-QHxNuf9ynK208v7Y3imdsa3Cz8ynYV7ZOf3sBJdItuEtHN6uy/KxaOrtvpF8I5Hyn48Hc8z5miTSMujFKT7GEw==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-defaults-mode-browser": {
+      "version": "3.316.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.316.0.tgz",
+      "integrity": "sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==",
       "dependencies": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-arn-parser": "3.208.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "bowser": "^2.11.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "@aws-sdk/signature-v4-crt": "^3.118.0"
-      },
-      "peerDependenciesMeta": {
-        "@aws-sdk/signature-v4-crt": {
-          "optional": true
-        }
+        "node": ">= 10.0.0"
       }
     },
-    "node_modules/@aws-sdk/smithy-client": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz",
-      "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-defaults-mode-node": {
+      "version": "3.316.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.316.0.tgz",
+      "integrity": "sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==",
       "dependencies": {
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/config-resolver": "3.310.0",
+        "@aws-sdk/credential-provider-imds": "3.310.0",
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/property-provider": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
-        "node": ">=14.0.0"
+        "node": ">= 10.0.0"
       }
     },
-    "node_modules/@aws-sdk/token-providers": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz",
-      "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-endpoints": {
+      "version": "3.319.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.319.0.tgz",
+      "integrity": "sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==",
       "dependencies": {
-        "@aws-sdk/client-sso-oidc": "3.245.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/types": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz",
-      "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-hex-encoding": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz",
+      "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/url-parser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz",
-      "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==",
-      "dependencies": {
-        "@aws-sdk/querystring-parser": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/util-arn-parser": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.208.0.tgz",
-      "integrity": "sha512-QV4af+kscova9dv4VuHOgH8wEr/IIYHDGcnyVtkUEqahCejWr1Kuk+SBK0xMwnZY5LSycOtQ8aeqHOn9qOjZtA==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-middleware": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz",
+      "integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-base64": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz",
-      "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-retry": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz",
+      "integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==",
       "dependencies": {
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
+        "@aws-sdk/service-error-classification": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/util-body-length-browser": {
-      "version": "3.188.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz",
-      "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==",
-      "dependencies": {
-        "tslib": "^2.3.1"
+        "node": ">= 14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-body-length-node": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz",
-      "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-uri-escape": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz",
+      "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-buffer-from": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz",
-      "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-user-agent-browser": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz",
+      "integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==",
       "dependencies": {
-        "@aws-sdk/is-array-buffer": "3.201.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
+        "@aws-sdk/types": "3.310.0",
+        "bowser": "^2.11.0",
+        "tslib": "^2.5.0"
       }
     },
-    "node_modules/@aws-sdk/util-config-provider": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz",
-      "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/@aws-sdk/util-user-agent-node": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz",
+      "integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/types": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/util-defaults-mode-browser": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz",
-      "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==",
-      "dependencies": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "bowser": "^2.11.0",
-        "tslib": "^2.3.1"
       },
-      "engines": {
-        "node": ">= 10.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/util-defaults-mode-node": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz",
-      "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==",
-      "dependencies": {
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/credential-provider-imds": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+      "peerDependencies": {
+        "aws-crt": ">=1.0.0"
       },
-      "engines": {
-        "node": ">= 10.0.0"
+      "peerDependenciesMeta": {
+        "aws-crt": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@aws-sdk/util-endpoints": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz",
-      "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==",
+    "node_modules/@aws-sdk/client-codebuild/node_modules/fast-xml-parser": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz",
+      "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==",
       "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
+        "strnum": "^1.0.5"
       },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/util-hex-encoding": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz",
-      "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==",
-      "dependencies": {
-        "tslib": "^2.3.1"
+      "bin": {
+        "fxparser": "src/cli/cli.js"
       },
-      "engines": {
-        "node": ">=14.0.0"
+      "funding": {
+        "type": "paypal",
+        "url": "https://paypal.me/naturalintelligence"
       }
     },
     "node_modules/@aws-sdk/util-locate-window": {
@@ -1194,217 +960,66 @@
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-middleware": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz",
-      "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==",
+    "node_modules/@aws-sdk/util-utf8": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz",
+      "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "@aws-sdk/util-buffer-from": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-retry": {
-      "version": "3.229.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz",
-      "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==",
-      "dependencies": {
-        "@aws-sdk/service-error-classification": "3.229.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/util-stream-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.226.0.tgz",
-      "integrity": "sha512-ZvjlA1ySaLd0DqUWTKmL7LsxfPhroAONpzsinaHmw9aZVL40s2cADU9eWgBdHTuAOeFklL7NP0cc6UiTFHKe8g==",
+    "node_modules/@aws-sdk/util-utf8-browser": {
+      "version": "3.188.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz",
+      "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==",
       "dependencies": {
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-hex-encoding": "3.201.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
         "tslib": "^2.3.1"
       }
     },
-    "node_modules/@aws-sdk/util-stream-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.226.0.tgz",
-      "integrity": "sha512-HADXiIgDGoXcCLSKuPnjCLENf0iC0lzqqnymZu9H2FoACZhJB7DvJ9LnP51Pvw9lfCu+yvLzbMqSPdbXtMbRWg==",
+    "node_modules/@aws-sdk/util-utf8/node_modules/@aws-sdk/is-array-buffer": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz",
+      "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==",
       "dependencies": {
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-uri-escape": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz",
-      "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==",
+    "node_modules/@aws-sdk/util-utf8/node_modules/@aws-sdk/util-buffer-from": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz",
+      "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "@aws-sdk/is-array-buffer": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
       }
     },
-    "node_modules/@aws-sdk/util-user-agent-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz",
-      "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==",
-      "dependencies": {
-        "@aws-sdk/types": "3.226.0",
-        "bowser": "^2.11.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/util-user-agent-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz",
-      "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==",
-      "dependencies": {
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "aws-crt": ">=1.0.0"
-      },
-      "peerDependenciesMeta": {
-        "aws-crt": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@aws-sdk/util-utf8-browser": {
-      "version": "3.188.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz",
-      "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==",
-      "dependencies": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "node_modules/@aws-sdk/util-utf8-node": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz",
-      "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==",
-      "dependencies": {
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/util-waiter": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz",
-      "integrity": "sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g==",
-      "dependencies": {
-        "@aws-sdk/abort-controller": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@aws-sdk/xml-builder": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.201.0.tgz",
-      "integrity": "sha512-brRdB1wwMgjWEnOQsv7zSUhIQuh7DEicrfslAqHop4S4FtSI3GQAShpQqgOpMTNFYcpaWKmE/Y1MJmNY7xLCnw==",
-      "dependencies": {
-        "tslib": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@types/adm-zip": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.0.tgz",
-      "integrity": "sha512-FCJBJq9ODsQZUNURo5ILAQueuA8WJhRvuihS3ke2iI25mJlfV2LK8jG2Qj2z2AWg8U0FtWWqBHVRetceLskSaw==",
-      "dev": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/aws-lambda": {
-      "version": "8.10.95",
-      "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz",
-      "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==",
-      "dev": true
+    "node_modules/@types/aws-lambda": {
+      "version": "8.10.95",
+      "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz",
+      "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==",
+      "dev": true
     },
     "node_modules/@types/node": {
-      "version": "17.0.31",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz",
-      "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==",
-      "devOptional": true
-    },
-    "node_modules/@types/yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
-      "optional": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/adm-zip": {
-      "version": "0.5.9",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
-      "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==",
-      "engines": {
-        "node": ">=6.0"
-      }
+      "version": "18.16.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz",
+      "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==",
+      "dev": true
     },
     "node_modules/bowser": {
       "version": "2.11.0",
       "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
       "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
     },
-    "node_modules/buffer-crc32": {
-      "version": "0.2.13",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
-      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-      "dependencies": {
-        "once": "^1.4.0"
-      }
-    },
     "node_modules/esbuild": {
       "version": "0.14.39",
       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz",
@@ -1760,1338 +1375,922 @@
         "node": ">=12"
       }
     },
-    "node_modules/extract-zip": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
-      "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
-      "dependencies": {
-        "debug": "^4.1.1",
-        "get-stream": "^5.1.0",
-        "yauzl": "^2.10.0"
-      },
-      "bin": {
-        "extract-zip": "cli.js"
-      },
-      "engines": {
-        "node": ">= 10.17.0"
-      },
-      "optionalDependencies": {
-        "@types/yauzl": "^2.9.1"
-      }
-    },
-    "node_modules/fast-xml-parser": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
-      "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==",
-      "dependencies": {
-        "strnum": "^1.0.5"
-      },
-      "bin": {
-        "fxparser": "src/cli/cli.js"
-      },
-      "funding": {
-        "type": "paypal",
-        "url": "https://paypal.me/naturalintelligence"
-      }
-    },
-    "node_modules/fd-slicer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
-      "dependencies": {
-        "pend": "~1.2.0"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
-      "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
-      "dependencies": {
-        "pump": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
-    },
-    "node_modules/pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "dependencies": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
     "node_modules/strnum": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
       "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
     },
     "node_modules/tslib": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
-      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+      "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
     },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "node_modules/yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
-      "dependencies": {
-        "buffer-crc32": "~0.2.3",
-        "fd-slicer": "~1.1.0"
+    "node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "bin": {
+        "uuid": "dist/bin/uuid"
       }
     }
   },
   "dependencies": {
-    "@aws-crypto/crc32": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz",
-      "integrity": "sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==",
-      "requires": {
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
-      }
-    },
-    "@aws-crypto/crc32c": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-2.0.0.tgz",
-      "integrity": "sha512-vF0eMdMHx3O3MoOXUfBZry8Y4ZDtcuskjjKgJz8YfIDjLStxTZrYXk+kZqtl6A0uCmmiN/Eb/JbC/CndTV1MHg==",
-      "requires": {
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
-      }
-    },
-    "@aws-crypto/ie11-detection": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz",
-      "integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==",
-      "requires": {
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
-      }
-    },
-    "@aws-crypto/sha1-browser": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-2.0.0.tgz",
-      "integrity": "sha512-3fIVRjPFY8EG5HWXR+ZJZMdWNRpwbxGzJ9IH9q93FpbgCH8u8GHRi46mZXp3cYD7gealmyqpm3ThZwLKJjWJhA==",
-      "requires": {
-        "@aws-crypto/ie11-detection": "^2.0.0",
-        "@aws-crypto/supports-web-crypto": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "@aws-sdk/util-locate-window": "^3.0.0",
-        "@aws-sdk/util-utf8-browser": "^3.0.0",
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
-      }
-    },
-    "@aws-crypto/sha256-browser": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz",
-      "integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==",
-      "requires": {
-        "@aws-crypto/ie11-detection": "^2.0.0",
-        "@aws-crypto/sha256-js": "^2.0.0",
-        "@aws-crypto/supports-web-crypto": "^2.0.0",
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "@aws-sdk/util-locate-window": "^3.0.0",
-        "@aws-sdk/util-utf8-browser": "^3.0.0",
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
-      }
-    },
-    "@aws-crypto/sha256-js": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz",
-      "integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==",
-      "requires": {
-        "@aws-crypto/util": "^2.0.0",
-        "@aws-sdk/types": "^3.1.0",
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+    "@aws-sdk/client-codebuild": {
+      "version": "3.321.1",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.321.1.tgz",
+      "integrity": "sha512-7CQKL9r0moamfD/7we6v5PJNcFahV9M1y/jkvPNkb+aIfbIkBV7EWi7exlUNwVt/ju+MwpGwdixX1QczHy1+3Q==",
+      "requires": {
+        "@aws-crypto/sha256-browser": "3.0.0",
+        "@aws-crypto/sha256-js": "3.0.0",
+        "@aws-sdk/client-sts": "3.321.1",
+        "@aws-sdk/config-resolver": "3.310.0",
+        "@aws-sdk/credential-provider-node": "3.321.1",
+        "@aws-sdk/fetch-http-handler": "3.310.0",
+        "@aws-sdk/hash-node": "3.310.0",
+        "@aws-sdk/invalid-dependency": "3.310.0",
+        "@aws-sdk/middleware-content-length": "3.310.0",
+        "@aws-sdk/middleware-endpoint": "3.310.0",
+        "@aws-sdk/middleware-host-header": "3.310.0",
+        "@aws-sdk/middleware-logger": "3.310.0",
+        "@aws-sdk/middleware-recursion-detection": "3.310.0",
+        "@aws-sdk/middleware-retry": "3.310.0",
+        "@aws-sdk/middleware-serde": "3.310.0",
+        "@aws-sdk/middleware-signing": "3.310.0",
+        "@aws-sdk/middleware-stack": "3.310.0",
+        "@aws-sdk/middleware-user-agent": "3.319.0",
+        "@aws-sdk/node-config-provider": "3.310.0",
+        "@aws-sdk/node-http-handler": "3.321.1",
+        "@aws-sdk/protocol-http": "3.310.0",
+        "@aws-sdk/smithy-client": "3.316.0",
+        "@aws-sdk/types": "3.310.0",
+        "@aws-sdk/url-parser": "3.310.0",
+        "@aws-sdk/util-base64": "3.310.0",
+        "@aws-sdk/util-body-length-browser": "3.310.0",
+        "@aws-sdk/util-body-length-node": "3.310.0",
+        "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+        "@aws-sdk/util-defaults-mode-node": "3.316.0",
+        "@aws-sdk/util-endpoints": "3.319.0",
+        "@aws-sdk/util-retry": "3.310.0",
+        "@aws-sdk/util-user-agent-browser": "3.310.0",
+        "@aws-sdk/util-user-agent-node": "3.310.0",
+        "@aws-sdk/util-utf8": "3.310.0",
+        "tslib": "^2.5.0"
+      },
+      "dependencies": {
+        "@aws-crypto/ie11-detection": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
+          "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
+          "requires": {
+            "tslib": "^1.11.1"
+          },
+          "dependencies": {
+            "tslib": {
+              "version": "1.14.1",
+              "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+              "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            }
+          }
+        },
+        "@aws-crypto/sha256-browser": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
+          "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+          "requires": {
+            "@aws-crypto/ie11-detection": "^3.0.0",
+            "@aws-crypto/sha256-js": "^3.0.0",
+            "@aws-crypto/supports-web-crypto": "^3.0.0",
+            "@aws-crypto/util": "^3.0.0",
+            "@aws-sdk/types": "^3.222.0",
+            "@aws-sdk/util-locate-window": "^3.0.0",
+            "@aws-sdk/util-utf8-browser": "^3.0.0",
+            "tslib": "^1.11.1"
+          },
+          "dependencies": {
+            "tslib": {
+              "version": "1.14.1",
+              "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+              "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            }
+          }
+        },
+        "@aws-crypto/sha256-js": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
+          "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
+          "requires": {
+            "@aws-crypto/util": "^3.0.0",
+            "@aws-sdk/types": "^3.222.0",
+            "tslib": "^1.11.1"
+          },
+          "dependencies": {
+            "tslib": {
+              "version": "1.14.1",
+              "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+              "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            }
+          }
+        },
+        "@aws-crypto/supports-web-crypto": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
+          "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
+          "requires": {
+            "tslib": "^1.11.1"
+          },
+          "dependencies": {
+            "tslib": {
+              "version": "1.14.1",
+              "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+              "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            }
+          }
+        },
+        "@aws-crypto/util": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
+          "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
+          "requires": {
+            "@aws-sdk/types": "^3.222.0",
+            "@aws-sdk/util-utf8-browser": "^3.0.0",
+            "tslib": "^1.11.1"
+          },
+          "dependencies": {
+            "tslib": {
+              "version": "1.14.1",
+              "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+              "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+            }
+          }
+        },
+        "@aws-sdk/abort-controller": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.310.0.tgz",
+          "integrity": "sha512-v1zrRQxDLA1MdPim159Vx/CPHqsB4uybSxRi1CnfHO5ZjHryx3a5htW2gdGAykVCul40+yJXvfpufMrELVxH+g==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/client-sso": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.321.1.tgz",
+          "integrity": "sha512-ecoT4tBGtRJR5G7oLBTMXZmgZZlff1amhSdKPEtkWxv6kWc8VPb5rRuRgVPsDR9HuesI6ZVlODptvGtnfkIJwA==",
+          "requires": {
+            "@aws-crypto/sha256-browser": "3.0.0",
+            "@aws-crypto/sha256-js": "3.0.0",
+            "@aws-sdk/config-resolver": "3.310.0",
+            "@aws-sdk/fetch-http-handler": "3.310.0",
+            "@aws-sdk/hash-node": "3.310.0",
+            "@aws-sdk/invalid-dependency": "3.310.0",
+            "@aws-sdk/middleware-content-length": "3.310.0",
+            "@aws-sdk/middleware-endpoint": "3.310.0",
+            "@aws-sdk/middleware-host-header": "3.310.0",
+            "@aws-sdk/middleware-logger": "3.310.0",
+            "@aws-sdk/middleware-recursion-detection": "3.310.0",
+            "@aws-sdk/middleware-retry": "3.310.0",
+            "@aws-sdk/middleware-serde": "3.310.0",
+            "@aws-sdk/middleware-stack": "3.310.0",
+            "@aws-sdk/middleware-user-agent": "3.319.0",
+            "@aws-sdk/node-config-provider": "3.310.0",
+            "@aws-sdk/node-http-handler": "3.321.1",
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/smithy-client": "3.316.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/url-parser": "3.310.0",
+            "@aws-sdk/util-base64": "3.310.0",
+            "@aws-sdk/util-body-length-browser": "3.310.0",
+            "@aws-sdk/util-body-length-node": "3.310.0",
+            "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+            "@aws-sdk/util-defaults-mode-node": "3.316.0",
+            "@aws-sdk/util-endpoints": "3.319.0",
+            "@aws-sdk/util-retry": "3.310.0",
+            "@aws-sdk/util-user-agent-browser": "3.310.0",
+            "@aws-sdk/util-user-agent-node": "3.310.0",
+            "@aws-sdk/util-utf8": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/client-sso-oidc": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.321.1.tgz",
+          "integrity": "sha512-PBVfHQbyrsfzbnO6u9d9Sik8JlXGLhHj3zLd87iBkYXBdHwD5NuvwWu7OtjUtrHjP4SfzodVwfjmTbDAFqbtzw==",
+          "requires": {
+            "@aws-crypto/sha256-browser": "3.0.0",
+            "@aws-crypto/sha256-js": "3.0.0",
+            "@aws-sdk/config-resolver": "3.310.0",
+            "@aws-sdk/fetch-http-handler": "3.310.0",
+            "@aws-sdk/hash-node": "3.310.0",
+            "@aws-sdk/invalid-dependency": "3.310.0",
+            "@aws-sdk/middleware-content-length": "3.310.0",
+            "@aws-sdk/middleware-endpoint": "3.310.0",
+            "@aws-sdk/middleware-host-header": "3.310.0",
+            "@aws-sdk/middleware-logger": "3.310.0",
+            "@aws-sdk/middleware-recursion-detection": "3.310.0",
+            "@aws-sdk/middleware-retry": "3.310.0",
+            "@aws-sdk/middleware-serde": "3.310.0",
+            "@aws-sdk/middleware-stack": "3.310.0",
+            "@aws-sdk/middleware-user-agent": "3.319.0",
+            "@aws-sdk/node-config-provider": "3.310.0",
+            "@aws-sdk/node-http-handler": "3.321.1",
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/smithy-client": "3.316.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/url-parser": "3.310.0",
+            "@aws-sdk/util-base64": "3.310.0",
+            "@aws-sdk/util-body-length-browser": "3.310.0",
+            "@aws-sdk/util-body-length-node": "3.310.0",
+            "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+            "@aws-sdk/util-defaults-mode-node": "3.316.0",
+            "@aws-sdk/util-endpoints": "3.319.0",
+            "@aws-sdk/util-retry": "3.310.0",
+            "@aws-sdk/util-user-agent-browser": "3.310.0",
+            "@aws-sdk/util-user-agent-node": "3.310.0",
+            "@aws-sdk/util-utf8": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/client-sts": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.321.1.tgz",
+          "integrity": "sha512-AB+N4a1TVEKl9Sd5O2TxTprEZp7Va6zPZLMraFAYMdmJVBmCmmwyBs7ygju685DpQ1dos5PRsKCRcossyY5pDQ==",
+          "requires": {
+            "@aws-crypto/sha256-browser": "3.0.0",
+            "@aws-crypto/sha256-js": "3.0.0",
+            "@aws-sdk/config-resolver": "3.310.0",
+            "@aws-sdk/credential-provider-node": "3.321.1",
+            "@aws-sdk/fetch-http-handler": "3.310.0",
+            "@aws-sdk/hash-node": "3.310.0",
+            "@aws-sdk/invalid-dependency": "3.310.0",
+            "@aws-sdk/middleware-content-length": "3.310.0",
+            "@aws-sdk/middleware-endpoint": "3.310.0",
+            "@aws-sdk/middleware-host-header": "3.310.0",
+            "@aws-sdk/middleware-logger": "3.310.0",
+            "@aws-sdk/middleware-recursion-detection": "3.310.0",
+            "@aws-sdk/middleware-retry": "3.310.0",
+            "@aws-sdk/middleware-sdk-sts": "3.310.0",
+            "@aws-sdk/middleware-serde": "3.310.0",
+            "@aws-sdk/middleware-signing": "3.310.0",
+            "@aws-sdk/middleware-stack": "3.310.0",
+            "@aws-sdk/middleware-user-agent": "3.319.0",
+            "@aws-sdk/node-config-provider": "3.310.0",
+            "@aws-sdk/node-http-handler": "3.321.1",
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/smithy-client": "3.316.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/url-parser": "3.310.0",
+            "@aws-sdk/util-base64": "3.310.0",
+            "@aws-sdk/util-body-length-browser": "3.310.0",
+            "@aws-sdk/util-body-length-node": "3.310.0",
+            "@aws-sdk/util-defaults-mode-browser": "3.316.0",
+            "@aws-sdk/util-defaults-mode-node": "3.316.0",
+            "@aws-sdk/util-endpoints": "3.319.0",
+            "@aws-sdk/util-retry": "3.310.0",
+            "@aws-sdk/util-user-agent-browser": "3.310.0",
+            "@aws-sdk/util-user-agent-node": "3.310.0",
+            "@aws-sdk/util-utf8": "3.310.0",
+            "fast-xml-parser": "4.1.2",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/config-resolver": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.310.0.tgz",
+          "integrity": "sha512-8vsT+/50lOqfDxka9m/rRt6oxv1WuGZoP8oPMk0Dt+TxXMbAzf4+rejBgiB96wshI1k3gLokYRjSQZn+dDtT8g==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-config-provider": "3.310.0",
+            "@aws-sdk/util-middleware": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-env": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.310.0.tgz",
+          "integrity": "sha512-vvIPQpI16fj95xwS7M3D48F7QhZJBnnCgB5lR+b7So+vsG9ibm1mZRVGzVpdxCvgyOhHFbvrby9aalNJmmIP1A==",
+          "requires": {
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-imds": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.310.0.tgz",
+          "integrity": "sha512-baxK7Zp6dai5AGW01FIW27xS2KAaPUmKLIXv5SvFYsUgXXvNW55im4uG3b+2gA0F7V+hXvVBH08OEqmwW6we5w==",
+          "requires": {
+            "@aws-sdk/node-config-provider": "3.310.0",
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/url-parser": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-ini": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.321.1.tgz",
+          "integrity": "sha512-prndSVQhiikNaI40bYnM2Q8PkC35FCwhbQnBk6KXNvdtfo9RqatMC639F+6oryb3BuMy++Ij4Yoi8WnPBs5Sww==",
+          "requires": {
+            "@aws-sdk/credential-provider-env": "3.310.0",
+            "@aws-sdk/credential-provider-imds": "3.310.0",
+            "@aws-sdk/credential-provider-process": "3.310.0",
+            "@aws-sdk/credential-provider-sso": "3.321.1",
+            "@aws-sdk/credential-provider-web-identity": "3.310.0",
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/shared-ini-file-loader": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-node": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.321.1.tgz",
+          "integrity": "sha512-5B1waOwSvY2JMLGRebo7IUqnTaGoCnby9cRbG/dhi7Ke97M3V8380S9THDJ/bktjL8zHEVfBVZy7HhXHzhSjEg==",
+          "requires": {
+            "@aws-sdk/credential-provider-env": "3.310.0",
+            "@aws-sdk/credential-provider-imds": "3.310.0",
+            "@aws-sdk/credential-provider-ini": "3.321.1",
+            "@aws-sdk/credential-provider-process": "3.310.0",
+            "@aws-sdk/credential-provider-sso": "3.321.1",
+            "@aws-sdk/credential-provider-web-identity": "3.310.0",
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/shared-ini-file-loader": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-process": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.310.0.tgz",
+          "integrity": "sha512-h73sg6GPMUWC+3zMCbA1nZ2O03nNJt7G96JdmnantiXBwHpRKWW8nBTLzx5uhXn6hTuTaoQRP/P+oxQJKYdMmA==",
+          "requires": {
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/shared-ini-file-loader": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-sso": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.321.1.tgz",
+          "integrity": "sha512-kg0rc1OacJFgAvmZj0TOu+BSc+yRdnC5dO/RAag3XU6+hlQI5/C080RQp9Qj6V7ga0HtAJMRwJcUlCPA3RJPug==",
+          "requires": {
+            "@aws-sdk/client-sso": "3.321.1",
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/shared-ini-file-loader": "3.310.0",
+            "@aws-sdk/token-providers": "3.321.1",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/credential-provider-web-identity": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.310.0.tgz",
+          "integrity": "sha512-H4SzuZXILNhK6/IR1uVvsUDZvzc051hem7GLyYghBCu8mU+tq28YhKE8MfSroi6eL2e5Vujloij1OM2EQQkPkw==",
+          "requires": {
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/fetch-http-handler": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.310.0.tgz",
+          "integrity": "sha512-Bi9vIwzdkw1zMcvi/zGzlWS9KfIEnAq4NNhsnCxbQ4OoIRU9wvU+WGZdBBhxg0ZxZmpp1j1aZhU53lLjA07MHw==",
+          "requires": {
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/querystring-builder": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-base64": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/hash-node": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.310.0.tgz",
+          "integrity": "sha512-NvE2fhRc8GRwCXBfDehxVAWCmVwVMILliAKVPAEr4yz2CkYs0tqU51S48x23dtna07H4qHtgpeNqVTthcIQOEQ==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-buffer-from": "3.310.0",
+            "@aws-sdk/util-utf8": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/invalid-dependency": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.310.0.tgz",
+          "integrity": "sha512-1s5RG5rSPXoa/aZ/Kqr5U/7lqpx+Ry81GprQ2bxWqJvWQIJ0IRUwo5pk8XFxbKVr/2a+4lZT/c3OGoBOM1yRRA==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/is-array-buffer": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz",
+          "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-content-length": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.310.0.tgz",
+          "integrity": "sha512-P8tQZxgDt6CAh1wd/W6WPzjc+uWPJwQkm+F7rAwRlM+k9q17HrhnksGDKcpuuLyIhPQYdmOMIkpKVgXGa4avhQ==",
+          "requires": {
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-endpoint": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.310.0.tgz",
+          "integrity": "sha512-Z+N2vOL8K354/lstkClxLLsr6hCpVRh+0tCMXrVj66/NtKysCEZ/0b9LmqOwD9pWHNiI2mJqXwY0gxNlKAroUg==",
+          "requires": {
+            "@aws-sdk/middleware-serde": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/url-parser": "3.310.0",
+            "@aws-sdk/util-middleware": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-host-header": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.310.0.tgz",
+          "integrity": "sha512-QWSA+46/hXorXyWa61ic2K7qZzwHTiwfk2e9mRRjeIRepUgI3qxFjsYqrWtrOGBjmFmq0pYIY8Bb/DCJuQqcoA==",
+          "requires": {
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-logger": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.310.0.tgz",
+          "integrity": "sha512-Lurm8XofrASBRnAVtiSNuDSRsRqPNg27RIFLLsLp/pqog9nFJ0vz0kgdb9S5Z+zw83Mm+UlqOe6D8NTUNp4fVg==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-recursion-detection": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.310.0.tgz",
+          "integrity": "sha512-SuB75/xk/gyue24gkriTwO2jFd7YcUGZDClQYuRejgbXSa3CO0lWyawQtfLcSSEBp9izrEVXuFH24K1eAft5nQ==",
+          "requires": {
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-retry": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.310.0.tgz",
+          "integrity": "sha512-oTPsRy2W4s+dfxbJPW7Km+hHtv/OMsNsVfThAq8DDYKC13qlr1aAyOqGLD+dpBy2aKe7ss517Sy2HcHtHqm7/g==",
+          "requires": {
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/service-error-classification": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-middleware": "3.310.0",
+            "@aws-sdk/util-retry": "3.310.0",
+            "tslib": "^2.5.0",
+            "uuid": "^8.3.2"
+          }
+        },
+        "@aws-sdk/middleware-sdk-sts": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.310.0.tgz",
+          "integrity": "sha512-+5PFwlYNLvLLIfw0ASAoWV/iIF8Zv6R6QGtyP0CclhRSvNjgbQDVnV0g95MC5qvh+GB/Yjlkt8qAjLSPjHfsrQ==",
+          "requires": {
+            "@aws-sdk/middleware-signing": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-serde": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.310.0.tgz",
+          "integrity": "sha512-RNeeTVWSLTaentUeCgQKZhAl+C6hxtwD78cQWS10UymWpQFwbaxztzKUu4UQS5xA2j6PxwPRRUjqa4jcFjfLsg==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-signing": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.310.0.tgz",
+          "integrity": "sha512-f9mKq+XMdW207Af3hKjdTnpNhdtwqWuvFs/ZyXoOkp/g1MY1O6L23Jy6i52m29LxbT4AuNRG1oKODfXM0vYVjQ==",
+          "requires": {
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/signature-v4": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-middleware": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-stack": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.310.0.tgz",
+          "integrity": "sha512-010O1PD+UAcZVKRvqEusE1KJqN96wwrf6QsqbRM0ywsKQ21NDweaHvEDlds2VHpgmofxkRLRu/IDrlPkKRQrRg==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/middleware-user-agent": {
+          "version": "3.319.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.319.0.tgz",
+          "integrity": "sha512-ytaLx2dlR5AdMSne6FuDCISVg8hjyKj+cHU20b2CRA/E/z+XXrLrssp4JrCgizRKPPUep0psMIa22Zd6osTT5Q==",
+          "requires": {
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-endpoints": "3.319.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/node-config-provider": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.310.0.tgz",
+          "integrity": "sha512-T/Pp6htc6hq/Cq+MLNDSyiwWCMVF6GqbBbXKVlO5L8rdHx4sq9xPdoPveZhGWrxvkanjA6eCwUp6E0riBOSVng==",
+          "requires": {
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/shared-ini-file-loader": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/node-http-handler": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.321.1.tgz",
+          "integrity": "sha512-DdQBrtFFDNtzphJIN3s93Vf+qd9LHSzH6WTQRrWoXhTDMHDzSI2Cn+c5KWfk89Nggp/n3+OTwUPQeCiBT5EBuw==",
+          "requires": {
+            "@aws-sdk/abort-controller": "3.310.0",
+            "@aws-sdk/protocol-http": "3.310.0",
+            "@aws-sdk/querystring-builder": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/property-provider": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.310.0.tgz",
+          "integrity": "sha512-3lxDb0akV6BBzmFe4nLPaoliQbAifyWJhuvuDOu7e8NzouvpQXs0275w9LePhhcgjKAEVXUIse05ZW2DLbxo/g==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/protocol-http": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.310.0.tgz",
+          "integrity": "sha512-fgZ1aw/irQtnrsR58pS8ThKOWo57Py3xX6giRvwSgZDEcxHfVzuQjy9yPuV++v04fdmdtgpbGf8WfvAAJ11yXQ==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/querystring-builder": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.310.0.tgz",
+          "integrity": "sha512-ZHH8GV/80+pWGo7DzsvwvXR5xVxUHXUvPJPFAkhr6nCf78igdoF8gR10ScFoEKbtEapoNTaZlKHPXxpD8aPG7A==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-uri-escape": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/querystring-parser": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.310.0.tgz",
+          "integrity": "sha512-YkIznoP6lsiIUHinx++/lbb3tlMURGGqMpo0Pnn32zYzGrJXA6eC3D0as2EcMjo55onTfuLcIiX4qzXes2MYOA==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/service-error-classification": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.310.0.tgz",
+          "integrity": "sha512-PuyC7k3qfIKeH2LCnDwbttMOKq3qAx4buvg0yfnJtQOz6t1AR8gsnAq0CjKXXyfkXwNKWTqCpE6lVNUIkXgsMw=="
+        },
+        "@aws-sdk/shared-ini-file-loader": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.310.0.tgz",
+          "integrity": "sha512-N0q9pG0xSjQwc690YQND5bofm+4nfUviQ/Ppgan2kU6aU0WUq8KwgHJBto/YEEI+VlrME30jZJnxtOvcZJc2XA==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/signature-v4": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.310.0.tgz",
+          "integrity": "sha512-1M60P1ZBNAjCFv9sYW29OF6okktaeibWyW3lMXqzoHF70lHBZh+838iUchznXUA5FLabfn4jBFWMRxlAXJUY2Q==",
+          "requires": {
+            "@aws-sdk/is-array-buffer": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "@aws-sdk/util-hex-encoding": "3.310.0",
+            "@aws-sdk/util-middleware": "3.310.0",
+            "@aws-sdk/util-uri-escape": "3.310.0",
+            "@aws-sdk/util-utf8": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/smithy-client": {
+          "version": "3.316.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.316.0.tgz",
+          "integrity": "sha512-6YXOKbRnXeS8r8RWzuL6JMBolDYM5Wa4fD/VY6x/wK78i2xErHOvqzHgyyeLI1MMw4uqyd4wRNJNWC9TMPduXw==",
+          "requires": {
+            "@aws-sdk/middleware-stack": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/token-providers": {
+          "version": "3.321.1",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.321.1.tgz",
+          "integrity": "sha512-I1sXS4qXirSvgvrOIPf+e1D7GvC83DdeyMxHZvuhHgeMCqDAzToS8OLxOX0enN9xZRHWAQYja8xyeGbDL2I0Zw==",
+          "requires": {
+            "@aws-sdk/client-sso-oidc": "3.321.1",
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/shared-ini-file-loader": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/types": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.310.0.tgz",
+          "integrity": "sha512-j8eamQJ7YcIhw7fneUfs8LYl3t01k4uHi4ZDmNRgtbmbmTTG3FZc2MotStZnp3nZB6vLiPF1o5aoJxWVvkzS6A==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/url-parser": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.310.0.tgz",
+          "integrity": "sha512-mCLnCaSB9rQvAgx33u0DujLvr4d5yEm/W5r789GblwwQnlNXedVu50QRizMLTpltYWyAUoXjJgQnJHmJMaKXhw==",
+          "requires": {
+            "@aws-sdk/querystring-parser": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-base64": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz",
+          "integrity": "sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg==",
+          "requires": {
+            "@aws-sdk/util-buffer-from": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-body-length-browser": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz",
+          "integrity": "sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-body-length-node": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz",
+          "integrity": "sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-buffer-from": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz",
+          "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==",
+          "requires": {
+            "@aws-sdk/is-array-buffer": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-config-provider": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz",
+          "integrity": "sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-defaults-mode-browser": {
+          "version": "3.316.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.316.0.tgz",
+          "integrity": "sha512-6FSqLhYmaihtH2n1s4b2rlLW0ABU8N6VZIfzLfe2ING4PF0MzfaMMhnTFUHVXfKCVGoR8yP6iyFTRCyHGVEL1w==",
+          "requires": {
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "bowser": "^2.11.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-defaults-mode-node": {
+          "version": "3.316.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.316.0.tgz",
+          "integrity": "sha512-dkYy10hdjPSScXXvnjGpZpnJxllkb6ICHgLMwZ4JczLHhPM12T/4PQ758YN8HS+muiYDGX1Bl2z1jd/bMcewBQ==",
+          "requires": {
+            "@aws-sdk/config-resolver": "3.310.0",
+            "@aws-sdk/credential-provider-imds": "3.310.0",
+            "@aws-sdk/node-config-provider": "3.310.0",
+            "@aws-sdk/property-provider": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-endpoints": {
+          "version": "3.319.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.319.0.tgz",
+          "integrity": "sha512-3I64UMoYA2e2++oOUJXRcFtYLpLylnZFRltWfPo1B3dLlf+MIWat9djT+mMus+hW1ntLsvAIVu1hLVePJC0gvw==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-hex-encoding": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz",
+          "integrity": "sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-middleware": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.310.0.tgz",
+          "integrity": "sha512-FTSUKL/eRb9X6uEZClrTe27QFXUNNp7fxYrPndZwk1hlaOP5ix+MIHBcI7pIiiY/JPfOUmPyZOu+HetlFXjWog==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-retry": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.310.0.tgz",
+          "integrity": "sha512-FwWGhCBLfoivTMUHu1LIn4NjrN9JLJ/aX5aZmbcPIOhZVFJj638j0qDgZXyfvVqBuBZh7M8kGq0Oahy3dp69OA==",
+          "requires": {
+            "@aws-sdk/service-error-classification": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-uri-escape": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz",
+          "integrity": "sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-user-agent-browser": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.310.0.tgz",
+          "integrity": "sha512-yU/4QnHHuQ5z3vsUqMQVfYLbZGYwpYblPiuZx4Zo9+x0PBkNjYMqctdDcrpoH9Z2xZiDN16AmQGK1tix117ZKw==",
+          "requires": {
+            "@aws-sdk/types": "3.310.0",
+            "bowser": "^2.11.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-user-agent-node": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.310.0.tgz",
+          "integrity": "sha512-Ra3pEl+Gn2BpeE7KiDGpi4zj7WJXZA5GXnGo3mjbi9+Y3zrbuhJAbdZO3mO/o7xDgMC6ph4xCTbaSGzU6b6EDg==",
+          "requires": {
+            "@aws-sdk/node-config-provider": "3.310.0",
+            "@aws-sdk/types": "3.310.0",
+            "tslib": "^2.5.0"
+          }
+        },
+        "fast-xml-parser": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz",
+          "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==",
+          "requires": {
+            "strnum": "^1.0.5"
+          }
         }
       }
     },
-    "@aws-crypto/supports-web-crypto": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz",
-      "integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==",
+    "@aws-sdk/util-locate-window": {
+      "version": "3.208.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz",
+      "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==",
       "requires": {
-        "tslib": "^1.11.1"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
+        "tslib": "^2.3.1"
       }
     },
-    "@aws-crypto/util": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz",
-      "integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==",
+    "@aws-sdk/util-utf8": {
+      "version": "3.310.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz",
+      "integrity": "sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA==",
       "requires": {
-        "@aws-sdk/types": "^3.110.0",
-        "@aws-sdk/util-utf8-browser": "^3.0.0",
-        "tslib": "^1.11.1"
+        "@aws-sdk/util-buffer-from": "3.310.0",
+        "tslib": "^2.5.0"
       },
       "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+        "@aws-sdk/is-array-buffer": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz",
+          "integrity": "sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ==",
+          "requires": {
+            "tslib": "^2.5.0"
+          }
+        },
+        "@aws-sdk/util-buffer-from": {
+          "version": "3.310.0",
+          "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz",
+          "integrity": "sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw==",
+          "requires": {
+            "@aws-sdk/is-array-buffer": "3.310.0",
+            "tslib": "^2.5.0"
+          }
         }
       }
     },
-    "@aws-sdk/abort-controller": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz",
-      "integrity": "sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/chunked-blob-reader": {
+    "@aws-sdk/util-utf8-browser": {
       "version": "3.188.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.188.0.tgz",
-      "integrity": "sha512-zkPRFZZPL3eH+kH86LDYYXImiClA1/sW60zYOjse9Pgka+eDJlvBN6hcYxwDEKjcwATYiSRR1aVQHcfCinlGXg==",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz",
+      "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==",
       "requires": {
         "tslib": "^2.3.1"
       }
     },
-    "@aws-sdk/chunked-blob-reader-native": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.208.0.tgz",
-      "integrity": "sha512-JeOZ95PW+fJ6bbuqPySYqLqHk1n4+4ueEEraJsiUrPBV0S1ZtyvOGHcnGztKUjr2PYNaiexmpWuvUve9K12HRA==",
-      "requires": {
-        "@aws-sdk/util-base64": "3.208.0",
-        "tslib": "^2.3.1"
-      }
+    "@types/aws-lambda": {
+      "version": "8.10.95",
+      "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz",
+      "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==",
+      "dev": true
     },
-    "@aws-sdk/client-s3": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.245.0.tgz",
-      "integrity": "sha512-wdCrEiqIfwtWebrK7A1giRggwO64S6I2iPXTwRmat4AR6sFlMO02jVFaIDyA8TTiVnBMz7ekT1QFmIjFAKc4uQ==",
-      "requires": {
-        "@aws-crypto/sha1-browser": "2.0.0",
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/client-sts": "3.245.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/credential-provider-node": "3.245.0",
-        "@aws-sdk/eventstream-serde-browser": "3.226.0",
-        "@aws-sdk/eventstream-serde-config-resolver": "3.226.0",
-        "@aws-sdk/eventstream-serde-node": "3.226.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-blob-browser": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/hash-stream-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/md5-js": "3.226.0",
-        "@aws-sdk/middleware-bucket-endpoint": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-expect-continue": "3.226.0",
-        "@aws-sdk/middleware-flexible-checksums": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-location-constraint": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-sdk-s3": "3.231.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-signing": "3.226.0",
-        "@aws-sdk/middleware-ssec": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4-multi-region": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-stream-browser": "3.226.0",
-        "@aws-sdk/util-stream-node": "3.226.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "@aws-sdk/util-waiter": "3.226.0",
-        "@aws-sdk/xml-builder": "3.201.0",
-        "fast-xml-parser": "4.0.11",
-        "tslib": "^2.3.1"
-      }
+    "@types/node": {
+      "version": "18.16.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz",
+      "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==",
+      "dev": true
     },
-    "@aws-sdk/client-sso": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.245.0.tgz",
-      "integrity": "sha512-dxzRwRo55ZNQ4hQigC+cishxLSWlBrbr3iszG0FLviavLDOlnVG5UUxWpOIGvwr8pYiSfM4jnfMxiwYwiCLg1g==",
-      "requires": {
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "tslib": "^2.3.1"
-      }
+    "bowser": {
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
+      "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
     },
-    "@aws-sdk/client-sso-oidc": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.245.0.tgz",
-      "integrity": "sha512-0pGPA00kEsu2Yq1Ul+OwftHxws5YVllm4iZrPtGnqmXr7wmf6B9lOtrMQF44y7Tfw53po6+bKz08OKTEWkkjUA==",
+    "esbuild": {
+      "version": "0.14.39",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz",
+      "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==",
+      "dev": true,
       "requires": {
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "tslib": "^2.3.1"
+        "esbuild-android-64": "0.14.39",
+        "esbuild-android-arm64": "0.14.39",
+        "esbuild-darwin-64": "0.14.39",
+        "esbuild-darwin-arm64": "0.14.39",
+        "esbuild-freebsd-64": "0.14.39",
+        "esbuild-freebsd-arm64": "0.14.39",
+        "esbuild-linux-32": "0.14.39",
+        "esbuild-linux-64": "0.14.39",
+        "esbuild-linux-arm": "0.14.39",
+        "esbuild-linux-arm64": "0.14.39",
+        "esbuild-linux-mips64le": "0.14.39",
+        "esbuild-linux-ppc64le": "0.14.39",
+        "esbuild-linux-riscv64": "0.14.39",
+        "esbuild-linux-s390x": "0.14.39",
+        "esbuild-netbsd-64": "0.14.39",
+        "esbuild-openbsd-64": "0.14.39",
+        "esbuild-sunos-64": "0.14.39",
+        "esbuild-windows-32": "0.14.39",
+        "esbuild-windows-64": "0.14.39",
+        "esbuild-windows-arm64": "0.14.39"
       }
     },
-    "@aws-sdk/client-sts": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.245.0.tgz",
-      "integrity": "sha512-E+7v2sy34TLni/Dmz6bTU20NWvbHYH9sVUHKQ9kHhmFopUWrs4Nt77f85PbuiKJz/irjUh9ppT5q1odJNRKRVQ==",
-      "requires": {
-        "@aws-crypto/sha256-browser": "2.0.0",
-        "@aws-crypto/sha256-js": "2.0.0",
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/credential-provider-node": "3.245.0",
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/hash-node": "3.226.0",
-        "@aws-sdk/invalid-dependency": "3.226.0",
-        "@aws-sdk/middleware-content-length": "3.226.0",
-        "@aws-sdk/middleware-endpoint": "3.226.0",
-        "@aws-sdk/middleware-host-header": "3.226.0",
-        "@aws-sdk/middleware-logger": "3.226.0",
-        "@aws-sdk/middleware-recursion-detection": "3.226.0",
-        "@aws-sdk/middleware-retry": "3.235.0",
-        "@aws-sdk/middleware-sdk-sts": "3.226.0",
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/middleware-signing": "3.226.0",
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/middleware-user-agent": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/smithy-client": "3.234.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-body-length-browser": "3.188.0",
-        "@aws-sdk/util-body-length-node": "3.208.0",
-        "@aws-sdk/util-defaults-mode-browser": "3.234.0",
-        "@aws-sdk/util-defaults-mode-node": "3.234.0",
-        "@aws-sdk/util-endpoints": "3.245.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "@aws-sdk/util-user-agent-browser": "3.226.0",
-        "@aws-sdk/util-user-agent-node": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "fast-xml-parser": "4.0.11",
-        "tslib": "^2.3.1"
-      }
+    "esbuild-android-64": {
+      "version": "0.14.39",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz",
+      "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==",
+      "dev": true,
+      "optional": true
     },
-    "@aws-sdk/config-resolver": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz",
-      "integrity": "sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A==",
-      "requires": {
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-config-provider": "3.208.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "tslib": "^2.3.1"
-      }
+    "esbuild-android-arm64": {
+      "version": "0.14.39",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz",
+      "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==",
+      "dev": true,
+      "optional": true
     },
-    "@aws-sdk/credential-provider-env": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz",
-      "integrity": "sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA==",
-      "requires": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
+    "esbuild-darwin-64": {
+      "version": "0.14.39",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz",
+      "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==",
+      "dev": true,
+      "optional": true
     },
-    "@aws-sdk/credential-provider-imds": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz",
-      "integrity": "sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q==",
-      "requires": {
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/credential-provider-ini": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.245.0.tgz",
-      "integrity": "sha512-1SjfVc5Wg0lLRUvwMrfjGgFkl+zfxn74gnkPr6by1QyMAoTzmeUkalPLAIqd+uHtFom9e3K633BQtX7zVPZ5XQ==",
-      "requires": {
-        "@aws-sdk/credential-provider-env": "3.226.0",
-        "@aws-sdk/credential-provider-imds": "3.226.0",
-        "@aws-sdk/credential-provider-process": "3.226.0",
-        "@aws-sdk/credential-provider-sso": "3.245.0",
-        "@aws-sdk/credential-provider-web-identity": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/credential-provider-node": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.245.0.tgz",
-      "integrity": "sha512-Dwv8zmRLTDLeEkGrK/sLNFZSC+ahXZxr07CuID054QKACIdUEvkqYlnalRiTeXngiHGQ54u8wU7f0D32R2oL0g==",
-      "requires": {
-        "@aws-sdk/credential-provider-env": "3.226.0",
-        "@aws-sdk/credential-provider-imds": "3.226.0",
-        "@aws-sdk/credential-provider-ini": "3.245.0",
-        "@aws-sdk/credential-provider-process": "3.226.0",
-        "@aws-sdk/credential-provider-sso": "3.245.0",
-        "@aws-sdk/credential-provider-web-identity": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/credential-provider-process": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz",
-      "integrity": "sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng==",
-      "requires": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/credential-provider-sso": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.245.0.tgz",
-      "integrity": "sha512-txWrJc0WNBhXMi7q+twjx7cs/qzgTfbQ+vbag5idRmdoUeiR8rfLvihCab2NaGg50xhh+TaoUCXrgJp3E/XjYQ==",
-      "requires": {
-        "@aws-sdk/client-sso": "3.245.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/token-providers": "3.245.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/credential-provider-web-identity": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz",
-      "integrity": "sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw==",
-      "requires": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/eventstream-codec": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.226.0.tgz",
-      "integrity": "sha512-6uPtR8vSwz3fqoZk9hrb6qBYdp3PJ22+JxV5Wimdesvow4kJXSgDQXIxEkxbv6SxB9tNRB4uJHD84RetHEi15Q==",
-      "requires": {
-        "@aws-crypto/crc32": "2.0.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-hex-encoding": "3.201.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/eventstream-serde-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.226.0.tgz",
-      "integrity": "sha512-otYC5aZE9eJUqAlKpy8w0rPDQ1eKGvZPtgxWXmFYSO2lDVGfI1nBBNmdZ4MdHqNuQ7ucsKMQYF8BFJ65K2tYPA==",
-      "requires": {
-        "@aws-sdk/eventstream-serde-universal": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/eventstream-serde-config-resolver": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.226.0.tgz",
-      "integrity": "sha512-A56Gypg+lyEfA5cna+EUH9XTrj0SvRG1gwNW7lrUzviN36SeA/LFTUIOEjxVML3Lowy+EPAcrSZ67h6aepoAig==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/eventstream-serde-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.226.0.tgz",
-      "integrity": "sha512-KWLnKkKDzI9RNkiK6OiSYpG/XjZfue6Bsp/vRG+H5z3fbXdHv4X2+iW+Efu2Kvn7jsUyUv82TCl57DyJ/HKYhQ==",
-      "requires": {
-        "@aws-sdk/eventstream-serde-universal": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/eventstream-serde-universal": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.226.0.tgz",
-      "integrity": "sha512-Q8viYM1Sv90/yIUqyWNeG1GEvyVlAI3GIrInQcCMC+xT59jS+IKGy2y7ojCvSWXnhf5/HMXKcmG092QsqeKy0Q==",
-      "requires": {
-        "@aws-sdk/eventstream-codec": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/fetch-http-handler": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz",
-      "integrity": "sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/querystring-builder": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/hash-blob-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.226.0.tgz",
-      "integrity": "sha512-5DCvWE6L4xGoViEHyjcPFuUe1G2EtNx8TqswWaoaKgyasP/yuRm4H99Ra7rqIrjCcSTAGD9NVsUQvVVw1bGt9w==",
-      "requires": {
-        "@aws-sdk/chunked-blob-reader": "3.188.0",
-        "@aws-sdk/chunked-blob-reader-native": "3.208.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/hash-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz",
-      "integrity": "sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/hash-stream-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.226.0.tgz",
-      "integrity": "sha512-cgNTGlF8SdHaQXtjEmuLXz2U8SLM2JDKtIVPku/lHTMsUsEn+fuv2C+h1f/hvd4aNw5t1zggym7sO1/h/rv56Q==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/invalid-dependency": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz",
-      "integrity": "sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/is-array-buffer": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz",
-      "integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/md5-js": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.226.0.tgz",
-      "integrity": "sha512-ENigJRNudqyh6xsch166SZ4gggHd3XzZJ8gkCU4CWPne04HcR3BkWSO774IuWooCHt8zkaEHKecPurRz6qR+Vw==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "@aws-sdk/util-utf8-node": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-bucket-endpoint": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.226.0.tgz",
-      "integrity": "sha512-A1Vq5W2X7jgTfjqcKPmjoHohF0poP+9fxwL97fQMvzcwmjhtoCV3bLEpo6CGYx0pKPiSlRJXZkRwRPj2hDHDmA==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-arn-parser": "3.208.0",
-        "@aws-sdk/util-config-provider": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-content-length": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz",
-      "integrity": "sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-endpoint": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz",
-      "integrity": "sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg==",
-      "requires": {
-        "@aws-sdk/middleware-serde": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/url-parser": "3.226.0",
-        "@aws-sdk/util-config-provider": "3.208.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-expect-continue": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.226.0.tgz",
-      "integrity": "sha512-YxvQKTV/eA9P8AgW0hXOgj5Qa+TSnNFfyOkfeP089aP3f6p92b1cESf33TEOKsddive2mHT5LRCN6MuPcgWWrA==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-flexible-checksums": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.226.0.tgz",
-      "integrity": "sha512-8A9Ot9A7794UP5tMGl2MnfTW/UM/jYy1wRWF9YkR/hPIcPb7OmE0hmlwIQGzb/7grxpYw66ETKf0WeH/41YfeQ==",
-      "requires": {
-        "@aws-crypto/crc32": "2.0.0",
-        "@aws-crypto/crc32c": "2.0.0",
-        "@aws-sdk/is-array-buffer": "3.201.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-host-header": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz",
-      "integrity": "sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-location-constraint": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.226.0.tgz",
-      "integrity": "sha512-qHiYaBYPc2R37KxG2uqsUUwh4usrQMHfGkrpTUnx5d4rGzM3mC+muPsTpSHnAL63K2/yJOHQJFjss3GGwV4SSA==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-logger": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz",
-      "integrity": "sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-recursion-detection": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz",
-      "integrity": "sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-retry": {
-      "version": "3.235.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz",
-      "integrity": "sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/service-error-classification": "3.229.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "@aws-sdk/util-retry": "3.229.0",
-        "tslib": "^2.3.1",
-        "uuid": "^8.3.2"
-      },
-      "dependencies": {
-        "uuid": {
-          "version": "8.3.2",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-          "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
-        }
-      }
-    },
-    "@aws-sdk/middleware-sdk-s3": {
-      "version": "3.231.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.231.0.tgz",
-      "integrity": "sha512-UGaSvevd2TanfKgStF46dDSHkh4bxOr1gdUkyHm9i+1pF5lx4KdbnBZv/5SKnn7XifhHRXrs1M3lTzemXREhTA==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-arn-parser": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-sdk-sts": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz",
-      "integrity": "sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg==",
-      "requires": {
-        "@aws-sdk/middleware-signing": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-serde": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz",
-      "integrity": "sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-signing": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz",
-      "integrity": "sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew==",
-      "requires": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-ssec": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.226.0.tgz",
-      "integrity": "sha512-DR97oWoLHiMdaUP/wu99HtzG7/ijvCrjZGDH37WBO1rxFtEti6L7T09wgHzwxMN8gtL8FJA7dU8IrffGSC9VmA==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-stack": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz",
-      "integrity": "sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/middleware-user-agent": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz",
-      "integrity": "sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/node-config-provider": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz",
-      "integrity": "sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w==",
-      "requires": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/node-http-handler": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz",
-      "integrity": "sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA==",
-      "requires": {
-        "@aws-sdk/abort-controller": "3.226.0",
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/querystring-builder": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/property-provider": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz",
-      "integrity": "sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/protocol-http": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz",
-      "integrity": "sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/querystring-builder": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz",
-      "integrity": "sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-uri-escape": "3.201.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/querystring-parser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz",
-      "integrity": "sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/service-error-classification": {
-      "version": "3.229.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz",
-      "integrity": "sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg=="
-    },
-    "@aws-sdk/shared-ini-file-loader": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz",
-      "integrity": "sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/signature-v4": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz",
-      "integrity": "sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw==",
-      "requires": {
-        "@aws-sdk/is-array-buffer": "3.201.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-hex-encoding": "3.201.0",
-        "@aws-sdk/util-middleware": "3.226.0",
-        "@aws-sdk/util-uri-escape": "3.201.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/signature-v4-multi-region": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.226.0.tgz",
-      "integrity": "sha512-QHxNuf9ynK208v7Y3imdsa3Cz8ynYV7ZOf3sBJdItuEtHN6uy/KxaOrtvpF8I5Hyn48Hc8z5miTSMujFKT7GEw==",
-      "requires": {
-        "@aws-sdk/protocol-http": "3.226.0",
-        "@aws-sdk/signature-v4": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-arn-parser": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/smithy-client": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz",
-      "integrity": "sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ==",
-      "requires": {
-        "@aws-sdk/middleware-stack": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/token-providers": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.245.0.tgz",
-      "integrity": "sha512-m/spXR/vEXGb+zMqRUMQYVMwFZSTdK5RkddYqamYkNhIoLm60EYeRu57JsMMs5djKi8dBRSKiXwVHx0l2rXMjg==",
-      "requires": {
-        "@aws-sdk/client-sso-oidc": "3.245.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/shared-ini-file-loader": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/types": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.226.0.tgz",
-      "integrity": "sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/url-parser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz",
-      "integrity": "sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg==",
-      "requires": {
-        "@aws-sdk/querystring-parser": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-arn-parser": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.208.0.tgz",
-      "integrity": "sha512-QV4af+kscova9dv4VuHOgH8wEr/IIYHDGcnyVtkUEqahCejWr1Kuk+SBK0xMwnZY5LSycOtQ8aeqHOn9qOjZtA==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-base64": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz",
-      "integrity": "sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg==",
-      "requires": {
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-body-length-browser": {
-      "version": "3.188.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz",
-      "integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-body-length-node": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz",
-      "integrity": "sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-buffer-from": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz",
-      "integrity": "sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw==",
-      "requires": {
-        "@aws-sdk/is-array-buffer": "3.201.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-config-provider": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz",
-      "integrity": "sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-defaults-mode-browser": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz",
-      "integrity": "sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw==",
-      "requires": {
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "bowser": "^2.11.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-defaults-mode-node": {
-      "version": "3.234.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz",
-      "integrity": "sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w==",
-      "requires": {
-        "@aws-sdk/config-resolver": "3.234.0",
-        "@aws-sdk/credential-provider-imds": "3.226.0",
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/property-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-endpoints": {
-      "version": "3.245.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.245.0.tgz",
-      "integrity": "sha512-UNOFquB1tKx+8RT8n82Zb5tIwDyZHVPBg/m0LB0RsLETjr6krien5ASpqWezsXKIR1hftN9uaxN4bvf2dZrWHg==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-hex-encoding": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz",
-      "integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-locate-window": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz",
-      "integrity": "sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-middleware": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz",
-      "integrity": "sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-retry": {
-      "version": "3.229.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz",
-      "integrity": "sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw==",
-      "requires": {
-        "@aws-sdk/service-error-classification": "3.229.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-stream-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.226.0.tgz",
-      "integrity": "sha512-ZvjlA1ySaLd0DqUWTKmL7LsxfPhroAONpzsinaHmw9aZVL40s2cADU9eWgBdHTuAOeFklL7NP0cc6UiTFHKe8g==",
-      "requires": {
-        "@aws-sdk/fetch-http-handler": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-base64": "3.208.0",
-        "@aws-sdk/util-hex-encoding": "3.201.0",
-        "@aws-sdk/util-utf8-browser": "3.188.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-stream-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.226.0.tgz",
-      "integrity": "sha512-HADXiIgDGoXcCLSKuPnjCLENf0iC0lzqqnymZu9H2FoACZhJB7DvJ9LnP51Pvw9lfCu+yvLzbMqSPdbXtMbRWg==",
-      "requires": {
-        "@aws-sdk/node-http-handler": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-uri-escape": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz",
-      "integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-user-agent-browser": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz",
-      "integrity": "sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA==",
-      "requires": {
-        "@aws-sdk/types": "3.226.0",
-        "bowser": "^2.11.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-user-agent-node": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz",
-      "integrity": "sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A==",
-      "requires": {
-        "@aws-sdk/node-config-provider": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-utf8-browser": {
-      "version": "3.188.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz",
-      "integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-utf8-node": {
-      "version": "3.208.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.208.0.tgz",
-      "integrity": "sha512-jKY87Acv0yWBdFxx6bveagy5FYjz+dtV8IPT7ay1E2WPWH1czoIdMAkc8tSInK31T6CRnHWkLZ1qYwCbgRfERQ==",
-      "requires": {
-        "@aws-sdk/util-buffer-from": "3.208.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/util-waiter": {
-      "version": "3.226.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz",
-      "integrity": "sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g==",
-      "requires": {
-        "@aws-sdk/abort-controller": "3.226.0",
-        "@aws-sdk/types": "3.226.0",
-        "tslib": "^2.3.1"
-      }
-    },
-    "@aws-sdk/xml-builder": {
-      "version": "3.201.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.201.0.tgz",
-      "integrity": "sha512-brRdB1wwMgjWEnOQsv7zSUhIQuh7DEicrfslAqHop4S4FtSI3GQAShpQqgOpMTNFYcpaWKmE/Y1MJmNY7xLCnw==",
-      "requires": {
-        "tslib": "^2.3.1"
-      }
-    },
-    "@types/adm-zip": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.0.tgz",
-      "integrity": "sha512-FCJBJq9ODsQZUNURo5ILAQueuA8WJhRvuihS3ke2iI25mJlfV2LK8jG2Qj2z2AWg8U0FtWWqBHVRetceLskSaw==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "@types/aws-lambda": {
-      "version": "8.10.95",
-      "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.95.tgz",
-      "integrity": "sha512-wGtzLbd04EmqhFjTZmXgLzvmhDdyVU7AMo/JkiPmA2VUdBFQfUBQFCEzaVVK+f1PP5aWx1ejnb7K/8MXYI/frQ==",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "17.0.31",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz",
-      "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==",
-      "devOptional": true
-    },
-    "@types/yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
-      "optional": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
-    "adm-zip": {
-      "version": "0.5.9",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.9.tgz",
-      "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg=="
-    },
-    "bowser": {
-      "version": "2.11.0",
-      "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
-      "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
-    },
-    "buffer-crc32": {
-      "version": "0.2.13",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
-    },
-    "debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "requires": {
-        "ms": "2.1.2"
-      }
-    },
-    "end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
-      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-      "requires": {
-        "once": "^1.4.0"
-      }
-    },
-    "esbuild": {
-      "version": "0.14.39",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz",
-      "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==",
-      "dev": true,
-      "requires": {
-        "esbuild-android-64": "0.14.39",
-        "esbuild-android-arm64": "0.14.39",
-        "esbuild-darwin-64": "0.14.39",
-        "esbuild-darwin-arm64": "0.14.39",
-        "esbuild-freebsd-64": "0.14.39",
-        "esbuild-freebsd-arm64": "0.14.39",
-        "esbuild-linux-32": "0.14.39",
-        "esbuild-linux-64": "0.14.39",
-        "esbuild-linux-arm": "0.14.39",
-        "esbuild-linux-arm64": "0.14.39",
-        "esbuild-linux-mips64le": "0.14.39",
-        "esbuild-linux-ppc64le": "0.14.39",
-        "esbuild-linux-riscv64": "0.14.39",
-        "esbuild-linux-s390x": "0.14.39",
-        "esbuild-netbsd-64": "0.14.39",
-        "esbuild-openbsd-64": "0.14.39",
-        "esbuild-sunos-64": "0.14.39",
-        "esbuild-windows-32": "0.14.39",
-        "esbuild-windows-64": "0.14.39",
-        "esbuild-windows-arm64": "0.14.39"
-      }
-    },
-    "esbuild-android-64": {
-      "version": "0.14.39",
-      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz",
-      "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-android-arm64": {
-      "version": "0.14.39",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz",
-      "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-darwin-64": {
-      "version": "0.14.39",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz",
-      "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==",
-      "dev": true,
-      "optional": true
-    },
-    "esbuild-darwin-arm64": {
-      "version": "0.14.39",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz",
-      "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==",
-      "dev": true,
-      "optional": true
+    "esbuild-darwin-arm64": {
+      "version": "0.14.39",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz",
+      "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==",
+      "dev": true,
+      "optional": true
     },
     "esbuild-freebsd-64": {
       "version": "0.14.39",
@@ -3205,91 +2404,20 @@
       "dev": true,
       "optional": true
     },
-    "extract-zip": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
-      "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
-      "requires": {
-        "@types/yauzl": "^2.9.1",
-        "debug": "^4.1.1",
-        "get-stream": "^5.1.0",
-        "yauzl": "^2.10.0"
-      }
-    },
-    "fast-xml-parser": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
-      "integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==",
-      "requires": {
-        "strnum": "^1.0.5"
-      }
-    },
-    "fd-slicer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
-      "requires": {
-        "pend": "~1.2.0"
-      }
-    },
-    "get-stream": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
-      "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
-      "requires": {
-        "pump": "^3.0.0"
-      }
-    },
-    "ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
-    },
-    "pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
     "strnum": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
       "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
     },
     "tslib": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
-      "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-    },
-    "yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
-      "requires": {
-        "buffer-crc32": "~0.2.3",
-        "fd-slicer": "~1.1.0"
-      }
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+      "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
+    },
+    "uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
     }
   }
 }
diff --git a/lambda/nodejs-build/package.json b/lambda/nodejs-build/package.json
index b4a039c..979a83c 100644
--- a/lambda/nodejs-build/package.json
+++ b/lambda/nodejs-build/package.json
@@ -7,13 +7,11 @@
     "build": "esbuild index.ts --bundle --outdir=./dist --platform=node --external:@aws-sdk/*"
   },
   "dependencies": {
-    "@aws-sdk/client-s3": "^3.245.0",
-    "adm-zip": "^0.5.9",
-    "extract-zip": "^2.0.1"
+    "@aws-sdk/client-codebuild": "^3.321.1"
   },
   "devDependencies": {
-    "@types/adm-zip": "^0.5.0",
     "@types/aws-lambda": "^8.10.95",
+    "@types/node": "^18.16.3",
     "esbuild": "^0.14.39"
   }
 }
diff --git a/src/nodejs-build.ts b/src/nodejs-build.ts
index 7a631bb..1db11a5 100644
--- a/src/nodejs-build.ts
+++ b/src/nodejs-build.ts
@@ -1,7 +1,9 @@
 import { createHash } from 'crypto';
-import { join } from 'path';
-import { CustomResource, Duration, Size } from 'aws-cdk-lib';
+import { join, basename } from 'path';
+import { Annotations, CfnResource, CustomResource, Duration } from 'aws-cdk-lib';
 import { IDistribution } from 'aws-cdk-lib/aws-cloudfront';
+import { BuildSpec, LinuxBuildImage, Project } from 'aws-cdk-lib/aws-codebuild';
+import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
 import { Code, Runtime, RuntimeFamily, SingletonFunction } from 'aws-cdk-lib/aws-lambda';
 import { IBucket } from 'aws-cdk-lib/aws-s3';
 import { Asset, AssetProps } from 'aws-cdk-lib/aws-s3-assets';
@@ -15,6 +17,12 @@ export interface AssetConfig extends AssetProps {
    * @default No command is executed.
    */
   readonly commands?: string[];
+
+  /**
+   * Relative path from a build directory to the directory where the asset is extracted.
+   * @default basename of the asset path.
+   */
+  readonly extractPath?: string;
 }
 
 export interface NodejsBuildProps {
@@ -49,14 +57,19 @@ export interface NodejsBuildProps {
    */
   readonly buildCommands?: string[];
   /**
-   * The name of the working directory of build process in the build enironment.
-   * @default assetProps[0].assetProps.path
+   * Relative path from the build directory to the directory where build commands run.
+   * @default assetProps[0].extractPath
    */
   readonly workingDirectory?: string;
   /**
-   * The path to the directory that contains your build artifacts (relative to the working directory.)
+   * Relative path from the working directory to the directory where the build artifacts are output.
    */
   readonly outputSourceDirectory: string;
+  /**
+   * The version of Node.js to use in a build environment. Available versions: 12, 14, 16, 18.
+   * @default 18
+   */
+  readonly nodejsVersion?: number;
 }
 
 export class NodejsBuild extends Construct {
@@ -70,18 +83,119 @@ export class NodejsBuild extends Construct {
       handler: 'index.handler',
       uuid: '25648b21-2c40-4f09-aa65-b6bbb0c44659', // generated for this construct
       lambdaPurpose: 'NodejsBuildCustomResourceHandler',
-      timeout: Duration.minutes(10),
-      memorySize: 1792,
-      ephemeralStorageSize: Size.gibibytes(5),
+      timeout: Duration.minutes(5),
     });
 
+    const nodejsVersion = props.nodejsVersion ?? 18;
+    let buildImage = 'aws/codebuild/standard:7.0';
+    // See: https://docs.aws.amazon.com/codebuild/latest/userguide/available-runtimes.html#linux-runtimes
+    switch (nodejsVersion) {
+      case 12:
+      case 14:
+        buildImage = 'aws/codebuild/standard:5.0';
+        break;
+      case 16:
+        buildImage = 'aws/codebuild/standard:6.0';
+        break;
+      case 18:
+        buildImage = 'aws/codebuild/standard:7.0';
+        break;
+      default:
+        Annotations.of(this).addError(`Unsupported Node.js version: ${nodejsVersion}`);
+    }
+
+    const project = new Project(this, 'Project', {
+      environment: { buildImage: LinuxBuildImage.STANDARD_6_0 },
+      buildSpec: BuildSpec.fromObject({
+        version: '0.2',
+        phases: {
+          install: {
+            'runtime-versions': {
+              nodejs: nodejsVersion,
+            },
+          },
+          build: {
+            commands: [
+              'current_dir=$(pwd)',
+              `
+for obj in $(echo "$input" | jq -c '.[]'); do
+  assetUrl=$(echo "$obj" | jq -r '.assetUrl')
+  extractPath=$(echo "$obj" | jq -r '.extractPath')
+  commands=$(echo "$obj" | jq -r '.commands')
+
+  # Download the zip file
+  aws s3 cp "$assetUrl" temp.zip
+
+  # Extract the zip file to the extractPath directory
+  mkdir -p "$extractPath"
+  unzip temp.zip -d "$extractPath"
+
+  # Remove the zip file
+  rm temp.zip
+
+  # Run the specified commands in the extractPath directory
+  cd "$extractPath"
+  ls -la
+  eval "$commands"
+  cd "$current_dir"
+  ls -la
+done
+              `,
+              'ls -la',
+              'cd "$workingDirectory"',
+              'eval "$buildCommands"',
+              'ls -la',
+              'cd "$current_dir"',
+              'cd "$outputSourceDirectory"',
+              'zip -r output.zip ./',
+              'aws s3 cp output.zip "s3://$destinationBucketName/$destinationObjectKey"',
+            ],
+          },
+          post_build: {
+            commands: [
+              'echo Build completed on `date`',
+              `
+STATUS='SUCCESS'
+if [ $CODEBUILD_BUILD_SUCCEEDING -ne 1 ] # Test if the build is failing
+then
+STATUS='FAILED'
+REASON="NodejsBuild failed. See CloudWatch Log stream for the detailed reason: 
+https://$AWS_REGION.console.aws.amazon.com/cloudwatch/home?region=$AWS_REGION#logsV2:log-groups/log-group/\\$252Faws\\$252Fcodebuild\\$252F$projectName/log-events/$CODEBUILD_LOG_PATH"
+fi
+cat <<EOF > payload.json
+{
+  "StackId": "$stackId",
+  "RequestId": "$requestId",
+  "LogicalResourceId":"$logicalResourceId",
+  "PhysicalResourceId": "$destinationObjectKey",
+  "Status": "$STATUS",
+  "Reason": "$REASON"
+}
+EOF
+curl -vv -i -X PUT -H 'Content-Type:' -d "@payload.json" "$responseURL"
+              `,
+            ],
+          },
+        },
+      }),
+    });
+
+    (project.node.defaultChild as CfnResource).addPropertyOverride('Environment.Image', buildImage);
+
+    handler.addToRolePolicy(
+      new PolicyStatement({
+        actions: ['codebuild:StartBuild'],
+        resources: [project.projectArn],
+      }),
+    );
+
     let assetHash = 'nodejsBuild';
     const assets = props.assets.map((assetProps) => {
       const asset = new Asset(this, `Source-${assetProps.path.replace('/', '')}`, {
         ...assetProps,
       });
       assetHash += asset.assetHash;
-      asset.grantRead(handler);
+      asset.grantRead(project);
       return asset;
     });
 
@@ -91,23 +205,24 @@ export class NodejsBuild extends Construct {
 
     // use the asset bucket that are created by CDK bootstrap to store intermediate artifacts
     const bucket = assets[0].bucket;
-    bucket.grantWrite(handler);
+    bucket.grantWrite(project);
 
-    const workingDirectory = props.workingDirectory ?? props.assets[0].path;
+    const sources: ResourceProperties['sources'] = props.assets.map((s, i) => ({
+      sourceBucketName: assets[i].s3BucketName,
+      sourceObjectKey: assets[i].s3ObjectKey,
+      extractPath: s.extractPath ?? basename(s.path),
+      commands: s.commands,
+    }));
 
     const properties: ResourceProperties = {
-      sources: props.assets.map((s, i) => ({
-        sourceBucketName: assets[i].s3BucketName,
-        sourceObjectKey: assets[i].s3ObjectKey,
-        directoryName: s.path,
-        commands: s.commands,
-      })),
+      sources,
       destinationBucketName: bucket.bucketName,
       destinationObjectKey: `${assetHash}.zip`,
-      workingDirectory,
-      outputSourceDirectory: join(workingDirectory, props.outputSourceDirectory),
+      workingDirectory: sources[0].extractPath,
+      outputSourceDirectory: join(sources[0].extractPath, props.outputSourceDirectory),
       environment: props.buildEnvironment,
       buildCommands: props.buildCommands ?? ['npm run build'],
+      codeBuildProjectName: project.projectName,
     };
 
     const custom = new CustomResource(this, 'Resource', {
diff --git a/src/types.ts b/src/types.ts
index 95e44a1..4f2f14c 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -2,7 +2,7 @@ export type ResourceProperties = {
   sources: {
     sourceBucketName: string;
     sourceObjectKey: string;
-    directoryName: string;
+    extractPath: string;
     commands?: string[];
   }[];
   environment?: { [key: string]: string };
@@ -11,4 +11,5 @@ export type ResourceProperties = {
   workingDirectory: string;
   outputSourceDirectory: string;
   buildCommands: string[];
+  codeBuildProjectName: string;
 };


Test patch:
diff --git a/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json b/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json
index 6a7deeb..ad970ab 100644
--- a/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json
+++ b/test/nodejs-build.integ.snapshot/NodejsBuildIntegTest.template.json
@@ -192,6 +192,207 @@
     "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
    ]
   },
+  "ExampleBuildProjectRole823D0208": {
+   "Type": "AWS::IAM::Role",
+   "Properties": {
+    "AssumeRolePolicyDocument": {
+     "Statement": [
+      {
+       "Action": "sts:AssumeRole",
+       "Effect": "Allow",
+       "Principal": {
+        "Service": "codebuild.amazonaws.com"
+       }
+      }
+     ],
+     "Version": "2012-10-17"
+    }
+   }
+  },
+  "ExampleBuildProjectRoleDefaultPolicy1E341966": {
+   "Type": "AWS::IAM::Policy",
+   "Properties": {
+    "PolicyDocument": {
+     "Statement": [
+      {
+       "Action": [
+        "logs:CreateLogGroup",
+        "logs:CreateLogStream",
+        "logs:PutLogEvents"
+       ],
+       "Effect": "Allow",
+       "Resource": [
+        {
+         "Fn::Join": [
+          "",
+          [
+           "arn:",
+           {
+            "Ref": "AWS::Partition"
+           },
+           ":logs:",
+           {
+            "Ref": "AWS::Region"
+           },
+           ":",
+           {
+            "Ref": "AWS::AccountId"
+           },
+           ":log-group:/aws/codebuild/",
+           {
+            "Ref": "ExampleBuildProjectEF5CAC49"
+           },
+           ":*"
+          ]
+         ]
+        },
+        {
+         "Fn::Join": [
+          "",
+          [
+           "arn:",
+           {
+            "Ref": "AWS::Partition"
+           },
+           ":logs:",
+           {
+            "Ref": "AWS::Region"
+           },
+           ":",
+           {
+            "Ref": "AWS::AccountId"
+           },
+           ":log-group:/aws/codebuild/",
+           {
+            "Ref": "ExampleBuildProjectEF5CAC49"
+           }
+          ]
+         ]
+        }
+       ]
+      },
+      {
+       "Action": [
+        "codebuild:BatchPutCodeCoverages",
+        "codebuild:BatchPutTestCases",
+        "codebuild:CreateReport",
+        "codebuild:CreateReportGroup",
+        "codebuild:UpdateReport"
+       ],
+       "Effect": "Allow",
+       "Resource": {
+        "Fn::Join": [
+         "",
+         [
+          "arn:",
+          {
+           "Ref": "AWS::Partition"
+          },
+          ":codebuild:",
+          {
+           "Ref": "AWS::Region"
+          },
+          ":",
+          {
+           "Ref": "AWS::AccountId"
+          },
+          ":report-group/",
+          {
+           "Ref": "ExampleBuildProjectEF5CAC49"
+          },
+          "-*"
+         ]
+        ]
+       }
+      },
+      {
+       "Action": [
+        "s3:Abort*",
+        "s3:DeleteObject*",
+        "s3:GetBucket*",
+        "s3:GetObject*",
+        "s3:List*",
+        "s3:PutObject",
+        "s3:PutObjectLegalHold",
+        "s3:PutObjectRetention",
+        "s3:PutObjectTagging",
+        "s3:PutObjectVersionTagging"
+       ],
+       "Effect": "Allow",
+       "Resource": [
+        {
+         "Fn::Join": [
+          "",
+          [
+           "arn:",
+           {
+            "Ref": "AWS::Partition"
+           },
+           ":s3:::",
+           {
+            "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
+           },
+           "/*"
+          ]
+         ]
+        },
+        {
+         "Fn::Join": [
+          "",
+          [
+           "arn:",
+           {
+            "Ref": "AWS::Partition"
+           },
+           ":s3:::",
+           {
+            "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
+           }
+          ]
+         ]
+        }
+       ]
+      }
+     ],
+     "Version": "2012-10-17"
+    },
+    "PolicyName": "ExampleBuildProjectRoleDefaultPolicy1E341966",
+    "Roles": [
+     {
+      "Ref": "ExampleBuildProjectRole823D0208"
+     }
+    ]
+   }
+  },
+  "ExampleBuildProjectEF5CAC49": {
+   "Type": "AWS::CodeBuild::Project",
+   "Properties": {
+    "Artifacts": {
+     "Type": "NO_ARTIFACTS"
+    },
+    "Environment": {
+     "ComputeType": "BUILD_GENERAL1_SMALL",
+     "Image": "aws/codebuild/standard:7.0",
+     "ImagePullCredentialsType": "CODEBUILD",
+     "PrivilegedMode": false,
+     "Type": "LINUX_CONTAINER"
+    },
+    "ServiceRole": {
+     "Fn::GetAtt": [
+      "ExampleBuildProjectRole823D0208",
+      "Arn"
+     ]
+    },
+    "Source": {
+     "BuildSpec": "{\n  \"version\": \"0.2\",\n  \"phases\": {\n    \"install\": {\n      \"runtime-versions\": {\n        \"nodejs\": 18\n      }\n    },\n    \"build\": {\n      \"commands\": [\n        \"current_dir=$(pwd)\",\n        \"\\nfor obj in $(echo \\\"$input\\\" | jq -c '.[]'); do\\n  assetUrl=$(echo \\\"$obj\\\" | jq -r '.assetUrl')\\n  extractPath=$(echo \\\"$obj\\\" | jq -r '.extractPath')\\n  commands=$(echo \\\"$obj\\\" | jq -r '.commands')\\n\\n  # Download the zip file\\n  aws s3 cp \\\"$assetUrl\\\" temp.zip\\n\\n  # Extract the zip file to the extractPath directory\\n  mkdir -p \\\"$extractPath\\\"\\n  unzip temp.zip -d \\\"$extractPath\\\"\\n\\n  # Remove the zip file\\n  rm temp.zip\\n\\n  # Run the specified commands in the extractPath directory\\n  cd \\\"$extractPath\\\"\\n  ls -la\\n  eval \\\"$commands\\\"\\n  cd \\\"$current_dir\\\"\\n  ls -la\\ndone\\n              \",\n        \"ls -la\",\n        \"cd \\\"$workingDirectory\\\"\",\n        \"eval \\\"$buildCommands\\\"\",\n        \"ls -la\",\n        \"cd \\\"$current_dir\\\"\",\n        \"cd \\\"$outputSourceDirectory\\\"\",\n        \"zip -r output.zip ./\",\n        \"aws s3 cp output.zip \\\"s3://$destinationBucketName/$destinationObjectKey\\\"\"\n      ]\n    },\n    \"post_build\": {\n      \"commands\": [\n        \"echo Build completed on `date`\",\n        \"\\nSTATUS='SUCCESS'\\nif [ $CODEBUILD_BUILD_SUCCEEDING -ne 1 ] # Test if the build is failing\\nthen\\nSTATUS='FAILED'\\nREASON=\\\"NodejsBuild failed. See CloudWatch Log stream for the detailed reason: \\nhttps://$AWS_REGION.console.aws.amazon.com/cloudwatch/home?region=$AWS_REGION#logsV2:log-groups/log-group/\\\\$252Faws\\\\$252Fcodebuild\\\\$252F$projectName/log-events/$CODEBUILD_LOG_PATH\\\"\\nfi\\ncat <<EOF > payload.json\\n{\\n  \\\"StackId\\\": \\\"$stackId\\\",\\n  \\\"RequestId\\\": \\\"$requestId\\\",\\n  \\\"LogicalResourceId\\\":\\\"$logicalResourceId\\\",\\n  \\\"PhysicalResourceId\\\": \\\"$destinationObjectKey\\\",\\n  \\\"Status\\\": \\\"$STATUS\\\",\\n  \\\"Reason\\\": \\\"$REASON\\\"\\n}\\nEOF\\ncurl -vv -i -X PUT -H 'Content-Type:' -d \\\"@payload.json\\\" \\\"$responseURL\\\"\\n              \"\n      ]\n    }\n  }\n}",
+     "Type": "NO_SOURCE"
+    },
+    "Cache": {
+     "Type": "NO_CACHE"
+    },
+    "EncryptionKey": "alias/aws/s3"
+   }
+  },
   "ExampleBuild61F1D79B": {
    "Type": "Custom::CDKNodejsBuild",
    "Properties": {
@@ -239,15 +440,15 @@
         ]
        ]
       },
-      "directoryName": "../example/example-app"
+      "extractPath": "example-app"
      }
     ],
     "destinationBucketName": {
      "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
     },
     "destinationObjectKey": "4f254f7921b3e0c451f0345408d704c9.zip",
-    "workingDirectory": "../example/example-app",
-    "outputSourceDirectory": "../example/example-app/dist",
+    "workingDirectory": "example-app",
+    "outputSourceDirectory": "example-app/dist",
     "environment": {
      "VITE_SOME_TOKEN": {
       "Ref": "Destination920A3C57"
@@ -256,7 +457,10 @@
     "buildCommands": [
      "npm ci",
      "npm run build"
-    ]
+    ],
+    "codeBuildProjectName": {
+     "Ref": "ExampleBuildProjectEF5CAC49"
+    }
    },
    "UpdateReplacePolicy": "Delete",
    "DeletionPolicy": "Delete"
@@ -374,52 +578,14 @@
     "PolicyDocument": {
      "Statement": [
       {
-       "Action": [
-        "s3:Abort*",
-        "s3:DeleteObject*",
-        "s3:GetBucket*",
-        "s3:GetObject*",
-        "s3:List*",
-        "s3:PutObject",
-        "s3:PutObjectLegalHold",
-        "s3:PutObjectRetention",
-        "s3:PutObjectTagging",
-        "s3:PutObjectVersionTagging"
-       ],
+       "Action": "codebuild:StartBuild",
        "Effect": "Allow",
-       "Resource": [
-        {
-         "Fn::Join": [
-          "",
-          [
-           "arn:",
-           {
-            "Ref": "AWS::Partition"
-           },
-           ":s3:::",
-           {
-            "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
-           },
-           "/*"
-          ]
-         ]
-        },
-        {
-         "Fn::Join": [
-          "",
-          [
-           "arn:",
-           {
-            "Ref": "AWS::Partition"
-           },
-           ":s3:::",
-           {
-            "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
-           }
-          ]
-         ]
-        }
-       ]
+       "Resource": {
+        "Fn::GetAtt": [
+         "ExampleBuildProjectEF5CAC49",
+         "Arn"
+        ]
+       }
       }
      ],
      "Version": "2012-10-17"
@@ -437,7 +603,7 @@
    "Properties": {
     "Code": {
      "S3Bucket": {
-      "Ref": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3BucketBC3258A3"
+      "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8"
      },
      "S3Key": {
       "Fn::Join": [
@@ -450,7 +616,7 @@
            "Fn::Split": [
             "||",
             {
-             "Ref": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314"
+             "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C"
             }
            ]
           }
@@ -463,7 +629,7 @@
            "Fn::Split": [
             "||",
             {
-             "Ref": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314"
+             "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C"
             }
            ]
           }
@@ -479,13 +645,9 @@
       "Arn"
      ]
     },
-    "EphemeralStorage": {
-     "Size": 5120
-    },
     "Handler": "index.handler",
-    "MemorySize": 1792,
     "Runtime": "nodejs18.x",
-    "Timeout": 600
+    "Timeout": 300
    },
    "DependsOn": [
     "NodejsBuildCustomResourceHandler25648b212c404f09aa65b6bbb0c44659ServiceRoleDefaultPolicyCF8879D3",
@@ -692,17 +854,17 @@
    "Type": "String",
    "Description": "Artifact hash for asset \"e57c1acaa363d7d2b81736776007a7091bc73dff4aeb8135627c4511a51e7dca\""
   },
-  "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3BucketBC3258A3": {
+  "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8": {
    "Type": "String",
-   "Description": "S3 bucket for asset \"13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5\""
+   "Description": "S3 bucket for asset \"a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b\""
   },
-  "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314": {
+  "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C": {
    "Type": "String",
-   "Description": "S3 key for asset version \"13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5\""
+   "Description": "S3 key for asset version \"a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b\""
   },
-  "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5ArtifactHashB0C24631": {
+  "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bArtifactHash156A92A2": {
    "Type": "String",
-   "Description": "Artifact hash for asset \"13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5\""
+   "Description": "Artifact hash for asset \"a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b\""
   },
   "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945": {
    "Type": "String",
diff --git a/test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js b/test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js
deleted file mode 100644
index e56a43b..0000000
--- a/test/nodejs-build.integ.snapshot/asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/index.js
+++ /dev/null
@@ -1,4727 +0,0 @@
-var __create = Object.create;
-var __defProp = Object.defineProperty;
-var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
-var __getOwnPropNames = Object.getOwnPropertyNames;
-var __getProtoOf = Object.getPrototypeOf;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __commonJS = (cb, mod) => function __require() {
-  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
-};
-var __export = (target, all) => {
-  for (var name in all)
-    __defProp(target, name, { get: all[name], enumerable: true });
-};
-var __copyProps = (to, from, except, desc) => {
-  if (from && typeof from === "object" || typeof from === "function") {
-    for (let key of __getOwnPropNames(from))
-      if (!__hasOwnProp.call(to, key) && key !== except)
-        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
-  }
-  return to;
-};
-var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
-var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
-
-// node_modules/adm-zip/util/fileSystem.js
-var require_fileSystem = __commonJS({
-  "node_modules/adm-zip/util/fileSystem.js"(exports) {
-    exports.require = function() {
-      if (typeof process === "object" && process.versions && process.versions["electron"]) {
-        try {
-          const originalFs = require("original-fs");
-          if (Object.keys(originalFs).length > 0) {
-            return originalFs;
-          }
-        } catch (e) {
-        }
-      }
-      return require("fs");
-    };
-  }
-});
-
-// node_modules/adm-zip/util/constants.js
-var require_constants = __commonJS({
-  "node_modules/adm-zip/util/constants.js"(exports, module2) {
-    module2.exports = {
-      LOCHDR: 30,
-      LOCSIG: 67324752,
-      LOCVER: 4,
-      LOCFLG: 6,
-      LOCHOW: 8,
-      LOCTIM: 10,
-      LOCCRC: 14,
-      LOCSIZ: 18,
-      LOCLEN: 22,
-      LOCNAM: 26,
-      LOCEXT: 28,
-      EXTSIG: 134695760,
-      EXTHDR: 16,
-      EXTCRC: 4,
-      EXTSIZ: 8,
-      EXTLEN: 12,
-      CENHDR: 46,
-      CENSIG: 33639248,
-      CENVEM: 4,
-      CENVER: 6,
-      CENFLG: 8,
-      CENHOW: 10,
-      CENTIM: 12,
-      CENCRC: 16,
-      CENSIZ: 20,
-      CENLEN: 24,
-      CENNAM: 28,
-      CENEXT: 30,
-      CENCOM: 32,
-      CENDSK: 34,
-      CENATT: 36,
-      CENATX: 38,
-      CENOFF: 42,
-      ENDHDR: 22,
-      ENDSIG: 101010256,
-      ENDSUB: 8,
-      ENDTOT: 10,
-      ENDSIZ: 12,
-      ENDOFF: 16,
-      ENDCOM: 20,
-      END64HDR: 20,
-      END64SIG: 117853008,
-      END64START: 4,
-      END64OFF: 8,
-      END64NUMDISKS: 16,
-      ZIP64SIG: 101075792,
-      ZIP64HDR: 56,
-      ZIP64LEAD: 12,
-      ZIP64SIZE: 4,
-      ZIP64VEM: 12,
-      ZIP64VER: 14,
-      ZIP64DSK: 16,
-      ZIP64DSKDIR: 20,
-      ZIP64SUB: 24,
-      ZIP64TOT: 32,
-      ZIP64SIZB: 40,
-      ZIP64OFF: 48,
-      ZIP64EXTRA: 56,
-      STORED: 0,
-      SHRUNK: 1,
-      REDUCED1: 2,
-      REDUCED2: 3,
-      REDUCED3: 4,
-      REDUCED4: 5,
-      IMPLODED: 6,
-      DEFLATED: 8,
-      ENHANCED_DEFLATED: 9,
-      PKWARE: 10,
-      BZIP2: 12,
-      LZMA: 14,
-      IBM_TERSE: 18,
-      IBM_LZ77: 19,
-      AES_ENCRYPT: 99,
-      FLG_ENC: 1,
-      FLG_COMP1: 2,
-      FLG_COMP2: 4,
-      FLG_DESC: 8,
-      FLG_ENH: 16,
-      FLG_PATCH: 32,
-      FLG_STR: 64,
-      FLG_EFS: 2048,
-      FLG_MSK: 4096,
-      FILE: 2,
-      BUFFER: 1,
-      NONE: 0,
-      EF_ID: 0,
-      EF_SIZE: 2,
-      ID_ZIP64: 1,
-      ID_AVINFO: 7,
-      ID_PFS: 8,
-      ID_OS2: 9,
-      ID_NTFS: 10,
-      ID_OPENVMS: 12,
-      ID_UNIX: 13,
-      ID_FORK: 14,
-      ID_PATCH: 15,
-      ID_X509_PKCS7: 20,
-      ID_X509_CERTID_F: 21,
-      ID_X509_CERTID_C: 22,
-      ID_STRONGENC: 23,
-      ID_RECORD_MGT: 24,
-      ID_X509_PKCS7_RL: 25,
-      ID_IBM1: 101,
-      ID_IBM2: 102,
-      ID_POSZIP: 18064,
-      EF_ZIP64_OR_32: 4294967295,
-      EF_ZIP64_OR_16: 65535,
-      EF_ZIP64_SUNCOMP: 0,
-      EF_ZIP64_SCOMP: 8,
-      EF_ZIP64_RHO: 16,
-      EF_ZIP64_DSN: 24
-    };
-  }
-});
-
-// node_modules/adm-zip/util/utils.js
-var require_utils = __commonJS({
-  "node_modules/adm-zip/util/utils.js"(exports, module2) {
-    var fsystem = require_fileSystem().require();
-    var pth = require("path");
-    var Constants = require_constants();
-    var isWin = typeof process === "object" && process.platform === "win32";
-    var is_Obj = (obj) => obj && typeof obj === "object";
-    var crcTable = new Uint32Array(256).map((t, c) => {
-      for (let k = 0; k < 8; k++) {
-        if ((c & 1) !== 0) {
-          c = 3988292384 ^ c >>> 1;
-        } else {
-          c >>>= 1;
-        }
-      }
-      return c >>> 0;
-    });
-    function Utils(opts) {
-      this.sep = pth.sep;
-      this.fs = fsystem;
-      if (is_Obj(opts)) {
-        if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") {
-          this.fs = opts.fs;
-        }
-      }
-    }
-    module2.exports = Utils;
-    Utils.prototype.makeDir = function(folder) {
-      const self = this;
-      function mkdirSync2(fpath) {
-        let resolvedPath = fpath.split(self.sep)[0];
-        fpath.split(self.sep).forEach(function(name) {
-          if (!name || name.substr(-1, 1) === ":")
-            return;
-          resolvedPath += self.sep + name;
-          var stat;
-          try {
-            stat = self.fs.statSync(resolvedPath);
-          } catch (e) {
-            self.fs.mkdirSync(resolvedPath);
-          }
-          if (stat && stat.isFile())
-            throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
-        });
-      }
-      mkdirSync2(folder);
-    };
-    Utils.prototype.writeFileTo = function(path2, content, overwrite, attr) {
-      const self = this;
-      if (self.fs.existsSync(path2)) {
-        if (!overwrite)
-          return false;
-        var stat = self.fs.statSync(path2);
-        if (stat.isDirectory()) {
-          return false;
-        }
-      }
-      var folder = pth.dirname(path2);
-      if (!self.fs.existsSync(folder)) {
-        self.makeDir(folder);
-      }
-      var fd;
-      try {
-        fd = self.fs.openSync(path2, "w", 438);
-      } catch (e) {
-        self.fs.chmodSync(path2, 438);
-        fd = self.fs.openSync(path2, "w", 438);
-      }
-      if (fd) {
-        try {
-          self.fs.writeSync(fd, content, 0, content.length, 0);
-        } finally {
-          self.fs.closeSync(fd);
-        }
-      }
-      self.fs.chmodSync(path2, attr || 438);
-      return true;
-    };
-    Utils.prototype.writeFileToAsync = function(path2, content, overwrite, attr, callback) {
-      if (typeof attr === "function") {
-        callback = attr;
-        attr = void 0;
-      }
-      const self = this;
-      self.fs.exists(path2, function(exist) {
-        if (exist && !overwrite)
-          return callback(false);
-        self.fs.stat(path2, function(err, stat) {
-          if (exist && stat.isDirectory()) {
-            return callback(false);
-          }
-          var folder = pth.dirname(path2);
-          self.fs.exists(folder, function(exists) {
-            if (!exists)
-              self.makeDir(folder);
-            self.fs.open(path2, "w", 438, function(err2, fd) {
-              if (err2) {
-                self.fs.chmod(path2, 438, function() {
-                  self.fs.open(path2, "w", 438, function(err3, fd2) {
-                    self.fs.write(fd2, content, 0, content.length, 0, function() {
-                      self.fs.close(fd2, function() {
-                        self.fs.chmod(path2, attr || 438, function() {
-                          callback(true);
-                        });
-                      });
-                    });
-                  });
-                });
-              } else if (fd) {
-                self.fs.write(fd, content, 0, content.length, 0, function() {
-                  self.fs.close(fd, function() {
-                    self.fs.chmod(path2, attr || 438, function() {
-                      callback(true);
-                    });
-                  });
-                });
-              } else {
-                self.fs.chmod(path2, attr || 438, function() {
-                  callback(true);
-                });
-              }
-            });
-          });
-        });
-      });
-    };
-    Utils.prototype.findFiles = function(path2) {
-      const self = this;
-      function findSync(dir, pattern, recursive) {
-        if (typeof pattern === "boolean") {
-          recursive = pattern;
-          pattern = void 0;
-        }
-        let files = [];
-        self.fs.readdirSync(dir).forEach(function(file) {
-          var path3 = pth.join(dir, file);
-          if (self.fs.statSync(path3).isDirectory() && recursive)
-            files = files.concat(findSync(path3, pattern, recursive));
-          if (!pattern || pattern.test(path3)) {
-            files.push(pth.normalize(path3) + (self.fs.statSync(path3).isDirectory() ? self.sep : ""));
-          }
-        });
-        return files;
-      }
-      return findSync(path2, void 0, true);
-    };
-    Utils.prototype.getAttributes = function() {
-    };
-    Utils.prototype.setAttributes = function() {
-    };
-    Utils.crc32update = function(crc, byte) {
-      return crcTable[(crc ^ byte) & 255] ^ crc >>> 8;
-    };
-    Utils.crc32 = function(buf) {
-      if (typeof buf === "string") {
-        buf = Buffer.from(buf, "utf8");
-      }
-      if (!crcTable.length)
-        genCRCTable();
-      let len = buf.length;
-      let crc = ~0;
-      for (let off = 0; off < len; )
-        crc = Utils.crc32update(crc, buf[off++]);
-      return ~crc >>> 0;
-    };
-    Utils.methodToString = function(method) {
-      switch (method) {
-        case Constants.STORED:
-          return "STORED (" + method + ")";
-        case Constants.DEFLATED:
-          return "DEFLATED (" + method + ")";
-        default:
-          return "UNSUPPORTED (" + method + ")";
-      }
-    };
-    Utils.canonical = function(path2) {
-      if (!path2)
-        return "";
-      var safeSuffix = pth.posix.normalize("/" + path2.split("\\").join("/"));
-      return pth.join(".", safeSuffix);
-    };
-    Utils.sanitize = function(prefix, name) {
-      prefix = pth.resolve(pth.normalize(prefix));
-      var parts = name.split("/");
-      for (var i = 0, l = parts.length; i < l; i++) {
-        var path2 = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
-        if (path2.indexOf(prefix) === 0) {
-          return path2;
-        }
-      }
-      return pth.normalize(pth.join(prefix, pth.basename(name)));
-    };
-    Utils.toBuffer = function toBuffer(input) {
-      if (Buffer.isBuffer(input)) {
-        return input;
-      } else if (input instanceof Uint8Array) {
-        return Buffer.from(input);
-      } else {
-        return typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.alloc(0);
-      }
-    };
-    Utils.readBigUInt64LE = function(buffer, index) {
-      var slice = Buffer.from(buffer.slice(index, index + 8));
-      slice.swap64();
-      return parseInt(`0x${slice.toString("hex")}`);
-    };
-    Utils.isWin = isWin;
-    Utils.crcTable = crcTable;
-  }
-});
-
-// node_modules/adm-zip/util/errors.js
-var require_errors = __commonJS({
-  "node_modules/adm-zip/util/errors.js"(exports, module2) {
-    module2.exports = {
-      INVALID_LOC: "Invalid LOC header (bad signature)",
-      INVALID_CEN: "Invalid CEN header (bad signature)",
-      INVALID_END: "Invalid END header (bad signature)",
-      NO_DATA: "Nothing to decompress",
-      BAD_CRC: "CRC32 checksum failed",
-      FILE_IN_THE_WAY: "There is a file in the way: %s",
-      UNKNOWN_METHOD: "Invalid/unsupported compression method",
-      AVAIL_DATA: "inflate::Available inflate data did not terminate",
-      INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block",
-      TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes",
-      INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths",
-      INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length",
-      INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete",
-      INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths",
-      INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths",
-      INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement",
-      INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)",
-      CANT_EXTRACT_FILE: "Could not extract the file",
-      CANT_OVERRIDE: "Target file already exists",
-      NO_ZIP: "No zip file was loaded",
-      NO_ENTRY: "Entry doesn't exist",
-      DIRECTORY_CONTENT_ERROR: "A directory cannot have content",
-      FILE_NOT_FOUND: "File not found: %s",
-      NOT_IMPLEMENTED: "Not implemented",
-      INVALID_FILENAME: "Invalid filename",
-      INVALID_FORMAT: "Invalid or unsupported zip format. No END header found"
-    };
-  }
-});
-
-// node_modules/adm-zip/util/fattr.js
-var require_fattr = __commonJS({
-  "node_modules/adm-zip/util/fattr.js"(exports, module2) {
-    var fs2 = require_fileSystem().require();
-    var pth = require("path");
-    fs2.existsSync = fs2.existsSync || pth.existsSync;
-    module2.exports = function(path2) {
-      var _path = path2 || "", _obj = newAttr(), _stat = null;
-      function newAttr() {
-        return {
-          directory: false,
-          readonly: false,
-          hidden: false,
-          executable: false,
-          mtime: 0,
-          atime: 0
-        };
-      }
-      if (_path && fs2.existsSync(_path)) {
-        _stat = fs2.statSync(_path);
-        _obj.directory = _stat.isDirectory();
-        _obj.mtime = _stat.mtime;
-        _obj.atime = _stat.atime;
-        _obj.executable = (73 & _stat.mode) !== 0;
-        _obj.readonly = (128 & _stat.mode) === 0;
-        _obj.hidden = pth.basename(_path)[0] === ".";
-      } else {
-        console.warn("Invalid path: " + _path);
-      }
-      return {
-        get directory() {
-          return _obj.directory;
-        },
-        get readOnly() {
-          return _obj.readonly;
-        },
-        get hidden() {
-          return _obj.hidden;
-        },
-        get mtime() {
-          return _obj.mtime;
-        },
-        get atime() {
-          return _obj.atime;
-        },
-        get executable() {
-          return _obj.executable;
-        },
-        decodeAttributes: function() {
-        },
-        encodeAttributes: function() {
-        },
-        toJSON: function() {
-          return {
-            path: _path,
-            isDirectory: _obj.directory,
-            isReadOnly: _obj.readonly,
-            isHidden: _obj.hidden,
-            isExecutable: _obj.executable,
-            mTime: _obj.mtime,
-            aTime: _obj.atime
-          };
-        },
-        toString: function() {
-          return JSON.stringify(this.toJSON(), null, "	");
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/util/index.js
-var require_util = __commonJS({
-  "node_modules/adm-zip/util/index.js"(exports, module2) {
-    module2.exports = require_utils();
-    module2.exports.Constants = require_constants();
-    module2.exports.Errors = require_errors();
-    module2.exports.FileAttr = require_fattr();
-  }
-});
-
-// node_modules/adm-zip/headers/entryHeader.js
-var require_entryHeader = __commonJS({
-  "node_modules/adm-zip/headers/entryHeader.js"(exports, module2) {
-    var Utils = require_util();
-    var Constants = Utils.Constants;
-    module2.exports = function() {
-      var _verMade = 20, _version = 10, _flags = 0, _method = 0, _time = 0, _crc = 0, _compressedSize = 0, _size = 0, _fnameLen = 0, _extraLen = 0, _comLen = 0, _diskStart = 0, _inattr = 0, _attr = 0, _offset = 0;
-      _verMade |= Utils.isWin ? 2560 : 768;
-      _flags |= Constants.FLG_EFS;
-      var _dataHeader = {};
-      function setTime(val) {
-        val = new Date(val);
-        _time = (val.getFullYear() - 1980 & 127) << 25 | val.getMonth() + 1 << 21 | val.getDate() << 16 | val.getHours() << 11 | val.getMinutes() << 5 | val.getSeconds() >> 1;
-      }
-      setTime(+new Date());
-      return {
-        get made() {
-          return _verMade;
-        },
-        set made(val) {
-          _verMade = val;
-        },
-        get version() {
-          return _version;
-        },
-        set version(val) {
-          _version = val;
-        },
-        get flags() {
-          return _flags;
-        },
-        set flags(val) {
-          _flags = val;
-        },
-        get method() {
-          return _method;
-        },
-        set method(val) {
-          switch (val) {
-            case Constants.STORED:
-              this.version = 10;
-            case Constants.DEFLATED:
-            default:
-              this.version = 20;
-          }
-          _method = val;
-        },
-        get time() {
-          return new Date((_time >> 25 & 127) + 1980, (_time >> 21 & 15) - 1, _time >> 16 & 31, _time >> 11 & 31, _time >> 5 & 63, (_time & 31) << 1);
-        },
-        set time(val) {
-          setTime(val);
-        },
-        get crc() {
-          return _crc;
-        },
-        set crc(val) {
-          _crc = Math.max(0, val) >>> 0;
-        },
-        get compressedSize() {
-          return _compressedSize;
-        },
-        set compressedSize(val) {
-          _compressedSize = Math.max(0, val) >>> 0;
-        },
-        get size() {
-          return _size;
-        },
-        set size(val) {
-          _size = Math.max(0, val) >>> 0;
-        },
-        get fileNameLength() {
-          return _fnameLen;
-        },
-        set fileNameLength(val) {
-          _fnameLen = val;
-        },
-        get extraLength() {
-          return _extraLen;
-        },
-        set extraLength(val) {
-          _extraLen = val;
-        },
-        get commentLength() {
-          return _comLen;
-        },
-        set commentLength(val) {
-          _comLen = val;
-        },
-        get diskNumStart() {
-          return _diskStart;
-        },
-        set diskNumStart(val) {
-          _diskStart = Math.max(0, val) >>> 0;
-        },
-        get inAttr() {
-          return _inattr;
-        },
-        set inAttr(val) {
-          _inattr = Math.max(0, val) >>> 0;
-        },
-        get attr() {
-          return _attr;
-        },
-        set attr(val) {
-          _attr = Math.max(0, val) >>> 0;
-        },
-        get fileAttr() {
-          return _attr ? (_attr >>> 0 | 0) >> 16 & 4095 : 0;
-        },
-        get offset() {
-          return _offset;
-        },
-        set offset(val) {
-          _offset = Math.max(0, val) >>> 0;
-        },
-        get encripted() {
-          return (_flags & 1) === 1;
-        },
-        get entryHeaderSize() {
-          return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
-        },
-        get realDataOffset() {
-          return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
-        },
-        get dataHeader() {
-          return _dataHeader;
-        },
-        loadDataHeaderFromBinary: function(input) {
-          var data = input.slice(_offset, _offset + Constants.LOCHDR);
-          if (data.readUInt32LE(0) !== Constants.LOCSIG) {
-            throw new Error(Utils.Errors.INVALID_LOC);
-          }
-          _dataHeader = {
-            version: data.readUInt16LE(Constants.LOCVER),
-            flags: data.readUInt16LE(Constants.LOCFLG),
-            method: data.readUInt16LE(Constants.LOCHOW),
-            time: data.readUInt32LE(Constants.LOCTIM),
-            crc: data.readUInt32LE(Constants.LOCCRC),
-            compressedSize: data.readUInt32LE(Constants.LOCSIZ),
-            size: data.readUInt32LE(Constants.LOCLEN),
-            fnameLen: data.readUInt16LE(Constants.LOCNAM),
-            extraLen: data.readUInt16LE(Constants.LOCEXT)
-          };
-        },
-        loadFromBinary: function(data) {
-          if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
-            throw new Error(Utils.Errors.INVALID_CEN);
-          }
-          _verMade = data.readUInt16LE(Constants.CENVEM);
-          _version = data.readUInt16LE(Constants.CENVER);
-          _flags = data.readUInt16LE(Constants.CENFLG);
-          _method = data.readUInt16LE(Constants.CENHOW);
-          _time = data.readUInt32LE(Constants.CENTIM);
-          _crc = data.readUInt32LE(Constants.CENCRC);
-          _compressedSize = data.readUInt32LE(Constants.CENSIZ);
-          _size = data.readUInt32LE(Constants.CENLEN);
-          _fnameLen = data.readUInt16LE(Constants.CENNAM);
-          _extraLen = data.readUInt16LE(Constants.CENEXT);
-          _comLen = data.readUInt16LE(Constants.CENCOM);
-          _diskStart = data.readUInt16LE(Constants.CENDSK);
-          _inattr = data.readUInt16LE(Constants.CENATT);
-          _attr = data.readUInt32LE(Constants.CENATX);
-          _offset = data.readUInt32LE(Constants.CENOFF);
-        },
-        dataHeaderToBinary: function() {
-          var data = Buffer.alloc(Constants.LOCHDR);
-          data.writeUInt32LE(Constants.LOCSIG, 0);
-          data.writeUInt16LE(_version, Constants.LOCVER);
-          data.writeUInt16LE(_flags, Constants.LOCFLG);
-          data.writeUInt16LE(_method, Constants.LOCHOW);
-          data.writeUInt32LE(_time, Constants.LOCTIM);
-          data.writeUInt32LE(_crc, Constants.LOCCRC);
-          data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);
-          data.writeUInt32LE(_size, Constants.LOCLEN);
-          data.writeUInt16LE(_fnameLen, Constants.LOCNAM);
-          data.writeUInt16LE(_extraLen, Constants.LOCEXT);
-          return data;
-        },
-        entryHeaderToBinary: function() {
-          var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);
-          data.writeUInt32LE(Constants.CENSIG, 0);
-          data.writeUInt16LE(_verMade, Constants.CENVEM);
-          data.writeUInt16LE(_version, Constants.CENVER);
-          data.writeUInt16LE(_flags, Constants.CENFLG);
-          data.writeUInt16LE(_method, Constants.CENHOW);
-          data.writeUInt32LE(_time, Constants.CENTIM);
-          data.writeUInt32LE(_crc, Constants.CENCRC);
-          data.writeUInt32LE(_compressedSize, Constants.CENSIZ);
-          data.writeUInt32LE(_size, Constants.CENLEN);
-          data.writeUInt16LE(_fnameLen, Constants.CENNAM);
-          data.writeUInt16LE(_extraLen, Constants.CENEXT);
-          data.writeUInt16LE(_comLen, Constants.CENCOM);
-          data.writeUInt16LE(_diskStart, Constants.CENDSK);
-          data.writeUInt16LE(_inattr, Constants.CENATT);
-          data.writeUInt32LE(_attr, Constants.CENATX);
-          data.writeUInt32LE(_offset, Constants.CENOFF);
-          data.fill(0, Constants.CENHDR);
-          return data;
-        },
-        toJSON: function() {
-          const bytes = function(nr) {
-            return nr + " bytes";
-          };
-          return {
-            made: _verMade,
-            version: _version,
-            flags: _flags,
-            method: Utils.methodToString(_method),
-            time: this.time,
-            crc: "0x" + _crc.toString(16).toUpperCase(),
-            compressedSize: bytes(_compressedSize),
-            size: bytes(_size),
-            fileNameLength: bytes(_fnameLen),
-            extraLength: bytes(_extraLen),
-            commentLength: bytes(_comLen),
-            diskNumStart: _diskStart,
-            inAttr: _inattr,
-            attr: _attr,
-            offset: _offset,
-            entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)
-          };
-        },
-        toString: function() {
-          return JSON.stringify(this.toJSON(), null, "	");
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/headers/mainHeader.js
-var require_mainHeader = __commonJS({
-  "node_modules/adm-zip/headers/mainHeader.js"(exports, module2) {
-    var Utils = require_util();
-    var Constants = Utils.Constants;
-    module2.exports = function() {
-      var _volumeEntries = 0, _totalEntries = 0, _size = 0, _offset = 0, _commentLength = 0;
-      return {
-        get diskEntries() {
-          return _volumeEntries;
-        },
-        set diskEntries(val) {
-          _volumeEntries = _totalEntries = val;
-        },
-        get totalEntries() {
-          return _totalEntries;
-        },
-        set totalEntries(val) {
-          _totalEntries = _volumeEntries = val;
-        },
-        get size() {
-          return _size;
-        },
-        set size(val) {
-          _size = val;
-        },
-        get offset() {
-          return _offset;
-        },
-        set offset(val) {
-          _offset = val;
-        },
-        get commentLength() {
-          return _commentLength;
-        },
-        set commentLength(val) {
-          _commentLength = val;
-        },
-        get mainHeaderSize() {
-          return Constants.ENDHDR + _commentLength;
-        },
-        loadFromBinary: function(data) {
-          if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) {
-            throw new Error(Utils.Errors.INVALID_END);
-          }
-          if (data.readUInt32LE(0) === Constants.ENDSIG) {
-            _volumeEntries = data.readUInt16LE(Constants.ENDSUB);
-            _totalEntries = data.readUInt16LE(Constants.ENDTOT);
-            _size = data.readUInt32LE(Constants.ENDSIZ);
-            _offset = data.readUInt32LE(Constants.ENDOFF);
-            _commentLength = data.readUInt16LE(Constants.ENDCOM);
-          } else {
-            _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);
-            _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);
-            _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ);
-            _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);
-            _commentLength = 0;
-          }
-        },
-        toBinary: function() {
-          var b = Buffer.alloc(Constants.ENDHDR + _commentLength);
-          b.writeUInt32LE(Constants.ENDSIG, 0);
-          b.writeUInt32LE(0, 4);
-          b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);
-          b.writeUInt16LE(_totalEntries, Constants.ENDTOT);
-          b.writeUInt32LE(_size, Constants.ENDSIZ);
-          b.writeUInt32LE(_offset, Constants.ENDOFF);
-          b.writeUInt16LE(_commentLength, Constants.ENDCOM);
-          b.fill(" ", Constants.ENDHDR);
-          return b;
-        },
-        toJSON: function() {
-          const offset = function(nr, len) {
-            let offs = nr.toString(16).toUpperCase();
-            while (offs.length < len)
-              offs = "0" + offs;
-            return "0x" + offs;
-          };
-          return {
-            diskEntries: _volumeEntries,
-            totalEntries: _totalEntries,
-            size: _size + " bytes",
-            offset: offset(_offset, 4),
-            commentLength: _commentLength
-          };
-        },
-        toString: function() {
-          return JSON.stringify(this.toJSON(), null, "	");
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/headers/index.js
-var require_headers = __commonJS({
-  "node_modules/adm-zip/headers/index.js"(exports) {
-    exports.EntryHeader = require_entryHeader();
-    exports.MainHeader = require_mainHeader();
-  }
-});
-
-// node_modules/adm-zip/methods/deflater.js
-var require_deflater = __commonJS({
-  "node_modules/adm-zip/methods/deflater.js"(exports, module2) {
-    module2.exports = function(inbuf) {
-      var zlib = require("zlib");
-      var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };
-      return {
-        deflate: function() {
-          return zlib.deflateRawSync(inbuf, opts);
-        },
-        deflateAsync: function(callback) {
-          var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0;
-          tmp.on("data", function(data) {
-            parts.push(data);
-            total += data.length;
-          });
-          tmp.on("end", function() {
-            var buf = Buffer.alloc(total), written = 0;
-            buf.fill(0);
-            for (var i = 0; i < parts.length; i++) {
-              var part = parts[i];
-              part.copy(buf, written);
-              written += part.length;
-            }
-            callback && callback(buf);
-          });
-          tmp.end(inbuf);
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/methods/inflater.js
-var require_inflater = __commonJS({
-  "node_modules/adm-zip/methods/inflater.js"(exports, module2) {
-    module2.exports = function(inbuf) {
-      var zlib = require("zlib");
-      return {
-        inflate: function() {
-          return zlib.inflateRawSync(inbuf);
-        },
-        inflateAsync: function(callback) {
-          var tmp = zlib.createInflateRaw(), parts = [], total = 0;
-          tmp.on("data", function(data) {
-            parts.push(data);
-            total += data.length;
-          });
-          tmp.on("end", function() {
-            var buf = Buffer.alloc(total), written = 0;
-            buf.fill(0);
-            for (var i = 0; i < parts.length; i++) {
-              var part = parts[i];
-              part.copy(buf, written);
-              written += part.length;
-            }
-            callback && callback(buf);
-          });
-          tmp.end(inbuf);
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/methods/zipcrypto.js
-var require_zipcrypto = __commonJS({
-  "node_modules/adm-zip/methods/zipcrypto.js"(exports, module2) {
-    "use strict";
-    var { randomFillSync } = require("crypto");
-    var crctable = new Uint32Array(256).map((t, crc) => {
-      for (let j = 0; j < 8; j++) {
-        if ((crc & 1) !== 0) {
-          crc = crc >>> 1 ^ 3988292384;
-        } else {
-          crc >>>= 1;
-        }
-      }
-      return crc >>> 0;
-    });
-    var uMul = (a, b) => Math.imul(a, b) >>> 0;
-    var crc32update = (pCrc32, bval) => {
-      return crctable[(pCrc32 ^ bval) & 255] ^ pCrc32 >>> 8;
-    };
-    var genSalt = () => {
-      if (typeof randomFillSync === "function") {
-        return randomFillSync(Buffer.alloc(12));
-      } else {
-        return genSalt.node();
-      }
-    };
-    genSalt.node = () => {
-      const salt = Buffer.alloc(12);
-      const len = salt.length;
-      for (let i = 0; i < len; i++)
-        salt[i] = Math.random() * 256 & 255;
-      return salt;
-    };
-    var config = {
-      genSalt
-    };
-    function Initkeys(pw) {
-      const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);
-      this.keys = new Uint32Array([305419896, 591751049, 878082192]);
-      for (let i = 0; i < pass.length; i++) {
-        this.updateKeys(pass[i]);
-      }
-    }
-    Initkeys.prototype.updateKeys = function(byteValue) {
-      const keys = this.keys;
-      keys[0] = crc32update(keys[0], byteValue);
-      keys[1] += keys[0] & 255;
-      keys[1] = uMul(keys[1], 134775813) + 1;
-      keys[2] = crc32update(keys[2], keys[1] >>> 24);
-      return byteValue;
-    };
-    Initkeys.prototype.next = function() {
-      const k = (this.keys[2] | 2) >>> 0;
-      return uMul(k, k ^ 1) >> 8 & 255;
-    };
-    function make_decrypter(pwd) {
-      const keys = new Initkeys(pwd);
-      return function(data) {
-        const result = Buffer.alloc(data.length);
-        let pos = 0;
-        for (let c of data) {
-          result[pos++] = keys.updateKeys(c ^ keys.next());
-        }
-        return result;
-      };
-    }
-    function make_encrypter(pwd) {
-      const keys = new Initkeys(pwd);
-      return function(data, result, pos = 0) {
-        if (!result)
-          result = Buffer.alloc(data.length);
-        for (let c of data) {
-          const k = keys.next();
-          result[pos++] = c ^ k;
-          keys.updateKeys(c);
-        }
-        return result;
-      };
-    }
-    function decrypt(data, header, pwd) {
-      if (!data || !Buffer.isBuffer(data) || data.length < 12) {
-        return Buffer.alloc(0);
-      }
-      const decrypter = make_decrypter(pwd);
-      const salt = decrypter(data.slice(0, 12));
-      if (salt[11] !== header.crc >>> 24) {
-        throw "ADM-ZIP: Wrong Password";
-      }
-      return decrypter(data.slice(12));
-    }
-    function _salter(data) {
-      if (Buffer.isBuffer(data) && data.length >= 12) {
-        config.genSalt = function() {
-          return data.slice(0, 12);
-        };
-      } else if (data === "node") {
-        config.genSalt = genSalt.node;
-      } else {
-        config.genSalt = genSalt;
-      }
-    }
-    function encrypt(data, header, pwd, oldlike = false) {
-      if (data == null)
-        data = Buffer.alloc(0);
-      if (!Buffer.isBuffer(data))
-        data = Buffer.from(data.toString());
-      const encrypter = make_encrypter(pwd);
-      const salt = config.genSalt();
-      salt[11] = header.crc >>> 24 & 255;
-      if (oldlike)
-        salt[10] = header.crc >>> 16 & 255;
-      const result = Buffer.alloc(data.length + 12);
-      encrypter(salt, result);
-      return encrypter(data, result, 12);
-    }
-    module2.exports = { decrypt, encrypt, _salter };
-  }
-});
-
-// node_modules/adm-zip/methods/index.js
-var require_methods = __commonJS({
-  "node_modules/adm-zip/methods/index.js"(exports) {
-    exports.Deflater = require_deflater();
-    exports.Inflater = require_inflater();
-    exports.ZipCrypto = require_zipcrypto();
-  }
-});
-
-// node_modules/adm-zip/zipEntry.js
-var require_zipEntry = __commonJS({
-  "node_modules/adm-zip/zipEntry.js"(exports, module2) {
-    var Utils = require_util();
-    var Headers = require_headers();
-    var Constants = Utils.Constants;
-    var Methods = require_methods();
-    module2.exports = function(input) {
-      var _entryHeader = new Headers.EntryHeader(), _entryName = Buffer.alloc(0), _comment = Buffer.alloc(0), _isDirectory = false, uncompressedData = null, _extra = Buffer.alloc(0);
-      function getCompressedDataFromZip() {
-        if (!input || !Buffer.isBuffer(input)) {
-          return Buffer.alloc(0);
-        }
-        _entryHeader.loadDataHeaderFromBinary(input);
-        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
-      }
-      function crc32OK(data) {
-        if ((_entryHeader.flags & 8) !== 8) {
-          if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
-            return false;
-          }
-        } else {
-        }
-        return true;
-      }
-      function decompress(async, callback, pass) {
-        if (typeof callback === "undefined" && typeof async === "string") {
-          pass = async;
-          async = void 0;
-        }
-        if (_isDirectory) {
-          if (async && callback) {
-            callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR);
-          }
-          return Buffer.alloc(0);
-        }
-        var compressedData = getCompressedDataFromZip();
-        if (compressedData.length === 0) {
-          if (async && callback)
-            callback(compressedData);
-          return compressedData;
-        }
-        if (_entryHeader.encripted) {
-          if (typeof pass !== "string" && !Buffer.isBuffer(pass)) {
-            throw new Error("ADM-ZIP: Incompatible password parameter");
-          }
-          compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);
-        }
-        var data = Buffer.alloc(_entryHeader.size);
-        switch (_entryHeader.method) {
-          case Utils.Constants.STORED:
-            compressedData.copy(data);
-            if (!crc32OK(data)) {
-              if (async && callback)
-                callback(data, Utils.Errors.BAD_CRC);
-              throw new Error(Utils.Errors.BAD_CRC);
-            } else {
-              if (async && callback)
-                callback(data);
-              return data;
-            }
-          case Utils.Constants.DEFLATED:
-            var inflater = new Methods.Inflater(compressedData);
-            if (!async) {
-              const result = inflater.inflate(data);
-              result.copy(data, 0);
-              if (!crc32OK(data)) {
-                throw new Error(Utils.Errors.BAD_CRC + " " + _entryName.toString());
-              }
-              return data;
-            } else {
-              inflater.inflateAsync(function(result) {
-                result.copy(result, 0);
-                if (callback) {
-                  if (!crc32OK(result)) {
-                    callback(result, Utils.Errors.BAD_CRC);
-                  } else {
-                    callback(result);
-                  }
-                }
-              });
-            }
-            break;
-          default:
-            if (async && callback)
-              callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
-            throw new Error(Utils.Errors.UNKNOWN_METHOD);
-        }
-      }
-      function compress(async, callback) {
-        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
-          if (async && callback)
-            callback(getCompressedDataFromZip());
-          return getCompressedDataFromZip();
-        }
-        if (uncompressedData.length && !_isDirectory) {
-          var compressedData;
-          switch (_entryHeader.method) {
-            case Utils.Constants.STORED:
-              _entryHeader.compressedSize = _entryHeader.size;
-              compressedData = Buffer.alloc(uncompressedData.length);
-              uncompressedData.copy(compressedData);
-              if (async && callback)
-                callback(compressedData);
-              return compressedData;
-            default:
-            case Utils.Constants.DEFLATED:
-              var deflater = new Methods.Deflater(uncompressedData);
-              if (!async) {
-                var deflated = deflater.deflate();
-                _entryHeader.compressedSize = deflated.length;
-                return deflated;
-              } else {
-                deflater.deflateAsync(function(data) {
-                  compressedData = Buffer.alloc(data.length);
-                  _entryHeader.compressedSize = data.length;
-                  data.copy(compressedData);
-                  callback && callback(compressedData);
-                });
-              }
-              deflater = null;
-              break;
-          }
-        } else if (async && callback) {
-          callback(Buffer.alloc(0));
-        } else {
-          return Buffer.alloc(0);
-        }
-      }
-      function readUInt64LE(buffer, offset) {
-        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
-      }
-      function parseExtra(data) {
-        var offset = 0;
-        var signature, size, part;
-        while (offset < data.length) {
-          signature = data.readUInt16LE(offset);
-          offset += 2;
-          size = data.readUInt16LE(offset);
-          offset += 2;
-          part = data.slice(offset, offset + size);
-          offset += size;
-          if (Constants.ID_ZIP64 === signature) {
-            parseZip64ExtendedInformation(part);
-          }
-        }
-      }
-      function parseZip64ExtendedInformation(data) {
-        var size, compressedSize, offset, diskNumStart;
-        if (data.length >= Constants.EF_ZIP64_SCOMP) {
-          size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
-          if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
-            _entryHeader.size = size;
-          }
-        }
-        if (data.length >= Constants.EF_ZIP64_RHO) {
-          compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
-          if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
-            _entryHeader.compressedSize = compressedSize;
-          }
-        }
-        if (data.length >= Constants.EF_ZIP64_DSN) {
-          offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
-          if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
-            _entryHeader.offset = offset;
-          }
-        }
-        if (data.length >= Constants.EF_ZIP64_DSN + 4) {
-          diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
-          if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
-            _entryHeader.diskNumStart = diskNumStart;
-          }
-        }
-      }
-      return {
-        get entryName() {
-          return _entryName.toString();
-        },
-        get rawEntryName() {
-          return _entryName;
-        },
-        set entryName(val) {
-          _entryName = Utils.toBuffer(val);
-          var lastChar = _entryName[_entryName.length - 1];
-          _isDirectory = lastChar === 47 || lastChar === 92;
-          _entryHeader.fileNameLength = _entryName.length;
-        },
-        get extra() {
-          return _extra;
-        },
-        set extra(val) {
-          _extra = val;
-          _entryHeader.extraLength = val.length;
-          parseExtra(val);
-        },
-        get comment() {
-          return _comment.toString();
-        },
-        set comment(val) {
-          _comment = Utils.toBuffer(val);
-          _entryHeader.commentLength = _comment.length;
-        },
-        get name() {
-          var n = _entryName.toString();
-          return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop();
-        },
-        get isDirectory() {
-          return _isDirectory;
-        },
-        getCompressedData: function() {
-          return compress(false, null);
-        },
-        getCompressedDataAsync: function(callback) {
-          compress(true, callback);
-        },
-        setData: function(value) {
-          uncompressedData = Utils.toBuffer(value);
-          if (!_isDirectory && uncompressedData.length) {
-            _entryHeader.size = uncompressedData.length;
-            _entryHeader.method = Utils.Constants.DEFLATED;
-            _entryHeader.crc = Utils.crc32(value);
-            _entryHeader.changed = true;
-          } else {
-            _entryHeader.method = Utils.Constants.STORED;
-          }
-        },
-        getData: function(pass) {
-          if (_entryHeader.changed) {
-            return uncompressedData;
-          } else {
-            return decompress(false, null, pass);
-          }
-        },
-        getDataAsync: function(callback, pass) {
-          if (_entryHeader.changed) {
-            callback(uncompressedData);
-          } else {
-            decompress(true, callback, pass);
-          }
-        },
-        set attr(attr) {
-          _entryHeader.attr = attr;
-        },
-        get attr() {
-          return _entryHeader.attr;
-        },
-        set header(data) {
-          _entryHeader.loadFromBinary(data);
-        },
-        get header() {
-          return _entryHeader;
-        },
-        packHeader: function() {
-          var header = _entryHeader.entryHeaderToBinary();
-          var addpos = Utils.Constants.CENHDR;
-          _entryName.copy(header, addpos);
-          addpos += _entryName.length;
-          if (_entryHeader.extraLength) {
-            _extra.copy(header, addpos);
-            addpos += _entryHeader.extraLength;
-          }
-          if (_entryHeader.commentLength) {
-            _comment.copy(header, addpos);
-          }
-          return header;
-        },
-        toJSON: function() {
-          const bytes = function(nr) {
-            return "<" + (nr && nr.length + " bytes buffer" || "null") + ">";
-          };
-          return {
-            entryName: this.entryName,
-            name: this.name,
-            comment: this.comment,
-            isDirectory: this.isDirectory,
-            header: _entryHeader.toJSON(),
-            compressedData: bytes(input),
-            data: bytes(uncompressedData)
-          };
-        },
-        toString: function() {
-          return JSON.stringify(this.toJSON(), null, "	");
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/zipFile.js
-var require_zipFile = __commonJS({
-  "node_modules/adm-zip/zipFile.js"(exports, module2) {
-    var ZipEntry = require_zipEntry();
-    var Headers = require_headers();
-    var Utils = require_util();
-    module2.exports = function(inBuffer, options) {
-      var entryList = [], entryTable = {}, _comment = Buffer.alloc(0), mainHeader = new Headers.MainHeader(), loadedEntries = false;
-      const opts = Object.assign(/* @__PURE__ */ Object.create(null), options);
-      const { noSort } = opts;
-      if (inBuffer) {
-        readMainHeader(opts.readEntries);
-      } else {
-        loadedEntries = true;
-      }
-      function iterateEntries(callback) {
-        const totalEntries = mainHeader.diskEntries;
-        let index = mainHeader.offset;
-        for (let i = 0; i < totalEntries; i++) {
-          let tmp = index;
-          const entry = new ZipEntry(inBuffer);
-          entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
-          entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
-          index += entry.header.entryHeaderSize;
-          callback(entry);
-        }
-      }
-      function readEntries() {
-        loadedEntries = true;
-        entryTable = {};
-        entryList = new Array(mainHeader.diskEntries);
-        var index = mainHeader.offset;
-        for (var i = 0; i < entryList.length; i++) {
-          var tmp = index, entry = new ZipEntry(inBuffer);
-          entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
-          entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
-          if (entry.header.extraLength) {
-            entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
-          }
-          if (entry.header.commentLength)
-            entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
-          index += entry.header.entryHeaderSize;
-          entryList[i] = entry;
-          entryTable[entry.entryName] = entry;
-        }
-      }
-      function readMainHeader(readNow) {
-        var i = inBuffer.length - Utils.Constants.ENDHDR, max = Math.max(0, i - 65535), n = max, endStart = inBuffer.length, endOffset = -1, commentEnd = 0;
-        for (i; i >= n; i--) {
-          if (inBuffer[i] !== 80)
-            continue;
-          if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
-            endOffset = i;
-            commentEnd = i;
-            endStart = i + Utils.Constants.ENDHDR;
-            n = i - Utils.Constants.END64HDR;
-            continue;
-          }
-          if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
-            n = max;
-            continue;
-          }
-          if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
-            endOffset = i;
-            endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
-            break;
-          }
-        }
-        if (!~endOffset)
-          throw new Error(Utils.Errors.INVALID_FORMAT);
-        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
-        if (mainHeader.commentLength) {
-          _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
-        }
-        if (readNow)
-          readEntries();
-      }
-      function sortEntries() {
-        if (entryList.length > 1 && !noSort) {
-          entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
-        }
-      }
-      return {
-        get entries() {
-          if (!loadedEntries) {
-            readEntries();
-          }
-          return entryList;
-        },
-        get comment() {
-          return _comment.toString();
-        },
-        set comment(val) {
-          _comment = Utils.toBuffer(val);
-          mainHeader.commentLength = _comment.length;
-        },
-        getEntryCount: function() {
-          if (!loadedEntries) {
-            return mainHeader.diskEntries;
-          }
-          return entryList.length;
-        },
-        forEach: function(callback) {
-          if (!loadedEntries) {
-            iterateEntries(callback);
-            return;
-          }
-          entryList.forEach(callback);
-        },
-        getEntry: function(entryName) {
-          if (!loadedEntries) {
-            readEntries();
-          }
-          return entryTable[entryName] || null;
-        },
-        setEntry: function(entry) {
-          if (!loadedEntries) {
-            readEntries();
-          }
-          entryList.push(entry);
-          entryTable[entry.entryName] = entry;
-          mainHeader.totalEntries = entryList.length;
-        },
-        deleteEntry: function(entryName) {
-          if (!loadedEntries) {
-            readEntries();
-          }
-          var entry = entryTable[entryName];
-          if (entry && entry.isDirectory) {
-            var _self = this;
-            this.getEntryChildren(entry).forEach(function(child) {
-              if (child.entryName !== entryName) {
-                _self.deleteEntry(child.entryName);
-              }
-            });
-          }
-          entryList.splice(entryList.indexOf(entry), 1);
-          delete entryTable[entryName];
-          mainHeader.totalEntries = entryList.length;
-        },
-        getEntryChildren: function(entry) {
-          if (!loadedEntries) {
-            readEntries();
-          }
-          if (entry && entry.isDirectory) {
-            const list = [];
-            const name = entry.entryName;
-            const len = name.length;
-            entryList.forEach(function(zipEntry) {
-              if (zipEntry.entryName.substr(0, len) === name) {
-                list.push(zipEntry);
-              }
-            });
-            return list;
-          }
-          return [];
-        },
-        compressToBuffer: function() {
-          if (!loadedEntries) {
-            readEntries();
-          }
-          sortEntries();
-          const dataBlock = [];
-          const entryHeaders = [];
-          let totalSize = 0;
-          let dindex = 0;
-          mainHeader.size = 0;
-          mainHeader.offset = 0;
-          for (const entry of entryList) {
-            const compressedData = entry.getCompressedData();
-            entry.header.offset = dindex;
-            const dataHeader = entry.header.dataHeaderToBinary();
-            const entryNameLen = entry.rawEntryName.length;
-            const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);
-            entry.rawEntryName.copy(postHeader, 0);
-            postHeader.copy(entry.extra, entryNameLen);
-            const dataLength = dataHeader.length + postHeader.length + compressedData.length;
-            dindex += dataLength;
-            dataBlock.push(dataHeader);
-            dataBlock.push(postHeader);
-            dataBlock.push(compressedData);
-            const entryHeader = entry.packHeader();
-            entryHeaders.push(entryHeader);
-            mainHeader.size += entryHeader.length;
-            totalSize += dataLength + entryHeader.length;
-          }
-          totalSize += mainHeader.mainHeaderSize;
-          mainHeader.offset = dindex;
-          dindex = 0;
-          const outBuffer = Buffer.alloc(totalSize);
-          for (const content of dataBlock) {
-            content.copy(outBuffer, dindex);
-            dindex += content.length;
-          }
-          for (const content of entryHeaders) {
-            content.copy(outBuffer, dindex);
-            dindex += content.length;
-          }
-          const mh = mainHeader.toBinary();
-          if (_comment) {
-            _comment.copy(mh, Utils.Constants.ENDHDR);
-          }
-          mh.copy(outBuffer, dindex);
-          return outBuffer;
-        },
-        toAsyncBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) {
-          try {
-            if (!loadedEntries) {
-              readEntries();
-            }
-            sortEntries();
-            const dataBlock = [];
-            const entryHeaders = [];
-            let totalSize = 0;
-            let dindex = 0;
-            mainHeader.size = 0;
-            mainHeader.offset = 0;
-            const compress2Buffer = function(entryLists) {
-              if (entryLists.length) {
-                const entry = entryLists.pop();
-                const name = entry.entryName + entry.extra.toString();
-                if (onItemStart)
-                  onItemStart(name);
-                entry.getCompressedDataAsync(function(compressedData) {
-                  if (onItemEnd)
-                    onItemEnd(name);
-                  entry.header.offset = dindex;
-                  const dataHeader = entry.header.dataHeaderToBinary();
-                  const postHeader = Buffer.alloc(name.length, name);
-                  const dataLength = dataHeader.length + postHeader.length + compressedData.length;
-                  dindex += dataLength;
-                  dataBlock.push(dataHeader);
-                  dataBlock.push(postHeader);
-                  dataBlock.push(compressedData);
-                  const entryHeader = entry.packHeader();
-                  entryHeaders.push(entryHeader);
-                  mainHeader.size += entryHeader.length;
-                  totalSize += dataLength + entryHeader.length;
-                  compress2Buffer(entryLists);
-                });
-              } else {
-                totalSize += mainHeader.mainHeaderSize;
-                mainHeader.offset = dindex;
-                dindex = 0;
-                const outBuffer = Buffer.alloc(totalSize);
-                dataBlock.forEach(function(content) {
-                  content.copy(outBuffer, dindex);
-                  dindex += content.length;
-                });
-                entryHeaders.forEach(function(content) {
-                  content.copy(outBuffer, dindex);
-                  dindex += content.length;
-                });
-                const mh = mainHeader.toBinary();
-                if (_comment) {
-                  _comment.copy(mh, Utils.Constants.ENDHDR);
-                }
-                mh.copy(outBuffer, dindex);
-                onSuccess(outBuffer);
-              }
-            };
-            compress2Buffer(entryList);
-          } catch (e) {
-            onFail(e);
-          }
-        }
-      };
-    };
-  }
-});
-
-// node_modules/adm-zip/adm-zip.js
-var require_adm_zip = __commonJS({
-  "node_modules/adm-zip/adm-zip.js"(exports, module2) {
-    var Utils = require_util();
-    var pth = require("path");
-    var ZipEntry = require_zipEntry();
-    var ZipFile = require_zipFile();
-    var get_Bool = (val, def) => typeof val === "boolean" ? val : def;
-    var get_Str = (val, def) => typeof val === "string" ? val : def;
-    var defaultOptions = {
-      noSort: false,
-      readEntries: false,
-      method: Utils.Constants.NONE,
-      fs: null
-    };
-    module2.exports = function(input, options) {
-      let inBuffer = null;
-      const opts = Object.assign(/* @__PURE__ */ Object.create(null), defaultOptions);
-      if (input && typeof input === "object") {
-        if (!(input instanceof Uint8Array)) {
-          Object.assign(opts, input);
-          input = opts.input ? opts.input : void 0;
-          if (opts.input)
-            delete opts.input;
-        }
-        if (Buffer.isBuffer(input)) {
-          inBuffer = input;
-          opts.method = Utils.Constants.BUFFER;
-          input = void 0;
-        }
-      }
-      Object.assign(opts, options);
-      const filetools = new Utils(opts);
-      if (input && typeof input === "string") {
-        if (filetools.fs.existsSync(input)) {
-          opts.method = Utils.Constants.FILE;
-          opts.filename = input;
-          inBuffer = filetools.fs.readFileSync(input);
-        } else {
-          throw new Error(Utils.Errors.INVALID_FILENAME);
-        }
-      }
-      const _zip = new ZipFile(inBuffer, opts);
-      const { canonical, sanitize } = Utils;
-      function getEntry(entry) {
-        if (entry && _zip) {
-          var item;
-          if (typeof entry === "string")
-            item = _zip.getEntry(entry);
-          if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined")
-            item = _zip.getEntry(entry.entryName);
-          if (item) {
-            return item;
-          }
-        }
-        return null;
-      }
-      function fixPath(zipPath) {
-        const { join: join2, normalize, sep } = pth.posix;
-        return join2(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
-      }
-      return {
-        readFile: function(entry, pass) {
-          var item = getEntry(entry);
-          return item && item.getData(pass) || null;
-        },
-        readFileAsync: function(entry, callback) {
-          var item = getEntry(entry);
-          if (item) {
-            item.getDataAsync(callback);
-          } else {
-            callback(null, "getEntry failed for:" + entry);
-          }
-        },
-        readAsText: function(entry, encoding) {
-          var item = getEntry(entry);
-          if (item) {
-            var data = item.getData();
-            if (data && data.length) {
-              return data.toString(encoding || "utf8");
-            }
-          }
-          return "";
-        },
-        readAsTextAsync: function(entry, callback, encoding) {
-          var item = getEntry(entry);
-          if (item) {
-            item.getDataAsync(function(data, err) {
-              if (err) {
-                callback(data, err);
-                return;
-              }
-              if (data && data.length) {
-                callback(data.toString(encoding || "utf8"));
-              } else {
-                callback("");
-              }
-            });
-          } else {
-            callback("");
-          }
-        },
-        deleteFile: function(entry) {
-          var item = getEntry(entry);
-          if (item) {
-            _zip.deleteEntry(item.entryName);
-          }
-        },
-        addZipComment: function(comment) {
-          _zip.comment = comment;
-        },
-        getZipComment: function() {
-          return _zip.comment || "";
-        },
-        addZipEntryComment: function(entry, comment) {
-          var item = getEntry(entry);
-          if (item) {
-            item.comment = comment;
-          }
-        },
-        getZipEntryComment: function(entry) {
-          var item = getEntry(entry);
-          if (item) {
-            return item.comment || "";
-          }
-          return "";
-        },
-        updateFile: function(entry, content) {
-          var item = getEntry(entry);
-          if (item) {
-            item.setData(content);
-          }
-        },
-        addLocalFile: function(localPath, zipPath, zipName, comment) {
-          if (filetools.fs.existsSync(localPath)) {
-            zipPath = zipPath ? fixPath(zipPath) : "";
-            var p = localPath.split("\\").join("/").split("/").pop();
-            zipPath += zipName ? zipName : p;
-            const _attr = filetools.fs.statSync(localPath);
-            this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);
-          } else {
-            throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
-          }
-        },
-        addLocalFolder: function(localPath, zipPath, filter) {
-          if (filter instanceof RegExp) {
-            filter = function(rx) {
-              return function(filename) {
-                return rx.test(filename);
-              };
-            }(filter);
-          } else if (typeof filter !== "function") {
-            filter = function() {
-              return true;
-            };
-          }
-          zipPath = zipPath ? fixPath(zipPath) : "";
-          localPath = pth.normalize(localPath);
-          if (filetools.fs.existsSync(localPath)) {
-            const items = filetools.findFiles(localPath);
-            const self = this;
-            if (items.length) {
-              items.forEach(function(filepath) {
-                var p = pth.relative(localPath, filepath).split("\\").join("/");
-                if (filter(p)) {
-                  var stats = filetools.fs.statSync(filepath);
-                  if (stats.isFile()) {
-                    self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), "", stats);
-                  } else {
-                    self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
-                  }
-                }
-              });
-            }
-          } else {
-            throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
-          }
-        },
-        addLocalFolderAsync: function(localPath, callback, zipPath, filter) {
-          if (filter instanceof RegExp) {
-            filter = function(rx) {
-              return function(filename) {
-                return rx.test(filename);
-              };
-            }(filter);
-          } else if (typeof filter !== "function") {
-            filter = function() {
-              return true;
-            };
-          }
-          zipPath = zipPath ? fixPath(zipPath) : "";
-          localPath = pth.normalize(localPath);
-          var self = this;
-          filetools.fs.open(localPath, "r", function(err) {
-            if (err && err.code === "ENOENT") {
-              callback(void 0, Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
-            } else if (err) {
-              callback(void 0, err);
-            } else {
-              var items = filetools.findFiles(localPath);
-              var i = -1;
-              var next = function() {
-                i += 1;
-                if (i < items.length) {
-                  var filepath = items[i];
-                  var p = pth.relative(localPath, filepath).split("\\").join("/");
-                  p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, "");
-                  if (filter(p)) {
-                    filetools.fs.stat(filepath, function(er0, stats) {
-                      if (er0)
-                        callback(void 0, er0);
-                      if (stats.isFile()) {
-                        filetools.fs.readFile(filepath, function(er1, data) {
-                          if (er1) {
-                            callback(void 0, er1);
-                          } else {
-                            self.addFile(zipPath + p, data, "", stats);
-                            next();
-                          }
-                        });
-                      } else {
-                        self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
-                        next();
-                      }
-                    });
-                  } else {
-                    next();
-                  }
-                } else {
-                  callback(true, void 0);
-                }
-              };
-              next();
-            }
-          });
-        },
-        addLocalFolderPromise: function(localPath, props) {
-          return new Promise((resolve, reject) => {
-            const { filter, zipPath } = Object.assign({}, props);
-            this.addLocalFolderAsync(localPath, (done, err) => {
-              if (err)
-                reject(err);
-              if (done)
-                resolve(this);
-            }, zipPath, filter);
-          });
-        },
-        addFile: function(entryName, content, comment, attr) {
-          let entry = getEntry(entryName);
-          const update = entry != null;
-          if (!update) {
-            entry = new ZipEntry();
-            entry.entryName = entryName;
-          }
-          entry.comment = comment || "";
-          const isStat = typeof attr === "object" && attr instanceof filetools.fs.Stats;
-          if (isStat) {
-            entry.header.time = attr.mtime;
-          }
-          var fileattr = entry.isDirectory ? 16 : 0;
-          if (!Utils.isWin) {
-            let unix = entry.isDirectory ? 16384 : 32768;
-            if (isStat) {
-              unix |= 4095 & attr.mode;
-            } else if (typeof attr === "number") {
-              unix |= 4095 & attr;
-            } else {
-              unix |= entry.isDirectory ? 493 : 420;
-            }
-            fileattr = (fileattr | unix << 16) >>> 0;
-          }
-          entry.attr = fileattr;
-          entry.setData(content);
-          if (!update)
-            _zip.setEntry(entry);
-        },
-        getEntries: function() {
-          return _zip ? _zip.entries : [];
-        },
-        getEntry: function(name) {
-          return getEntry(name);
-        },
-        getEntryCount: function() {
-          return _zip.getEntryCount();
-        },
-        forEach: function(callback) {
-          return _zip.forEach(callback);
-        },
-        extractEntryTo: function(entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {
-          overwrite = get_Bool(overwrite, false);
-          keepOriginalPermission = get_Bool(keepOriginalPermission, false);
-          maintainEntryPath = get_Bool(maintainEntryPath, true);
-          outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, void 0));
-          var item = getEntry(entry);
-          if (!item) {
-            throw new Error(Utils.Errors.NO_ENTRY);
-          }
-          var entryName = canonical(item.entryName);
-          var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
-          if (item.isDirectory) {
-            var children = _zip.getEntryChildren(item);
-            children.forEach(function(child) {
-              if (child.isDirectory)
-                return;
-              var content2 = child.getData();
-              if (!content2) {
-                throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-              }
-              var name = canonical(child.entryName);
-              var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));
-              const fileAttr2 = keepOriginalPermission ? child.header.fileAttr : void 0;
-              filetools.writeFileTo(childName, content2, overwrite, fileAttr2);
-            });
-            return true;
-          }
-          var content = item.getData();
-          if (!content)
-            throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-          if (filetools.fs.existsSync(target) && !overwrite) {
-            throw new Error(Utils.Errors.CANT_OVERRIDE);
-          }
-          const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
-          filetools.writeFileTo(target, content, overwrite, fileAttr);
-          return true;
-        },
-        test: function(pass) {
-          if (!_zip) {
-            return false;
-          }
-          for (var entry in _zip.entries) {
-            try {
-              if (entry.isDirectory) {
-                continue;
-              }
-              var content = _zip.entries[entry].getData(pass);
-              if (!content) {
-                return false;
-              }
-            } catch (err) {
-              return false;
-            }
-          }
-          return true;
-        },
-        extractAllTo: function(targetPath, overwrite, keepOriginalPermission, pass) {
-          overwrite = get_Bool(overwrite, false);
-          pass = get_Str(keepOriginalPermission, pass);
-          keepOriginalPermission = get_Bool(keepOriginalPermission, false);
-          if (!_zip) {
-            throw new Error(Utils.Errors.NO_ZIP);
-          }
-          _zip.entries.forEach(function(entry) {
-            var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));
-            if (entry.isDirectory) {
-              filetools.makeDir(entryName);
-              return;
-            }
-            var content = entry.getData(pass);
-            if (!content) {
-              throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-            }
-            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
-            filetools.writeFileTo(entryName, content, overwrite, fileAttr);
-            try {
-              filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
-            } catch (err) {
-              throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-            }
-          });
-        },
-        extractAllToAsync: function(targetPath, overwrite, keepOriginalPermission, callback) {
-          if (!callback) {
-            callback = function() {
-            };
-          }
-          overwrite = get_Bool(overwrite, false);
-          if (typeof keepOriginalPermission === "function" && !callback)
-            callback = keepOriginalPermission;
-          keepOriginalPermission = get_Bool(keepOriginalPermission, false);
-          if (!_zip) {
-            callback(new Error(Utils.Errors.NO_ZIP));
-            return;
-          }
-          targetPath = pth.resolve(targetPath);
-          const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));
-          const getError = (msg, file) => new Error(msg + ': "' + file + '"');
-          const dirEntries = [];
-          const fileEntries = /* @__PURE__ */ new Set();
-          _zip.entries.forEach((e) => {
-            if (e.isDirectory) {
-              dirEntries.push(e);
-            } else {
-              fileEntries.add(e);
-            }
-          });
-          for (const entry of dirEntries) {
-            const dirPath = getPath(entry);
-            const dirAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
-            try {
-              filetools.makeDir(dirPath);
-              if (dirAttr)
-                filetools.fs.chmodSync(dirPath, dirAttr);
-              filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
-            } catch (er) {
-              callback(getError("Unable to create folder", dirPath));
-            }
-          }
-          const done = () => {
-            if (fileEntries.size === 0) {
-              callback();
-            }
-          };
-          for (const entry of fileEntries.values()) {
-            const entryName = pth.normalize(canonical(entry.entryName.toString()));
-            const filePath = sanitize(targetPath, entryName);
-            entry.getDataAsync(function(content, err_1) {
-              if (err_1) {
-                callback(new Error(err_1));
-                return;
-              }
-              if (!content) {
-                callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
-              } else {
-                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0;
-                filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function(succ) {
-                  if (!succ) {
-                    callback(getError("Unable to write file", filePath));
-                    return;
-                  }
-                  filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function(err_2) {
-                    if (err_2) {
-                      callback(getError("Unable to set times", filePath));
-                      return;
-                    }
-                    fileEntries.delete(entry);
-                    done();
-                  });
-                });
-              }
-            });
-          }
-          done();
-        },
-        writeZip: function(targetFileName, callback) {
-          if (arguments.length === 1) {
-            if (typeof targetFileName === "function") {
-              callback = targetFileName;
-              targetFileName = "";
-            }
-          }
-          if (!targetFileName && opts.filename) {
-            targetFileName = opts.filename;
-          }
-          if (!targetFileName)
-            return;
-          var zipData = _zip.compressToBuffer();
-          if (zipData) {
-            var ok = filetools.writeFileTo(targetFileName, zipData, true);
-            if (typeof callback === "function")
-              callback(!ok ? new Error("failed") : null, "");
-          }
-        },
-        writeZipPromise: function(targetFileName, props) {
-          const { overwrite, perm } = Object.assign({ overwrite: true }, props);
-          return new Promise((resolve, reject) => {
-            if (!targetFileName && opts.filename)
-              targetFileName = opts.filename;
-            if (!targetFileName)
-              reject("ADM-ZIP: ZIP File Name Missing");
-            this.toBufferPromise().then((zipData) => {
-              const ret = (done) => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file");
-              filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
-            }, reject);
-          });
-        },
-        toBufferPromise: function() {
-          return new Promise((resolve, reject) => {
-            _zip.toAsyncBuffer(resolve, reject);
-          });
-        },
-        toBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) {
-          this.valueOf = 2;
-          if (typeof onSuccess === "function") {
-            _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
-            return null;
-          }
-          return _zip.compressToBuffer();
-        }
-      };
-    };
-  }
-});
-
-// node_modules/ms/index.js
-var require_ms = __commonJS({
-  "node_modules/ms/index.js"(exports, module2) {
-    var s = 1e3;
-    var m = s * 60;
-    var h = m * 60;
-    var d = h * 24;
-    var w = d * 7;
-    var y = d * 365.25;
-    module2.exports = function(val, options) {
-      options = options || {};
-      var type = typeof val;
-      if (type === "string" && val.length > 0) {
-        return parse(val);
-      } else if (type === "number" && isFinite(val)) {
-        return options.long ? fmtLong(val) : fmtShort(val);
-      }
-      throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
-    };
-    function parse(str) {
-      str = String(str);
-      if (str.length > 100) {
-        return;
-      }
-      var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
-      if (!match) {
-        return;
-      }
-      var n = parseFloat(match[1]);
-      var type = (match[2] || "ms").toLowerCase();
-      switch (type) {
-        case "years":
-        case "year":
-        case "yrs":
-        case "yr":
-        case "y":
-          return n * y;
-        case "weeks":
-        case "week":
-        case "w":
-          return n * w;
-        case "days":
-        case "day":
-        case "d":
-          return n * d;
-        case "hours":
-        case "hour":
-        case "hrs":
-        case "hr":
-        case "h":
-          return n * h;
-        case "minutes":
-        case "minute":
-        case "mins":
-        case "min":
-        case "m":
-          return n * m;
-        case "seconds":
-        case "second":
-        case "secs":
-        case "sec":
-        case "s":
-          return n * s;
-        case "milliseconds":
-        case "millisecond":
-        case "msecs":
-        case "msec":
-        case "ms":
-          return n;
-        default:
-          return void 0;
-      }
-    }
-    function fmtShort(ms) {
-      var msAbs = Math.abs(ms);
-      if (msAbs >= d) {
-        return Math.round(ms / d) + "d";
-      }
-      if (msAbs >= h) {
-        return Math.round(ms / h) + "h";
-      }
-      if (msAbs >= m) {
-        return Math.round(ms / m) + "m";
-      }
-      if (msAbs >= s) {
-        return Math.round(ms / s) + "s";
-      }
-      return ms + "ms";
-    }
-    function fmtLong(ms) {
-      var msAbs = Math.abs(ms);
-      if (msAbs >= d) {
-        return plural(ms, msAbs, d, "day");
-      }
-      if (msAbs >= h) {
-        return plural(ms, msAbs, h, "hour");
-      }
-      if (msAbs >= m) {
-        return plural(ms, msAbs, m, "minute");
-      }
-      if (msAbs >= s) {
-        return plural(ms, msAbs, s, "second");
-      }
-      return ms + " ms";
-    }
-    function plural(ms, msAbs, n, name) {
-      var isPlural = msAbs >= n * 1.5;
-      return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
-    }
-  }
-});
-
-// node_modules/debug/src/common.js
-var require_common = __commonJS({
-  "node_modules/debug/src/common.js"(exports, module2) {
-    function setup(env) {
-      createDebug.debug = createDebug;
-      createDebug.default = createDebug;
-      createDebug.coerce = coerce;
-      createDebug.disable = disable;
-      createDebug.enable = enable;
-      createDebug.enabled = enabled;
-      createDebug.humanize = require_ms();
-      createDebug.destroy = destroy;
-      Object.keys(env).forEach((key) => {
-        createDebug[key] = env[key];
-      });
-      createDebug.names = [];
-      createDebug.skips = [];
-      createDebug.formatters = {};
-      function selectColor(namespace) {
-        let hash = 0;
-        for (let i = 0; i < namespace.length; i++) {
-          hash = (hash << 5) - hash + namespace.charCodeAt(i);
-          hash |= 0;
-        }
-        return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
-      }
-      createDebug.selectColor = selectColor;
-      function createDebug(namespace) {
-        let prevTime;
-        let enableOverride = null;
-        let namespacesCache;
-        let enabledCache;
-        function debug(...args) {
-          if (!debug.enabled) {
-            return;
-          }
-          const self = debug;
-          const curr = Number(new Date());
-          const ms = curr - (prevTime || curr);
-          self.diff = ms;
-          self.prev = prevTime;
-          self.curr = curr;
-          prevTime = curr;
-          args[0] = createDebug.coerce(args[0]);
-          if (typeof args[0] !== "string") {
-            args.unshift("%O");
-          }
-          let index = 0;
-          args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
-            if (match === "%%") {
-              return "%";
-            }
-            index++;
-            const formatter = createDebug.formatters[format];
-            if (typeof formatter === "function") {
-              const val = args[index];
-              match = formatter.call(self, val);
-              args.splice(index, 1);
-              index--;
-            }
-            return match;
-          });
-          createDebug.formatArgs.call(self, args);
-          const logFn = self.log || createDebug.log;
-          logFn.apply(self, args);
-        }
-        debug.namespace = namespace;
-        debug.useColors = createDebug.useColors();
-        debug.color = createDebug.selectColor(namespace);
-        debug.extend = extend;
-        debug.destroy = createDebug.destroy;
-        Object.defineProperty(debug, "enabled", {
-          enumerable: true,
-          configurable: false,
-          get: () => {
-            if (enableOverride !== null) {
-              return enableOverride;
-            }
-            if (namespacesCache !== createDebug.namespaces) {
-              namespacesCache = createDebug.namespaces;
-              enabledCache = createDebug.enabled(namespace);
-            }
-            return enabledCache;
-          },
-          set: (v) => {
-            enableOverride = v;
-          }
-        });
-        if (typeof createDebug.init === "function") {
-          createDebug.init(debug);
-        }
-        return debug;
-      }
-      function extend(namespace, delimiter) {
-        const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
-        newDebug.log = this.log;
-        return newDebug;
-      }
-      function enable(namespaces) {
-        createDebug.save(namespaces);
-        createDebug.namespaces = namespaces;
-        createDebug.names = [];
-        createDebug.skips = [];
-        let i;
-        const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/);
-        const len = split.length;
-        for (i = 0; i < len; i++) {
-          if (!split[i]) {
-            continue;
-          }
-          namespaces = split[i].replace(/\*/g, ".*?");
-          if (namespaces[0] === "-") {
-            createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$"));
-          } else {
-            createDebug.names.push(new RegExp("^" + namespaces + "$"));
-          }
-        }
-      }
-      function disable() {
-        const namespaces = [
-          ...createDebug.names.map(toNamespace),
-          ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace)
-        ].join(",");
-        createDebug.enable("");
-        return namespaces;
-      }
-      function enabled(name) {
-        if (name[name.length - 1] === "*") {
-          return true;
-        }
-        let i;
-        let len;
-        for (i = 0, len = createDebug.skips.length; i < len; i++) {
-          if (createDebug.skips[i].test(name)) {
-            return false;
-          }
-        }
-        for (i = 0, len = createDebug.names.length; i < len; i++) {
-          if (createDebug.names[i].test(name)) {
-            return true;
-          }
-        }
-        return false;
-      }
-      function toNamespace(regexp) {
-        return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*");
-      }
-      function coerce(val) {
-        if (val instanceof Error) {
-          return val.stack || val.message;
-        }
-        return val;
-      }
-      function destroy() {
-        console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
-      }
-      createDebug.enable(createDebug.load());
-      return createDebug;
-    }
-    module2.exports = setup;
-  }
-});
-
-// node_modules/debug/src/browser.js
-var require_browser = __commonJS({
-  "node_modules/debug/src/browser.js"(exports, module2) {
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.storage = localstorage();
-    exports.destroy = (() => {
-      let warned = false;
-      return () => {
-        if (!warned) {
-          warned = true;
-          console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
-        }
-      };
-    })();
-    exports.colors = [
-      "#0000CC",
-      "#0000FF",
-      "#0033CC",
-      "#0033FF",
-      "#0066CC",
-      "#0066FF",
-      "#0099CC",
-      "#0099FF",
-      "#00CC00",
-      "#00CC33",
-      "#00CC66",
-      "#00CC99",
-      "#00CCCC",
-      "#00CCFF",
-      "#3300CC",
-      "#3300FF",
-      "#3333CC",
-      "#3333FF",
-      "#3366CC",
-      "#3366FF",
-      "#3399CC",
-      "#3399FF",
-      "#33CC00",
-      "#33CC33",
-      "#33CC66",
-      "#33CC99",
-      "#33CCCC",
-      "#33CCFF",
-      "#6600CC",
-      "#6600FF",
-      "#6633CC",
-      "#6633FF",
-      "#66CC00",
-      "#66CC33",
-      "#9900CC",
-      "#9900FF",
-      "#9933CC",
-      "#9933FF",
-      "#99CC00",
-      "#99CC33",
-      "#CC0000",
-      "#CC0033",
-      "#CC0066",
-      "#CC0099",
-      "#CC00CC",
-      "#CC00FF",
-      "#CC3300",
-      "#CC3333",
-      "#CC3366",
-      "#CC3399",
-      "#CC33CC",
-      "#CC33FF",
-      "#CC6600",
-      "#CC6633",
-      "#CC9900",
-      "#CC9933",
-      "#CCCC00",
-      "#CCCC33",
-      "#FF0000",
-      "#FF0033",
-      "#FF0066",
-      "#FF0099",
-      "#FF00CC",
-      "#FF00FF",
-      "#FF3300",
-      "#FF3333",
-      "#FF3366",
-      "#FF3399",
-      "#FF33CC",
-      "#FF33FF",
-      "#FF6600",
-      "#FF6633",
-      "#FF9900",
-      "#FF9933",
-      "#FFCC00",
-      "#FFCC33"
-    ];
-    function useColors() {
-      if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
-        return true;
-      }
-      if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
-        return false;
-      }
-      return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
-    }
-    function formatArgs(args) {
-      args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
-      if (!this.useColors) {
-        return;
-      }
-      const c = "color: " + this.color;
-      args.splice(1, 0, c, "color: inherit");
-      let index = 0;
-      let lastC = 0;
-      args[0].replace(/%[a-zA-Z%]/g, (match) => {
-        if (match === "%%") {
-          return;
-        }
-        index++;
-        if (match === "%c") {
-          lastC = index;
-        }
-      });
-      args.splice(lastC, 0, c);
-    }
-    exports.log = console.debug || console.log || (() => {
-    });
-    function save(namespaces) {
-      try {
-        if (namespaces) {
-          exports.storage.setItem("debug", namespaces);
-        } else {
-          exports.storage.removeItem("debug");
-        }
-      } catch (error) {
-      }
-    }
-    function load() {
-      let r;
-      try {
-        r = exports.storage.getItem("debug");
-      } catch (error) {
-      }
-      if (!r && typeof process !== "undefined" && "env" in process) {
-        r = process.env.DEBUG;
-      }
-      return r;
-    }
-    function localstorage() {
-      try {
-        return localStorage;
-      } catch (error) {
-      }
-    }
-    module2.exports = require_common()(exports);
-    var { formatters } = module2.exports;
-    formatters.j = function(v) {
-      try {
-        return JSON.stringify(v);
-      } catch (error) {
-        return "[UnexpectedJSONParseError]: " + error.message;
-      }
-    };
-  }
-});
-
-// ../../node_modules/has-flag/index.js
-var require_has_flag = __commonJS({
-  "../../node_modules/has-flag/index.js"(exports, module2) {
-    "use strict";
-    module2.exports = (flag, argv = process.argv) => {
-      const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
-      const position = argv.indexOf(prefix + flag);
-      const terminatorPosition = argv.indexOf("--");
-      return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
-    };
-  }
-});
-
-// ../../node_modules/supports-color/index.js
-var require_supports_color = __commonJS({
-  "../../node_modules/supports-color/index.js"(exports, module2) {
-    "use strict";
-    var os = require("os");
-    var tty = require("tty");
-    var hasFlag = require_has_flag();
-    var { env } = process;
-    var forceColor;
-    if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
-      forceColor = 0;
-    } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
-      forceColor = 1;
-    }
-    if ("FORCE_COLOR" in env) {
-      if (env.FORCE_COLOR === "true") {
-        forceColor = 1;
-      } else if (env.FORCE_COLOR === "false") {
-        forceColor = 0;
-      } else {
-        forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
-      }
-    }
-    function translateLevel(level) {
-      if (level === 0) {
-        return false;
-      }
-      return {
-        level,
-        hasBasic: true,
-        has256: level >= 2,
-        has16m: level >= 3
-      };
-    }
-    function supportsColor(haveStream, streamIsTTY) {
-      if (forceColor === 0) {
-        return 0;
-      }
-      if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
-        return 3;
-      }
-      if (hasFlag("color=256")) {
-        return 2;
-      }
-      if (haveStream && !streamIsTTY && forceColor === void 0) {
-        return 0;
-      }
-      const min = forceColor || 0;
-      if (env.TERM === "dumb") {
-        return min;
-      }
-      if (process.platform === "win32") {
-        const osRelease = os.release().split(".");
-        if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
-          return Number(osRelease[2]) >= 14931 ? 3 : 2;
-        }
-        return 1;
-      }
-      if ("CI" in env) {
-        if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
-          return 1;
-        }
-        return min;
-      }
-      if ("TEAMCITY_VERSION" in env) {
-        return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
-      }
-      if (env.COLORTERM === "truecolor") {
-        return 3;
-      }
-      if ("TERM_PROGRAM" in env) {
-        const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
-        switch (env.TERM_PROGRAM) {
-          case "iTerm.app":
-            return version >= 3 ? 3 : 2;
-          case "Apple_Terminal":
-            return 2;
-        }
-      }
-      if (/-256(color)?$/i.test(env.TERM)) {
-        return 2;
-      }
-      if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
-        return 1;
-      }
-      if ("COLORTERM" in env) {
-        return 1;
-      }
-      return min;
-    }
-    function getSupportLevel(stream) {
-      const level = supportsColor(stream, stream && stream.isTTY);
-      return translateLevel(level);
-    }
-    module2.exports = {
-      supportsColor: getSupportLevel,
-      stdout: translateLevel(supportsColor(true, tty.isatty(1))),
-      stderr: translateLevel(supportsColor(true, tty.isatty(2)))
-    };
-  }
-});
-
-// node_modules/debug/src/node.js
-var require_node = __commonJS({
-  "node_modules/debug/src/node.js"(exports, module2) {
-    var tty = require("tty");
-    var util = require("util");
-    exports.init = init;
-    exports.log = log;
-    exports.formatArgs = formatArgs;
-    exports.save = save;
-    exports.load = load;
-    exports.useColors = useColors;
-    exports.destroy = util.deprecate(() => {
-    }, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
-    exports.colors = [6, 2, 3, 4, 5, 1];
-    try {
-      const supportsColor = require_supports_color();
-      if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
-        exports.colors = [
-          20,
-          21,
-          26,
-          27,
-          32,
-          33,
-          38,
-          39,
-          40,
-          41,
-          42,
-          43,
-          44,
-          45,
-          56,
-          57,
-          62,
-          63,
-          68,
-          69,
-          74,
-          75,
-          76,
-          77,
-          78,
-          79,
-          80,
-          81,
-          92,
-          93,
-          98,
-          99,
-          112,
-          113,
-          128,
-          129,
-          134,
-          135,
-          148,
-          149,
-          160,
-          161,
-          162,
-          163,
-          164,
-          165,
-          166,
-          167,
-          168,
-          169,
-          170,
-          171,
-          172,
-          173,
-          178,
-          179,
-          184,
-          185,
-          196,
-          197,
-          198,
-          199,
-          200,
-          201,
-          202,
-          203,
-          204,
-          205,
-          206,
-          207,
-          208,
-          209,
-          214,
-          215,
-          220,
-          221
-        ];
-      }
-    } catch (error) {
-    }
-    exports.inspectOpts = Object.keys(process.env).filter((key) => {
-      return /^debug_/i.test(key);
-    }).reduce((obj, key) => {
-      const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
-        return k.toUpperCase();
-      });
-      let val = process.env[key];
-      if (/^(yes|on|true|enabled)$/i.test(val)) {
-        val = true;
-      } else if (/^(no|off|false|disabled)$/i.test(val)) {
-        val = false;
-      } else if (val === "null") {
-        val = null;
-      } else {
-        val = Number(val);
-      }
-      obj[prop] = val;
-      return obj;
-    }, {});
-    function useColors() {
-      return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(process.stderr.fd);
-    }
-    function formatArgs(args) {
-      const { namespace: name, useColors: useColors2 } = this;
-      if (useColors2) {
-        const c = this.color;
-        const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
-        const prefix = `  ${colorCode};1m${name} \x1B[0m`;
-        args[0] = prefix + args[0].split("\n").join("\n" + prefix);
-        args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
-      } else {
-        args[0] = getDate() + name + " " + args[0];
-      }
-    }
-    function getDate() {
-      if (exports.inspectOpts.hideDate) {
-        return "";
-      }
-      return new Date().toISOString() + " ";
-    }
-    function log(...args) {
-      return process.stderr.write(util.format(...args) + "\n");
-    }
-    function save(namespaces) {
-      if (namespaces) {
-        process.env.DEBUG = namespaces;
-      } else {
-        delete process.env.DEBUG;
-      }
-    }
-    function load() {
-      return process.env.DEBUG;
-    }
-    function init(debug) {
-      debug.inspectOpts = {};
-      const keys = Object.keys(exports.inspectOpts);
-      for (let i = 0; i < keys.length; i++) {
-        debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
-      }
-    }
-    module2.exports = require_common()(exports);
-    var { formatters } = module2.exports;
-    formatters.o = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
-    };
-    formatters.O = function(v) {
-      this.inspectOpts.colors = this.useColors;
-      return util.inspect(v, this.inspectOpts);
-    };
-  }
-});
-
-// node_modules/debug/src/index.js
-var require_src = __commonJS({
-  "node_modules/debug/src/index.js"(exports, module2) {
-    if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
-      module2.exports = require_browser();
-    } else {
-      module2.exports = require_node();
-    }
-  }
-});
-
-// node_modules/wrappy/wrappy.js
-var require_wrappy = __commonJS({
-  "node_modules/wrappy/wrappy.js"(exports, module2) {
-    module2.exports = wrappy;
-    function wrappy(fn, cb) {
-      if (fn && cb)
-        return wrappy(fn)(cb);
-      if (typeof fn !== "function")
-        throw new TypeError("need wrapper function");
-      Object.keys(fn).forEach(function(k) {
-        wrapper[k] = fn[k];
-      });
-      return wrapper;
-      function wrapper() {
-        var args = new Array(arguments.length);
-        for (var i = 0; i < args.length; i++) {
-          args[i] = arguments[i];
-        }
-        var ret = fn.apply(this, args);
-        var cb2 = args[args.length - 1];
-        if (typeof ret === "function" && ret !== cb2) {
-          Object.keys(cb2).forEach(function(k) {
-            ret[k] = cb2[k];
-          });
-        }
-        return ret;
-      }
-    }
-  }
-});
-
-// node_modules/once/once.js
-var require_once = __commonJS({
-  "node_modules/once/once.js"(exports, module2) {
-    var wrappy = require_wrappy();
-    module2.exports = wrappy(once);
-    module2.exports.strict = wrappy(onceStrict);
-    once.proto = once(function() {
-      Object.defineProperty(Function.prototype, "once", {
-        value: function() {
-          return once(this);
-        },
-        configurable: true
-      });
-      Object.defineProperty(Function.prototype, "onceStrict", {
-        value: function() {
-          return onceStrict(this);
-        },
-        configurable: true
-      });
-    });
-    function once(fn) {
-      var f = function() {
-        if (f.called)
-          return f.value;
-        f.called = true;
-        return f.value = fn.apply(this, arguments);
-      };
-      f.called = false;
-      return f;
-    }
-    function onceStrict(fn) {
-      var f = function() {
-        if (f.called)
-          throw new Error(f.onceError);
-        f.called = true;
-        return f.value = fn.apply(this, arguments);
-      };
-      var name = fn.name || "Function wrapped with `once`";
-      f.onceError = name + " shouldn't be called more than once";
-      f.called = false;
-      return f;
-    }
-  }
-});
-
-// node_modules/end-of-stream/index.js
-var require_end_of_stream = __commonJS({
-  "node_modules/end-of-stream/index.js"(exports, module2) {
-    var once = require_once();
-    var noop = function() {
-    };
-    var isRequest = function(stream) {
-      return stream.setHeader && typeof stream.abort === "function";
-    };
-    var isChildProcess = function(stream) {
-      return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3;
-    };
-    var eos = function(stream, opts, callback) {
-      if (typeof opts === "function")
-        return eos(stream, null, opts);
-      if (!opts)
-        opts = {};
-      callback = once(callback || noop);
-      var ws = stream._writableState;
-      var rs = stream._readableState;
-      var readable = opts.readable || opts.readable !== false && stream.readable;
-      var writable = opts.writable || opts.writable !== false && stream.writable;
-      var cancelled = false;
-      var onlegacyfinish = function() {
-        if (!stream.writable)
-          onfinish();
-      };
-      var onfinish = function() {
-        writable = false;
-        if (!readable)
-          callback.call(stream);
-      };
-      var onend = function() {
-        readable = false;
-        if (!writable)
-          callback.call(stream);
-      };
-      var onexit = function(exitCode) {
-        callback.call(stream, exitCode ? new Error("exited with error code: " + exitCode) : null);
-      };
-      var onerror = function(err) {
-        callback.call(stream, err);
-      };
-      var onclose = function() {
-        process.nextTick(onclosenexttick);
-      };
-      var onclosenexttick = function() {
-        if (cancelled)
-          return;
-        if (readable && !(rs && (rs.ended && !rs.destroyed)))
-          return callback.call(stream, new Error("premature close"));
-        if (writable && !(ws && (ws.ended && !ws.destroyed)))
-          return callback.call(stream, new Error("premature close"));
-      };
-      var onrequest = function() {
-        stream.req.on("finish", onfinish);
-      };
-      if (isRequest(stream)) {
-        stream.on("complete", onfinish);
-        stream.on("abort", onclose);
-        if (stream.req)
-          onrequest();
-        else
-          stream.on("request", onrequest);
-      } else if (writable && !ws) {
-        stream.on("end", onlegacyfinish);
-        stream.on("close", onlegacyfinish);
-      }
-      if (isChildProcess(stream))
-        stream.on("exit", onexit);
-      stream.on("end", onend);
-      stream.on("finish", onfinish);
-      if (opts.error !== false)
-        stream.on("error", onerror);
-      stream.on("close", onclose);
-      return function() {
-        cancelled = true;
-        stream.removeListener("complete", onfinish);
-        stream.removeListener("abort", onclose);
-        stream.removeListener("request", onrequest);
-        if (stream.req)
-          stream.req.removeListener("finish", onfinish);
-        stream.removeListener("end", onlegacyfinish);
-        stream.removeListener("close", onlegacyfinish);
-        stream.removeListener("finish", onfinish);
-        stream.removeListener("exit", onexit);
-        stream.removeListener("end", onend);
-        stream.removeListener("error", onerror);
-        stream.removeListener("close", onclose);
-      };
-    };
-    module2.exports = eos;
-  }
-});
-
-// node_modules/pump/index.js
-var require_pump = __commonJS({
-  "node_modules/pump/index.js"(exports, module2) {
-    var once = require_once();
-    var eos = require_end_of_stream();
-    var fs2 = require("fs");
-    var noop = function() {
-    };
-    var ancient = /^v?\.0/.test(process.version);
-    var isFn = function(fn) {
-      return typeof fn === "function";
-    };
-    var isFS = function(stream) {
-      if (!ancient)
-        return false;
-      if (!fs2)
-        return false;
-      return (stream instanceof (fs2.ReadStream || noop) || stream instanceof (fs2.WriteStream || noop)) && isFn(stream.close);
-    };
-    var isRequest = function(stream) {
-      return stream.setHeader && isFn(stream.abort);
-    };
-    var destroyer = function(stream, reading, writing, callback) {
-      callback = once(callback);
-      var closed = false;
-      stream.on("close", function() {
-        closed = true;
-      });
-      eos(stream, { readable: reading, writable: writing }, function(err) {
-        if (err)
-          return callback(err);
-        closed = true;
-        callback();
-      });
-      var destroyed = false;
-      return function(err) {
-        if (closed)
-          return;
-        if (destroyed)
-          return;
-        destroyed = true;
-        if (isFS(stream))
-          return stream.close(noop);
-        if (isRequest(stream))
-          return stream.abort();
-        if (isFn(stream.destroy))
-          return stream.destroy();
-        callback(err || new Error("stream was destroyed"));
-      };
-    };
-    var call = function(fn) {
-      fn();
-    };
-    var pipe = function(from, to) {
-      return from.pipe(to);
-    };
-    var pump = function() {
-      var streams = Array.prototype.slice.call(arguments);
-      var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop;
-      if (Array.isArray(streams[0]))
-        streams = streams[0];
-      if (streams.length < 2)
-        throw new Error("pump requires two streams per minimum");
-      var error;
-      var destroys = streams.map(function(stream, i) {
-        var reading = i < streams.length - 1;
-        var writing = i > 0;
-        return destroyer(stream, reading, writing, function(err) {
-          if (!error)
-            error = err;
-          if (err)
-            destroys.forEach(call);
-          if (reading)
-            return;
-          destroys.forEach(call);
-          callback(error);
-        });
-      });
-      return streams.reduce(pipe);
-    };
-    module2.exports = pump;
-  }
-});
-
-// node_modules/get-stream/buffer-stream.js
-var require_buffer_stream = __commonJS({
-  "node_modules/get-stream/buffer-stream.js"(exports, module2) {
-    "use strict";
-    var { PassThrough: PassThroughStream } = require("stream");
-    module2.exports = (options) => {
-      options = { ...options };
-      const { array } = options;
-      let { encoding } = options;
-      const isBuffer = encoding === "buffer";
-      let objectMode = false;
-      if (array) {
-        objectMode = !(encoding || isBuffer);
-      } else {
-        encoding = encoding || "utf8";
-      }
-      if (isBuffer) {
-        encoding = null;
-      }
-      const stream = new PassThroughStream({ objectMode });
-      if (encoding) {
-        stream.setEncoding(encoding);
-      }
-      let length = 0;
-      const chunks = [];
-      stream.on("data", (chunk) => {
-        chunks.push(chunk);
-        if (objectMode) {
-          length = chunks.length;
-        } else {
-          length += chunk.length;
-        }
-      });
-      stream.getBufferedValue = () => {
-        if (array) {
-          return chunks;
-        }
-        return isBuffer ? Buffer.concat(chunks, length) : chunks.join("");
-      };
-      stream.getBufferedLength = () => length;
-      return stream;
-    };
-  }
-});
-
-// node_modules/get-stream/index.js
-var require_get_stream = __commonJS({
-  "node_modules/get-stream/index.js"(exports, module2) {
-    "use strict";
-    var { constants: BufferConstants } = require("buffer");
-    var pump = require_pump();
-    var bufferStream = require_buffer_stream();
-    var MaxBufferError = class extends Error {
-      constructor() {
-        super("maxBuffer exceeded");
-        this.name = "MaxBufferError";
-      }
-    };
-    async function getStream(inputStream, options) {
-      if (!inputStream) {
-        return Promise.reject(new Error("Expected a stream"));
-      }
-      options = {
-        maxBuffer: Infinity,
-        ...options
-      };
-      const { maxBuffer } = options;
-      let stream;
-      await new Promise((resolve, reject) => {
-        const rejectPromise = (error) => {
-          if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
-            error.bufferedData = stream.getBufferedValue();
-          }
-          reject(error);
-        };
-        stream = pump(inputStream, bufferStream(options), (error) => {
-          if (error) {
-            rejectPromise(error);
-            return;
-          }
-          resolve();
-        });
-        stream.on("data", () => {
-          if (stream.getBufferedLength() > maxBuffer) {
-            rejectPromise(new MaxBufferError());
-          }
-        });
-      });
-      return stream.getBufferedValue();
-    }
-    module2.exports = getStream;
-    module2.exports.default = getStream;
-    module2.exports.buffer = (stream, options) => getStream(stream, { ...options, encoding: "buffer" });
-    module2.exports.array = (stream, options) => getStream(stream, { ...options, array: true });
-    module2.exports.MaxBufferError = MaxBufferError;
-  }
-});
-
-// node_modules/pend/index.js
-var require_pend = __commonJS({
-  "node_modules/pend/index.js"(exports, module2) {
-    module2.exports = Pend;
-    function Pend() {
-      this.pending = 0;
-      this.max = Infinity;
-      this.listeners = [];
-      this.waiting = [];
-      this.error = null;
-    }
-    Pend.prototype.go = function(fn) {
-      if (this.pending < this.max) {
-        pendGo(this, fn);
-      } else {
-        this.waiting.push(fn);
-      }
-    };
-    Pend.prototype.wait = function(cb) {
-      if (this.pending === 0) {
-        cb(this.error);
-      } else {
-        this.listeners.push(cb);
-      }
-    };
-    Pend.prototype.hold = function() {
-      return pendHold(this);
-    };
-    function pendHold(self) {
-      self.pending += 1;
-      var called = false;
-      return onCb;
-      function onCb(err) {
-        if (called)
-          throw new Error("callback called twice");
-        called = true;
-        self.error = self.error || err;
-        self.pending -= 1;
-        if (self.waiting.length > 0 && self.pending < self.max) {
-          pendGo(self, self.waiting.shift());
-        } else if (self.pending === 0) {
-          var listeners = self.listeners;
-          self.listeners = [];
-          listeners.forEach(cbListener);
-        }
-      }
-      function cbListener(listener) {
-        listener(self.error);
-      }
-    }
-    function pendGo(self, fn) {
-      fn(pendHold(self));
-    }
-  }
-});
-
-// node_modules/fd-slicer/index.js
-var require_fd_slicer = __commonJS({
-  "node_modules/fd-slicer/index.js"(exports) {
-    var fs2 = require("fs");
-    var util = require("util");
-    var stream = require("stream");
-    var Readable2 = stream.Readable;
-    var Writable = stream.Writable;
-    var PassThrough = stream.PassThrough;
-    var Pend = require_pend();
-    var EventEmitter = require("events").EventEmitter;
-    exports.createFromBuffer = createFromBuffer;
-    exports.createFromFd = createFromFd;
-    exports.BufferSlicer = BufferSlicer;
-    exports.FdSlicer = FdSlicer;
-    util.inherits(FdSlicer, EventEmitter);
-    function FdSlicer(fd, options) {
-      options = options || {};
-      EventEmitter.call(this);
-      this.fd = fd;
-      this.pend = new Pend();
-      this.pend.max = 1;
-      this.refCount = 0;
-      this.autoClose = !!options.autoClose;
-    }
-    FdSlicer.prototype.read = function(buffer, offset, length, position, callback) {
-      var self = this;
-      self.pend.go(function(cb) {
-        fs2.read(self.fd, buffer, offset, length, position, function(err, bytesRead, buffer2) {
-          cb();
-          callback(err, bytesRead, buffer2);
-        });
-      });
-    };
-    FdSlicer.prototype.write = function(buffer, offset, length, position, callback) {
-      var self = this;
-      self.pend.go(function(cb) {
-        fs2.write(self.fd, buffer, offset, length, position, function(err, written, buffer2) {
-          cb();
-          callback(err, written, buffer2);
-        });
-      });
-    };
-    FdSlicer.prototype.createReadStream = function(options) {
-      return new ReadStream(this, options);
-    };
-    FdSlicer.prototype.createWriteStream = function(options) {
-      return new WriteStream(this, options);
-    };
-    FdSlicer.prototype.ref = function() {
-      this.refCount += 1;
-    };
-    FdSlicer.prototype.unref = function() {
-      var self = this;
-      self.refCount -= 1;
-      if (self.refCount > 0)
-        return;
-      if (self.refCount < 0)
-        throw new Error("invalid unref");
-      if (self.autoClose) {
-        fs2.close(self.fd, onCloseDone);
-      }
-      function onCloseDone(err) {
-        if (err) {
-          self.emit("error", err);
-        } else {
-          self.emit("close");
-        }
-      }
-    };
-    util.inherits(ReadStream, Readable2);
-    function ReadStream(context, options) {
-      options = options || {};
-      Readable2.call(this, options);
-      this.context = context;
-      this.context.ref();
-      this.start = options.start || 0;
-      this.endOffset = options.end;
-      this.pos = this.start;
-      this.destroyed = false;
-    }
-    ReadStream.prototype._read = function(n) {
-      var self = this;
-      if (self.destroyed)
-        return;
-      var toRead = Math.min(self._readableState.highWaterMark, n);
-      if (self.endOffset != null) {
-        toRead = Math.min(toRead, self.endOffset - self.pos);
-      }
-      if (toRead <= 0) {
-        self.destroyed = true;
-        self.push(null);
-        self.context.unref();
-        return;
-      }
-      self.context.pend.go(function(cb) {
-        if (self.destroyed)
-          return cb();
-        var buffer = new Buffer(toRead);
-        fs2.read(self.context.fd, buffer, 0, toRead, self.pos, function(err, bytesRead) {
-          if (err) {
-            self.destroy(err);
-          } else if (bytesRead === 0) {
-            self.destroyed = true;
-            self.push(null);
-            self.context.unref();
-          } else {
-            self.pos += bytesRead;
-            self.push(buffer.slice(0, bytesRead));
-          }
-          cb();
-        });
-      });
-    };
-    ReadStream.prototype.destroy = function(err) {
-      if (this.destroyed)
-        return;
-      err = err || new Error("stream destroyed");
-      this.destroyed = true;
-      this.emit("error", err);
-      this.context.unref();
-    };
-    util.inherits(WriteStream, Writable);
-    function WriteStream(context, options) {
-      options = options || {};
-      Writable.call(this, options);
-      this.context = context;
-      this.context.ref();
-      this.start = options.start || 0;
-      this.endOffset = options.end == null ? Infinity : +options.end;
-      this.bytesWritten = 0;
-      this.pos = this.start;
-      this.destroyed = false;
-      this.on("finish", this.destroy.bind(this));
-    }
-    WriteStream.prototype._write = function(buffer, encoding, callback) {
-      var self = this;
-      if (self.destroyed)
-        return;
-      if (self.pos + buffer.length > self.endOffset) {
-        var err = new Error("maximum file length exceeded");
-        err.code = "ETOOBIG";
-        self.destroy();
-        callback(err);
-        return;
-      }
-      self.context.pend.go(function(cb) {
-        if (self.destroyed)
-          return cb();
-        fs2.write(self.context.fd, buffer, 0, buffer.length, self.pos, function(err2, bytes) {
-          if (err2) {
-            self.destroy();
-            cb();
-            callback(err2);
-          } else {
-            self.bytesWritten += bytes;
-            self.pos += bytes;
-            self.emit("progress");
-            cb();
-            callback();
-          }
-        });
-      });
-    };
-    WriteStream.prototype.destroy = function() {
-      if (this.destroyed)
-        return;
-      this.destroyed = true;
-      this.context.unref();
-    };
-    util.inherits(BufferSlicer, EventEmitter);
-    function BufferSlicer(buffer, options) {
-      EventEmitter.call(this);
-      options = options || {};
-      this.refCount = 0;
-      this.buffer = buffer;
-      this.maxChunkSize = options.maxChunkSize || Number.MAX_SAFE_INTEGER;
-    }
-    BufferSlicer.prototype.read = function(buffer, offset, length, position, callback) {
-      var end = position + length;
-      var delta = end - this.buffer.length;
-      var written = delta > 0 ? delta : length;
-      this.buffer.copy(buffer, offset, position, end);
-      setImmediate(function() {
-        callback(null, written);
-      });
-    };
-    BufferSlicer.prototype.write = function(buffer, offset, length, position, callback) {
-      buffer.copy(this.buffer, position, offset, offset + length);
-      setImmediate(function() {
-        callback(null, length, buffer);
-      });
-    };
-    BufferSlicer.prototype.createReadStream = function(options) {
-      options = options || {};
-      var readStream = new PassThrough(options);
-      readStream.destroyed = false;
-      readStream.start = options.start || 0;
-      readStream.endOffset = options.end;
-      readStream.pos = readStream.endOffset || this.buffer.length;
-      var entireSlice = this.buffer.slice(readStream.start, readStream.pos);
-      var offset = 0;
-      while (true) {
-        var nextOffset = offset + this.maxChunkSize;
-        if (nextOffset >= entireSlice.length) {
-          if (offset < entireSlice.length) {
-            readStream.write(entireSlice.slice(offset, entireSlice.length));
-          }
-          break;
-        }
-        readStream.write(entireSlice.slice(offset, nextOffset));
-        offset = nextOffset;
-      }
-      readStream.end();
-      readStream.destroy = function() {
-        readStream.destroyed = true;
-      };
-      return readStream;
-    };
-    BufferSlicer.prototype.createWriteStream = function(options) {
-      var bufferSlicer = this;
-      options = options || {};
-      var writeStream = new Writable(options);
-      writeStream.start = options.start || 0;
-      writeStream.endOffset = options.end == null ? this.buffer.length : +options.end;
-      writeStream.bytesWritten = 0;
-      writeStream.pos = writeStream.start;
-      writeStream.destroyed = false;
-      writeStream._write = function(buffer, encoding, callback) {
-        if (writeStream.destroyed)
-          return;
-        var end = writeStream.pos + buffer.length;
-        if (end > writeStream.endOffset) {
-          var err = new Error("maximum file length exceeded");
-          err.code = "ETOOBIG";
-          writeStream.destroyed = true;
-          callback(err);
-          return;
-        }
-        buffer.copy(bufferSlicer.buffer, writeStream.pos, 0, buffer.length);
-        writeStream.bytesWritten += buffer.length;
-        writeStream.pos = end;
-        writeStream.emit("progress");
-        callback();
-      };
-      writeStream.destroy = function() {
-        writeStream.destroyed = true;
-      };
-      return writeStream;
-    };
-    BufferSlicer.prototype.ref = function() {
-      this.refCount += 1;
-    };
-    BufferSlicer.prototype.unref = function() {
-      this.refCount -= 1;
-      if (this.refCount < 0) {
-        throw new Error("invalid unref");
-      }
-    };
-    function createFromBuffer(buffer, options) {
-      return new BufferSlicer(buffer, options);
-    }
-    function createFromFd(fd, options) {
-      return new FdSlicer(fd, options);
-    }
-  }
-});
-
-// node_modules/buffer-crc32/index.js
-var require_buffer_crc32 = __commonJS({
-  "node_modules/buffer-crc32/index.js"(exports, module2) {
-    var Buffer2 = require("buffer").Buffer;
-    var CRC_TABLE = [
-      0,
-      1996959894,
-      3993919788,
-      2567524794,
-      124634137,
-      1886057615,
-      3915621685,
-      2657392035,
-      249268274,
-      2044508324,
-      3772115230,
-      2547177864,
-      162941995,
-      2125561021,
-      3887607047,
-      2428444049,
-      498536548,
-      1789927666,
-      4089016648,
-      2227061214,
-      450548861,
-      1843258603,
-      4107580753,
-      2211677639,
-      325883990,
-      1684777152,
-      4251122042,
-      2321926636,
-      335633487,
-      1661365465,
-      4195302755,
-      2366115317,
-      997073096,
-      1281953886,
-      3579855332,
-      2724688242,
-      1006888145,
-      1258607687,
-      3524101629,
-      2768942443,
-      901097722,
-      1119000684,
-      3686517206,
-      2898065728,
-      853044451,
-      1172266101,
-      3705015759,
-      2882616665,
-      651767980,
-      1373503546,
-      3369554304,
-      3218104598,
-      565507253,
-      1454621731,
-      3485111705,
-      3099436303,
-      671266974,
-      1594198024,
-      3322730930,
-      2970347812,
-      795835527,
-      1483230225,
-      3244367275,
-      3060149565,
-      1994146192,
-      31158534,
-      2563907772,
-      4023717930,
-      1907459465,
-      112637215,
-      2680153253,
-      3904427059,
-      2013776290,
-      251722036,
-      2517215374,
-      3775830040,
-      2137656763,
-      141376813,
-      2439277719,
-      3865271297,
-      1802195444,
-      476864866,
-      2238001368,
-      4066508878,
-      1812370925,
-      453092731,
-      2181625025,
-      4111451223,
-      1706088902,
-      314042704,
-      2344532202,
-      4240017532,
-      1658658271,
-      366619977,
-      2362670323,
-      4224994405,
-      1303535960,
-      984961486,
-      2747007092,
-      3569037538,
-      1256170817,
-      1037604311,
-      2765210733,
-      3554079995,
-      1131014506,
-      879679996,
-      2909243462,
-      3663771856,
-      1141124467,
-      855842277,
-      2852801631,
-      3708648649,
-      1342533948,
-      654459306,
-      3188396048,
-      3373015174,
-      1466479909,
-      544179635,
-      3110523913,
-      3462522015,
-      1591671054,
-      702138776,
-      2966460450,
-      3352799412,
-      1504918807,
-      783551873,
-      3082640443,
-      3233442989,
-      3988292384,
-      2596254646,
-      62317068,
-      1957810842,
-      3939845945,
-      2647816111,
-      81470997,
-      1943803523,
-      3814918930,
-      2489596804,
-      225274430,
-      2053790376,
-      3826175755,
-      2466906013,
-      167816743,
-      2097651377,
-      4027552580,
-      2265490386,
-      503444072,
-      1762050814,
-      4150417245,
-      2154129355,
-      426522225,
-      1852507879,
-      4275313526,
-      2312317920,
-      282753626,
-      1742555852,
-      4189708143,
-      2394877945,
-      397917763,
-      1622183637,
-      3604390888,
-      2714866558,
-      953729732,
-      1340076626,
-      3518719985,
-      2797360999,
-      1068828381,
-      1219638859,
-      3624741850,
-      2936675148,
-      906185462,
-      1090812512,
-      3747672003,
-      2825379669,
-      829329135,
-      1181335161,
-      3412177804,
-      3160834842,
-      628085408,
-      1382605366,
-      3423369109,
-      3138078467,
-      570562233,
-      1426400815,
-      3317316542,
-      2998733608,
-      733239954,
-      1555261956,
-      3268935591,
-      3050360625,
-      752459403,
-      1541320221,
-      2607071920,
-      3965973030,
-      1969922972,
-      40735498,
-      2617837225,
-      3943577151,
-      1913087877,
-      83908371,
-      2512341634,
-      3803740692,
-      2075208622,
-      213261112,
-      2463272603,
-      3855990285,
-      2094854071,
-      198958881,
-      2262029012,
-      4057260610,
-      1759359992,
-      534414190,
-      2176718541,
-      4139329115,
-      1873836001,
-      414664567,
-      2282248934,
-      4279200368,
-      1711684554,
-      285281116,
-      2405801727,
-      4167216745,
-      1634467795,
-      376229701,
-      2685067896,
-      3608007406,
-      1308918612,
-      956543938,
-      2808555105,
-      3495958263,
-      1231636301,
-      1047427035,
-      2932959818,
-      3654703836,
-      1088359270,
-      936918e3,
-      2847714899,
-      3736837829,
-      1202900863,
-      817233897,
-      3183342108,
-      3401237130,
-      1404277552,
-      615818150,
-      3134207493,
-      3453421203,
-      1423857449,
-      601450431,
-      3009837614,
-      3294710456,
-      1567103746,
-      711928724,
-      3020668471,
-      3272380065,
-      1510334235,
-      755167117
-    ];
-    if (typeof Int32Array !== "undefined") {
-      CRC_TABLE = new Int32Array(CRC_TABLE);
-    }
-    function ensureBuffer(input) {
-      if (Buffer2.isBuffer(input)) {
-        return input;
-      }
-      var hasNewBufferAPI = typeof Buffer2.alloc === "function" && typeof Buffer2.from === "function";
-      if (typeof input === "number") {
-        return hasNewBufferAPI ? Buffer2.alloc(input) : new Buffer2(input);
-      } else if (typeof input === "string") {
-        return hasNewBufferAPI ? Buffer2.from(input) : new Buffer2(input);
-      } else {
-        throw new Error("input must be buffer, number, or string, received " + typeof input);
-      }
-    }
-    function bufferizeInt(num) {
-      var tmp = ensureBuffer(4);
-      tmp.writeInt32BE(num, 0);
-      return tmp;
-    }
-    function _crc32(buf, previous) {
-      buf = ensureBuffer(buf);
-      if (Buffer2.isBuffer(previous)) {
-        previous = previous.readUInt32BE(0);
-      }
-      var crc = ~~previous ^ -1;
-      for (var n = 0; n < buf.length; n++) {
-        crc = CRC_TABLE[(crc ^ buf[n]) & 255] ^ crc >>> 8;
-      }
-      return crc ^ -1;
-    }
-    function crc32() {
-      return bufferizeInt(_crc32.apply(null, arguments));
-    }
-    crc32.signed = function() {
-      return _crc32.apply(null, arguments);
-    };
-    crc32.unsigned = function() {
-      return _crc32.apply(null, arguments) >>> 0;
-    };
-    module2.exports = crc32;
-  }
-});
-
-// node_modules/yauzl/index.js
-var require_yauzl = __commonJS({
-  "node_modules/yauzl/index.js"(exports) {
-    var fs2 = require("fs");
-    var zlib = require("zlib");
-    var fd_slicer = require_fd_slicer();
-    var crc32 = require_buffer_crc32();
-    var util = require("util");
-    var EventEmitter = require("events").EventEmitter;
-    var Transform = require("stream").Transform;
-    var PassThrough = require("stream").PassThrough;
-    var Writable = require("stream").Writable;
-    exports.open = open;
-    exports.fromFd = fromFd;
-    exports.fromBuffer = fromBuffer;
-    exports.fromRandomAccessReader = fromRandomAccessReader;
-    exports.dosDateTimeToDate = dosDateTimeToDate;
-    exports.validateFileName = validateFileName;
-    exports.ZipFile = ZipFile;
-    exports.Entry = Entry;
-    exports.RandomAccessReader = RandomAccessReader;
-    function open(path2, options, callback) {
-      if (typeof options === "function") {
-        callback = options;
-        options = null;
-      }
-      if (options == null)
-        options = {};
-      if (options.autoClose == null)
-        options.autoClose = true;
-      if (options.lazyEntries == null)
-        options.lazyEntries = false;
-      if (options.decodeStrings == null)
-        options.decodeStrings = true;
-      if (options.validateEntrySizes == null)
-        options.validateEntrySizes = true;
-      if (options.strictFileNames == null)
-        options.strictFileNames = false;
-      if (callback == null)
-        callback = defaultCallback;
-      fs2.open(path2, "r", function(err, fd) {
-        if (err)
-          return callback(err);
-        fromFd(fd, options, function(err2, zipfile) {
-          if (err2)
-            fs2.close(fd, defaultCallback);
-          callback(err2, zipfile);
-        });
-      });
-    }
-    function fromFd(fd, options, callback) {
-      if (typeof options === "function") {
-        callback = options;
-        options = null;
-      }
-      if (options == null)
-        options = {};
-      if (options.autoClose == null)
-        options.autoClose = false;
-      if (options.lazyEntries == null)
-        options.lazyEntries = false;
-      if (options.decodeStrings == null)
-        options.decodeStrings = true;
-      if (options.validateEntrySizes == null)
-        options.validateEntrySizes = true;
-      if (options.strictFileNames == null)
-        options.strictFileNames = false;
-      if (callback == null)
-        callback = defaultCallback;
-      fs2.fstat(fd, function(err, stats) {
-        if (err)
-          return callback(err);
-        var reader = fd_slicer.createFromFd(fd, { autoClose: true });
-        fromRandomAccessReader(reader, stats.size, options, callback);
-      });
-    }
-    function fromBuffer(buffer, options, callback) {
-      if (typeof options === "function") {
-        callback = options;
-        options = null;
-      }
-      if (options == null)
-        options = {};
-      options.autoClose = false;
-      if (options.lazyEntries == null)
-        options.lazyEntries = false;
-      if (options.decodeStrings == null)
-        options.decodeStrings = true;
-      if (options.validateEntrySizes == null)
-        options.validateEntrySizes = true;
-      if (options.strictFileNames == null)
-        options.strictFileNames = false;
-      var reader = fd_slicer.createFromBuffer(buffer, { maxChunkSize: 65536 });
-      fromRandomAccessReader(reader, buffer.length, options, callback);
-    }
-    function fromRandomAccessReader(reader, totalSize, options, callback) {
-      if (typeof options === "function") {
-        callback = options;
-        options = null;
-      }
-      if (options == null)
-        options = {};
-      if (options.autoClose == null)
-        options.autoClose = true;
-      if (options.lazyEntries == null)
-        options.lazyEntries = false;
-      if (options.decodeStrings == null)
-        options.decodeStrings = true;
-      var decodeStrings = !!options.decodeStrings;
-      if (options.validateEntrySizes == null)
-        options.validateEntrySizes = true;
-      if (options.strictFileNames == null)
-        options.strictFileNames = false;
-      if (callback == null)
-        callback = defaultCallback;
-      if (typeof totalSize !== "number")
-        throw new Error("expected totalSize parameter to be a number");
-      if (totalSize > Number.MAX_SAFE_INTEGER) {
-        throw new Error("zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double.");
-      }
-      reader.ref();
-      var eocdrWithoutCommentSize = 22;
-      var maxCommentSize = 65535;
-      var bufferSize = Math.min(eocdrWithoutCommentSize + maxCommentSize, totalSize);
-      var buffer = newBuffer(bufferSize);
-      var bufferReadStart = totalSize - buffer.length;
-      readAndAssertNoEof(reader, buffer, 0, bufferSize, bufferReadStart, function(err) {
-        if (err)
-          return callback(err);
-        for (var i = bufferSize - eocdrWithoutCommentSize; i >= 0; i -= 1) {
-          if (buffer.readUInt32LE(i) !== 101010256)
-            continue;
-          var eocdrBuffer = buffer.slice(i);
-          var diskNumber = eocdrBuffer.readUInt16LE(4);
-          if (diskNumber !== 0) {
-            return callback(new Error("multi-disk zip files are not supported: found disk number: " + diskNumber));
-          }
-          var entryCount = eocdrBuffer.readUInt16LE(10);
-          var centralDirectoryOffset = eocdrBuffer.readUInt32LE(16);
-          var commentLength = eocdrBuffer.readUInt16LE(20);
-          var expectedCommentLength = eocdrBuffer.length - eocdrWithoutCommentSize;
-          if (commentLength !== expectedCommentLength) {
-            return callback(new Error("invalid comment length. expected: " + expectedCommentLength + ". found: " + commentLength));
-          }
-          var comment = decodeStrings ? decodeBuffer(eocdrBuffer, 22, eocdrBuffer.length, false) : eocdrBuffer.slice(22);
-          if (!(entryCount === 65535 || centralDirectoryOffset === 4294967295)) {
-            return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames));
-          }
-          var zip64EocdlBuffer = newBuffer(20);
-          var zip64EocdlOffset = bufferReadStart + i - zip64EocdlBuffer.length;
-          readAndAssertNoEof(reader, zip64EocdlBuffer, 0, zip64EocdlBuffer.length, zip64EocdlOffset, function(err2) {
-            if (err2)
-              return callback(err2);
-            if (zip64EocdlBuffer.readUInt32LE(0) !== 117853008) {
-              return callback(new Error("invalid zip64 end of central directory locator signature"));
-            }
-            var zip64EocdrOffset = readUInt64LE(zip64EocdlBuffer, 8);
-            var zip64EocdrBuffer = newBuffer(56);
-            readAndAssertNoEof(reader, zip64EocdrBuffer, 0, zip64EocdrBuffer.length, zip64EocdrOffset, function(err3) {
-              if (err3)
-                return callback(err3);
-              if (zip64EocdrBuffer.readUInt32LE(0) !== 101075792) {
-                return callback(new Error("invalid zip64 end of central directory record signature"));
-              }
-              entryCount = readUInt64LE(zip64EocdrBuffer, 32);
-              centralDirectoryOffset = readUInt64LE(zip64EocdrBuffer, 48);
-              return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames));
-            });
-          });
-          return;
-        }
-        callback(new Error("end of central directory record signature not found"));
-      });
-    }
-    util.inherits(ZipFile, EventEmitter);
-    function ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes, strictFileNames) {
-      var self = this;
-      EventEmitter.call(self);
-      self.reader = reader;
-      self.reader.on("error", function(err) {
-        emitError(self, err);
-      });
-      self.reader.once("close", function() {
-        self.emit("close");
-      });
-      self.readEntryCursor = centralDirectoryOffset;
-      self.fileSize = fileSize;
-      self.entryCount = entryCount;
-      self.comment = comment;
-      self.entriesRead = 0;
-      self.autoClose = !!autoClose;
-      self.lazyEntries = !!lazyEntries;
-      self.decodeStrings = !!decodeStrings;
-      self.validateEntrySizes = !!validateEntrySizes;
-      self.strictFileNames = !!strictFileNames;
-      self.isOpen = true;
-      self.emittedError = false;
-      if (!self.lazyEntries)
-        self._readEntry();
-    }
-    ZipFile.prototype.close = function() {
-      if (!this.isOpen)
-        return;
-      this.isOpen = false;
-      this.reader.unref();
-    };
-    function emitErrorAndAutoClose(self, err) {
-      if (self.autoClose)
-        self.close();
-      emitError(self, err);
-    }
-    function emitError(self, err) {
-      if (self.emittedError)
-        return;
-      self.emittedError = true;
-      self.emit("error", err);
-    }
-    ZipFile.prototype.readEntry = function() {
-      if (!this.lazyEntries)
-        throw new Error("readEntry() called without lazyEntries:true");
-      this._readEntry();
-    };
-    ZipFile.prototype._readEntry = function() {
-      var self = this;
-      if (self.entryCount === self.entriesRead) {
-        setImmediate(function() {
-          if (self.autoClose)
-            self.close();
-          if (self.emittedError)
-            return;
-          self.emit("end");
-        });
-        return;
-      }
-      if (self.emittedError)
-        return;
-      var buffer = newBuffer(46);
-      readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err) {
-        if (err)
-          return emitErrorAndAutoClose(self, err);
-        if (self.emittedError)
-          return;
-        var entry = new Entry();
-        var signature = buffer.readUInt32LE(0);
-        if (signature !== 33639248)
-          return emitErrorAndAutoClose(self, new Error("invalid central directory file header signature: 0x" + signature.toString(16)));
-        entry.versionMadeBy = buffer.readUInt16LE(4);
-        entry.versionNeededToExtract = buffer.readUInt16LE(6);
-        entry.generalPurposeBitFlag = buffer.readUInt16LE(8);
-        entry.compressionMethod = buffer.readUInt16LE(10);
-        entry.lastModFileTime = buffer.readUInt16LE(12);
-        entry.lastModFileDate = buffer.readUInt16LE(14);
-        entry.crc32 = buffer.readUInt32LE(16);
-        entry.compressedSize = buffer.readUInt32LE(20);
-        entry.uncompressedSize = buffer.readUInt32LE(24);
-        entry.fileNameLength = buffer.readUInt16LE(28);
-        entry.extraFieldLength = buffer.readUInt16LE(30);
-        entry.fileCommentLength = buffer.readUInt16LE(32);
-        entry.internalFileAttributes = buffer.readUInt16LE(36);
-        entry.externalFileAttributes = buffer.readUInt32LE(38);
-        entry.relativeOffsetOfLocalHeader = buffer.readUInt32LE(42);
-        if (entry.generalPurposeBitFlag & 64)
-          return emitErrorAndAutoClose(self, new Error("strong encryption is not supported"));
-        self.readEntryCursor += 46;
-        buffer = newBuffer(entry.fileNameLength + entry.extraFieldLength + entry.fileCommentLength);
-        readAndAssertNoEof(self.reader, buffer, 0, buffer.length, self.readEntryCursor, function(err2) {
-          if (err2)
-            return emitErrorAndAutoClose(self, err2);
-          if (self.emittedError)
-            return;
-          var isUtf8 = (entry.generalPurposeBitFlag & 2048) !== 0;
-          entry.fileName = self.decodeStrings ? decodeBuffer(buffer, 0, entry.fileNameLength, isUtf8) : buffer.slice(0, entry.fileNameLength);
-          var fileCommentStart = entry.fileNameLength + entry.extraFieldLength;
-          var extraFieldBuffer = buffer.slice(entry.fileNameLength, fileCommentStart);
-          entry.extraFields = [];
-          var i = 0;
-          while (i < extraFieldBuffer.length - 3) {
-            var headerId = extraFieldBuffer.readUInt16LE(i + 0);
-            var dataSize = extraFieldBuffer.readUInt16LE(i + 2);
-            var dataStart = i + 4;
-            var dataEnd = dataStart + dataSize;
-            if (dataEnd > extraFieldBuffer.length)
-              return emitErrorAndAutoClose(self, new Error("extra field length exceeds extra field buffer size"));
-            var dataBuffer = newBuffer(dataSize);
-            extraFieldBuffer.copy(dataBuffer, 0, dataStart, dataEnd);
-            entry.extraFields.push({
-              id: headerId,
-              data: dataBuffer
-            });
-            i = dataEnd;
-          }
-          entry.fileComment = self.decodeStrings ? decodeBuffer(buffer, fileCommentStart, fileCommentStart + entry.fileCommentLength, isUtf8) : buffer.slice(fileCommentStart, fileCommentStart + entry.fileCommentLength);
-          entry.comment = entry.fileComment;
-          self.readEntryCursor += buffer.length;
-          self.entriesRead += 1;
-          if (entry.uncompressedSize === 4294967295 || entry.compressedSize === 4294967295 || entry.relativeOffsetOfLocalHeader === 4294967295) {
-            var zip64EiefBuffer = null;
-            for (var i = 0; i < entry.extraFields.length; i++) {
-              var extraField = entry.extraFields[i];
-              if (extraField.id === 1) {
-                zip64EiefBuffer = extraField.data;
-                break;
-              }
-            }
-            if (zip64EiefBuffer == null) {
-              return emitErrorAndAutoClose(self, new Error("expected zip64 extended information extra field"));
-            }
-            var index = 0;
-            if (entry.uncompressedSize === 4294967295) {
-              if (index + 8 > zip64EiefBuffer.length) {
-                return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include uncompressed size"));
-              }
-              entry.uncompressedSize = readUInt64LE(zip64EiefBuffer, index);
-              index += 8;
-            }
-            if (entry.compressedSize === 4294967295) {
-              if (index + 8 > zip64EiefBuffer.length) {
-                return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include compressed size"));
-              }
-              entry.compressedSize = readUInt64LE(zip64EiefBuffer, index);
-              index += 8;
-            }
-            if (entry.relativeOffsetOfLocalHeader === 4294967295) {
-              if (index + 8 > zip64EiefBuffer.length) {
-                return emitErrorAndAutoClose(self, new Error("zip64 extended information extra field does not include relative header offset"));
-              }
-              entry.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index);
-              index += 8;
-            }
-          }
-          if (self.decodeStrings) {
-            for (var i = 0; i < entry.extraFields.length; i++) {
-              var extraField = entry.extraFields[i];
-              if (extraField.id === 28789) {
-                if (extraField.data.length < 6) {
-                  continue;
-                }
-                if (extraField.data.readUInt8(0) !== 1) {
-                  continue;
-                }
-                var oldNameCrc32 = extraField.data.readUInt32LE(1);
-                if (crc32.unsigned(buffer.slice(0, entry.fileNameLength)) !== oldNameCrc32) {
-                  continue;
-                }
-                entry.fileName = decodeBuffer(extraField.data, 5, extraField.data.length, true);
-                break;
-              }
-            }
-          }
-          if (self.validateEntrySizes && entry.compressionMethod === 0) {
-            var expectedCompressedSize = entry.uncompressedSize;
-            if (entry.isEncrypted()) {
-              expectedCompressedSize += 12;
-            }
-            if (entry.compressedSize !== expectedCompressedSize) {
-              var msg = "compressed/uncompressed size mismatch for stored file: " + entry.compressedSize + " != " + entry.uncompressedSize;
-              return emitErrorAndAutoClose(self, new Error(msg));
-            }
-          }
-          if (self.decodeStrings) {
-            if (!self.strictFileNames) {
-              entry.fileName = entry.fileName.replace(/\\/g, "/");
-            }
-            var errorMessage = validateFileName(entry.fileName, self.validateFileNameOptions);
-            if (errorMessage != null)
-              return emitErrorAndAutoClose(self, new Error(errorMessage));
-          }
-          self.emit("entry", entry);
-          if (!self.lazyEntries)
-            self._readEntry();
-        });
-      });
-    };
-    ZipFile.prototype.openReadStream = function(entry, options, callback) {
-      var self = this;
-      var relativeStart = 0;
-      var relativeEnd = entry.compressedSize;
-      if (callback == null) {
-        callback = options;
-        options = {};
-      } else {
-        if (options.decrypt != null) {
-          if (!entry.isEncrypted()) {
-            throw new Error("options.decrypt can only be specified for encrypted entries");
-          }
-          if (options.decrypt !== false)
-            throw new Error("invalid options.decrypt value: " + options.decrypt);
-          if (entry.isCompressed()) {
-            if (options.decompress !== false)
-              throw new Error("entry is encrypted and compressed, and options.decompress !== false");
-          }
-        }
-        if (options.decompress != null) {
-          if (!entry.isCompressed()) {
-            throw new Error("options.decompress can only be specified for compressed entries");
-          }
-          if (!(options.decompress === false || options.decompress === true)) {
-            throw new Error("invalid options.decompress value: " + options.decompress);
-          }
-        }
-        if (options.start != null || options.end != null) {
-          if (entry.isCompressed() && options.decompress !== false) {
-            throw new Error("start/end range not allowed for compressed entry without options.decompress === false");
-          }
-          if (entry.isEncrypted() && options.decrypt !== false) {
-            throw new Error("start/end range not allowed for encrypted entry without options.decrypt === false");
-          }
-        }
-        if (options.start != null) {
-          relativeStart = options.start;
-          if (relativeStart < 0)
-            throw new Error("options.start < 0");
-          if (relativeStart > entry.compressedSize)
-            throw new Error("options.start > entry.compressedSize");
-        }
-        if (options.end != null) {
-          relativeEnd = options.end;
-          if (relativeEnd < 0)
-            throw new Error("options.end < 0");
-          if (relativeEnd > entry.compressedSize)
-            throw new Error("options.end > entry.compressedSize");
-          if (relativeEnd < relativeStart)
-            throw new Error("options.end < options.start");
-        }
-      }
-      if (!self.isOpen)
-        return callback(new Error("closed"));
-      if (entry.isEncrypted()) {
-        if (options.decrypt !== false)
-          return callback(new Error("entry is encrypted, and options.decrypt !== false"));
-      }
-      self.reader.ref();
-      var buffer = newBuffer(30);
-      readAndAssertNoEof(self.reader, buffer, 0, buffer.length, entry.relativeOffsetOfLocalHeader, function(err) {
-        try {
-          if (err)
-            return callback(err);
-          var signature = buffer.readUInt32LE(0);
-          if (signature !== 67324752) {
-            return callback(new Error("invalid local file header signature: 0x" + signature.toString(16)));
-          }
-          var fileNameLength = buffer.readUInt16LE(26);
-          var extraFieldLength = buffer.readUInt16LE(28);
-          var localFileHeaderEnd = entry.relativeOffsetOfLocalHeader + buffer.length + fileNameLength + extraFieldLength;
-          var decompress;
-          if (entry.compressionMethod === 0) {
-            decompress = false;
-          } else if (entry.compressionMethod === 8) {
-            decompress = options.decompress != null ? options.decompress : true;
-          } else {
-            return callback(new Error("unsupported compression method: " + entry.compressionMethod));
-          }
-          var fileDataStart = localFileHeaderEnd;
-          var fileDataEnd = fileDataStart + entry.compressedSize;
-          if (entry.compressedSize !== 0) {
-            if (fileDataEnd > self.fileSize) {
-              return callback(new Error("file data overflows file bounds: " + fileDataStart + " + " + entry.compressedSize + " > " + self.fileSize));
-            }
-          }
-          var readStream = self.reader.createReadStream({
-            start: fileDataStart + relativeStart,
-            end: fileDataStart + relativeEnd
-          });
-          var endpointStream = readStream;
-          if (decompress) {
-            var destroyed = false;
-            var inflateFilter = zlib.createInflateRaw();
-            readStream.on("error", function(err2) {
-              setImmediate(function() {
-                if (!destroyed)
-                  inflateFilter.emit("error", err2);
-              });
-            });
-            readStream.pipe(inflateFilter);
-            if (self.validateEntrySizes) {
-              endpointStream = new AssertByteCountStream(entry.uncompressedSize);
-              inflateFilter.on("error", function(err2) {
-                setImmediate(function() {
-                  if (!destroyed)
-                    endpointStream.emit("error", err2);
-                });
-              });
-              inflateFilter.pipe(endpointStream);
-            } else {
-              endpointStream = inflateFilter;
-            }
-            endpointStream.destroy = function() {
-              destroyed = true;
-              if (inflateFilter !== endpointStream)
-                inflateFilter.unpipe(endpointStream);
-              readStream.unpipe(inflateFilter);
-              readStream.destroy();
-            };
-          }
-          callback(null, endpointStream);
-        } finally {
-          self.reader.unref();
-        }
-      });
-    };
-    function Entry() {
-    }
-    Entry.prototype.getLastModDate = function() {
-      return dosDateTimeToDate(this.lastModFileDate, this.lastModFileTime);
-    };
-    Entry.prototype.isEncrypted = function() {
-      return (this.generalPurposeBitFlag & 1) !== 0;
-    };
-    Entry.prototype.isCompressed = function() {
-      return this.compressionMethod === 8;
-    };
-    function dosDateTimeToDate(date, time) {
-      var day = date & 31;
-      var month = (date >> 5 & 15) - 1;
-      var year = (date >> 9 & 127) + 1980;
-      var millisecond = 0;
-      var second = (time & 31) * 2;
-      var minute = time >> 5 & 63;
-      var hour = time >> 11 & 31;
-      return new Date(year, month, day, hour, minute, second, millisecond);
-    }
-    function validateFileName(fileName) {
-      if (fileName.indexOf("\\") !== -1) {
-        return "invalid characters in fileName: " + fileName;
-      }
-      if (/^[a-zA-Z]:/.test(fileName) || /^\//.test(fileName)) {
-        return "absolute path: " + fileName;
-      }
-      if (fileName.split("/").indexOf("..") !== -1) {
-        return "invalid relative path: " + fileName;
-      }
-      return null;
-    }
-    function readAndAssertNoEof(reader, buffer, offset, length, position, callback) {
-      if (length === 0) {
-        return setImmediate(function() {
-          callback(null, newBuffer(0));
-        });
-      }
-      reader.read(buffer, offset, length, position, function(err, bytesRead) {
-        if (err)
-          return callback(err);
-        if (bytesRead < length) {
-          return callback(new Error("unexpected EOF"));
-        }
-        callback();
-      });
-    }
-    util.inherits(AssertByteCountStream, Transform);
-    function AssertByteCountStream(byteCount) {
-      Transform.call(this);
-      this.actualByteCount = 0;
-      this.expectedByteCount = byteCount;
-    }
-    AssertByteCountStream.prototype._transform = function(chunk, encoding, cb) {
-      this.actualByteCount += chunk.length;
-      if (this.actualByteCount > this.expectedByteCount) {
-        var msg = "too many bytes in the stream. expected " + this.expectedByteCount + ". got at least " + this.actualByteCount;
-        return cb(new Error(msg));
-      }
-      cb(null, chunk);
-    };
-    AssertByteCountStream.prototype._flush = function(cb) {
-      if (this.actualByteCount < this.expectedByteCount) {
-        var msg = "not enough bytes in the stream. expected " + this.expectedByteCount + ". got only " + this.actualByteCount;
-        return cb(new Error(msg));
-      }
-      cb();
-    };
-    util.inherits(RandomAccessReader, EventEmitter);
-    function RandomAccessReader() {
-      EventEmitter.call(this);
-      this.refCount = 0;
-    }
-    RandomAccessReader.prototype.ref = function() {
-      this.refCount += 1;
-    };
-    RandomAccessReader.prototype.unref = function() {
-      var self = this;
-      self.refCount -= 1;
-      if (self.refCount > 0)
-        return;
-      if (self.refCount < 0)
-        throw new Error("invalid unref");
-      self.close(onCloseDone);
-      function onCloseDone(err) {
-        if (err)
-          return self.emit("error", err);
-        self.emit("close");
-      }
-    };
-    RandomAccessReader.prototype.createReadStream = function(options) {
-      var start = options.start;
-      var end = options.end;
-      if (start === end) {
-        var emptyStream = new PassThrough();
-        setImmediate(function() {
-          emptyStream.end();
-        });
-        return emptyStream;
-      }
-      var stream = this._readStreamForRange(start, end);
-      var destroyed = false;
-      var refUnrefFilter = new RefUnrefFilter(this);
-      stream.on("error", function(err) {
-        setImmediate(function() {
-          if (!destroyed)
-            refUnrefFilter.emit("error", err);
-        });
-      });
-      refUnrefFilter.destroy = function() {
-        stream.unpipe(refUnrefFilter);
-        refUnrefFilter.unref();
-        stream.destroy();
-      };
-      var byteCounter = new AssertByteCountStream(end - start);
-      refUnrefFilter.on("error", function(err) {
-        setImmediate(function() {
-          if (!destroyed)
-            byteCounter.emit("error", err);
-        });
-      });
-      byteCounter.destroy = function() {
-        destroyed = true;
-        refUnrefFilter.unpipe(byteCounter);
-        refUnrefFilter.destroy();
-      };
-      return stream.pipe(refUnrefFilter).pipe(byteCounter);
-    };
-    RandomAccessReader.prototype._readStreamForRange = function(start, end) {
-      throw new Error("not implemented");
-    };
-    RandomAccessReader.prototype.read = function(buffer, offset, length, position, callback) {
-      var readStream = this.createReadStream({ start: position, end: position + length });
-      var writeStream = new Writable();
-      var written = 0;
-      writeStream._write = function(chunk, encoding, cb) {
-        chunk.copy(buffer, offset + written, 0, chunk.length);
-        written += chunk.length;
-        cb();
-      };
-      writeStream.on("finish", callback);
-      readStream.on("error", function(error) {
-        callback(error);
-      });
-      readStream.pipe(writeStream);
-    };
-    RandomAccessReader.prototype.close = function(callback) {
-      setImmediate(callback);
-    };
-    util.inherits(RefUnrefFilter, PassThrough);
-    function RefUnrefFilter(context) {
-      PassThrough.call(this);
-      this.context = context;
-      this.context.ref();
-      this.unreffedYet = false;
-    }
-    RefUnrefFilter.prototype._flush = function(cb) {
-      this.unref();
-      cb();
-    };
-    RefUnrefFilter.prototype.unref = function(cb) {
-      if (this.unreffedYet)
-        return;
-      this.unreffedYet = true;
-      this.context.unref();
-    };
-    var cp437 = "\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0";
-    function decodeBuffer(buffer, start, end, isUtf8) {
-      if (isUtf8) {
-        return buffer.toString("utf8", start, end);
-      } else {
-        var result = "";
-        for (var i = start; i < end; i++) {
-          result += cp437[buffer[i]];
-        }
-        return result;
-      }
-    }
-    function readUInt64LE(buffer, offset) {
-      var lower32 = buffer.readUInt32LE(offset);
-      var upper32 = buffer.readUInt32LE(offset + 4);
-      return upper32 * 4294967296 + lower32;
-    }
-    var newBuffer;
-    if (typeof Buffer.allocUnsafe === "function") {
-      newBuffer = function(len) {
-        return Buffer.allocUnsafe(len);
-      };
-    } else {
-      newBuffer = function(len) {
-        return new Buffer(len);
-      };
-    }
-    function defaultCallback(err) {
-      if (err)
-        throw err;
-    }
-  }
-});
-
-// node_modules/extract-zip/index.js
-var require_extract_zip = __commonJS({
-  "node_modules/extract-zip/index.js"(exports, module2) {
-    var debug = require_src()("extract-zip");
-    var { createWriteStream: createWriteStream2, promises: fs2 } = require("fs");
-    var getStream = require_get_stream();
-    var path2 = require("path");
-    var { promisify } = require("util");
-    var stream = require("stream");
-    var yauzl = require_yauzl();
-    var openZip = promisify(yauzl.open);
-    var pipeline = promisify(stream.pipeline);
-    var Extractor = class {
-      constructor(zipPath, opts) {
-        this.zipPath = zipPath;
-        this.opts = opts;
-      }
-      async extract() {
-        debug("opening", this.zipPath, "with opts", this.opts);
-        this.zipfile = await openZip(this.zipPath, { lazyEntries: true });
-        this.canceled = false;
-        return new Promise((resolve, reject) => {
-          this.zipfile.on("error", (err) => {
-            this.canceled = true;
-            reject(err);
-          });
-          this.zipfile.readEntry();
-          this.zipfile.on("close", () => {
-            if (!this.canceled) {
-              debug("zip extraction complete");
-              resolve();
-            }
-          });
-          this.zipfile.on("entry", async (entry) => {
-            if (this.canceled) {
-              debug("skipping entry", entry.fileName, { cancelled: this.canceled });
-              return;
-            }
-            debug("zipfile entry", entry.fileName);
-            if (entry.fileName.startsWith("__MACOSX/")) {
-              this.zipfile.readEntry();
-              return;
-            }
-            const destDir = path2.dirname(path2.join(this.opts.dir, entry.fileName));
-            try {
-              await fs2.mkdir(destDir, { recursive: true });
-              const canonicalDestDir = await fs2.realpath(destDir);
-              const relativeDestDir = path2.relative(this.opts.dir, canonicalDestDir);
-              if (relativeDestDir.split(path2.sep).includes("..")) {
-                throw new Error(`Out of bound path "${canonicalDestDir}" found while processing file ${entry.fileName}`);
-              }
-              await this.extractEntry(entry);
-              debug("finished processing", entry.fileName);
-              this.zipfile.readEntry();
-            } catch (err) {
-              this.canceled = true;
-              this.zipfile.close();
-              reject(err);
-            }
-          });
-        });
-      }
-      async extractEntry(entry) {
-        if (this.canceled) {
-          debug("skipping entry extraction", entry.fileName, { cancelled: this.canceled });
-          return;
-        }
-        if (this.opts.onEntry) {
-          this.opts.onEntry(entry, this.zipfile);
-        }
-        const dest = path2.join(this.opts.dir, entry.fileName);
-        const mode = entry.externalFileAttributes >> 16 & 65535;
-        const IFMT = 61440;
-        const IFDIR = 16384;
-        const IFLNK = 40960;
-        const symlink = (mode & IFMT) === IFLNK;
-        let isDir = (mode & IFMT) === IFDIR;
-        if (!isDir && entry.fileName.endsWith("/")) {
-          isDir = true;
-        }
-        const madeBy = entry.versionMadeBy >> 8;
-        if (!isDir)
-          isDir = madeBy === 0 && entry.externalFileAttributes === 16;
-        debug("extracting entry", { filename: entry.fileName, isDir, isSymlink: symlink });
-        const procMode = this.getExtractedMode(mode, isDir) & 511;
-        const destDir = isDir ? dest : path2.dirname(dest);
-        const mkdirOptions = { recursive: true };
-        if (isDir) {
-          mkdirOptions.mode = procMode;
-        }
-        debug("mkdir", { dir: destDir, ...mkdirOptions });
-        await fs2.mkdir(destDir, mkdirOptions);
-        if (isDir)
-          return;
-        debug("opening read stream", dest);
-        const readStream = await promisify(this.zipfile.openReadStream.bind(this.zipfile))(entry);
-        if (symlink) {
-          const link = await getStream(readStream);
-          debug("creating symlink", link, dest);
-          await fs2.symlink(link, dest);
-        } else {
-          await pipeline(readStream, createWriteStream2(dest, { mode: procMode }));
-        }
-      }
-      getExtractedMode(entryMode, isDir) {
-        let mode = entryMode;
-        if (mode === 0) {
-          if (isDir) {
-            if (this.opts.defaultDirMode) {
-              mode = parseInt(this.opts.defaultDirMode, 10);
-            }
-            if (!mode) {
-              mode = 493;
-            }
-          } else {
-            if (this.opts.defaultFileMode) {
-              mode = parseInt(this.opts.defaultFileMode, 10);
-            }
-            if (!mode) {
-              mode = 420;
-            }
-          }
-        }
-        return mode;
-      }
-    };
-    module2.exports = async function(zipPath, opts) {
-      debug("creating target directory", opts.dir);
-      if (!path2.isAbsolute(opts.dir)) {
-        throw new Error("Target directory is expected to be absolute");
-      }
-      await fs2.mkdir(opts.dir, { recursive: true });
-      opts.dir = await fs2.realpath(opts.dir);
-      return new Extractor(zipPath, opts).extract();
-    };
-  }
-});
-
-// index.ts
-var nodejs_build_exports = {};
-__export(nodejs_build_exports, {
-  handler: () => handler
-});
-module.exports = __toCommonJS(nodejs_build_exports);
-var fs = __toESM(require("fs"));
-var path = __toESM(require("path"));
-var import_adm_zip = __toESM(require_adm_zip());
-var import_extract_zip = __toESM(require_extract_zip());
-var import_child_process = require("child_process");
-var import_stream = require("stream");
-var import_client_s3 = require("@aws-sdk/client-s3");
-var s3 = new import_client_s3.S3Client({});
-var handler = async (event, context) => {
-  let rootDir = "";
-  console.log(JSON.stringify(event));
-  try {
-    if (event.RequestType == "Create" || event.RequestType == "Update") {
-      const props = event.ResourceProperties;
-      rootDir = fs.mkdtempSync("/tmp/extract");
-      process.env.NPM_CONFIG_CACHE = "/tmp/.npm";
-      Object.entries(props.environment ?? {}).forEach(([key, value]) => process.env[key] = value);
-      const promises = props.sources.map(async (p) => {
-        const dir = await extractZip(rootDir, p.directoryName, p.sourceObjectKey, p.sourceBucketName);
-        if (p.commands != null) {
-          (0, import_child_process.execSync)(p.commands.join(" && "), { cwd: dir, stdio: "inherit" });
-        }
-      });
-      await Promise.all(promises);
-      console.log(JSON.stringify(process.env));
-      const wd = path.join(rootDir, props.workingDirectory);
-      (0, import_child_process.execSync)(props.buildCommands.join(" && "), {
-        cwd: wd,
-        stdio: "inherit"
-      });
-      const srcPath = path.join(rootDir, props.outputSourceDirectory);
-      await uploadDistDirectory(srcPath, props.destinationBucketName, props.destinationObjectKey);
-    } else {
-    }
-    await sendStatus("SUCCESS", event, context);
-  } catch (e) {
-    console.log(e);
-    const err = e;
-    await sendStatus("FAILED", event, context, err.message);
-  } finally {
-    if (rootDir != "") {
-      fs.rmSync(rootDir, { recursive: true, force: true });
-    }
-  }
-};
-var sendStatus = async (status, event, context, reason) => {
-  const responseBody = JSON.stringify({
-    Status: status,
-    Reason: reason ?? "See the details in CloudWatch Log Stream: " + context.logStreamName,
-    PhysicalResourceId: context.logStreamName,
-    StackId: event.StackId,
-    RequestId: event.RequestId,
-    LogicalResourceId: event.LogicalResourceId,
-    NoEcho: false,
-    Data: {}
-  });
-  await fetch(event.ResponseURL, {
-    method: "PUT",
-    body: responseBody,
-    headers: {
-      "Content-Type": "",
-      "Content-Length": responseBody.length.toString()
-    }
-  });
-};
-var uploadDistDirectory = async (srcPath, dstBucket, dstKey) => {
-  const zip = new import_adm_zip.default();
-  zip.addLocalFolder(srcPath);
-  await s3.send(new import_client_s3.PutObjectCommand({
-    Body: zip.toBuffer(),
-    Bucket: dstBucket,
-    Key: dstKey
-  }));
-};
-var extractZip = async (rootDir, dirName, key, bucket) => {
-  const dir = path.join(rootDir, dirName);
-  fs.mkdirSync(dir, { recursive: true });
-  const zipPath = path.join(dir, "temp.zip");
-  await downloadS3File(key, bucket, zipPath);
-  await (0, import_extract_zip.default)(zipPath, { dir });
-  console.log(`extracted to ${dir}`);
-  return dir;
-};
-var downloadS3File = async (key, bucket, dst) => {
-  const data = await s3.send(new import_client_s3.GetObjectCommand({ Bucket: bucket, Key: key }));
-  await new Promise((resolve, reject) => {
-    if (data.Body instanceof import_stream.Readable) {
-      data.Body.pipe(fs.createWriteStream(dst)).on("error", (err) => reject(err)).on("close", () => resolve(1));
-    }
-  });
-};
-// Annotate the CommonJS export names for ESM import in node:
-0 && (module.exports = {
-  handler
-});
diff --git a/test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js b/test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js
new file mode 100644
index 0000000..05b6675
--- /dev/null
+++ b/test/nodejs-build.integ.snapshot/asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/index.js
@@ -0,0 +1,121 @@
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+  if (from && typeof from === "object" || typeof from === "function") {
+    for (let key of __getOwnPropNames(from))
+      if (!__hasOwnProp.call(to, key) && key !== except)
+        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+  }
+  return to;
+};
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+
+// index.ts
+var nodejs_build_exports = {};
+__export(nodejs_build_exports, {
+  handler: () => handler
+});
+module.exports = __toCommonJS(nodejs_build_exports);
+var import_client_codebuild = require("@aws-sdk/client-codebuild");
+var cb = new import_client_codebuild.CodeBuildClient({});
+var handler = async (event, context) => {
+  console.log(JSON.stringify(event));
+  try {
+    if (event.RequestType == "Create" || event.RequestType == "Update") {
+      const props = event.ResourceProperties;
+      const build = await cb.send(new import_client_codebuild.StartBuildCommand({
+        projectName: props.codeBuildProjectName,
+        environmentVariablesOverride: [
+          {
+            name: "input",
+            value: JSON.stringify(props.sources.map((source) => ({
+              assetUrl: `s3://${source.sourceBucketName}/${source.sourceObjectKey}`,
+              extractPath: source.extractPath,
+              commands: (source.commands ?? []).join(" && ")
+            })))
+          },
+          {
+            name: "buildCommands",
+            value: props.buildCommands.join(" && ")
+          },
+          {
+            name: "destinationBucketName",
+            value: props.destinationBucketName
+          },
+          {
+            name: "destinationObjectKey",
+            value: props.destinationObjectKey
+          },
+          {
+            name: "workingDirectory",
+            value: props.workingDirectory
+          },
+          {
+            name: "outputSourceDirectory",
+            value: props.outputSourceDirectory
+          },
+          {
+            name: "projectName",
+            value: props.codeBuildProjectName
+          },
+          {
+            name: "responseURL",
+            value: event.ResponseURL
+          },
+          {
+            name: "stackId",
+            value: event.StackId
+          },
+          {
+            name: "requestId",
+            value: event.RequestId
+          },
+          {
+            name: "logicalResourceId",
+            value: event.LogicalResourceId
+          },
+          ...Object.entries(props.environment ?? {}).map(([name, value]) => ({
+            name,
+            value
+          }))
+        ]
+      }));
+    } else {
+      await sendStatus("SUCCESS", event, context);
+    }
+  } catch (e) {
+    console.log(e);
+    const err = e;
+    await sendStatus("FAILED", event, context, err.message);
+  }
+};
+var sendStatus = async (status, event, context, reason) => {
+  const responseBody = JSON.stringify({
+    Status: status,
+    Reason: reason ?? "See the details in CloudWatch Log Stream: " + context.logStreamName,
+    PhysicalResourceId: context.logStreamName,
+    StackId: event.StackId,
+    RequestId: event.RequestId,
+    LogicalResourceId: event.LogicalResourceId,
+    NoEcho: false,
+    Data: {}
+  });
+  await fetch(event.ResponseURL, {
+    method: "PUT",
+    body: responseBody,
+    headers: {
+      "Content-Type": "",
+      "Content-Length": responseBody.length.toString()
+    }
+  });
+};
+// Annotate the CommonJS export names for ESM import in node:
+0 && (module.exports = {
+  handler
+});
diff --git a/test/nodejs-build.integ.snapshot/manifest.json b/test/nodejs-build.integ.snapshot/manifest.json
index cf45a47..ab1574c 100644
--- a/test/nodejs-build.integ.snapshot/manifest.json
+++ b/test/nodejs-build.integ.snapshot/manifest.json
@@ -31,13 +31,13 @@
           {
             "type": "aws:cdk:asset",
             "data": {
-              "path": "asset.13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5",
-              "id": "13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5",
+              "path": "asset.a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b",
+              "id": "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b",
               "packaging": "zip",
-              "sourceHash": "13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5",
-              "s3BucketParameter": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3BucketBC3258A3",
-              "s3KeyParameter": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314",
-              "artifactHashParameter": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5ArtifactHashB0C24631"
+              "sourceHash": "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b",
+              "s3BucketParameter": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8",
+              "s3KeyParameter": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C",
+              "artifactHashParameter": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bArtifactHash156A92A2"
             }
           },
           {
@@ -125,22 +125,22 @@
             "data": "AssetParameterse57c1acaa363d7d2b81736776007a7091bc73dff4aeb8135627c4511a51e7dcaArtifactHashAC8BF1CD"
           }
         ],
-        "/NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/S3Bucket": [
+        "/NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3Bucket": [
           {
             "type": "aws:cdk:logicalId",
-            "data": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3BucketBC3258A3"
+            "data": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8"
           }
         ],
-        "/NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/S3VersionKey": [
+        "/NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3VersionKey": [
           {
             "type": "aws:cdk:logicalId",
-            "data": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314"
+            "data": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C"
           }
         ],
-        "/NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/ArtifactHash": [
+        "/NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/ArtifactHash": [
           {
             "type": "aws:cdk:logicalId",
-            "data": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5ArtifactHashB0C24631"
+            "data": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bArtifactHash156A92A2"
           }
         ],
         "/NodejsBuildIntegTest/AssetParameters/72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9d/S3Bucket": [
@@ -197,6 +197,24 @@
             "data": "AssetParametersf98b78092dcdd31f5e6d47489beb5f804d4835ef86a8085d0a2053cb9ae711daArtifactHashD85D28D8"
           }
         ],
+        "/NodejsBuildIntegTest/ExampleBuild/Project/Role/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "ExampleBuildProjectRole823D0208"
+          }
+        ],
+        "/NodejsBuildIntegTest/ExampleBuild/Project/Role/DefaultPolicy/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "ExampleBuildProjectRoleDefaultPolicy1E341966"
+          }
+        ],
+        "/NodejsBuildIntegTest/ExampleBuild/Project/Resource": [
+          {
+            "type": "aws:cdk:logicalId",
+            "data": "ExampleBuildProjectEF5CAC49"
+          }
+        ],
         "/NodejsBuildIntegTest/ExampleBuild/Resource/Default": [
           {
             "type": "aws:cdk:logicalId",
diff --git a/test/nodejs-build.integ.snapshot/tree.json b/test/nodejs-build.integ.snapshot/tree.json
index 1f5b9ac..cbab374 100644
--- a/test/nodejs-build.integ.snapshot/tree.json
+++ b/test/nodejs-build.integ.snapshot/tree.json
@@ -223,13 +223,13 @@
                   "version": "10.0.5"
                 }
               },
-              "13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5": {
-                "id": "13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5",
-                "path": "NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5",
+              "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b": {
+                "id": "a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b",
+                "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b",
                 "children": {
                   "S3Bucket": {
                     "id": "S3Bucket",
-                    "path": "NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/S3Bucket",
+                    "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3Bucket",
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.CfnParameter",
                       "version": "2.38.0"
@@ -237,7 +237,7 @@
                   },
                   "S3VersionKey": {
                     "id": "S3VersionKey",
-                    "path": "NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/S3VersionKey",
+                    "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/S3VersionKey",
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.CfnParameter",
                       "version": "2.38.0"
@@ -245,7 +245,7 @@
                   },
                   "ArtifactHash": {
                     "id": "ArtifactHash",
-                    "path": "NodejsBuildIntegTest/AssetParameters/13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5/ArtifactHash",
+                    "path": "NodejsBuildIntegTest/AssetParameters/a89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125b/ArtifactHash",
                     "constructInfo": {
                       "fqn": "aws-cdk-lib.CfnParameter",
                       "version": "2.38.0"
@@ -377,6 +377,261 @@
                   "version": "2.38.0"
                 }
               },
+              "Project": {
+                "id": "Project",
+                "path": "NodejsBuildIntegTest/ExampleBuild/Project",
+                "children": {
+                  "Role": {
+                    "id": "Role",
+                    "path": "NodejsBuildIntegTest/ExampleBuild/Project/Role",
+                    "children": {
+                      "Resource": {
+                        "id": "Resource",
+                        "path": "NodejsBuildIntegTest/ExampleBuild/Project/Role/Resource",
+                        "attributes": {
+                          "aws:cdk:cloudformation:type": "AWS::IAM::Role",
+                          "aws:cdk:cloudformation:props": {
+                            "assumeRolePolicyDocument": {
+                              "Statement": [
+                                {
+                                  "Action": "sts:AssumeRole",
+                                  "Effect": "Allow",
+                                  "Principal": {
+                                    "Service": "codebuild.amazonaws.com"
+                                  }
+                                }
+                              ],
+                              "Version": "2012-10-17"
+                            }
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_iam.CfnRole",
+                          "version": "2.38.0"
+                        }
+                      },
+                      "DefaultPolicy": {
+                        "id": "DefaultPolicy",
+                        "path": "NodejsBuildIntegTest/ExampleBuild/Project/Role/DefaultPolicy",
+                        "children": {
+                          "Resource": {
+                            "id": "Resource",
+                            "path": "NodejsBuildIntegTest/ExampleBuild/Project/Role/DefaultPolicy/Resource",
+                            "attributes": {
+                              "aws:cdk:cloudformation:type": "AWS::IAM::Policy",
+                              "aws:cdk:cloudformation:props": {
+                                "policyDocument": {
+                                  "Statement": [
+                                    {
+                                      "Action": [
+                                        "logs:CreateLogGroup",
+                                        "logs:CreateLogStream",
+                                        "logs:PutLogEvents"
+                                      ],
+                                      "Effect": "Allow",
+                                      "Resource": [
+                                        {
+                                          "Fn::Join": [
+                                            "",
+                                            [
+                                              "arn:",
+                                              {
+                                                "Ref": "AWS::Partition"
+                                              },
+                                              ":logs:",
+                                              {
+                                                "Ref": "AWS::Region"
+                                              },
+                                              ":",
+                                              {
+                                                "Ref": "AWS::AccountId"
+                                              },
+                                              ":log-group:/aws/codebuild/",
+                                              {
+                                                "Ref": "ExampleBuildProjectEF5CAC49"
+                                              },
+                                              ":*"
+                                            ]
+                                          ]
+                                        },
+                                        {
+                                          "Fn::Join": [
+                                            "",
+                                            [
+                                              "arn:",
+                                              {
+                                                "Ref": "AWS::Partition"
+                                              },
+                                              ":logs:",
+                                              {
+                                                "Ref": "AWS::Region"
+                                              },
+                                              ":",
+                                              {
+                                                "Ref": "AWS::AccountId"
+                                              },
+                                              ":log-group:/aws/codebuild/",
+                                              {
+                                                "Ref": "ExampleBuildProjectEF5CAC49"
+                                              }
+                                            ]
+                                          ]
+                                        }
+                                      ]
+                                    },
+                                    {
+                                      "Action": [
+                                        "codebuild:BatchPutCodeCoverages",
+                                        "codebuild:BatchPutTestCases",
+                                        "codebuild:CreateReport",
+                                        "codebuild:CreateReportGroup",
+                                        "codebuild:UpdateReport"
+                                      ],
+                                      "Effect": "Allow",
+                                      "Resource": {
+                                        "Fn::Join": [
+                                          "",
+                                          [
+                                            "arn:",
+                                            {
+                                              "Ref": "AWS::Partition"
+                                            },
+                                            ":codebuild:",
+                                            {
+                                              "Ref": "AWS::Region"
+                                            },
+                                            ":",
+                                            {
+                                              "Ref": "AWS::AccountId"
+                                            },
+                                            ":report-group/",
+                                            {
+                                              "Ref": "ExampleBuildProjectEF5CAC49"
+                                            },
+                                            "-*"
+                                          ]
+                                        ]
+                                      }
+                                    },
+                                    {
+                                      "Action": [
+                                        "s3:Abort*",
+                                        "s3:DeleteObject*",
+                                        "s3:GetBucket*",
+                                        "s3:GetObject*",
+                                        "s3:List*",
+                                        "s3:PutObject",
+                                        "s3:PutObjectLegalHold",
+                                        "s3:PutObjectRetention",
+                                        "s3:PutObjectTagging",
+                                        "s3:PutObjectVersionTagging"
+                                      ],
+                                      "Effect": "Allow",
+                                      "Resource": [
+                                        {
+                                          "Fn::Join": [
+                                            "",
+                                            [
+                                              "arn:",
+                                              {
+                                                "Ref": "AWS::Partition"
+                                              },
+                                              ":s3:::",
+                                              {
+                                                "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
+                                              },
+                                              "/*"
+                                            ]
+                                          ]
+                                        },
+                                        {
+                                          "Fn::Join": [
+                                            "",
+                                            [
+                                              "arn:",
+                                              {
+                                                "Ref": "AWS::Partition"
+                                              },
+                                              ":s3:::",
+                                              {
+                                                "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
+                                              }
+                                            ]
+                                          ]
+                                        }
+                                      ]
+                                    }
+                                  ],
+                                  "Version": "2012-10-17"
+                                },
+                                "policyName": "ExampleBuildProjectRoleDefaultPolicy1E341966",
+                                "roles": [
+                                  {
+                                    "Ref": "ExampleBuildProjectRole823D0208"
+                                  }
+                                ]
+                              }
+                            },
+                            "constructInfo": {
+                              "fqn": "aws-cdk-lib.aws_iam.CfnPolicy",
+                              "version": "2.38.0"
+                            }
+                          }
+                        },
+                        "constructInfo": {
+                          "fqn": "aws-cdk-lib.aws_iam.Policy",
+                          "version": "2.38.0"
+                        }
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_iam.Role",
+                      "version": "2.38.0"
+                    }
+                  },
+                  "Resource": {
+                    "id": "Resource",
+                    "path": "NodejsBuildIntegTest/ExampleBuild/Project/Resource",
+                    "attributes": {
+                      "aws:cdk:cloudformation:type": "AWS::CodeBuild::Project",
+                      "aws:cdk:cloudformation:props": {
+                        "artifacts": {
+                          "type": "NO_ARTIFACTS"
+                        },
+                        "environment": {
+                          "type": "LINUX_CONTAINER",
+                          "image": "aws/codebuild/standard:6.0",
+                          "imagePullCredentialsType": "CODEBUILD",
+                          "privilegedMode": false,
+                          "computeType": "BUILD_GENERAL1_SMALL"
+                        },
+                        "serviceRole": {
+                          "Fn::GetAtt": [
+                            "ExampleBuildProjectRole823D0208",
+                            "Arn"
+                          ]
+                        },
+                        "source": {
+                          "type": "NO_SOURCE",
+                          "buildSpec": "{\n  \"version\": \"0.2\",\n  \"phases\": {\n    \"install\": {\n      \"runtime-versions\": {\n        \"nodejs\": 18\n      }\n    },\n    \"build\": {\n      \"commands\": [\n        \"current_dir=$(pwd)\",\n        \"\\nfor obj in $(echo \\\"$input\\\" | jq -c '.[]'); do\\n  assetUrl=$(echo \\\"$obj\\\" | jq -r '.assetUrl')\\n  extractPath=$(echo \\\"$obj\\\" | jq -r '.extractPath')\\n  commands=$(echo \\\"$obj\\\" | jq -r '.commands')\\n\\n  # Download the zip file\\n  aws s3 cp \\\"$assetUrl\\\" temp.zip\\n\\n  # Extract the zip file to the extractPath directory\\n  mkdir -p \\\"$extractPath\\\"\\n  unzip temp.zip -d \\\"$extractPath\\\"\\n\\n  # Remove the zip file\\n  rm temp.zip\\n\\n  # Run the specified commands in the extractPath directory\\n  cd \\\"$extractPath\\\"\\n  ls -la\\n  eval \\\"$commands\\\"\\n  cd \\\"$current_dir\\\"\\n  ls -la\\ndone\\n              \",\n        \"ls -la\",\n        \"cd \\\"$workingDirectory\\\"\",\n        \"eval \\\"$buildCommands\\\"\",\n        \"ls -la\",\n        \"cd \\\"$current_dir\\\"\",\n        \"cd \\\"$outputSourceDirectory\\\"\",\n        \"zip -r output.zip ./\",\n        \"aws s3 cp output.zip \\\"s3://$destinationBucketName/$destinationObjectKey\\\"\"\n      ]\n    },\n    \"post_build\": {\n      \"commands\": [\n        \"echo Build completed on `date`\",\n        \"\\nSTATUS='SUCCESS'\\nif [ $CODEBUILD_BUILD_SUCCEEDING -ne 1 ] # Test if the build is failing\\nthen\\nSTATUS='FAILED'\\nREASON=\\\"NodejsBuild failed. See CloudWatch Log stream for the detailed reason: \\nhttps://$AWS_REGION.console.aws.amazon.com/cloudwatch/home?region=$AWS_REGION#logsV2:log-groups/log-group/\\\\$252Faws\\\\$252Fcodebuild\\\\$252F$projectName/log-events/$CODEBUILD_LOG_PATH\\\"\\nfi\\ncat <<EOF > payload.json\\n{\\n  \\\"StackId\\\": \\\"$stackId\\\",\\n  \\\"RequestId\\\": \\\"$requestId\\\",\\n  \\\"LogicalResourceId\\\":\\\"$logicalResourceId\\\",\\n  \\\"PhysicalResourceId\\\": \\\"$destinationObjectKey\\\",\\n  \\\"Status\\\": \\\"$STATUS\\\",\\n  \\\"Reason\\\": \\\"$REASON\\\"\\n}\\nEOF\\ncurl -vv -i -X PUT -H 'Content-Type:' -d \\\"@payload.json\\\" \\\"$responseURL\\\"\\n              \"\n      ]\n    }\n  }\n}"
+                        },
+                        "cache": {
+                          "type": "NO_CACHE"
+                        },
+                        "encryptionKey": "alias/aws/s3"
+                      }
+                    },
+                    "constructInfo": {
+                      "fqn": "aws-cdk-lib.aws_codebuild.CfnProject",
+                      "version": "2.38.0"
+                    }
+                  }
+                },
+                "constructInfo": {
+                  "fqn": "aws-cdk-lib.aws_codebuild.Project",
+                  "version": "2.38.0"
+                }
+              },
               "Source-..example--example-app": {
                 "id": "Source-..example--example-app",
                 "path": "NodejsBuildIntegTest/ExampleBuild/Source-..example--example-app",
@@ -611,52 +866,14 @@
                             "policyDocument": {
                               "Statement": [
                                 {
-                                  "Action": [
-                                    "s3:Abort*",
-                                    "s3:DeleteObject*",
-                                    "s3:GetBucket*",
-                                    "s3:GetObject*",
-                                    "s3:List*",
-                                    "s3:PutObject",
-                                    "s3:PutObjectLegalHold",
-                                    "s3:PutObjectRetention",
-                                    "s3:PutObjectTagging",
-                                    "s3:PutObjectVersionTagging"
-                                  ],
+                                  "Action": "codebuild:StartBuild",
                                   "Effect": "Allow",
-                                  "Resource": [
-                                    {
-                                      "Fn::Join": [
-                                        "",
-                                        [
-                                          "arn:",
-                                          {
-                                            "Ref": "AWS::Partition"
-                                          },
-                                          ":s3:::",
-                                          {
-                                            "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
-                                          },
-                                          "/*"
-                                        ]
-                                      ]
-                                    },
-                                    {
-                                      "Fn::Join": [
-                                        "",
-                                        [
-                                          "arn:",
-                                          {
-                                            "Ref": "AWS::Partition"
-                                          },
-                                          ":s3:::",
-                                          {
-                                            "Ref": "AssetParameters72f05c779a8bc73c6ec86f6eafc720508792e7526696d3ae45a7fddcfc473c9dS3Bucket7BF37945"
-                                          }
-                                        ]
-                                      ]
-                                    }
-                                  ]
+                                  "Resource": {
+                                    "Fn::GetAtt": [
+                                      "ExampleBuildProjectEF5CAC49",
+                                      "Arn"
+                                    ]
+                                  }
                                 }
                               ],
                               "Version": "2012-10-17"
@@ -720,7 +937,7 @@
                   "aws:cdk:cloudformation:props": {
                     "code": {
                       "s3Bucket": {
-                        "Ref": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3BucketBC3258A3"
+                        "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3Bucket422B9DC8"
                       },
                       "s3Key": {
                         "Fn::Join": [
@@ -733,7 +950,7 @@
                                   "Fn::Split": [
                                     "||",
                                     {
-                                      "Ref": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314"
+                                      "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C"
                                     }
                                   ]
                                 }
@@ -746,7 +963,7 @@
                                   "Fn::Split": [
                                     "||",
                                     {
-                                      "Ref": "AssetParameters13039ed50e1b40dd1a973f8d2992872d2d3c7b9869926910595df18ec8266bc5S3VersionKey47BBE314"
+                                      "Ref": "AssetParametersa89beece57b97d45d5016b9e88de3696daaf6ae49a79344dcb1386fe581a125bS3VersionKey7B3CC08C"
                                     }
                                   ]
                                 }
@@ -762,13 +979,9 @@
                         "Arn"
                       ]
                     },
-                    "ephemeralStorage": {
-                      "size": 5120
-                    },
                     "handler": "index.handler",
-                    "memorySize": 1792,
                     "runtime": "nodejs18.x",
-                    "timeout": 600
+                    "timeout": 300
                   }
                 },
                 "constructInfo": {