From c0f81af8caedef1bd514804f505c57f4bf58638e Mon Sep 17 00:00:00 2001
From: Administrator <1051256694@qq.com>
Date: 星期六, 04 四月 2026 00:24:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/lggslasrs' into lggslasrs

---
 src/main/java/com/zy/iot/entity/IotPublishRecord.java                               |   89 +
 src/main/java/com/zy/iot/service/impl/IotPublishRecordServiceImpl.java              |   66 
 src/main/java/com/zy/asrs/entity/param/MesToCombParam.java                          |    2 
 .gitignore                                                                          | 2320 ++++++++++++++++++++++++++++++++
 src/main/java/com/zy/iot/constant/IotConstants.java                                 |   36 
 src/main/java/com/zy/asrs/service/impl/ExternalTaskFacadeServiceImpl.java           |  108 +
 src/main/java/com/zy/integration/iot/util/IotMqttSslUtils.java                      |   87 +
 src/main/java/com/zy/integration/iot/handler/impl/IotInboundMessageHandlerImpl.java |   57 
 src/main/java/com/zy/iot/entity/IotInstructionMessage.java                          |   21 
 src/main/java/com/zy/integration/iot/publish/impl/IotPublishServiceImpl.java        |   61 
 src/test/java/com/zy/integration/iot/IotSupportTest.java                            |   31 
 src/main/java/com/zy/common/web/WcsController.java                                  |  289 ++-
 pom.xml                                                                             |   15 
 .local/mqtt-smoke/AwsIotConnectRunner.java                                          |   81 +
 src/main/java/com/zy/asrs/utils/Utils.java                                          |   10 
 src/main/java/com/zy/integration/iot/client/impl/PahoIotMqttClient.java             |  205 ++
 src/main/java/com/zy/iot/service/IotPublishRecordService.java                       |   15 
 .local/mqtt-smoke/bin/AwsIotConnectRunner$1.class                                   |    0 
 src/main/java/com/zy/iot/util/IotInstructionIdGenerator.java                        |   30 
 src/main/java/com/zy/iot/entity/IotTopicConfig.java                                 |   19 
 .local/mqtt-smoke/bin/AwsIotConnectRunner.class                                     |    0 
 src/main/java/com/zy/integration/iot/biz/impl/IotInstructionServiceImpl.java        |  439 ++++++
 src/main/java/com/zy/integration/iot/client/IotMqttClient.java                      |   10 
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java                         |    5 
 src/main/java/com/zy/iot/mapper/IotPublishRecordMapper.java                         |   11 
 src/main/java/com/zy/asrs/controller/OpenController.java                            |    1 
 src/main/java/com/zy/integration/iot/publish/IotPublishService.java                 |    6 
 src/main/java/com/zy/integration/iot/handler/IotInboundMessageHandler.java          |    6 
 src/main/java/com/zy/iot/entity/IotFeedbackMessage.java                             |   17 
 src/main/java/com/zy/iot/config/IotProperties.java                                  |   69 
 src/main/java/com/zy/integration/iot/task/IotPendingPublishScheduler.java           |   49 
 src/main/java/com/zy/asrs/service/ExternalTaskFacadeService.java                    |   12 
 src/main/java/com/zy/integration/iot/biz/IotInstructionService.java                 |   16 
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java                         |   15 
 src/main/resources/sql/20260324_asr_iot_publish_record.sql                          |   47 
 src/main/resources/application.yml                                                  |   33 
 36 files changed, 4,153 insertions(+), 125 deletions(-)

diff --git a/.gitignore b/.gitignore
index 9224005..94ddff7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,3 +33,2323 @@
 ### LOG ###
 stock
 LOG_PATH_IS_UNDEFINED
+/.local/mqtt-smoke/bin/LocalMqttSmokeRunner$1.class
+/.local/mqtt-smoke/bin/LocalMqttSmokeRunner.class
+/.local/mqtt-smoke/certs/ca.crt
+/.local/mqtt-smoke/certs/ca.key
+/.local/mqtt-smoke/certs/ca.srl
+/.local/mqtt-smoke/certs/client.crt
+/.local/mqtt-smoke/certs/client.csr
+/.local/mqtt-smoke/certs/client.key
+/.local/mqtt-smoke/certs/client_ext.cnf
+/.local/mqtt-smoke/certs/server.crt
+/.local/mqtt-smoke/certs/server.csr
+/.local/mqtt-smoke/certs/server.key
+/.local/mqtt-smoke/certs/server_ext.cnf
+/.local/mqtt-smoke/messages/egress-stow.json
+/.local/mqtt-smoke/mosquitto/mosquitto.conf
+/.local/mqtt-smoke/classpath.txt
+/.local/mqtt-smoke/LocalMqttSmokeRunner.java
+/.local/node/node_modules/corepack/dist/lib/corepack.cjs
+/.local/node/node_modules/corepack/dist/corepack.js
+/.local/node/node_modules/corepack/dist/npm.js
+/.local/node/node_modules/corepack/dist/npx.js
+/.local/node/node_modules/corepack/dist/pnpm.js
+/.local/node/node_modules/corepack/dist/pnpx.js
+/.local/node/node_modules/corepack/dist/yarn.js
+/.local/node/node_modules/corepack/dist/yarnpkg.js
+/.local/node/node_modules/corepack/shims/nodewin/corepack
+/.local/node/node_modules/corepack/shims/nodewin/corepack.cmd
+/.local/node/node_modules/corepack/shims/nodewin/corepack.ps1
+/.local/node/node_modules/corepack/shims/nodewin/npm
+/.local/node/node_modules/corepack/shims/nodewin/npm.cmd
+/.local/node/node_modules/corepack/shims/nodewin/npm.ps1
+/.local/node/node_modules/corepack/shims/nodewin/npx
+/.local/node/node_modules/corepack/shims/nodewin/npx.cmd
+/.local/node/node_modules/corepack/shims/nodewin/npx.ps1
+/.local/node/node_modules/corepack/shims/nodewin/pnpm
+/.local/node/node_modules/corepack/shims/nodewin/pnpm.cmd
+/.local/node/node_modules/corepack/shims/nodewin/pnpm.ps1
+/.local/node/node_modules/corepack/shims/nodewin/pnpx
+/.local/node/node_modules/corepack/shims/nodewin/pnpx.cmd
+/.local/node/node_modules/corepack/shims/nodewin/pnpx.ps1
+/.local/node/node_modules/corepack/shims/nodewin/yarn
+/.local/node/node_modules/corepack/shims/nodewin/yarn.cmd
+/.local/node/node_modules/corepack/shims/nodewin/yarn.ps1
+/.local/node/node_modules/corepack/shims/nodewin/yarnpkg
+/.local/node/node_modules/corepack/shims/nodewin/yarnpkg.cmd
+/.local/node/node_modules/corepack/shims/nodewin/yarnpkg.ps1
+/.local/node/node_modules/corepack/shims/corepack
+/.local/node/node_modules/corepack/shims/corepack.cmd
+/.local/node/node_modules/corepack/shims/corepack.ps1
+/.local/node/node_modules/corepack/shims/npm
+/.local/node/node_modules/corepack/shims/npm.cmd
+/.local/node/node_modules/corepack/shims/npm.ps1
+/.local/node/node_modules/corepack/shims/npx
+/.local/node/node_modules/corepack/shims/npx.cmd
+/.local/node/node_modules/corepack/shims/npx.ps1
+/.local/node/node_modules/corepack/shims/pnpm
+/.local/node/node_modules/corepack/shims/pnpm.cmd
+/.local/node/node_modules/corepack/shims/pnpm.ps1
+/.local/node/node_modules/corepack/shims/pnpx
+/.local/node/node_modules/corepack/shims/pnpx.cmd
+/.local/node/node_modules/corepack/shims/pnpx.ps1
+/.local/node/node_modules/corepack/shims/yarn
+/.local/node/node_modules/corepack/shims/yarn.cmd
+/.local/node/node_modules/corepack/shims/yarn.ps1
+/.local/node/node_modules/corepack/shims/yarnpkg
+/.local/node/node_modules/corepack/shims/yarnpkg.cmd
+/.local/node/node_modules/corepack/shims/yarnpkg.ps1
+/.local/node/node_modules/corepack/CHANGELOG.md
+/.local/node/node_modules/corepack/LICENSE.md
+/.local/node/node_modules/corepack/package.json
+/.local/node/node_modules/corepack/README.md
+/.local/node/node_modules/npm/bin/node-gyp-bin/node-gyp
+/.local/node/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd
+/.local/node/node_modules/npm/bin/npm
+/.local/node/node_modules/npm/bin/npm.cmd
+/.local/node/node_modules/npm/bin/npm.ps1
+/.local/node/node_modules/npm/bin/npm-cli.js
+/.local/node/node_modules/npm/bin/npm-prefix.js
+/.local/node/node_modules/npm/bin/npx
+/.local/node/node_modules/npm/bin/npx.cmd
+/.local/node/node_modules/npm/bin/npx.ps1
+/.local/node/node_modules/npm/bin/npx-cli.js
+/.local/node/node_modules/npm/docs/content/commands/npm.md
+/.local/node/node_modules/npm/docs/content/commands/npm-access.md
+/.local/node/node_modules/npm/docs/content/commands/npm-adduser.md
+/.local/node/node_modules/npm/docs/content/commands/npm-audit.md
+/.local/node/node_modules/npm/docs/content/commands/npm-bugs.md
+/.local/node/node_modules/npm/docs/content/commands/npm-cache.md
+/.local/node/node_modules/npm/docs/content/commands/npm-ci.md
+/.local/node/node_modules/npm/docs/content/commands/npm-completion.md
+/.local/node/node_modules/npm/docs/content/commands/npm-config.md
+/.local/node/node_modules/npm/docs/content/commands/npm-dedupe.md
+/.local/node/node_modules/npm/docs/content/commands/npm-deprecate.md
+/.local/node/node_modules/npm/docs/content/commands/npm-diff.md
+/.local/node/node_modules/npm/docs/content/commands/npm-dist-tag.md
+/.local/node/node_modules/npm/docs/content/commands/npm-docs.md
+/.local/node/node_modules/npm/docs/content/commands/npm-doctor.md
+/.local/node/node_modules/npm/docs/content/commands/npm-edit.md
+/.local/node/node_modules/npm/docs/content/commands/npm-exec.md
+/.local/node/node_modules/npm/docs/content/commands/npm-explain.md
+/.local/node/node_modules/npm/docs/content/commands/npm-explore.md
+/.local/node/node_modules/npm/docs/content/commands/npm-find-dupes.md
+/.local/node/node_modules/npm/docs/content/commands/npm-fund.md
+/.local/node/node_modules/npm/docs/content/commands/npm-help.md
+/.local/node/node_modules/npm/docs/content/commands/npm-help-search.md
+/.local/node/node_modules/npm/docs/content/commands/npm-hook.md
+/.local/node/node_modules/npm/docs/content/commands/npm-init.md
+/.local/node/node_modules/npm/docs/content/commands/npm-install.md
+/.local/node/node_modules/npm/docs/content/commands/npm-install-ci-test.md
+/.local/node/node_modules/npm/docs/content/commands/npm-install-test.md
+/.local/node/node_modules/npm/docs/content/commands/npm-link.md
+/.local/node/node_modules/npm/docs/content/commands/npm-login.md
+/.local/node/node_modules/npm/docs/content/commands/npm-logout.md
+/.local/node/node_modules/npm/docs/content/commands/npm-ls.md
+/.local/node/node_modules/npm/docs/content/commands/npm-org.md
+/.local/node/node_modules/npm/docs/content/commands/npm-outdated.md
+/.local/node/node_modules/npm/docs/content/commands/npm-owner.md
+/.local/node/node_modules/npm/docs/content/commands/npm-pack.md
+/.local/node/node_modules/npm/docs/content/commands/npm-ping.md
+/.local/node/node_modules/npm/docs/content/commands/npm-pkg.md
+/.local/node/node_modules/npm/docs/content/commands/npm-prefix.md
+/.local/node/node_modules/npm/docs/content/commands/npm-profile.md
+/.local/node/node_modules/npm/docs/content/commands/npm-prune.md
+/.local/node/node_modules/npm/docs/content/commands/npm-publish.md
+/.local/node/node_modules/npm/docs/content/commands/npm-query.md
+/.local/node/node_modules/npm/docs/content/commands/npm-rebuild.md
+/.local/node/node_modules/npm/docs/content/commands/npm-repo.md
+/.local/node/node_modules/npm/docs/content/commands/npm-restart.md
+/.local/node/node_modules/npm/docs/content/commands/npm-root.md
+/.local/node/node_modules/npm/docs/content/commands/npm-run-script.md
+/.local/node/node_modules/npm/docs/content/commands/npm-sbom.md
+/.local/node/node_modules/npm/docs/content/commands/npm-search.md
+/.local/node/node_modules/npm/docs/content/commands/npm-shrinkwrap.md
+/.local/node/node_modules/npm/docs/content/commands/npm-star.md
+/.local/node/node_modules/npm/docs/content/commands/npm-stars.md
+/.local/node/node_modules/npm/docs/content/commands/npm-start.md
+/.local/node/node_modules/npm/docs/content/commands/npm-stop.md
+/.local/node/node_modules/npm/docs/content/commands/npm-team.md
+/.local/node/node_modules/npm/docs/content/commands/npm-test.md
+/.local/node/node_modules/npm/docs/content/commands/npm-token.md
+/.local/node/node_modules/npm/docs/content/commands/npm-uninstall.md
+/.local/node/node_modules/npm/docs/content/commands/npm-unpublish.md
+/.local/node/node_modules/npm/docs/content/commands/npm-unstar.md
+/.local/node/node_modules/npm/docs/content/commands/npm-update.md
+/.local/node/node_modules/npm/docs/content/commands/npm-version.md
+/.local/node/node_modules/npm/docs/content/commands/npm-view.md
+/.local/node/node_modules/npm/docs/content/commands/npm-whoami.md
+/.local/node/node_modules/npm/docs/content/commands/npx.md
+/.local/node/node_modules/npm/docs/content/configuring-npm/folders.md
+/.local/node/node_modules/npm/docs/content/configuring-npm/install.md
+/.local/node/node_modules/npm/docs/content/configuring-npm/npm-shrinkwrap-json.md
+/.local/node/node_modules/npm/docs/content/configuring-npm/npmrc.md
+/.local/node/node_modules/npm/docs/content/configuring-npm/package-json.md
+/.local/node/node_modules/npm/docs/content/configuring-npm/package-lock-json.md
+/.local/node/node_modules/npm/docs/content/using-npm/config.md
+/.local/node/node_modules/npm/docs/content/using-npm/dependency-selectors.md
+/.local/node/node_modules/npm/docs/content/using-npm/developers.md
+/.local/node/node_modules/npm/docs/content/using-npm/logging.md
+/.local/node/node_modules/npm/docs/content/using-npm/orgs.md
+/.local/node/node_modules/npm/docs/content/using-npm/package-spec.md
+/.local/node/node_modules/npm/docs/content/using-npm/registry.md
+/.local/node/node_modules/npm/docs/content/using-npm/removal.md
+/.local/node/node_modules/npm/docs/content/using-npm/scope.md
+/.local/node/node_modules/npm/docs/content/using-npm/scripts.md
+/.local/node/node_modules/npm/docs/content/using-npm/workspaces.md
+/.local/node/node_modules/npm/docs/lib/index.js
+/.local/node/node_modules/npm/docs/output/commands/npm.html
+/.local/node/node_modules/npm/docs/output/commands/npm-access.html
+/.local/node/node_modules/npm/docs/output/commands/npm-adduser.html
+/.local/node/node_modules/npm/docs/output/commands/npm-audit.html
+/.local/node/node_modules/npm/docs/output/commands/npm-bugs.html
+/.local/node/node_modules/npm/docs/output/commands/npm-cache.html
+/.local/node/node_modules/npm/docs/output/commands/npm-ci.html
+/.local/node/node_modules/npm/docs/output/commands/npm-completion.html
+/.local/node/node_modules/npm/docs/output/commands/npm-config.html
+/.local/node/node_modules/npm/docs/output/commands/npm-dedupe.html
+/.local/node/node_modules/npm/docs/output/commands/npm-deprecate.html
+/.local/node/node_modules/npm/docs/output/commands/npm-diff.html
+/.local/node/node_modules/npm/docs/output/commands/npm-dist-tag.html
+/.local/node/node_modules/npm/docs/output/commands/npm-docs.html
+/.local/node/node_modules/npm/docs/output/commands/npm-doctor.html
+/.local/node/node_modules/npm/docs/output/commands/npm-edit.html
+/.local/node/node_modules/npm/docs/output/commands/npm-exec.html
+/.local/node/node_modules/npm/docs/output/commands/npm-explain.html
+/.local/node/node_modules/npm/docs/output/commands/npm-explore.html
+/.local/node/node_modules/npm/docs/output/commands/npm-find-dupes.html
+/.local/node/node_modules/npm/docs/output/commands/npm-fund.html
+/.local/node/node_modules/npm/docs/output/commands/npm-help.html
+/.local/node/node_modules/npm/docs/output/commands/npm-help-search.html
+/.local/node/node_modules/npm/docs/output/commands/npm-hook.html
+/.local/node/node_modules/npm/docs/output/commands/npm-init.html
+/.local/node/node_modules/npm/docs/output/commands/npm-install.html
+/.local/node/node_modules/npm/docs/output/commands/npm-install-ci-test.html
+/.local/node/node_modules/npm/docs/output/commands/npm-install-test.html
+/.local/node/node_modules/npm/docs/output/commands/npm-link.html
+/.local/node/node_modules/npm/docs/output/commands/npm-login.html
+/.local/node/node_modules/npm/docs/output/commands/npm-logout.html
+/.local/node/node_modules/npm/docs/output/commands/npm-ls.html
+/.local/node/node_modules/npm/docs/output/commands/npm-org.html
+/.local/node/node_modules/npm/docs/output/commands/npm-outdated.html
+/.local/node/node_modules/npm/docs/output/commands/npm-owner.html
+/.local/node/node_modules/npm/docs/output/commands/npm-pack.html
+/.local/node/node_modules/npm/docs/output/commands/npm-ping.html
+/.local/node/node_modules/npm/docs/output/commands/npm-pkg.html
+/.local/node/node_modules/npm/docs/output/commands/npm-prefix.html
+/.local/node/node_modules/npm/docs/output/commands/npm-profile.html
+/.local/node/node_modules/npm/docs/output/commands/npm-prune.html
+/.local/node/node_modules/npm/docs/output/commands/npm-publish.html
+/.local/node/node_modules/npm/docs/output/commands/npm-query.html
+/.local/node/node_modules/npm/docs/output/commands/npm-rebuild.html
+/.local/node/node_modules/npm/docs/output/commands/npm-repo.html
+/.local/node/node_modules/npm/docs/output/commands/npm-restart.html
+/.local/node/node_modules/npm/docs/output/commands/npm-root.html
+/.local/node/node_modules/npm/docs/output/commands/npm-run-script.html
+/.local/node/node_modules/npm/docs/output/commands/npm-sbom.html
+/.local/node/node_modules/npm/docs/output/commands/npm-search.html
+/.local/node/node_modules/npm/docs/output/commands/npm-shrinkwrap.html
+/.local/node/node_modules/npm/docs/output/commands/npm-star.html
+/.local/node/node_modules/npm/docs/output/commands/npm-stars.html
+/.local/node/node_modules/npm/docs/output/commands/npm-start.html
+/.local/node/node_modules/npm/docs/output/commands/npm-stop.html
+/.local/node/node_modules/npm/docs/output/commands/npm-team.html
+/.local/node/node_modules/npm/docs/output/commands/npm-test.html
+/.local/node/node_modules/npm/docs/output/commands/npm-token.html
+/.local/node/node_modules/npm/docs/output/commands/npm-uninstall.html
+/.local/node/node_modules/npm/docs/output/commands/npm-unpublish.html
+/.local/node/node_modules/npm/docs/output/commands/npm-unstar.html
+/.local/node/node_modules/npm/docs/output/commands/npm-update.html
+/.local/node/node_modules/npm/docs/output/commands/npm-version.html
+/.local/node/node_modules/npm/docs/output/commands/npm-view.html
+/.local/node/node_modules/npm/docs/output/commands/npm-whoami.html
+/.local/node/node_modules/npm/docs/output/commands/npx.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/folders.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/install.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/npm-global.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/npm-json.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/npmrc.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/package-json.html
+/.local/node/node_modules/npm/docs/output/configuring-npm/package-lock-json.html
+/.local/node/node_modules/npm/docs/output/using-npm/config.html
+/.local/node/node_modules/npm/docs/output/using-npm/dependency-selectors.html
+/.local/node/node_modules/npm/docs/output/using-npm/developers.html
+/.local/node/node_modules/npm/docs/output/using-npm/logging.html
+/.local/node/node_modules/npm/docs/output/using-npm/orgs.html
+/.local/node/node_modules/npm/docs/output/using-npm/package-spec.html
+/.local/node/node_modules/npm/docs/output/using-npm/registry.html
+/.local/node/node_modules/npm/docs/output/using-npm/removal.html
+/.local/node/node_modules/npm/docs/output/using-npm/scope.html
+/.local/node/node_modules/npm/docs/output/using-npm/scripts.html
+/.local/node/node_modules/npm/docs/output/using-npm/workspaces.html
+/.local/node/node_modules/npm/lib/cli/entry.js
+/.local/node/node_modules/npm/lib/cli/exit-handler.js
+/.local/node/node_modules/npm/lib/cli/update-notifier.js
+/.local/node/node_modules/npm/lib/cli/validate-engines.js
+/.local/node/node_modules/npm/lib/commands/access.js
+/.local/node/node_modules/npm/lib/commands/adduser.js
+/.local/node/node_modules/npm/lib/commands/audit.js
+/.local/node/node_modules/npm/lib/commands/bugs.js
+/.local/node/node_modules/npm/lib/commands/cache.js
+/.local/node/node_modules/npm/lib/commands/ci.js
+/.local/node/node_modules/npm/lib/commands/completion.js
+/.local/node/node_modules/npm/lib/commands/config.js
+/.local/node/node_modules/npm/lib/commands/dedupe.js
+/.local/node/node_modules/npm/lib/commands/deprecate.js
+/.local/node/node_modules/npm/lib/commands/diff.js
+/.local/node/node_modules/npm/lib/commands/dist-tag.js
+/.local/node/node_modules/npm/lib/commands/docs.js
+/.local/node/node_modules/npm/lib/commands/doctor.js
+/.local/node/node_modules/npm/lib/commands/edit.js
+/.local/node/node_modules/npm/lib/commands/exec.js
+/.local/node/node_modules/npm/lib/commands/explain.js
+/.local/node/node_modules/npm/lib/commands/explore.js
+/.local/node/node_modules/npm/lib/commands/find-dupes.js
+/.local/node/node_modules/npm/lib/commands/fund.js
+/.local/node/node_modules/npm/lib/commands/get.js
+/.local/node/node_modules/npm/lib/commands/help.js
+/.local/node/node_modules/npm/lib/commands/help-search.js
+/.local/node/node_modules/npm/lib/commands/hook.js
+/.local/node/node_modules/npm/lib/commands/init.js
+/.local/node/node_modules/npm/lib/commands/install.js
+/.local/node/node_modules/npm/lib/commands/install-ci-test.js
+/.local/node/node_modules/npm/lib/commands/install-test.js
+/.local/node/node_modules/npm/lib/commands/link.js
+/.local/node/node_modules/npm/lib/commands/ll.js
+/.local/node/node_modules/npm/lib/commands/login.js
+/.local/node/node_modules/npm/lib/commands/logout.js
+/.local/node/node_modules/npm/lib/commands/ls.js
+/.local/node/node_modules/npm/lib/commands/org.js
+/.local/node/node_modules/npm/lib/commands/outdated.js
+/.local/node/node_modules/npm/lib/commands/owner.js
+/.local/node/node_modules/npm/lib/commands/pack.js
+/.local/node/node_modules/npm/lib/commands/ping.js
+/.local/node/node_modules/npm/lib/commands/pkg.js
+/.local/node/node_modules/npm/lib/commands/prefix.js
+/.local/node/node_modules/npm/lib/commands/profile.js
+/.local/node/node_modules/npm/lib/commands/prune.js
+/.local/node/node_modules/npm/lib/commands/publish.js
+/.local/node/node_modules/npm/lib/commands/query.js
+/.local/node/node_modules/npm/lib/commands/rebuild.js
+/.local/node/node_modules/npm/lib/commands/repo.js
+/.local/node/node_modules/npm/lib/commands/restart.js
+/.local/node/node_modules/npm/lib/commands/root.js
+/.local/node/node_modules/npm/lib/commands/run-script.js
+/.local/node/node_modules/npm/lib/commands/sbom.js
+/.local/node/node_modules/npm/lib/commands/search.js
+/.local/node/node_modules/npm/lib/commands/set.js
+/.local/node/node_modules/npm/lib/commands/shrinkwrap.js
+/.local/node/node_modules/npm/lib/commands/star.js
+/.local/node/node_modules/npm/lib/commands/stars.js
+/.local/node/node_modules/npm/lib/commands/start.js
+/.local/node/node_modules/npm/lib/commands/stop.js
+/.local/node/node_modules/npm/lib/commands/team.js
+/.local/node/node_modules/npm/lib/commands/test.js
+/.local/node/node_modules/npm/lib/commands/token.js
+/.local/node/node_modules/npm/lib/commands/uninstall.js
+/.local/node/node_modules/npm/lib/commands/unpublish.js
+/.local/node/node_modules/npm/lib/commands/unstar.js
+/.local/node/node_modules/npm/lib/commands/update.js
+/.local/node/node_modules/npm/lib/commands/version.js
+/.local/node/node_modules/npm/lib/commands/view.js
+/.local/node/node_modules/npm/lib/commands/whoami.js
+/.local/node/node_modules/npm/lib/utils/audit-error.js
+/.local/node/node_modules/npm/lib/utils/auth.js
+/.local/node/node_modules/npm/lib/utils/cmd-list.js
+/.local/node/node_modules/npm/lib/utils/completion.fish
+/.local/node/node_modules/npm/lib/utils/completion.sh
+/.local/node/node_modules/npm/lib/utils/did-you-mean.js
+/.local/node/node_modules/npm/lib/utils/display.js
+/.local/node/node_modules/npm/lib/utils/error-message.js
+/.local/node/node_modules/npm/lib/utils/explain-dep.js
+/.local/node/node_modules/npm/lib/utils/explain-eresolve.js
+/.local/node/node_modules/npm/lib/utils/format.js
+/.local/node/node_modules/npm/lib/utils/format-bytes.js
+/.local/node/node_modules/npm/lib/utils/format-search-stream.js
+/.local/node/node_modules/npm/lib/utils/get-identity.js
+/.local/node/node_modules/npm/lib/utils/get-workspaces.js
+/.local/node/node_modules/npm/lib/utils/installed-deep.js
+/.local/node/node_modules/npm/lib/utils/installed-shallow.js
+/.local/node/node_modules/npm/lib/utils/is-windows.js
+/.local/node/node_modules/npm/lib/utils/log-file.js
+/.local/node/node_modules/npm/lib/utils/npm-usage.js
+/.local/node/node_modules/npm/lib/utils/open-url.js
+/.local/node/node_modules/npm/lib/utils/output-error.js
+/.local/node/node_modules/npm/lib/utils/ping.js
+/.local/node/node_modules/npm/lib/utils/queryable.js
+/.local/node/node_modules/npm/lib/utils/read-user-info.js
+/.local/node/node_modules/npm/lib/utils/reify-finish.js
+/.local/node/node_modules/npm/lib/utils/reify-output.js
+/.local/node/node_modules/npm/lib/utils/sbom-cyclonedx.js
+/.local/node/node_modules/npm/lib/utils/sbom-spdx.js
+/.local/node/node_modules/npm/lib/utils/tar.js
+/.local/node/node_modules/npm/lib/utils/timers.js
+/.local/node/node_modules/npm/lib/utils/update-workspaces.js
+/.local/node/node_modules/npm/lib/utils/validate-lockfile.js
+/.local/node/node_modules/npm/lib/utils/verify-signatures.js
+/.local/node/node_modules/npm/lib/arborist-cmd.js
+/.local/node/node_modules/npm/lib/base-cmd.js
+/.local/node/node_modules/npm/lib/cli.js
+/.local/node/node_modules/npm/lib/lifecycle-cmd.js
+/.local/node/node_modules/npm/lib/npm.js
+/.local/node/node_modules/npm/lib/package-url-cmd.js
+/.local/node/node_modules/npm/man/man1/npm.1
+/.local/node/node_modules/npm/man/man1/npm-access.1
+/.local/node/node_modules/npm/man/man1/npm-adduser.1
+/.local/node/node_modules/npm/man/man1/npm-audit.1
+/.local/node/node_modules/npm/man/man1/npm-bugs.1
+/.local/node/node_modules/npm/man/man1/npm-cache.1
+/.local/node/node_modules/npm/man/man1/npm-ci.1
+/.local/node/node_modules/npm/man/man1/npm-completion.1
+/.local/node/node_modules/npm/man/man1/npm-config.1
+/.local/node/node_modules/npm/man/man1/npm-dedupe.1
+/.local/node/node_modules/npm/man/man1/npm-deprecate.1
+/.local/node/node_modules/npm/man/man1/npm-diff.1
+/.local/node/node_modules/npm/man/man1/npm-dist-tag.1
+/.local/node/node_modules/npm/man/man1/npm-docs.1
+/.local/node/node_modules/npm/man/man1/npm-doctor.1
+/.local/node/node_modules/npm/man/man1/npm-edit.1
+/.local/node/node_modules/npm/man/man1/npm-exec.1
+/.local/node/node_modules/npm/man/man1/npm-explain.1
+/.local/node/node_modules/npm/man/man1/npm-explore.1
+/.local/node/node_modules/npm/man/man1/npm-find-dupes.1
+/.local/node/node_modules/npm/man/man1/npm-fund.1
+/.local/node/node_modules/npm/man/man1/npm-help.1
+/.local/node/node_modules/npm/man/man1/npm-help-search.1
+/.local/node/node_modules/npm/man/man1/npm-hook.1
+/.local/node/node_modules/npm/man/man1/npm-init.1
+/.local/node/node_modules/npm/man/man1/npm-install.1
+/.local/node/node_modules/npm/man/man1/npm-install-ci-test.1
+/.local/node/node_modules/npm/man/man1/npm-install-test.1
+/.local/node/node_modules/npm/man/man1/npm-link.1
+/.local/node/node_modules/npm/man/man1/npm-login.1
+/.local/node/node_modules/npm/man/man1/npm-logout.1
+/.local/node/node_modules/npm/man/man1/npm-ls.1
+/.local/node/node_modules/npm/man/man1/npm-org.1
+/.local/node/node_modules/npm/man/man1/npm-outdated.1
+/.local/node/node_modules/npm/man/man1/npm-owner.1
+/.local/node/node_modules/npm/man/man1/npm-pack.1
+/.local/node/node_modules/npm/man/man1/npm-ping.1
+/.local/node/node_modules/npm/man/man1/npm-pkg.1
+/.local/node/node_modules/npm/man/man1/npm-prefix.1
+/.local/node/node_modules/npm/man/man1/npm-profile.1
+/.local/node/node_modules/npm/man/man1/npm-prune.1
+/.local/node/node_modules/npm/man/man1/npm-publish.1
+/.local/node/node_modules/npm/man/man1/npm-query.1
+/.local/node/node_modules/npm/man/man1/npm-rebuild.1
+/.local/node/node_modules/npm/man/man1/npm-repo.1
+/.local/node/node_modules/npm/man/man1/npm-restart.1
+/.local/node/node_modules/npm/man/man1/npm-root.1
+/.local/node/node_modules/npm/man/man1/npm-run-script.1
+/.local/node/node_modules/npm/man/man1/npm-sbom.1
+/.local/node/node_modules/npm/man/man1/npm-search.1
+/.local/node/node_modules/npm/man/man1/npm-shrinkwrap.1
+/.local/node/node_modules/npm/man/man1/npm-star.1
+/.local/node/node_modules/npm/man/man1/npm-stars.1
+/.local/node/node_modules/npm/man/man1/npm-start.1
+/.local/node/node_modules/npm/man/man1/npm-stop.1
+/.local/node/node_modules/npm/man/man1/npm-team.1
+/.local/node/node_modules/npm/man/man1/npm-test.1
+/.local/node/node_modules/npm/man/man1/npm-token.1
+/.local/node/node_modules/npm/man/man1/npm-uninstall.1
+/.local/node/node_modules/npm/man/man1/npm-unpublish.1
+/.local/node/node_modules/npm/man/man1/npm-unstar.1
+/.local/node/node_modules/npm/man/man1/npm-update.1
+/.local/node/node_modules/npm/man/man1/npm-version.1
+/.local/node/node_modules/npm/man/man1/npm-view.1
+/.local/node/node_modules/npm/man/man1/npm-whoami.1
+/.local/node/node_modules/npm/man/man1/npx.1
+/.local/node/node_modules/npm/man/man5/folders.5
+/.local/node/node_modules/npm/man/man5/install.5
+/.local/node/node_modules/npm/man/man5/npm-global.5
+/.local/node/node_modules/npm/man/man5/npm-json.5
+/.local/node/node_modules/npm/man/man5/npm-shrinkwrap-json.5
+/.local/node/node_modules/npm/man/man5/npmrc.5
+/.local/node/node_modules/npm/man/man5/package-json.5
+/.local/node/node_modules/npm/man/man5/package-lock-json.5
+/.local/node/node_modules/npm/man/man7/config.7
+/.local/node/node_modules/npm/man/man7/dependency-selectors.7
+/.local/node/node_modules/npm/man/man7/developers.7
+/.local/node/node_modules/npm/man/man7/logging.7
+/.local/node/node_modules/npm/man/man7/orgs.7
+/.local/node/node_modules/npm/man/man7/package-spec.7
+/.local/node/node_modules/npm/man/man7/registry.7
+/.local/node/node_modules/npm/man/man7/removal.7
+/.local/node/node_modules/npm/man/man7/scope.7
+/.local/node/node_modules/npm/man/man7/scripts.7
+/.local/node/node_modules/npm/man/man7/workspaces.7
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/license
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/index.mjs
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/LICENSE.txt
+/.local/node/node_modules/npm/node_modules/@isaacs/cliui/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/package.json
+/.local/node/node_modules/npm/node_modules/@isaacs/string-locale-compare/index.js
+/.local/node/node_modules/npm/node_modules/@isaacs/string-locale-compare/LICENSE
+/.local/node/node_modules/npm/node_modules/@isaacs/string-locale-compare/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/agents.js
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/dns.js
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/errors.js
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/options.js
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/proxy.js
+/.local/node/node_modules/npm/node_modules/@npmcli/agent/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/logging.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/options.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/print-tree.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/timers.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/actual.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/audit.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/funding.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/ideal.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/license.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/prune.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/reify.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/shrinkwrap.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/virtual.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/add-rm-pkg-deps.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/audit-report.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/can-place-dep.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/consistent-resolve.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/debug.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/deepest-nesting-target.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/dep-valid.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/diff.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/edge.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/from-path.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/gather-dep-set.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/inventory.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/link.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/node.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/optional-set.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/override-resolves.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/override-set.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/packument-cache.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/peer-entry-sets.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/place-dep.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/printable.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/realpath.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/relpath.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/reset-dep-flags.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/retire-path.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/signal-handling.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/signals.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/spec-from-lock.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/tracker.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/tree-check.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/vuln.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/yarn-lock.js
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/LICENSE.md
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/arborist/README.md
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/definitions/definition.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/definitions/definitions.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/definitions/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/env-replace.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/errors.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/nerf-dart.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/parse-field.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/set-envs.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/type-defs.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/type-description.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/umask.js
+/.local/node/node_modules/npm/node_modules/@npmcli/config/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/config/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/config/README.md
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/common/get-options.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/common/node.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/errors.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/polyfill.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/move-file.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/readdir-scoped.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/with-temp-dir.js
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/LICENSE.md
+/.local/node/node_modules/npm/node_modules/@npmcli/fs/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/clone.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/errors.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/find.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/is.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/is-clean.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/lines-to-revs.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/make-error.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/opts.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/revs.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/spawn.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/utils.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/which.js
+/.local/node/node_modules/npm/node_modules/@npmcli/git/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/git/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/bin/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/README.md
+/.local/node/node_modules/npm/node_modules/@npmcli/map-workspaces/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/map-workspaces/LICENSE.md
+/.local/node/node_modules/npm/node_modules/@npmcli/map-workspaces/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/get-dep-spec.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/hash.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/bin/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/add-git-sha.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/cache-dir.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/is-package-bin.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/npm.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/protected.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/tar-create-options.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/dir.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/fetcher.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/file.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/git.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/registry.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/remote.js
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/README.md
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/name-from-folder/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/name-from-folder/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/name-from-folder/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/node-gyp/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/node-gyp/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/node-gyp/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/normalize.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/normalize-data.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/read-package.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/sort.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/update-dependencies.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/update-scripts.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/update-workspaces.js
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/package-json/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/escape.js
+/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/query/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/query/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/query/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/deep-map.js
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/error.js
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/index.js
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/matchers.js
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/server.js
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/utils.js
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/redact/package.json
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp.cmd
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/is-server-package.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/package-envs.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/set-path.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/signal-manager.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/validate-options.js
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/LICENSE
+/.local/node/node_modules/npm/node_modules/@npmcli/run-script/package.json
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/negate.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/errors.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/primordials.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/util.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/validators.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/index.js
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/LICENSE
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/package.json
+/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/utils.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/api/field_behavior.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/any.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/descriptor.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/timestamp.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/dsse.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/entry.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/hashedrekord.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/verifier.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/envelope.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/events.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_rekor.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_trustroot.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/index.js
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/LICENSE
+/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/package.json
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/appdata.js
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/client.js
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/error.js
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/index.js
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/target.js
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/LICENSE
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/package.json
+/.local/node/node_modules/npm/node_modules/@sigstore/tuf/seeds.json
+/.local/node/node_modules/npm/node_modules/@tufjs/canonical-json/lib/index.js
+/.local/node/node_modules/npm/node_modules/@tufjs/canonical-json/LICENSE
+/.local/node/node_modules/npm/node_modules/@tufjs/canonical-json/package.json
+/.local/node/node_modules/npm/node_modules/abbrev/lib/index.js
+/.local/node/node_modules/npm/node_modules/abbrev/LICENSE
+/.local/node/node_modules/npm/node_modules/abbrev/package.json
+/.local/node/node_modules/npm/node_modules/agent-base/dist/helpers.js
+/.local/node/node_modules/npm/node_modules/agent-base/dist/index.js
+/.local/node/node_modules/npm/node_modules/agent-base/LICENSE
+/.local/node/node_modules/npm/node_modules/agent-base/package.json
+/.local/node/node_modules/npm/node_modules/ansi-regex/index.js
+/.local/node/node_modules/npm/node_modules/ansi-regex/license
+/.local/node/node_modules/npm/node_modules/ansi-regex/package.json
+/.local/node/node_modules/npm/node_modules/ansi-styles/index.js
+/.local/node/node_modules/npm/node_modules/ansi-styles/license
+/.local/node/node_modules/npm/node_modules/ansi-styles/package.json
+/.local/node/node_modules/npm/node_modules/aproba/index.js
+/.local/node/node_modules/npm/node_modules/aproba/LICENSE
+/.local/node/node_modules/npm/node_modules/aproba/package.json
+/.local/node/node_modules/npm/node_modules/archy/examples/beep.js
+/.local/node/node_modules/npm/node_modules/archy/examples/multi_line.js
+/.local/node/node_modules/npm/node_modules/archy/index.js
+/.local/node/node_modules/npm/node_modules/archy/LICENSE
+/.local/node/node_modules/npm/node_modules/archy/package.json
+/.local/node/node_modules/npm/node_modules/balanced-match/index.js
+/.local/node/node_modules/npm/node_modules/balanced-match/LICENSE.md
+/.local/node/node_modules/npm/node_modules/balanced-match/package.json
+/.local/node/node_modules/npm/node_modules/bin-links/lib/bin-target.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/check-bin.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/check-bins.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/fix-bin.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/get-node-modules.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/get-paths.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/get-prefix.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/index.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/is-windows.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/link-bin.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/link-bins.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/link-gently.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/link-mans.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/man-target.js
+/.local/node/node_modules/npm/node_modules/bin-links/lib/shim-bin.js
+/.local/node/node_modules/npm/node_modules/bin-links/LICENSE
+/.local/node/node_modules/npm/node_modules/bin-links/package.json
+/.local/node/node_modules/npm/node_modules/binary-extensions/binary-extensions.json
+/.local/node/node_modules/npm/node_modules/binary-extensions/index.js
+/.local/node/node_modules/npm/node_modules/binary-extensions/license
+/.local/node/node_modules/npm/node_modules/binary-extensions/package.json
+/.local/node/node_modules/npm/node_modules/brace-expansion/index.js
+/.local/node/node_modules/npm/node_modules/brace-expansion/LICENSE
+/.local/node/node_modules/npm/node_modules/brace-expansion/package.json
+/.local/node/node_modules/npm/node_modules/cacache/lib/content/path.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/content/read.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/content/rm.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/content/write.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/util/glob.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/util/hash-to-segments.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/util/tmp.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/entry-index.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/get.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/index.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/memoization.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/put.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/rm.js
+/.local/node/node_modules/npm/node_modules/cacache/lib/verify.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/LICENSE.md
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js.map
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/LICENSE
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/readme.markdown
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/create.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/cwd-error.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/extract.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/get-write-flag.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/header.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/large-numbers.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/list.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/make-command.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mkdir.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mode-fix.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-unicode.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-windows-path.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/options.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pack.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/parse.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/path-reservations.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pax.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/read-entry.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/replace.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-absolute-path.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/symlink-error.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/types.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/unpack.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/update.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/warn-method.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/winchars.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/write-entry.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/create.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/cwd-error.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/extract.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/get-write-flag.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/header.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/large-numbers.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/list.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/make-command.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/mkdir.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/mode-fix.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-unicode.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-windows-path.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/options.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/pack.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/parse.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/path-reservations.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/pax.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/read-entry.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/replace.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-absolute-path.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/symlink-error.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/types.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/unpack.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/update.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/warn-method.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/winchars.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/write-entry.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/LICENSE
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/LICENSE.md
+/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/package.json
+/.local/node/node_modules/npm/node_modules/cacache/LICENSE.md
+/.local/node/node_modules/npm/node_modules/cacache/package.json
+/.local/node/node_modules/npm/node_modules/chalk/source/vendor/ansi-styles/index.js
+/.local/node/node_modules/npm/node_modules/chalk/source/vendor/supports-color/browser.js
+/.local/node/node_modules/npm/node_modules/chalk/source/vendor/supports-color/index.js
+/.local/node/node_modules/npm/node_modules/chalk/source/index.js
+/.local/node/node_modules/npm/node_modules/chalk/source/utilities.js
+/.local/node/node_modules/npm/node_modules/chalk/license
+/.local/node/node_modules/npm/node_modules/chalk/package.json
+/.local/node/node_modules/npm/node_modules/chownr/chownr.js
+/.local/node/node_modules/npm/node_modules/chownr/LICENSE
+/.local/node/node_modules/npm/node_modules/chownr/package.json
+/.local/node/node_modules/npm/node_modules/ci-info/index.js
+/.local/node/node_modules/npm/node_modules/ci-info/LICENSE
+/.local/node/node_modules/npm/node_modules/ci-info/package.json
+/.local/node/node_modules/npm/node_modules/ci-info/vendors.json
+/.local/node/node_modules/npm/node_modules/cidr-regex/dist/index.js
+/.local/node/node_modules/npm/node_modules/cidr-regex/LICENSE
+/.local/node/node_modules/npm/node_modules/cidr-regex/package.json
+/.local/node/node_modules/npm/node_modules/cli-columns/color.js
+/.local/node/node_modules/npm/node_modules/cli-columns/index.js
+/.local/node/node_modules/npm/node_modules/cli-columns/license
+/.local/node/node_modules/npm/node_modules/cli-columns/package.json
+/.local/node/node_modules/npm/node_modules/cli-columns/test.js
+/.local/node/node_modules/npm/node_modules/cmd-shim/lib/index.js
+/.local/node/node_modules/npm/node_modules/cmd-shim/lib/to-batch-syntax.js
+/.local/node/node_modules/npm/node_modules/cmd-shim/LICENSE
+/.local/node/node_modules/npm/node_modules/cmd-shim/package.json
+/.local/node/node_modules/npm/node_modules/color-convert/conversions.js
+/.local/node/node_modules/npm/node_modules/color-convert/index.js
+/.local/node/node_modules/npm/node_modules/color-convert/LICENSE
+/.local/node/node_modules/npm/node_modules/color-convert/package.json
+/.local/node/node_modules/npm/node_modules/color-convert/route.js
+/.local/node/node_modules/npm/node_modules/color-name/index.js
+/.local/node/node_modules/npm/node_modules/color-name/LICENSE
+/.local/node/node_modules/npm/node_modules/color-name/package.json
+/.local/node/node_modules/npm/node_modules/common-ancestor-path/index.js
+/.local/node/node_modules/npm/node_modules/common-ancestor-path/LICENSE
+/.local/node/node_modules/npm/node_modules/common-ancestor-path/package.json
+/.local/node/node_modules/npm/node_modules/cross-spawn/lib/util/escape.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/lib/util/readShebang.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/lib/util/resolveCommand.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/lib/enoent.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/lib/parse.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/bin/node-which
+/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/LICENSE
+/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/package.json
+/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/README.md
+/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/which.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/index.js
+/.local/node/node_modules/npm/node_modules/cross-spawn/LICENSE
+/.local/node/node_modules/npm/node_modules/cross-spawn/package.json
+/.local/node/node_modules/npm/node_modules/cssesc/bin/cssesc
+/.local/node/node_modules/npm/node_modules/cssesc/man/cssesc.1
+/.local/node/node_modules/npm/node_modules/cssesc/cssesc.js
+/.local/node/node_modules/npm/node_modules/cssesc/LICENSE-MIT.txt
+/.local/node/node_modules/npm/node_modules/cssesc/package.json
+/.local/node/node_modules/npm/node_modules/cssesc/README.md
+/.local/node/node_modules/npm/node_modules/debug/src/browser.js
+/.local/node/node_modules/npm/node_modules/debug/src/common.js
+/.local/node/node_modules/npm/node_modules/debug/src/index.js
+/.local/node/node_modules/npm/node_modules/debug/src/node.js
+/.local/node/node_modules/npm/node_modules/debug/LICENSE
+/.local/node/node_modules/npm/node_modules/debug/package.json
+/.local/node/node_modules/npm/node_modules/diff/dist/diff.js
+/.local/node/node_modules/npm/node_modules/diff/dist/diff.min.js
+/.local/node/node_modules/npm/node_modules/diff/lib/convert/dmp.js
+/.local/node/node_modules/npm/node_modules/diff/lib/convert/xml.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/array.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/base.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/character.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/css.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/json.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/line.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/sentence.js
+/.local/node/node_modules/npm/node_modules/diff/lib/diff/word.js
+/.local/node/node_modules/npm/node_modules/diff/lib/patch/apply.js
+/.local/node/node_modules/npm/node_modules/diff/lib/patch/create.js
+/.local/node/node_modules/npm/node_modules/diff/lib/patch/merge.js
+/.local/node/node_modules/npm/node_modules/diff/lib/patch/parse.js
+/.local/node/node_modules/npm/node_modules/diff/lib/patch/reverse.js
+/.local/node/node_modules/npm/node_modules/diff/lib/util/array.js
+/.local/node/node_modules/npm/node_modules/diff/lib/util/distance-iterator.js
+/.local/node/node_modules/npm/node_modules/diff/lib/util/params.js
+/.local/node/node_modules/npm/node_modules/diff/lib/index.es6.js
+/.local/node/node_modules/npm/node_modules/diff/lib/index.js
+/.local/node/node_modules/npm/node_modules/diff/lib/index.mjs
+/.local/node/node_modules/npm/node_modules/diff/CONTRIBUTING.md
+/.local/node/node_modules/npm/node_modules/diff/LICENSE
+/.local/node/node_modules/npm/node_modules/diff/package.json
+/.local/node/node_modules/npm/node_modules/diff/release-notes.md
+/.local/node/node_modules/npm/node_modules/diff/runtime.js
+/.local/node/node_modules/npm/node_modules/eastasianwidth/eastasianwidth.js
+/.local/node/node_modules/npm/node_modules/eastasianwidth/package.json
+/.local/node/node_modules/npm/node_modules/emoji-regex/es2015/index.js
+/.local/node/node_modules/npm/node_modules/emoji-regex/es2015/text.js
+/.local/node/node_modules/npm/node_modules/emoji-regex/index.js
+/.local/node/node_modules/npm/node_modules/emoji-regex/LICENSE-MIT.txt
+/.local/node/node_modules/npm/node_modules/emoji-regex/package.json
+/.local/node/node_modules/npm/node_modules/emoji-regex/text.js
+/.local/node/node_modules/npm/node_modules/encoding/lib/encoding.js
+/.local/node/node_modules/npm/node_modules/encoding/LICENSE
+/.local/node/node_modules/npm/node_modules/encoding/package.json
+/.local/node/node_modules/npm/node_modules/env-paths/index.js
+/.local/node/node_modules/npm/node_modules/env-paths/license
+/.local/node/node_modules/npm/node_modules/env-paths/package.json
+/.local/node/node_modules/npm/node_modules/err-code/bower.json
+/.local/node/node_modules/npm/node_modules/err-code/index.js
+/.local/node/node_modules/npm/node_modules/err-code/index.umd.js
+/.local/node/node_modules/npm/node_modules/err-code/package.json
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/always/always.delay.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.base.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.factory.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.interface.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/jitter/jitter.factory.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/backoff.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/options.js
+/.local/node/node_modules/npm/node_modules/exponential-backoff/LICENSE
+/.local/node/node_modules/npm/node_modules/exponential-backoff/package.json
+/.local/node/node_modules/npm/node_modules/fastest-levenshtein/esm/mod.js
+/.local/node/node_modules/npm/node_modules/fastest-levenshtein/bench.js
+/.local/node/node_modules/npm/node_modules/fastest-levenshtein/LICENSE.md
+/.local/node/node_modules/npm/node_modules/fastest-levenshtein/mod.js
+/.local/node/node_modules/npm/node_modules/fastest-levenshtein/package.json
+/.local/node/node_modules/npm/node_modules/fastest-levenshtein/test.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/all-signals.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/proxy-signals.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/watchdog.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/all-signals.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/proxy-signals.js
+/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/watchdog.js
+/.local/node/node_modules/npm/node_modules/foreground-child/LICENSE
+/.local/node/node_modules/npm/node_modules/foreground-child/package.json
+/.local/node/node_modules/npm/node_modules/fs-minipass/lib/index.js
+/.local/node/node_modules/npm/node_modules/fs-minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/fs-minipass/package.json
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.js
+/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.d.mts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.d.mts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.mjs
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.mjs.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.js.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.d.ts
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.d.ts.map
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.js
+/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.js.map
+/.local/node/node_modules/npm/node_modules/glob/LICENSE
+/.local/node/node_modules/npm/node_modules/glob/package.json
+/.local/node/node_modules/npm/node_modules/glob/README.md
+/.local/node/node_modules/npm/node_modules/graceful-fs/clone.js
+/.local/node/node_modules/npm/node_modules/graceful-fs/graceful-fs.js
+/.local/node/node_modules/npm/node_modules/graceful-fs/legacy-streams.js
+/.local/node/node_modules/npm/node_modules/graceful-fs/LICENSE
+/.local/node/node_modules/npm/node_modules/graceful-fs/package.json
+/.local/node/node_modules/npm/node_modules/graceful-fs/polyfills.js
+/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/from-url.js
+/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/hosts.js
+/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/index.js
+/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/parse-url.js
+/.local/node/node_modules/npm/node_modules/hosted-git-info/LICENSE
+/.local/node/node_modules/npm/node_modules/hosted-git-info/package.json
+/.local/node/node_modules/npm/node_modules/http-cache-semantics/index.js
+/.local/node/node_modules/npm/node_modules/http-cache-semantics/LICENSE
+/.local/node/node_modules/npm/node_modules/http-cache-semantics/package.json
+/.local/node/node_modules/npm/node_modules/http-proxy-agent/dist/index.js
+/.local/node/node_modules/npm/node_modules/http-proxy-agent/LICENSE
+/.local/node/node_modules/npm/node_modules/http-proxy-agent/package.json
+/.local/node/node_modules/npm/node_modules/https-proxy-agent/dist/index.js
+/.local/node/node_modules/npm/node_modules/https-proxy-agent/dist/parse-proxy-response.js
+/.local/node/node_modules/npm/node_modules/https-proxy-agent/LICENSE
+/.local/node/node_modules/npm/node_modules/https-proxy-agent/package.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/big5-added.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp936.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp949.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp950.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/eucjp.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/gbk-added.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/shiftjis.json
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-codec.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-data.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/index.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/internal.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-codec.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data-generated.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/utf7.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/utf16.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/utf32.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/lib/bom-handling.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/lib/index.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/lib/streams.js
+/.local/node/node_modules/npm/node_modules/iconv-lite/LICENSE
+/.local/node/node_modules/npm/node_modules/iconv-lite/package.json
+/.local/node/node_modules/npm/node_modules/ignore-walk/lib/index.js
+/.local/node/node_modules/npm/node_modules/ignore-walk/LICENSE
+/.local/node/node_modules/npm/node_modules/ignore-walk/package.json
+/.local/node/node_modules/npm/node_modules/imurmurhash/imurmurhash.js
+/.local/node/node_modules/npm/node_modules/imurmurhash/imurmurhash.min.js
+/.local/node/node_modules/npm/node_modules/imurmurhash/package.json
+/.local/node/node_modules/npm/node_modules/ini/lib/ini.js
+/.local/node/node_modules/npm/node_modules/ini/LICENSE
+/.local/node/node_modules/npm/node_modules/ini/package.json
+/.local/node/node_modules/npm/node_modules/init-package-json/lib/default-input.js
+/.local/node/node_modules/npm/node_modules/init-package-json/lib/init-package-json.js
+/.local/node/node_modules/npm/node_modules/init-package-json/LICENSE.md
+/.local/node/node_modules/npm/node_modules/init-package-json/package.json
+/.local/node/node_modules/npm/node_modules/ip-address/dist/v4/constants.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/v6/constants.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/v6/helpers.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/v6/regular-expressions.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/address-error.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/common.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/ip-address.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/ipv4.js
+/.local/node/node_modules/npm/node_modules/ip-address/dist/ipv6.js
+/.local/node/node_modules/npm/node_modules/ip-address/LICENSE
+/.local/node/node_modules/npm/node_modules/ip-address/package.json
+/.local/node/node_modules/npm/node_modules/ip-regex/index.js
+/.local/node/node_modules/npm/node_modules/ip-regex/license
+/.local/node/node_modules/npm/node_modules/ip-regex/package.json
+/.local/node/node_modules/npm/node_modules/is-cidr/dist/index.js
+/.local/node/node_modules/npm/node_modules/is-cidr/LICENSE
+/.local/node/node_modules/npm/node_modules/is-cidr/package.json
+/.local/node/node_modules/npm/node_modules/is-fullwidth-code-point/index.js
+/.local/node/node_modules/npm/node_modules/is-fullwidth-code-point/license
+/.local/node/node_modules/npm/node_modules/is-fullwidth-code-point/package.json
+/.local/node/node_modules/npm/node_modules/isexe/index.js
+/.local/node/node_modules/npm/node_modules/isexe/LICENSE
+/.local/node/node_modules/npm/node_modules/isexe/mode.js
+/.local/node/node_modules/npm/node_modules/isexe/package.json
+/.local/node/node_modules/npm/node_modules/isexe/windows.js
+/.local/node/node_modules/npm/node_modules/jackspeak/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/jackspeak/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/jackspeak/dist/commonjs/parse-args.js
+/.local/node/node_modules/npm/node_modules/jackspeak/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/jackspeak/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/jackspeak/dist/esm/parse-args.js
+/.local/node/node_modules/npm/node_modules/jackspeak/LICENSE.md
+/.local/node/node_modules/npm/node_modules/jackspeak/package.json
+/.local/node/node_modules/npm/node_modules/jsbn/example.html
+/.local/node/node_modules/npm/node_modules/jsbn/example.js
+/.local/node/node_modules/npm/node_modules/jsbn/index.js
+/.local/node/node_modules/npm/node_modules/jsbn/LICENSE
+/.local/node/node_modules/npm/node_modules/jsbn/package.json
+/.local/node/node_modules/npm/node_modules/json-parse-even-better-errors/lib/index.js
+/.local/node/node_modules/npm/node_modules/json-parse-even-better-errors/LICENSE.md
+/.local/node/node_modules/npm/node_modules/json-parse-even-better-errors/package.json
+/.local/node/node_modules/npm/node_modules/json-stringify-nice/index.js
+/.local/node/node_modules/npm/node_modules/json-stringify-nice/LICENSE
+/.local/node/node_modules/npm/node_modules/json-stringify-nice/package.json
+/.local/node/node_modules/npm/node_modules/jsonparse/examples/twitterfeed.js
+/.local/node/node_modules/npm/node_modules/jsonparse/samplejson/basic.json
+/.local/node/node_modules/npm/node_modules/jsonparse/samplejson/basic2.json
+/.local/node/node_modules/npm/node_modules/jsonparse/bench.js
+/.local/node/node_modules/npm/node_modules/jsonparse/jsonparse.js
+/.local/node/node_modules/npm/node_modules/jsonparse/LICENSE
+/.local/node/node_modules/npm/node_modules/jsonparse/package.json
+/.local/node/node_modules/npm/node_modules/just-diff/index.cjs
+/.local/node/node_modules/npm/node_modules/just-diff/index.mjs
+/.local/node/node_modules/npm/node_modules/just-diff/LICENSE
+/.local/node/node_modules/npm/node_modules/just-diff/package.json
+/.local/node/node_modules/npm/node_modules/just-diff/rollup.config.js
+/.local/node/node_modules/npm/node_modules/just-diff-apply/index.cjs
+/.local/node/node_modules/npm/node_modules/just-diff-apply/index.mjs
+/.local/node/node_modules/npm/node_modules/just-diff-apply/LICENSE
+/.local/node/node_modules/npm/node_modules/just-diff-apply/package.json
+/.local/node/node_modules/npm/node_modules/just-diff-apply/rollup.config.js
+/.local/node/node_modules/npm/node_modules/libnpmaccess/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmaccess/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmaccess/package.json
+/.local/node/node_modules/npm/node_modules/libnpmaccess/README.md
+/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/format-diff.js
+/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/should-print-patch.js
+/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/tarball.js
+/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/untar.js
+/.local/node/node_modules/npm/node_modules/libnpmdiff/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmdiff/package.json
+/.local/node/node_modules/npm/node_modules/libnpmdiff/README.md
+/.local/node/node_modules/npm/node_modules/libnpmexec/lib/file-exists.js
+/.local/node/node_modules/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js
+/.local/node/node_modules/npm/node_modules/libnpmexec/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmexec/lib/is-windows.js
+/.local/node/node_modules/npm/node_modules/libnpmexec/lib/no-tty.js
+/.local/node/node_modules/npm/node_modules/libnpmexec/lib/run-script.js
+/.local/node/node_modules/npm/node_modules/libnpmexec/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmexec/package.json
+/.local/node/node_modules/npm/node_modules/libnpmexec/README.md
+/.local/node/node_modules/npm/node_modules/libnpmfund/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmfund/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmfund/package.json
+/.local/node/node_modules/npm/node_modules/libnpmfund/README.md
+/.local/node/node_modules/npm/node_modules/libnpmhook/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmhook/LICENSE.md
+/.local/node/node_modules/npm/node_modules/libnpmhook/package.json
+/.local/node/node_modules/npm/node_modules/libnpmhook/README.md
+/.local/node/node_modules/npm/node_modules/libnpmorg/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmorg/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmorg/package.json
+/.local/node/node_modules/npm/node_modules/libnpmorg/README.md
+/.local/node/node_modules/npm/node_modules/libnpmpack/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmpack/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmpack/package.json
+/.local/node/node_modules/npm/node_modules/libnpmpack/README.md
+/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/provenance.js
+/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/publish.js
+/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/unpublish.js
+/.local/node/node_modules/npm/node_modules/libnpmpublish/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmpublish/package.json
+/.local/node/node_modules/npm/node_modules/libnpmpublish/README.md
+/.local/node/node_modules/npm/node_modules/libnpmsearch/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmsearch/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmsearch/package.json
+/.local/node/node_modules/npm/node_modules/libnpmsearch/README.md
+/.local/node/node_modules/npm/node_modules/libnpmteam/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmteam/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmteam/package.json
+/.local/node/node_modules/npm/node_modules/libnpmteam/README.md
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/commit.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/enforce-clean.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/index.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/read-json.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/retrieve-tag.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/tag.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/version.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/lib/write-json.js
+/.local/node/node_modules/npm/node_modules/libnpmversion/LICENSE
+/.local/node/node_modules/npm/node_modules/libnpmversion/package.json
+/.local/node/node_modules/npm/node_modules/libnpmversion/README.md
+/.local/node/node_modules/npm/node_modules/lru-cache/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/lru-cache/dist/commonjs/index.min.js
+/.local/node/node_modules/npm/node_modules/lru-cache/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/lru-cache/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/lru-cache/dist/esm/index.min.js
+/.local/node/node_modules/npm/node_modules/lru-cache/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/lru-cache/LICENSE
+/.local/node/node_modules/npm/node_modules/lru-cache/package.json
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/entry.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/errors.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/index.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/key.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/policy.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/fetch.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/index.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/options.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/pipeline.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/remote.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/charset.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/encoding.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/language.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/mediaType.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/HISTORY.md
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/index.js
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/LICENSE
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/package.json
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/LICENSE
+/.local/node/node_modules/npm/node_modules/make-fetch-happen/package.json
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/ast.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/brace-expressions.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/escape.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/unescape.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/assert-valid-pattern.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/ast.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/brace-expressions.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/escape.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/unescape.js
+/.local/node/node_modules/npm/node_modules/minimatch/LICENSE
+/.local/node/node_modules/npm/node_modules/minimatch/package.json
+/.local/node/node_modules/npm/node_modules/minipass/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/minipass/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/minipass/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/minipass/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/minipass-collect/index.js
+/.local/node/node_modules/npm/node_modules/minipass-collect/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-collect/package.json
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/abort-error.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/blob.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/body.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/fetch-error.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/headers.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/index.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/request.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/response.js
+/.local/node/node_modules/npm/node_modules/minipass-fetch/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-fetch/package.json
+/.local/node/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/index.js
+/.local/node/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/minipass-flush/index.js
+/.local/node/node_modules/npm/node_modules/minipass-flush/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-flush/package.json
+/.local/node/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/index.js
+/.local/node/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/minipass-pipeline/index.js
+/.local/node/node_modules/npm/node_modules/minipass-pipeline/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-pipeline/package.json
+/.local/node/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/index.js
+/.local/node/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/minipass-sized/index.js
+/.local/node/node_modules/npm/node_modules/minipass-sized/LICENSE
+/.local/node/node_modules/npm/node_modules/minipass-sized/package.json
+/.local/node/node_modules/npm/node_modules/minizlib/dist/commonjs/constants.js
+/.local/node/node_modules/npm/node_modules/minizlib/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/minizlib/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/minizlib/dist/esm/constants.js
+/.local/node/node_modules/npm/node_modules/minizlib/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/minizlib/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/minizlib/LICENSE
+/.local/node/node_modules/npm/node_modules/minizlib/package.json
+/.local/node/node_modules/npm/node_modules/mkdirp/bin/cmd.js
+/.local/node/node_modules/npm/node_modules/mkdirp/lib/find-made.js
+/.local/node/node_modules/npm/node_modules/mkdirp/lib/mkdirp-manual.js
+/.local/node/node_modules/npm/node_modules/mkdirp/lib/mkdirp-native.js
+/.local/node/node_modules/npm/node_modules/mkdirp/lib/opts-arg.js
+/.local/node/node_modules/npm/node_modules/mkdirp/lib/path-arg.js
+/.local/node/node_modules/npm/node_modules/mkdirp/lib/use-native.js
+/.local/node/node_modules/npm/node_modules/mkdirp/index.js
+/.local/node/node_modules/npm/node_modules/mkdirp/LICENSE
+/.local/node/node_modules/npm/node_modules/mkdirp/package.json
+/.local/node/node_modules/npm/node_modules/mkdirp/readme.markdown
+/.local/node/node_modules/npm/node_modules/ms/index.js
+/.local/node/node_modules/npm/node_modules/ms/license.md
+/.local/node/node_modules/npm/node_modules/ms/package.json
+/.local/node/node_modules/npm/node_modules/mute-stream/lib/index.js
+/.local/node/node_modules/npm/node_modules/mute-stream/LICENSE
+/.local/node/node_modules/npm/node_modules/mute-stream/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/Hacking.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/README.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/Testing.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__init__.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_parser.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_structures.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/markers.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/metadata.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/py.typed
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/requirements.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/tags.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/utils.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/version.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/.release-please-manifest.json
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/gyp
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/gyp.bat
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/LICENSE
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pyproject.toml
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/release-please-config.json
+/.local/node/node_modules/npm/node_modules/node-gyp/gyp/test_gyp.py
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/build.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/clean.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/configure.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/create-config-gypi.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/download.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/find-node-directory.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/find-python.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/Find-VisualStudio.cs
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/find-visualstudio.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/install.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/list.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/log.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/process-release.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/rebuild.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/remove.js
+/.local/node/node_modules/npm/node_modules/node-gyp/lib/util.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/LICENSE.md
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.d.ts
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.js.map
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/LICENSE
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/readme.markdown
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/create.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/cwd-error.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/extract.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/get-write-flag.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/header.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/large-numbers.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/list.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/make-command.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/mkdir.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/mode-fix.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/normalize-unicode.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/normalize-windows-path.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/options.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/pack.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/parse.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/path-reservations.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/pax.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/read-entry.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/replace.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/strip-absolute-path.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/symlink-error.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/types.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/unpack.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/update.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/warn-method.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/winchars.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/write-entry.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/create.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/cwd-error.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/extract.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/get-write-flag.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/header.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/large-numbers.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/list.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/make-command.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/mkdir.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/mode-fix.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/normalize-unicode.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/normalize-windows-path.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/options.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/pack.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/parse.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/path-reservations.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/pax.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/read-entry.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/replace.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/strip-absolute-path.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/strip-trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/symlink-error.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/types.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/unpack.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/update.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/warn-method.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/winchars.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/write-entry.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/LICENSE
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/LICENSE.md
+/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/src/win_delay_load_hook.cc
+/.local/node/node_modules/npm/node_modules/node-gyp/.release-please-manifest.json
+/.local/node/node_modules/npm/node_modules/node-gyp/addon.gypi
+/.local/node/node_modules/npm/node_modules/node-gyp/CHANGELOG.md
+/.local/node/node_modules/npm/node_modules/node-gyp/CODE_OF_CONDUCT.md
+/.local/node/node_modules/npm/node_modules/node-gyp/CONTRIBUTING.md
+/.local/node/node_modules/npm/node_modules/node-gyp/eslint.config.js
+/.local/node/node_modules/npm/node_modules/node-gyp/LICENSE
+/.local/node/node_modules/npm/node_modules/node-gyp/macOS_Catalina_acid_test.sh
+/.local/node/node_modules/npm/node_modules/node-gyp/package.json
+/.local/node/node_modules/npm/node_modules/node-gyp/README.md
+/.local/node/node_modules/npm/node_modules/node-gyp/release-please-config.json
+/.local/node/node_modules/npm/node_modules/node-gyp/SECURITY.md
+/.local/node/node_modules/npm/node_modules/nopt/bin/nopt.js
+/.local/node/node_modules/npm/node_modules/nopt/lib/debug.js
+/.local/node/node_modules/npm/node_modules/nopt/lib/nopt.js
+/.local/node/node_modules/npm/node_modules/nopt/lib/nopt-lib.js
+/.local/node/node_modules/npm/node_modules/nopt/lib/type-defs.js
+/.local/node/node_modules/npm/node_modules/nopt/LICENSE
+/.local/node/node_modules/npm/node_modules/nopt/package.json
+/.local/node/node_modules/npm/node_modules/nopt/README.md
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/extract_description.js
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/fixer.js
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/make_warning.js
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/normalize.js
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/safe_format.js
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/typos.json
+/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/warning_messages.json
+/.local/node/node_modules/npm/node_modules/normalize-package-data/LICENSE
+/.local/node/node_modules/npm/node_modules/normalize-package-data/package.json
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/detail.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/install.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/json.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/quiet.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/colors.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/exit-code.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-audit-report/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-audit-report/package.json
+/.local/node/node_modules/npm/node_modules/npm-bundled/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-bundled/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-bundled/package.json
+/.local/node/node_modules/npm/node_modules/npm-install-checks/lib/current-env.js
+/.local/node/node_modules/npm/node_modules/npm-install-checks/lib/dev-engines.js
+/.local/node/node_modules/npm/node_modules/npm-install-checks/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-install-checks/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-install-checks/package.json
+/.local/node/node_modules/npm/node_modules/npm-normalize-package-bin/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-normalize-package-bin/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-normalize-package-bin/package.json
+/.local/node/node_modules/npm/node_modules/npm-package-arg/lib/npa.js
+/.local/node/node_modules/npm/node_modules/npm-package-arg/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-package-arg/package.json
+/.local/node/node_modules/npm/node_modules/npm-packlist/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-packlist/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-packlist/package.json
+/.local/node/node_modules/npm/node_modules/npm-pick-manifest/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-pick-manifest/LICENSE.md
+/.local/node/node_modules/npm/node_modules/npm-pick-manifest/package.json
+/.local/node/node_modules/npm/node_modules/npm-profile/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-profile/LICENSE.md
+/.local/node/node_modules/npm/node_modules/npm-profile/package.json
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/auth.js
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/check-response.js
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/default-opts.js
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/errors.js
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/json-stream.js
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/LICENSE.md
+/.local/node/node_modules/npm/node_modules/npm-registry-fetch/package.json
+/.local/node/node_modules/npm/node_modules/npm-user-validate/lib/index.js
+/.local/node/node_modules/npm/node_modules/npm-user-validate/LICENSE
+/.local/node/node_modules/npm/node_modules/npm-user-validate/package.json
+/.local/node/node_modules/npm/node_modules/p-map/index.js
+/.local/node/node_modules/npm/node_modules/p-map/license
+/.local/node/node_modules/npm/node_modules/p-map/package.json
+/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/package-json-from-dist/LICENSE.md
+/.local/node/node_modules/npm/node_modules/package-json-from-dist/package.json
+/.local/node/node_modules/npm/node_modules/pacote/bin/index.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/add-git-sha.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/cache-dir.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/is-package-bin.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/npm.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/protected.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/tar-create-options.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/util/trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/dir.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/fetcher.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/file.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/git.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/index.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/registry.js
+/.local/node/node_modules/npm/node_modules/pacote/lib/remote.js
+/.local/node/node_modules/npm/node_modules/pacote/LICENSE
+/.local/node/node_modules/npm/node_modules/pacote/package.json
+/.local/node/node_modules/npm/node_modules/pacote/README.md
+/.local/node/node_modules/npm/node_modules/parse-conflict-json/lib/index.js
+/.local/node/node_modules/npm/node_modules/parse-conflict-json/LICENSE.md
+/.local/node/node_modules/npm/node_modules/parse-conflict-json/package.json
+/.local/node/node_modules/npm/node_modules/path-key/index.js
+/.local/node/node_modules/npm/node_modules/path-key/license
+/.local/node/node_modules/npm/node_modules/path-key/package.json
+/.local/node/node_modules/npm/node_modules/path-scurry/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/path-scurry/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/path-scurry/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/path-scurry/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/path-scurry/LICENSE.md
+/.local/node/node_modules/npm/node_modules/path-scurry/package.json
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/className.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/container.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/id.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/index.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/node.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/root.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/string.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/types.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/getProp.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/index.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/unesc.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/index.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/parser.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/processor.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/sortAscending.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/tokenize.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/API.md
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/LICENSE-MIT
+/.local/node/node_modules/npm/node_modules/postcss-selector-parser/package.json
+/.local/node/node_modules/npm/node_modules/proc-log/lib/index.js
+/.local/node/node_modules/npm/node_modules/proc-log/LICENSE
+/.local/node/node_modules/npm/node_modules/proc-log/package.json
+/.local/node/node_modules/npm/node_modules/proggy/lib/client.js
+/.local/node/node_modules/npm/node_modules/proggy/lib/index.js
+/.local/node/node_modules/npm/node_modules/proggy/lib/tracker.js
+/.local/node/node_modules/npm/node_modules/proggy/LICENSE
+/.local/node/node_modules/npm/node_modules/proggy/package.json
+/.local/node/node_modules/npm/node_modules/promise-all-reject-late/index.js
+/.local/node/node_modules/npm/node_modules/promise-all-reject-late/LICENSE
+/.local/node/node_modules/npm/node_modules/promise-all-reject-late/package.json
+/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/index.js
+/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/esm/index.js
+/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/promise-call-limit/LICENSE
+/.local/node/node_modules/npm/node_modules/promise-call-limit/package.json
+/.local/node/node_modules/npm/node_modules/promise-retry/index.js
+/.local/node/node_modules/npm/node_modules/promise-retry/LICENSE
+/.local/node/node_modules/npm/node_modules/promise-retry/package.json
+/.local/node/node_modules/npm/node_modules/promzard/lib/index.js
+/.local/node/node_modules/npm/node_modules/promzard/LICENSE
+/.local/node/node_modules/npm/node_modules/promzard/package.json
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/bin/qrcode-terminal.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/basic.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/basic.png
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/callback.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/small-qrcode.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/lib/main.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/index.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMath.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMode.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/.travis.yml
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/LICENSE
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/package.json
+/.local/node/node_modules/npm/node_modules/qrcode-terminal/README.md
+/.local/node/node_modules/npm/node_modules/read/dist/commonjs/package.json
+/.local/node/node_modules/npm/node_modules/read/dist/commonjs/read.js
+/.local/node/node_modules/npm/node_modules/read/dist/esm/package.json
+/.local/node/node_modules/npm/node_modules/read/dist/esm/read.js
+/.local/node/node_modules/npm/node_modules/read/LICENSE
+/.local/node/node_modules/npm/node_modules/read/package.json
+/.local/node/node_modules/npm/node_modules/read-cmd-shim/lib/index.js
+/.local/node/node_modules/npm/node_modules/read-cmd-shim/LICENSE
+/.local/node/node_modules/npm/node_modules/read-cmd-shim/package.json
+/.local/node/node_modules/npm/node_modules/read-package-json-fast/lib/index.js
+/.local/node/node_modules/npm/node_modules/read-package-json-fast/LICENSE
+/.local/node/node_modules/npm/node_modules/read-package-json-fast/package.json
+/.local/node/node_modules/npm/node_modules/retry/example/dns.js
+/.local/node/node_modules/npm/node_modules/retry/example/stop.js
+/.local/node/node_modules/npm/node_modules/retry/lib/retry.js
+/.local/node/node_modules/npm/node_modules/retry/lib/retry_operation.js
+/.local/node/node_modules/npm/node_modules/retry/equation.gif
+/.local/node/node_modules/npm/node_modules/retry/index.js
+/.local/node/node_modules/npm/node_modules/retry/License
+/.local/node/node_modules/npm/node_modules/retry/Makefile
+/.local/node/node_modules/npm/node_modules/retry/package.json
+/.local/node/node_modules/npm/node_modules/safer-buffer/dangerous.js
+/.local/node/node_modules/npm/node_modules/safer-buffer/LICENSE
+/.local/node/node_modules/npm/node_modules/safer-buffer/package.json
+/.local/node/node_modules/npm/node_modules/safer-buffer/Porting-Buffer.md
+/.local/node/node_modules/npm/node_modules/safer-buffer/safer.js
+/.local/node/node_modules/npm/node_modules/safer-buffer/tests.js
+/.local/node/node_modules/npm/node_modules/semver/bin/semver.js
+/.local/node/node_modules/npm/node_modules/semver/classes/comparator.js
+/.local/node/node_modules/npm/node_modules/semver/classes/index.js
+/.local/node/node_modules/npm/node_modules/semver/classes/range.js
+/.local/node/node_modules/npm/node_modules/semver/classes/semver.js
+/.local/node/node_modules/npm/node_modules/semver/functions/clean.js
+/.local/node/node_modules/npm/node_modules/semver/functions/cmp.js
+/.local/node/node_modules/npm/node_modules/semver/functions/coerce.js
+/.local/node/node_modules/npm/node_modules/semver/functions/compare.js
+/.local/node/node_modules/npm/node_modules/semver/functions/compare-build.js
+/.local/node/node_modules/npm/node_modules/semver/functions/compare-loose.js
+/.local/node/node_modules/npm/node_modules/semver/functions/diff.js
+/.local/node/node_modules/npm/node_modules/semver/functions/eq.js
+/.local/node/node_modules/npm/node_modules/semver/functions/gt.js
+/.local/node/node_modules/npm/node_modules/semver/functions/gte.js
+/.local/node/node_modules/npm/node_modules/semver/functions/inc.js
+/.local/node/node_modules/npm/node_modules/semver/functions/lt.js
+/.local/node/node_modules/npm/node_modules/semver/functions/lte.js
+/.local/node/node_modules/npm/node_modules/semver/functions/major.js
+/.local/node/node_modules/npm/node_modules/semver/functions/minor.js
+/.local/node/node_modules/npm/node_modules/semver/functions/neq.js
+/.local/node/node_modules/npm/node_modules/semver/functions/parse.js
+/.local/node/node_modules/npm/node_modules/semver/functions/patch.js
+/.local/node/node_modules/npm/node_modules/semver/functions/prerelease.js
+/.local/node/node_modules/npm/node_modules/semver/functions/rcompare.js
+/.local/node/node_modules/npm/node_modules/semver/functions/rsort.js
+/.local/node/node_modules/npm/node_modules/semver/functions/satisfies.js
+/.local/node/node_modules/npm/node_modules/semver/functions/sort.js
+/.local/node/node_modules/npm/node_modules/semver/functions/valid.js
+/.local/node/node_modules/npm/node_modules/semver/internal/constants.js
+/.local/node/node_modules/npm/node_modules/semver/internal/debug.js
+/.local/node/node_modules/npm/node_modules/semver/internal/identifiers.js
+/.local/node/node_modules/npm/node_modules/semver/internal/lrucache.js
+/.local/node/node_modules/npm/node_modules/semver/internal/parse-options.js
+/.local/node/node_modules/npm/node_modules/semver/internal/re.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/gtr.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/intersects.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/ltr.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/max-satisfying.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/min-satisfying.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/min-version.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/outside.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/simplify.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/subset.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/to-comparators.js
+/.local/node/node_modules/npm/node_modules/semver/ranges/valid.js
+/.local/node/node_modules/npm/node_modules/semver/index.js
+/.local/node/node_modules/npm/node_modules/semver/LICENSE
+/.local/node/node_modules/npm/node_modules/semver/package.json
+/.local/node/node_modules/npm/node_modules/semver/preload.js
+/.local/node/node_modules/npm/node_modules/semver/range.bnf
+/.local/node/node_modules/npm/node_modules/semver/README.md
+/.local/node/node_modules/npm/node_modules/shebang-command/index.js
+/.local/node/node_modules/npm/node_modules/shebang-command/license
+/.local/node/node_modules/npm/node_modules/shebang-command/package.json
+/.local/node/node_modules/npm/node_modules/shebang-regex/index.js
+/.local/node/node_modules/npm/node_modules/shebang-regex/license
+/.local/node/node_modules/npm/node_modules/shebang-regex/package.json
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/browser.js
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/index.js
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/package.json
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/signals.js
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/browser.js
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/index.js
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/package.json
+/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/signals.js
+/.local/node/node_modules/npm/node_modules/signal-exit/LICENSE.txt
+/.local/node/node_modules/npm/node_modules/signal-exit/package.json
+/.local/node/node_modules/npm/node_modules/sigstore/dist/config.js
+/.local/node/node_modules/npm/node_modules/sigstore/dist/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/dist/sigstore.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/build.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/bundle.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/error.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/serialized.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/utility.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/validate.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/LICENSE
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/package.json
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/error.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/length.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/obj.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/parse.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/tag.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/error.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/timestamp.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/cert.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/ext.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/sct.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/crypto.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/dsse.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/encoding.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/json.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/oid.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/pem.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/stream.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/LICENSE
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/package.json
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/base.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/bundle.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/dsse.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/message.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/error.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/fetch.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/fulcio.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/rekor.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/tsa.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/identity/ci.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/identity/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/identity/provider.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/fulcio/ca.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/fulcio/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/signer.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/types/fetch.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/util/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/util/oidc.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/util/ua.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tlog/client.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tlog/entry.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tlog/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tsa/client.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tsa/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/witness.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/error.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/LICENSE
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/package.json
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/bundle/dsse.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/bundle/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/bundle/message.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/key/certificate.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/key/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/key/sct.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/checkpoint.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/merkle.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/set.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/tsa.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/dsse.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/intoto.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/trust/filter.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/trust/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/trust/trust.types.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/error.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/index.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/policy.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/shared.types.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/verifier.js
+/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/package.json
+/.local/node/node_modules/npm/node_modules/sigstore/LICENSE
+/.local/node/node_modules/npm/node_modules/sigstore/package.json
+/.local/node/node_modules/npm/node_modules/smart-buffer/docs/ROADMAP.md
+/.local/node/node_modules/npm/node_modules/smart-buffer/LICENSE
+/.local/node/node_modules/npm/node_modules/smart-buffer/package.json
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/javascript/associateExample.md
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/javascript/bindExample.md
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/javascript/connectExample.md
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/typescript/associateExample.md
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/typescript/bindExample.md
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/typescript/connectExample.md
+/.local/node/node_modules/npm/node_modules/socks/docs/examples/index.md
+/.local/node/node_modules/npm/node_modules/socks/docs/index.md
+/.local/node/node_modules/npm/node_modules/socks/docs/migratingFromV1.md
+/.local/node/node_modules/npm/node_modules/socks/LICENSE
+/.local/node/node_modules/npm/node_modules/socks/package.json
+/.local/node/node_modules/npm/node_modules/socks-proxy-agent/dist/index.js
+/.local/node/node_modules/npm/node_modules/socks-proxy-agent/LICENSE
+/.local/node/node_modules/npm/node_modules/socks-proxy-agent/package.json
+/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/AUTHORS
+/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/index.js
+/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/LICENSE
+/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/package.json
+/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/parse.js
+/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/scan.js
+/.local/node/node_modules/npm/node_modules/spdx-correct/index.js
+/.local/node/node_modules/npm/node_modules/spdx-correct/LICENSE
+/.local/node/node_modules/npm/node_modules/spdx-correct/package.json
+/.local/node/node_modules/npm/node_modules/spdx-exceptions/deprecated.json
+/.local/node/node_modules/npm/node_modules/spdx-exceptions/index.json
+/.local/node/node_modules/npm/node_modules/spdx-exceptions/package.json
+/.local/node/node_modules/npm/node_modules/spdx-expression-parse/AUTHORS
+/.local/node/node_modules/npm/node_modules/spdx-expression-parse/index.js
+/.local/node/node_modules/npm/node_modules/spdx-expression-parse/LICENSE
+/.local/node/node_modules/npm/node_modules/spdx-expression-parse/package.json
+/.local/node/node_modules/npm/node_modules/spdx-expression-parse/parse.js
+/.local/node/node_modules/npm/node_modules/spdx-expression-parse/scan.js
+/.local/node/node_modules/npm/node_modules/spdx-license-ids/deprecated.json
+/.local/node/node_modules/npm/node_modules/spdx-license-ids/index.json
+/.local/node/node_modules/npm/node_modules/spdx-license-ids/package.json
+/.local/node/node_modules/npm/node_modules/sprintf-js/demo/angular.html
+/.local/node/node_modules/npm/node_modules/sprintf-js/dist/.gitattributes
+/.local/node/node_modules/npm/node_modules/sprintf-js/dist/angular-sprintf.min.js
+/.local/node/node_modules/npm/node_modules/sprintf-js/dist/sprintf.min.js
+/.local/node/node_modules/npm/node_modules/sprintf-js/src/angular-sprintf.js
+/.local/node/node_modules/npm/node_modules/sprintf-js/src/sprintf.js
+/.local/node/node_modules/npm/node_modules/sprintf-js/bower.json
+/.local/node/node_modules/npm/node_modules/sprintf-js/CONTRIBUTORS.md
+/.local/node/node_modules/npm/node_modules/sprintf-js/gruntfile.js
+/.local/node/node_modules/npm/node_modules/sprintf-js/LICENSE
+/.local/node/node_modules/npm/node_modules/sprintf-js/package.json
+/.local/node/node_modules/npm/node_modules/ssri/lib/index.js
+/.local/node/node_modules/npm/node_modules/ssri/LICENSE.md
+/.local/node/node_modules/npm/node_modules/ssri/package.json
+/.local/node/node_modules/npm/node_modules/string-width/index.js
+/.local/node/node_modules/npm/node_modules/string-width/license
+/.local/node/node_modules/npm/node_modules/string-width/package.json
+/.local/node/node_modules/npm/node_modules/string-width-cjs/index.js
+/.local/node/node_modules/npm/node_modules/string-width-cjs/license
+/.local/node/node_modules/npm/node_modules/string-width-cjs/package.json
+/.local/node/node_modules/npm/node_modules/strip-ansi/index.js
+/.local/node/node_modules/npm/node_modules/strip-ansi/license
+/.local/node/node_modules/npm/node_modules/strip-ansi/package.json
+/.local/node/node_modules/npm/node_modules/strip-ansi-cjs/index.js
+/.local/node/node_modules/npm/node_modules/strip-ansi-cjs/license
+/.local/node/node_modules/npm/node_modules/strip-ansi-cjs/package.json
+/.local/node/node_modules/npm/node_modules/supports-color/browser.js
+/.local/node/node_modules/npm/node_modules/supports-color/index.js
+/.local/node/node_modules/npm/node_modules/supports-color/license
+/.local/node/node_modules/npm/node_modules/supports-color/package.json
+/.local/node/node_modules/npm/node_modules/tar/lib/create.js
+/.local/node/node_modules/npm/node_modules/tar/lib/extract.js
+/.local/node/node_modules/npm/node_modules/tar/lib/get-write-flag.js
+/.local/node/node_modules/npm/node_modules/tar/lib/header.js
+/.local/node/node_modules/npm/node_modules/tar/lib/high-level-opt.js
+/.local/node/node_modules/npm/node_modules/tar/lib/large-numbers.js
+/.local/node/node_modules/npm/node_modules/tar/lib/list.js
+/.local/node/node_modules/npm/node_modules/tar/lib/mkdir.js
+/.local/node/node_modules/npm/node_modules/tar/lib/mode-fix.js
+/.local/node/node_modules/npm/node_modules/tar/lib/normalize-unicode.js
+/.local/node/node_modules/npm/node_modules/tar/lib/normalize-windows-path.js
+/.local/node/node_modules/npm/node_modules/tar/lib/pack.js
+/.local/node/node_modules/npm/node_modules/tar/lib/parse.js
+/.local/node/node_modules/npm/node_modules/tar/lib/path-reservations.js
+/.local/node/node_modules/npm/node_modules/tar/lib/pax.js
+/.local/node/node_modules/npm/node_modules/tar/lib/read-entry.js
+/.local/node/node_modules/npm/node_modules/tar/lib/replace.js
+/.local/node/node_modules/npm/node_modules/tar/lib/strip-absolute-path.js
+/.local/node/node_modules/npm/node_modules/tar/lib/strip-trailing-slashes.js
+/.local/node/node_modules/npm/node_modules/tar/lib/types.js
+/.local/node/node_modules/npm/node_modules/tar/lib/unpack.js
+/.local/node/node_modules/npm/node_modules/tar/lib/update.js
+/.local/node/node_modules/npm/node_modules/tar/lib/warn-mixin.js
+/.local/node/node_modules/npm/node_modules/tar/lib/winchars.js
+/.local/node/node_modules/npm/node_modules/tar/lib/write-entry.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass/index.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/index.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/package.json
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/index.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/index.mjs
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass/index.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass/LICENSE
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass/package.json
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/constants.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/index.js
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/LICENSE
+/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/package.json
+/.local/node/node_modules/npm/node_modules/tar/index.js
+/.local/node/node_modules/npm/node_modules/tar/LICENSE
+/.local/node/node_modules/npm/node_modules/tar/package.json
+/.local/node/node_modules/npm/node_modules/text-table/example/align.js
+/.local/node/node_modules/npm/node_modules/text-table/example/center.js
+/.local/node/node_modules/npm/node_modules/text-table/example/dotalign.js
+/.local/node/node_modules/npm/node_modules/text-table/example/doubledot.js
+/.local/node/node_modules/npm/node_modules/text-table/example/table.js
+/.local/node/node_modules/npm/node_modules/text-table/index.js
+/.local/node/node_modules/npm/node_modules/text-table/LICENSE
+/.local/node/node_modules/npm/node_modules/text-table/package.json
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/lib/factory.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/lib/index.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/src/factory.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/src/index.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/da.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/de.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/en.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/en-short.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/es.js
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/LICENSE.md
+/.local/node/node_modules/npm/node_modules/tiny-relative-date/package.json
+/.local/node/node_modules/npm/node_modules/tinyglobby/dist/index.d.mts
+/.local/node/node_modules/npm/node_modules/tinyglobby/dist/index.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/dist/index.mjs
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/get-array.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/group-files.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/invoke-callback.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/join-path.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-directory.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-file.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/resolve-symlink.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/walk-directory.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/async.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/counter.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/queue.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/sync.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/walker.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/builder/api-builder.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/builder/index.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.cjs
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.d.cts
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.d.mts
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.mjs
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/types.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/utils.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/LICENSE
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/package.json
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/constants.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/parse.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/picomatch.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/scan.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/utils.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/index.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/LICENSE
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/package.json
+/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/posix.js
+/.local/node/node_modules/npm/node_modules/tinyglobby/LICENSE
+/.local/node/node_modules/npm/node_modules/tinyglobby/package.json
+/.local/node/node_modules/npm/node_modules/treeverse/lib/breadth.js
+/.local/node/node_modules/npm/node_modules/treeverse/lib/depth.js
+/.local/node/node_modules/npm/node_modules/treeverse/lib/depth-descent.js
+/.local/node/node_modules/npm/node_modules/treeverse/lib/index.js
+/.local/node/node_modules/npm/node_modules/treeverse/LICENSE
+/.local/node/node_modules/npm/node_modules/treeverse/package.json
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/utils/tmpfile.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/utils/url.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/config.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/error.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/fetcher.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/index.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/store.js
+/.local/node/node_modules/npm/node_modules/tuf-js/dist/updater.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/guard.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/index.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/key.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/oid.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/types.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/verify.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/base.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/delegations.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/error.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/file.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/index.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/key.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/metadata.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/role.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/root.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/signature.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/snapshot.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/targets.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/timestamp.js
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/LICENSE
+/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/package.json
+/.local/node/node_modules/npm/node_modules/tuf-js/LICENSE
+/.local/node/node_modules/npm/node_modules/tuf-js/package.json
+/.local/node/node_modules/npm/node_modules/unique-filename/lib/index.js
+/.local/node/node_modules/npm/node_modules/unique-filename/LICENSE
+/.local/node/node_modules/npm/node_modules/unique-filename/package.json
+/.local/node/node_modules/npm/node_modules/unique-slug/lib/index.js
+/.local/node/node_modules/npm/node_modules/unique-slug/LICENSE
+/.local/node/node_modules/npm/node_modules/unique-slug/package.json
+/.local/node/node_modules/npm/node_modules/util-deprecate/browser.js
+/.local/node/node_modules/npm/node_modules/util-deprecate/History.md
+/.local/node/node_modules/npm/node_modules/util-deprecate/LICENSE
+/.local/node/node_modules/npm/node_modules/util-deprecate/node.js
+/.local/node/node_modules/npm/node_modules/util-deprecate/package.json
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/AUTHORS
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/index.js
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/LICENSE
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/package.json
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/parse.js
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/scan.js
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/index.js
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/LICENSE
+/.local/node/node_modules/npm/node_modules/validate-npm-package-license/package.json
+/.local/node/node_modules/npm/node_modules/validate-npm-package-name/lib/index.js
+/.local/node/node_modules/npm/node_modules/validate-npm-package-name/LICENSE
+/.local/node/node_modules/npm/node_modules/validate-npm-package-name/package.json
+/.local/node/node_modules/npm/node_modules/walk-up-path/dist/cjs/index.js
+/.local/node/node_modules/npm/node_modules/walk-up-path/dist/cjs/package.json
+/.local/node/node_modules/npm/node_modules/walk-up-path/dist/mjs/index.js
+/.local/node/node_modules/npm/node_modules/walk-up-path/dist/mjs/package.json
+/.local/node/node_modules/npm/node_modules/walk-up-path/LICENSE
+/.local/node/node_modules/npm/node_modules/walk-up-path/package.json
+/.local/node/node_modules/npm/node_modules/which/bin/which.js
+/.local/node/node_modules/npm/node_modules/which/lib/index.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/index.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/options.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/package.json
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/posix.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/win32.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/index.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/options.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/package.json
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/posix.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/win32.js
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/LICENSE
+/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/package.json
+/.local/node/node_modules/npm/node_modules/which/LICENSE
+/.local/node/node_modules/npm/node_modules/which/package.json
+/.local/node/node_modules/npm/node_modules/which/README.md
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/license
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/package.json
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
+/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
+/.local/node/node_modules/npm/node_modules/wrap-ansi/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi/license
+/.local/node/node_modules/npm/node_modules/wrap-ansi/package.json
+/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license
+/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json
+/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/index.js
+/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/license
+/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/package.json
+/.local/node/node_modules/npm/node_modules/write-file-atomic/lib/index.js
+/.local/node/node_modules/npm/node_modules/write-file-atomic/LICENSE.md
+/.local/node/node_modules/npm/node_modules/write-file-atomic/package.json
+/.local/node/node_modules/npm/node_modules/yallist/iterator.js
+/.local/node/node_modules/npm/node_modules/yallist/LICENSE
+/.local/node/node_modules/npm/node_modules/yallist/package.json
+/.local/node/node_modules/npm/node_modules/yallist/yallist.js
+/.local/node/node_modules/npm/.npmrc
+/.local/node/node_modules/npm/index.js
+/.local/node/node_modules/npm/LICENSE
+/.local/node/node_modules/npm/package.json
+/.local/node/node_modules/npm/README.md
+/.local/node/CHANGELOG.md
+/.local/node/corepack
+/.local/node/corepack.cmd
+/.local/node/install_tools.bat
+/.local/node/LICENSE
+/.local/node/node.exe
+/.local/node/nodevars.bat
+/.local/node/npm
+/.local/node/npm.cmd
+/.local/node/npm.ps1
+/.local/node/npx
+/.local/node/npx.cmd
+/.local/node/npx.ps1
+/.local/node/README.md
+/.local/node-v22.22.1-win-x64.zip
diff --git a/.local/mqtt-smoke/AwsIotConnectRunner.java b/.local/mqtt-smoke/AwsIotConnectRunner.java
new file mode 100644
index 0000000..c2d78dc
--- /dev/null
+++ b/.local/mqtt-smoke/AwsIotConnectRunner.java
@@ -0,0 +1,81 @@
+import com.zy.integration.iot.client.impl.PahoIotMqttClient;
+import com.zy.integration.iot.handler.IotInboundMessageHandler;
+import com.zy.iot.config.IotProperties;
+import com.zy.iot.entity.IotTopicConfig;
+
+import java.lang.reflect.Field;
+
+/**
+ * 鍙仛 IoT MQTT 寤鸿繛涓庤闃呴獙璇侊紝涓嶄笅鍙戜笟鍔℃秷鎭紝閬垮厤姹℃煋姝e紡 topic銆�
+ * 鏀寔涓ょ璋冪敤鏂瑰紡锛�
+ * 1. 鏄庢枃 TCP锛�<endpoint> <clientId> <egressStow> <egressPick> <egressFeedback>
+ * 2. TLS/mTLS锛�<endpoint> <clientId> <caCert> <clientCert> <clientKey> <egressStow> <egressPick> <egressFeedback>
+ */
+public class AwsIotConnectRunner {
+
+    public static void main(String[] args) throws Exception {
+        if (args.length != 5 && args.length != 8) {
+            System.err.println("Usage plain : <endpoint> <clientId> <egressStow> <egressPick> <egressFeedback>");
+            System.err.println("Usage tls   : <endpoint> <clientId> <caCert> <clientCert> <clientKey> <egressStow> <egressPick> <egressFeedback>");
+            System.exit(2);
+        }
+
+        boolean tlsMode = args.length == 8;
+        IotProperties properties = new IotProperties();
+        properties.setEnabled(true);
+        properties.setEndpoint(args[0]);
+        properties.setPort(tlsMode ? 8883 : 1883);
+        properties.setThingName(args[1]);
+        properties.setClientId(args[1]);
+        properties.setCleanSession(false);
+        properties.setAutomaticReconnect(true);
+        properties.setKeepAliveSeconds(60);
+        properties.setConnectionTimeoutSeconds(10);
+        properties.setPersistenceDir(".local/iot-mqtt-connect-test");
+
+        int topicOffset;
+        if (tlsMode) {
+            properties.setCaCertPath(args[2]);
+            properties.setClientCertPath(args[3]);
+            properties.setPrivateKeyPath(args[4]);
+            topicOffset = 5;
+        } else {
+            topicOffset = 2;
+        }
+
+        IotTopicConfig topics = properties.getTopics();
+        topics.setEgressStow(args[topicOffset]);
+        topics.setEgressPick(args[topicOffset + 1]);
+        topics.setEgressFeedback(args[topicOffset + 2]);
+
+        IotInboundMessageHandler inboundHandler = new IotInboundMessageHandler() {
+            @Override
+            public void handleMessage(String topic, String payload) {
+                System.out.println("received topic=" + topic + ", payloadLength=" + (payload == null ? 0 : payload.length()));
+            }
+        };
+
+        PahoIotMqttClient client = new PahoIotMqttClient();
+        setField(client, "iotProperties", properties);
+        setField(client, "inboundMessageHandler", inboundHandler);
+
+        try {
+            client.ensureConnected();
+            if (!client.isConnected()) {
+                throw new IllegalStateException("MQTT client not connected");
+            }
+            System.out.println("IoT MQTT connect test passed");
+            System.out.println("serverUri=" + properties.getServerUri());
+            System.out.println("clientId=" + properties.getResolvedClientId());
+            Thread.sleep(3000L);
+        } finally {
+            client.destroy();
+        }
+    }
+
+    private static void setField(Object target, String name, Object value) throws Exception {
+        Field field = target.getClass().getDeclaredField(name);
+        field.setAccessible(true);
+        field.set(target, value);
+    }
+}
diff --git a/.local/mqtt-smoke/bin/AwsIotConnectRunner$1.class b/.local/mqtt-smoke/bin/AwsIotConnectRunner$1.class
new file mode 100644
index 0000000..d507b7f
--- /dev/null
+++ b/.local/mqtt-smoke/bin/AwsIotConnectRunner$1.class
Binary files differ
diff --git a/.local/mqtt-smoke/bin/AwsIotConnectRunner.class b/.local/mqtt-smoke/bin/AwsIotConnectRunner.class
new file mode 100644
index 0000000..eff0889
--- /dev/null
+++ b/.local/mqtt-smoke/bin/AwsIotConnectRunner.class
Binary files differ
diff --git a/pom.xml b/pom.xml
index 405cb39..3945d24 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,6 +118,21 @@
             <artifactId>spring-boot-starter-webflux</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.eclipse.paho</groupId>
+            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
+            <version>1.2.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
+            <version>1.70</version>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.70</version>
+        </dependency>
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 11ad45f..b812841 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -464,6 +464,7 @@
             validComb.add(mesToCombParam);
         }
         for (MesToCombParam mesToCombParam : validComb) {
+            mesToCombParam.setBoxType1("ERP");
             openService.mesToComb(mesToCombParam);
         }
         // TODO:寰呮祴璇�
diff --git a/src/main/java/com/zy/asrs/entity/param/MesToCombParam.java b/src/main/java/com/zy/asrs/entity/param/MesToCombParam.java
index fc32ced..41266cb 100644
--- a/src/main/java/com/zy/asrs/entity/param/MesToCombParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/MesToCombParam.java
@@ -31,4 +31,6 @@
     private String bizNo;
     //鏄惁鏁h揣锛�0 闈炴暎璐э紱1 鏁h揣锛涗负浜嗙鎺у嚭璐ч�熺巼锛屾暎璐у彲浠ュ嚭鎱㈢偣銆�
     private Integer package1;
+    //鍏ュ簱閫氱煡鏉ユ簮锛孍RP 榛樿 erp锛孧QTT 缁勬墭浼� aws銆�
+    private String boxType1;
 }
diff --git a/src/main/java/com/zy/asrs/service/ExternalTaskFacadeService.java b/src/main/java/com/zy/asrs/service/ExternalTaskFacadeService.java
new file mode 100644
index 0000000..cd9d2c7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/ExternalTaskFacadeService.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service;
+
+import com.core.common.R;
+import com.zy.asrs.entity.param.MesToCombParam;
+import com.zy.asrs.entity.param.OutTaskParam;
+
+public interface ExternalTaskFacadeService {
+
+    R acceptInboundNotice(MesToCombParam param);
+
+    R createOutboundTask(OutTaskParam param, boolean autoConfirm);
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/ExternalTaskFacadeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ExternalTaskFacadeServiceImpl.java
new file mode 100644
index 0000000..72d96fa
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/ExternalTaskFacadeServiceImpl.java
@@ -0,0 +1,108 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.asrs.entity.param.MesToCombParam;
+import com.zy.asrs.entity.param.OpenOrderPakoutPauseParam;
+import com.zy.asrs.entity.param.OutTaskParam;
+import com.zy.asrs.service.ExternalTaskFacadeService;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.OpenService;
+import com.zy.asrs.service.WaitPakinService;
+import com.zy.asrs.service.WrkDetlService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * 瀵瑰浠诲姟闂ㄩ潰銆�
+ * 鎶� Controller 閲岀殑鏍¢獙鍜屾斁琛岄�昏緫娌夊埌 service锛屼究浜� HTTP 鍜� MQTT 涓ゆ潯鍏ュ彛鍏辩敤銆�
+ */
+@Service
+public class ExternalTaskFacadeServiceImpl implements ExternalTaskFacadeService {
+
+    @Autowired
+    private OpenService openService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+
+    /**
+     * 澶嶇敤鐜版湁鍏ュ簱閫氱煡寤烘。閫昏緫锛屽苟琛ュ厖鎵樼洏閲嶅鏍¢獙銆�
+     */
+    @Override
+    public R acceptInboundNotice(MesToCombParam param) {
+        if (param == null) {
+            return R.error("璇锋眰鍙傛暟涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getPalletId())) {
+            return R.error("palletId涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getBizNo())) {
+            return R.error("bizNo涓嶈兘涓虹┖");
+        }
+
+        int countLoc = locDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.LocDetl>().eq("zpallet", param.getPalletId()));
+        int countWrk = wrkDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.WrkDetl>().eq("zpallet", param.getPalletId()));
+        if (countLoc > 0 || countWrk > 0) {
+            return R.error("鎵樼洏宸插湪搴撳瓨涓�/宸插紑濮嬪叆搴�");
+        }
+
+        if (waitPakinService.selectCount(new EntityWrapper<com.zy.asrs.entity.WaitPakin>()
+                .eq("zpallet", param.getPalletId())
+                .eq("io_status", "N")) > 0) {
+            // 鍚屾墭鐩樺瓨鍦ㄦ棫鐨勫緟鍏ュ簱閫氱煡鏃讹紝鍒犻櫎鏃ц褰曪紝淇濈暀鏈�鏂颁竴娆¢鐧昏銆�
+            waitPakinService.delete(new EntityWrapper<com.zy.asrs.entity.WaitPakin>().eq("zpallet", param.getPalletId()));
+        }
+
+        R result = openService.mesToComb(param);
+        return result == null ? R.ok() : result;
+    }
+
+    /**
+     * 澶嶇敤鐜版湁鍑哄簱寤哄崟閫昏緫锛涘綋 autoConfirm=true 鏃讹紝缁х画璋冪敤鍘熸湁纭鎺ュ彛鑷姩鏀捐銆�
+     */
+    @Override
+    public R createOutboundTask(OutTaskParam param, boolean autoConfirm) {
+        if (param == null) {
+            return R.error("璇锋眰鍙傛暟涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getOrderId())) {
+            return R.error("鍑哄簱鍗曞彿涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getPalletId())) {
+            return R.error("palletId涓嶈兘涓虹┖");
+        }
+        if (Cools.isEmpty(param.getStationId())) {
+            return R.error("stationId涓嶈兘涓虹┖");
+        }
+        int countLoc = locDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.LocDetl>().eq("zpallet", param.getPalletId()));
+        if (countLoc == 0) {
+            return R.error("搴撳瓨涓笉瀛樺湪璇ユ墭鐩�");
+        }
+
+        if (param.getSeq() == null) {
+            param.setSeq(1);
+        }
+
+        R result = openService.outOrder(param, 1);
+        if (!Objects.equals(result.get("code"), 200) || !autoConfirm) {
+            return result;
+        }
+
+        // IoT pick 绾﹀畾涓衡�滄敹鍒板嵆鎵ц鈥濓紝鍥犳杩欓噷鐩存帴澶嶇敤鍘熸湁纭鏀捐鎺ュ彛銆�
+        OpenOrderPakoutPauseParam executeParam = new OpenOrderPakoutPauseParam();
+        executeParam.setOrderId(param.getOrderId());
+        executeParam.setExecute(1);
+        R confirmResult = openService.pakoutOrderPause(executeParam);
+        if (result.get("wrkNo") != null) {
+            confirmResult.add(Cools.add("wrkNo", result.get("wrkNo")));
+        }
+        return confirmResult;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 8d86038..00009af 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1262,7 +1262,12 @@
 
             if (param.getFull() == 1) {
                 //婊℃墭鐩�
-                mat = matService.selectByMatnr("cloudWarehouse");
+                if(param.getBoxType1().equals("aws")){
+                    mat = matService.selectByMatnr("amazon");
+                }else {
+                    mat = matService.selectByMatnr("cloudWarehouse");
+                }
+
             } else if (param.getFull() == 0) {
                 //绌烘墭鐩�
                 mat = matService.selectByMatnr("emptyPallet");
@@ -1287,11 +1292,12 @@
         waitPakin.setManu(String.valueOf(param.getLocId()));//mes鍏蜂綋搴撲綅缂栧彿
         waitPakin.setThreeCode(param.getBizNo());
         waitPakin.setBeBatch(param.getPackage1());//鏄惁鏁h揣锛�0 闈炴暎璐э紱1 鏁h揣锛涗负浜嗙鎺у嚭璐ч�熺巼锛屾暎璐у彲浠ュ嚭鎱㈢偣銆�
-        waitPakin.setBoxType1("erp");
+        // ERP 鍏ュ彛榛樿鎵� erp锛孧QTT 缁勬墭浼氬湪鍙傛暟閲屾樉寮忎紶 aws銆�
+        waitPakin.setBoxType1(Cools.isEmpty(param.getBoxType1()) ? "erp" : param.getBoxType1());
         if (!waitPakinService.insert(waitPakin)) {
             throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
         }
-        return null;
+        return R.ok().add(Cools.add("palletId", param.getPalletId()).add("orderId", param.getOrderId()));
     }
 
     @Override
@@ -1370,7 +1376,8 @@
             log.error(locMast.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
             throw new CoolException(locMast.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
         }
-        return R.ok();
+        return R.ok().add(Cools.add("wrkNo", workNo).add("orderId", param.getOrderId()));
     }
 }
 
+
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index f031611..b80c943 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -10,6 +10,7 @@
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.common.entity.Parameter;
+import com.zy.integration.iot.biz.IotInstructionService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +50,8 @@
     private OrderPakinService orderPakinService;
     @Autowired
     private WorkService workService;
+    @Autowired
+    private IotInstructionService iotInstructionService;
 
     @Value("${erp.switch.ErpReportOld}")
     private boolean erpReportOld;
@@ -456,6 +459,7 @@
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("鏇存柊鍏ュ簱瀹屾垚鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
             }
+            iotInstructionService.queueWorkCompletion(wrkMast);
         } catch (Exception e) {
             log.error("fail", e);
             e.printStackTrace();
@@ -605,6 +609,7 @@
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 return FAIL.setMsg("鏇存柊鍑哄簱瀹屾垚鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
             }
+            iotInstructionService.queueWorkCompletion(wrkMast);
         } catch (Exception e) {
             log.error("fail", e);
             e.printStackTrace();
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 1081c54..8bfd23c 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -338,11 +338,11 @@
             return defaultRowLastno;
         }
         RowLastnoService rowLastnoService = SpringUtils.getBean(RowLastnoService.class);
-        List<RowLastno> typeMatched = rowLastnoService.selectList(new EntityWrapper<RowLastno>()
-                .eq("type_id", area));
-        if (!Cools.isEmpty(typeMatched)) {
-            return typeMatched.get(0);
-        }
+//        List<RowLastno> typeMatched = rowLastnoService.selectList(new EntityWrapper<RowLastno>()
+//                .eq("type_id", area));
+//        if (!Cools.isEmpty(typeMatched)) {
+//            return typeMatched.get(0);
+//        }
         List<RowLastno> whsMatched = rowLastnoService.selectList(new EntityWrapper<RowLastno>()
                 .eq("whs_type", area));
         if (!Cools.isEmpty(whsMatched)) {
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index c42d6f7..f5adbea 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -52,42 +52,47 @@
     private RowLastnoService rowLastnoService;
     @Autowired
     private WorkService workService;
+    @Autowired
+    private StaDescService staDescService;
 
     @PostMapping("/pakin/loc/v1")
     @ResponseBody
     public synchronized R getLocNo(@RequestBody SearchLocParam param) {
+        long startTime = System.currentTimeMillis();
+        String barcode = param == null ? null : param.getBarcode();
+        Integer sourceStaNo = param == null ? null : param.getSourceStaNo();
+        try {
+            if(param.getBarcode().contains("-") || param.getBarcode().contains("gsl")){
+                log.info("鏀跺埌WCS鍏ュ簱鎺ュ彛璇锋眰====>>鍏ュ弬:{}", param);
+            }
+            if (Cools.isEmpty(param.getSourceStaNo())) {
+                return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
+            }
+            List<WaitPakin> waitPakins = null;
 
-        if(param.getBarcode().contains("-") || param.getBarcode().contains("gsl")){
-            log.info("鏀跺埌WCS鍏ュ簱鎺ュ彛璇锋眰====>>鍏ュ弬:{}", param);
-        }
-        if (Cools.isEmpty(param.getSourceStaNo())) {
-            return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
-        }
-        List<WaitPakin> waitPakins = null;
-
-        if (Cools.isEmpty(param.getBarcode())) {
-            return R.error("鏉$爜涓嶈兘涓虹┖");
-        }
-        WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode());
-        if (!Cools.isEmpty(wrkMast1) && wrkMast1.getWrkSts() == 2) {
-            StartupDto dto1 = new StartupDto();
-            dto1.setBarcode(param.getBarcode());
-            dto1.setStaNo(Integer.valueOf(wrkMast1.getStaNo()));
-            String wcsLoc = Utils.WMSLocToWCSLoc(wrkMast1.getLocNo());
-            dto1.setLocNo(wcsLoc);
-            dto1.setCrnNo(wrkMast1.getCrnNo());
-            dto1.setWorkNo(wrkMast1.getWrkNo());
-            dto1.setTaskNo(wrkMast1.getWrkNo() + "");
+            if (Cools.isEmpty(param.getBarcode())) {
+                return R.error("鏉$爜涓嶈兘涓虹┖");
+            }
+            WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode());
+            if (!Cools.isEmpty(wrkMast1) && wrkMast1.getWrkSts() == 2) {
+                StartupDto dto1 = new StartupDto();
+                dto1.setBarcode(param.getBarcode());
+                dto1.setStaNo(Integer.valueOf(wrkMast1.getStaNo()));
+                String wcsLoc = Utils.WMSLocToWCSLoc(wrkMast1.getLocNo());
+                dto1.setLocNo(wcsLoc);
+                dto1.setCrnNo(wrkMast1.getCrnNo());
+                dto1.setWorkNo(wrkMast1.getWrkNo());
+                dto1.setTaskNo(wrkMast1.getWrkNo() + "");
 //            dto1.setTaskPri((int) Math.round(wrkMast1.getIoPri()));
-            return R.ok(dto1);
-        }
+                return R.ok(dto1);
+            }
 //        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 1));
 //        if (!Cools.isEmpty(wrkMasts) && wrkMasts.size() > 10) {
 //            return R.error("闄愯");
 //        }
-        waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
-        if (Cools.isEmpty(waitPakins)) {
-            return R.error("璇峰厛娣诲姞鍏ュ簱閫氱煡妗�");
+            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+            if (Cools.isEmpty(waitPakins)) {
+                return R.error("璇峰厛娣诲姞鍏ュ簱閫氱煡妗�");
 //            WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
 //            if (wrkMast != null && wrkMast.getIoType() == 103) {
 //                return R.parse(CodeRes.PICK_600);
@@ -112,27 +117,30 @@
 //                return R.error("鑷姩鐢熸垚鍏ュ簱閫氱煡妗e悗鏈煡璇㈠埌鏁版嵁");
 //            }
 //            log.info("WCS鍏ュ簱鎺ュ彛鑷姩鐢熸垚鍏ュ簱閫氱煡妗�, zpallet:{}, matnr:{}, anfme:{}", param.getBarcode(), "32149", 1D);
-        }
-        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
-        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
-        if (countLoc > 0 || countWrk > 0) {
-            return R.error(CodeRes.EXIST_500);
-        }
-        if (Cools.isEmpty(param.getLocType1())) {
-            return R.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�");
-        }
+            }
+            int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
+            int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
+            if (countLoc > 0 || countWrk > 0) {
+                return R.error(CodeRes.EXIST_500);
+            }
+            if (Cools.isEmpty(param.getLocType1())) {
+                return R.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�");
+            }
 
-        // 婧愮珯鐐圭姸鎬佹娴�
-        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
-        sourceStaNo.setLocType1(param.getLocType1());
-        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
-        if (waitPakins.get(0).getMatnr().equals("emptyPallet")) {
-            locTypeDto.setLocType2((short) 1);
-        }
+            // 婧愮珯鐐圭姸鎬佹娴�
+            BasDevp sourceStaNoEntity = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
+            sourceStaNoEntity.setLocType1(param.getLocType1());
+            LocTypeDto locTypeDto = new LocTypeDto(sourceStaNoEntity);
+            if (waitPakins.get(0).getMatnr().equals("emptyPallet")) {
+                locTypeDto.setLocType2((short) 1);
+            }
 
-        StartupDto dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
-        log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto, param.getBarcode());
-        return R.ok().add(dto);
+            StartupDto dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
+            log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto, param.getBarcode());
+            return R.ok().add(dto);
+        } finally {
+            log.info("WCS鍏ュ簱鎺ュ彛鎬昏�楁椂:{}ms, sourceStaNo:{}, barcode:{}", System.currentTimeMillis() - startTime, sourceStaNo, barcode);
+        }
     }
 
     @PostMapping("/pakin/agv/loc/v1")
@@ -439,92 +447,141 @@
     public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins) {
         long startTime = System.currentTimeMillis();
         try {
-        // 婧愮珯鐐圭姸鎬佹娴�
-        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
-        // 妫�绱㈠簱浣�
-        List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
-        List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
-        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
+            // 婧愮珯鐐圭姸鎬佹娴�
+            BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
+            // 妫�绱㈠簱浣�
+            List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
+            List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
+            FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
 //        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0));
-        // 婊℃澘鍏ュ簱缁熶竴鎸夊簱浣嶆帓鍙�(row_lastno)鐨� currentRow/crn_qty 杞锛屼笉鍙傝�� WCS 閫忎紶鐨勬帹鑽愭帓銆�
-        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto);
-        int workNo = dto.getWorkNo();
-        Date now = new Date();
-        // 鐢熸垚宸ヤ綔妗�
-        WrkMast wrkMast = new WrkMast();
-        wrkMast.setWrkNo(workNo);
-        wrkMast.setIoTime(new Date());
-        wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
-        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
-        wrkMast.setIoPri(13D); // 浼樺厛绾�
-        wrkMast.setCrnNo(dto.getCrnNo());
-        wrkMast.setSourceStaNo(dto.getSourceStaNo());
-        wrkMast.setStaNo(dto.getStaNo());
-        wrkMast.setLocNo(dto.getLocNo());
-        wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
-        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
-        wrkMast.setPicking("N"); // 鎷f枡
-        wrkMast.setExitMk("N"); // 閫�鍑�
-        wrkMast.setEmptyMk("N"); // 绌烘澘
-        wrkMast.setLinkMis("Y");
-        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
-        // 鎿嶄綔浜哄憳鏁版嵁
-        wrkMast.setAppeTime(now);
-        wrkMast.setModiTime(now);
-        boolean res = wrkMastService.insert(wrkMast);
-        if (!res) {
-            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
-        }
-        // 鐢熸垚宸ヤ綔妗f槑缁�
-        waitPakins.forEach(waitPakin -> {
-            WrkDetl wrkDetl = new WrkDetl();
-            wrkDetl.sync(waitPakin);
-            wrkDetl.setWrkNo(wrkMast.getWrkNo());
-            wrkDetl.setIoTime(wrkMast.getIoTime());
-            wrkDetl.setAppeTime(now);
-            wrkDetl.setModiTime(now);
-            if (!wrkDetlService.insert(wrkDetl)) {
-                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            // IoT 鎸囧畾浜嗙洰鏍囧簱浣嶆椂浼樺厛灏濊瘯璇ュ簱浣嶏紱涓嶅彲鐢ㄦ椂鍐嶉��鍥炵幇鏈夎嚜鍔ㄦ壘浣嶈鍒欍��
+            StartupDto dto = buildPreferredStartupDto(devpNo, extractPreferredInboundLoc(waitPakins));
+            if (dto == null) {
+                dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto);
             }
-        });
-        // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
-        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
-                .eq("zpallet", barcode);
-        WaitPakin setParam = new WaitPakin();
-        setParam.setLocNo(dto.getLocNo());
-        setParam.setIoStatus("Y");
-        setParam.setModiTime(now);
-        if (!waitPakinService.update(setParam, wrapper)) {
-            throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
-        }
+            int workNo = dto.getWorkNo();
+            Date now = new Date();
+            // 鐢熸垚宸ヤ綔妗�
+            WrkMast wrkMast = new WrkMast();
+            wrkMast.setWrkNo(workNo);
+            wrkMast.setIoTime(new Date());
+            wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+            wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+            wrkMast.setIoPri(13D); // 浼樺厛绾�
+            wrkMast.setCrnNo(dto.getCrnNo());
+            wrkMast.setSourceStaNo(dto.getSourceStaNo());
+            wrkMast.setStaNo(dto.getStaNo());
+            wrkMast.setLocNo(dto.getLocNo());
+            wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
+            wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+            wrkMast.setPicking("N"); // 鎷f枡
+            wrkMast.setExitMk("N"); // 閫�鍑�
+            wrkMast.setEmptyMk("N"); // 绌烘澘
+            wrkMast.setLinkMis("Y");
+            // 鎶� referenceId/orderNo 閫忎紶鍒板伐浣滀富妗o紝渚夸簬浣滀笟瀹屾垚鍚庣户缁洖浼犵粰 IoT銆�
+            wrkMast.setUserNo(waitPakins.get(0).getOrderNo());
+            wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+            // 鎿嶄綔浜哄憳鏁版嵁
+            wrkMast.setAppeTime(now);
+            wrkMast.setModiTime(now);
+            boolean res = wrkMastService.insert(wrkMast);
+            if (!res) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+            }
+            // 鐢熸垚宸ヤ綔妗f槑缁�
+            waitPakins.forEach(waitPakin -> {
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.sync(waitPakin);
+                wrkDetl.setWrkNo(wrkMast.getWrkNo());
+                wrkDetl.setIoTime(wrkMast.getIoTime());
+                wrkDetl.setAppeTime(now);
+                wrkDetl.setModiTime(now);
+                if (!wrkDetlService.insert(wrkDetl)) {
+                    throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+                }
+            });
+            // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
+            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
+                    .eq("zpallet", barcode);
+            WaitPakin setParam = new WaitPakin();
+            setParam.setLocNo(dto.getLocNo());
+            setParam.setIoStatus("Y");
+            setParam.setModiTime(now);
+            if (!waitPakinService.update(setParam, wrapper)) {
+                throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
+            }
 //        // 鏇存柊婧愮珯鐐逛俊鎭�
 //        sourceStaNo.setWrkNo(workNo);
 //        sourceStaNo.setModiTime(now);
 //        if (!basDevpService.updateById(sourceStaNo)){
 //            throw new CoolException("鏇存柊婧愮珯澶辫触");
 //        }
-        // 鏇存柊鐩爣搴撲綅鐘舵��
-        LocMast locMast = locMastService.selectById(dto.getLocNo());
-        if (locMast.getLocSts().equals("O")) {
-            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
-            locMast.setModiTime(now);
-            if (!locMastService.updateById(locMast)) {
-                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            // 鏇存柊鐩爣搴撲綅鐘舵��
+            LocMast locMast = locMastService.selectById(dto.getLocNo());
+            if (locMast.getLocSts().equals("O")) {
+                locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+                locMast.setModiTime(now);
+                if (!locMastService.updateById(locMast)) {
+                    throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+                }
+            } else {
+                throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
             }
-        } else {
-            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
-        }
-        String wcsLoc = Utils.WMSLocToWCSLoc(dto.getLocNo());
-        dto.setLocNo(wcsLoc);
-        dto.setTaskNo(workNo + "");
-        return dto;
+            String wcsLoc = Utils.WMSLocToWCSLoc(dto.getLocNo());
+            dto.setLocNo(wcsLoc);
+            dto.setTaskNo(workNo + "");
+            return dto;
         } finally {
             log.info("startupFullPutStore鑰楁椂:{}ms, sourceStaNo:{}, barcode:{}", System.currentTimeMillis() - startTime, devpNo, barcode);
         }
     }
 
+    /**
+     * 鎸囧畾搴撲綅鏆傚瓨鍦ㄥ叆搴撻�氱煡妗� manu 瀛楁锛岀瓑 WCS 鐪熸寤轰换鍔℃椂鍐嶈鍙栥��
+     */
+    private String extractPreferredInboundLoc(List<WaitPakin> waitPakins) {
+        if (Cools.isEmpty(waitPakins)) {
+            return null;
+        }
+        for (WaitPakin waitPakin : waitPakins) {
+            if (!Cools.isEmpty(waitPakin.getManu())) {
+                return waitPakin.getManu();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鎶婅繙绔寚瀹氬簱浣嶈浆鎹㈡垚鍙洿鎺ヤ笅鍙戠粰 WCS 鐨勭洰鏍囩珯鍙板拰浣滀笟鍙傛暟銆�
+     * 濡傛灉搴撲綅宸插崰鐢ㄦ垨瀵瑰簲璁惧涓嶅湪鑷姩妯″紡锛屽垯杩斿洖 null 浜ょ粰鍘熸湁鎵句綅閫昏緫澶勭悊銆�
+     */
+    private StartupDto buildPreferredStartupDto(Integer sourceStaNo, String preferredLocNo) {
+        if (Cools.isEmpty(preferredLocNo)) {
+            return null;
+        }
+        LocMast targetLoc = locMastService.selectById(preferredLocNo);
+        if (targetLoc == null || !"O".equalsIgnoreCase(targetLoc.getLocSts())) {
+            return null;
+        }
+        StaDesc staDesc = staDescService.queryCrnStn(targetLoc.getCrnNo());
+        if (staDesc == null) {
+            return null;
+        }
+        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
+        if (staNo == null || !"Y".equalsIgnoreCase(staNo.getAutoing())) {
+            return null;
+        }
+        StartupDto dto = new StartupDto();
+        dto.setWorkNo(commonService.getWorkNo(0));
+        dto.setCrnNo(targetLoc.getCrnNo());
+        dto.setSourceStaNo(sourceStaNo);
+        dto.setStaNo(staNo.getDevNo());
+        dto.setLocNo(targetLoc.getLocNo());
+        return dto;
+    }
+
     @Transactional
-    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
+public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
diff --git a/src/main/java/com/zy/integration/iot/biz/IotInstructionService.java b/src/main/java/com/zy/integration/iot/biz/IotInstructionService.java
new file mode 100644
index 0000000..7c6e9b8
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/biz/IotInstructionService.java
@@ -0,0 +1,16 @@
+package com.zy.integration.iot.biz;
+
+import com.zy.asrs.entity.WrkMast;
+import com.zy.iot.entity.IotFeedbackMessage;
+import com.zy.iot.entity.IotInstructionMessage;
+
+public interface IotInstructionService {
+
+    Long handleStowInstruction(IotInstructionMessage message, String topic, String rawPayload);
+
+    Long handlePickInstruction(IotInstructionMessage message, String topic, String rawPayload);
+
+    void handleFeedbackAck(IotFeedbackMessage feedbackMessage, String topic, String rawPayload);
+
+    void queueWorkCompletion(WrkMast wrkMast);
+}
diff --git a/src/main/java/com/zy/integration/iot/biz/impl/IotInstructionServiceImpl.java b/src/main/java/com/zy/integration/iot/biz/impl/IotInstructionServiceImpl.java
new file mode 100644
index 0000000..314d3f8
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/biz/impl/IotInstructionServiceImpl.java
@@ -0,0 +1,439 @@
+package com.zy.integration.iot.biz.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.entity.param.MesToCombParam;
+import com.zy.asrs.entity.param.OutTaskParam;
+import com.zy.asrs.service.ExternalTaskFacadeService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkDetlService;
+import com.zy.integration.iot.biz.IotInstructionService;
+import com.zy.iot.config.IotProperties;
+import com.zy.iot.constant.IotConstants;
+import com.zy.iot.entity.IotFeedbackMessage;
+import com.zy.iot.entity.IotInstructionMessage;
+import com.zy.iot.entity.IotPublishRecord;
+import com.zy.iot.service.IotPublishRecordService;
+import com.zy.iot.util.IotInstructionIdGenerator;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * IoT 鎸囦护鏍稿績缂栨帓鏈嶅姟銆�
+ * 璐熻矗鎶� XBPS 涓嬪彂鐨� MQTT 鎸囦护杞崲鎴愮幇鏈� ASRS 鍏ュ簱/鍑哄簱娴佺▼锛屽苟鍦ㄦ湰鍦拌褰曞箓绛夈�佷贡搴忓拰鍥炴墽鐘舵�併��
+ */
+@Slf4j
+@Service
+public class IotInstructionServiceImpl implements IotInstructionService {
+
+    @Autowired
+    private IotPublishRecordService iotPublishRecordService;
+    @Autowired
+    private IotProperties iotProperties;
+    @Autowired
+    private ExternalTaskFacadeService externalTaskFacadeService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+
+    /**
+     * 澶勭悊 egress/asrs/stow 鎸囦护銆�
+     * 鍙帴鍗曞拰棰勭櫥璁帮紝涓嶅湪 MQTT 鍥炶皟閲岀洿鎺ヨЕ鍙戠湡瀹炲叆搴撲綔涓氥��
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long handleStowInstruction(IotInstructionMessage message, String topic, String rawPayload) {
+        if (message == null || Cools.isEmpty(message.getInstructionId())) {
+            log.warn("ignore invalid stow message, payload={}", rawPayload);
+            return null;
+        }
+        IotPublishRecord existing = iotPublishRecordService.findByInstructionId(message.getInstructionId());
+        if (existing != null) {
+            return existing.getId();
+        }
+
+        IotPublishRecord record = initInboundRecord(message, topic, rawPayload, IotConstants.MESSAGE_TYPE_STOW);
+        iotPublishRecordService.insert(record);
+        if (Cools.isEmpty(message.getContainerId())) {
+            return updateAsFailure(record, null, "containerId涓嶈兘涓虹┖");
+        }
+        if (isDelayed(message, IotConstants.MESSAGE_TYPE_STOW)) {
+            return updateAsFailure(record, IotConstants.ERROR_CODE_DELAYED, "寤惰繜娑堟伅宸插拷鐣�");
+        }
+
+        String preferredLocNo = resolvePreferredInboundLoc(message);
+        MesToCombParam param = buildInboundParam(message, preferredLocNo);
+        R result = externalTaskFacadeService.acceptInboundNotice(param);
+        if (result == null || !Objects.equals(result.get("code"), 200)) {
+            return updateAsFailure(record, null, resolveResultMessage(result, "鎺ユ敹鍏ュ簱鎸囦护澶辫触"));
+        }
+
+        Date now = new Date();
+        record.setOrderNo(param.getOrderId());
+        record.setProcessStatus(IotConstants.PROCESS_STATUS_PROCESSED);
+        record.setErrorCode(null);
+        record.setErrorMessage(null);
+        applyFeedback(record, IotConstants.FEEDBACK_SUCCESS, null, null, now);
+        iotPublishRecordService.updateById(record);
+        return record.getId();
+    }
+
+    /**
+     * 澶勭悊 egress/asrs/pick 鎸囦护銆�
+     * 杩滅鍑哄簱鍙d細鍏堟槧灏勬垚鏈湴绔欏彴鍙凤紝鍐嶅鐢ㄧ幇鏈夊嚭搴撳缓鍗曞苟鑷姩纭鏀捐銆�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long handlePickInstruction(IotInstructionMessage message, String topic, String rawPayload) {
+        if (message == null || Cools.isEmpty(message.getInstructionId())) {
+            log.warn("ignore invalid pick message, payload={}", rawPayload);
+            return null;
+        }
+        IotPublishRecord existing = iotPublishRecordService.findByInstructionId(message.getInstructionId());
+        if (existing != null) {
+            return existing.getId();
+        }
+
+        IotPublishRecord record = initInboundRecord(message, topic, rawPayload, IotConstants.MESSAGE_TYPE_PICK);
+        iotPublishRecordService.insert(record);
+        if (Cools.isEmpty(message.getContainerId())) {
+            return updateAsFailure(record, null, "containerId涓嶈兘涓虹┖");
+        }
+        if (isDelayed(message, IotConstants.MESSAGE_TYPE_PICK)) {
+            return updateAsFailure(record, IotConstants.ERROR_CODE_DELAYED, "寤惰繜娑堟伅宸插拷鐣�");
+        }
+
+        String remoteDestination = extractFirstDestination(message.getDestinationLocationIds());
+        Integer stationId = Cools.isEmpty(remoteDestination) ? null : iotProperties.getPickStationMappings().get(remoteDestination);
+        if (stationId == null) {
+            return updateAsFailure(record, IotConstants.ERROR_CODE_STATION_MAPPING, "鏈壘鍒扮洰鏍囧嚭搴撳彛鏄犲皠");
+        }
+
+        OutTaskParam param = new OutTaskParam();
+        param.setPalletId(message.getContainerId());
+        param.setOrderId(resolveReferenceId(message));
+        param.setStationId(String.valueOf(stationId));
+        param.setSeq(1);
+        R result = externalTaskFacadeService.createOutboundTask(param, true);
+        if (result == null || !Objects.equals(result.get("code"), 200)) {
+            return updateAsFailure(record, null, resolveResultMessage(result, "鎺ユ敹鎷h揣鎸囦护澶辫触"));
+        }
+
+        Date now = new Date();
+        record.setOrderNo(param.getOrderId());
+        record.setWrkNo(resolveWrkNo(result));
+        record.setProcessStatus(IotConstants.PROCESS_STATUS_PROCESSED);
+        record.setErrorCode(null);
+        record.setErrorMessage(null);
+        applyFeedback(record, IotConstants.FEEDBACK_SUCCESS, null, null, now);
+        iotPublishRecordService.updateById(record);
+        return record.getId();
+    }
+
+    /**
+     * 澶勭悊 XBPS 瀵� ASRS 鍔ㄤ綔娑堟伅鐨� feedback 鍥炴墽銆�
+     * 杩欓噷鍙洖鍐� IoT 鍙戝竷鐘舵�侊紝涓嶆敼搴撳瓨鍜屽伐浣滄。銆�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void handleFeedbackAck(IotFeedbackMessage feedbackMessage, String topic, String rawPayload) {
+        if (feedbackMessage == null || Cools.isEmpty(feedbackMessage.getInstructionId())) {
+            return;
+        }
+        IotPublishRecord record = iotPublishRecordService.findByInstructionId(feedbackMessage.getInstructionId());
+        if (record == null || !IotConstants.DIRECTION_OUTBOUND.equals(record.getDirection())) {
+            log.warn("ignore iot ack without outbound record, instructionId={}", feedbackMessage.getInstructionId());
+            return;
+        }
+        Date now = new Date();
+        record.setAckPayload(rawPayload);
+        record.setAckTime(now);
+        record.setReceiveTopic(topic);
+        record.setPublishStatus(IotConstants.FEEDBACK_SUCCESS.equalsIgnoreCase(feedbackMessage.getStatus())
+                ? IotConstants.PUBLISH_STATUS_ACK_SUCCESS
+                : IotConstants.PUBLISH_STATUS_ACK_FAILURE);
+        record.setErrorCode(feedbackMessage.getErrorCode());
+        record.setErrorMessage(truncate(feedbackMessage.getMessage(), 500));
+        record.setUpdateTime(now);
+        iotPublishRecordService.updateById(record);
+    }
+
+    /**
+     * 鍦ㄥ伐浣滄。鐪熸瀹屾垚鍚庤惤涓�鏉″緟鍙戝竷璁板綍銆�
+     * 浜嬪姟鍐呭彧鍐欏簱锛屼笉鐩存帴鍙� MQTT锛岄伩鍏嶄笟鍔℃彁浜ゅ拰缃戠粶鍙戦�佽�﹀悎銆�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void queueWorkCompletion(WrkMast wrkMast) {
+        if (!iotProperties.isEnabled() || wrkMast == null || wrkMast.getWrkNo() == null) {
+            return;
+        }
+        IotPublishRecord existed = iotPublishRecordService.selectOne(new EntityWrapper<IotPublishRecord>()
+                .eq("direction", IotConstants.DIRECTION_OUTBOUND)
+                .eq("wrk_no", wrkMast.getWrkNo()));
+        if (existed != null) {
+            return;
+        }
+        IotPublishRecord record = buildOutboundRecord(wrkMast);
+        if (record != null) {
+            iotPublishRecordService.insert(record);
+        }
+    }
+
+    private IotPublishRecord initInboundRecord(IotInstructionMessage message, String topic, String rawPayload, String messageType) {
+        Date now = new Date();
+        IotPublishRecord record = new IotPublishRecord();
+        record.setInstructionId(message.getInstructionId());
+        record.setDirection(IotConstants.DIRECTION_INBOUND);
+        record.setMessageType(messageType);
+        record.setReceiveTopic(topic);
+        record.setContainerId(message.getContainerId());
+        record.setReferenceId(message.getReferenceId());
+        record.setSourceLocationId(message.getSourceLocationId());
+        record.setDestinationLocationIds(normalizeDestinations(message.getDestinationLocationIds()));
+        record.setMessageCreationTime(resolveCreationTime(message.getCreationTime()));
+        record.setRawPayload(rawPayload);
+        record.setProcessStatus(IotConstants.PROCESS_STATUS_RECEIVED);
+        record.setPublishStatus(IotConstants.PUBLISH_STATUS_NOT_REQUIRED);
+        record.setCreateTime(now);
+        record.setUpdateTime(now);
+        return record;
+    }
+
+    private boolean isDelayed(IotInstructionMessage message, String messageType) {
+        Long creationTime = resolveCreationTime(message.getCreationTime());
+        IotPublishRecord latest = iotPublishRecordService.findLatestInboundInstruction(message.getContainerId(), messageType);
+        return latest != null && latest.getMessageCreationTime() != null && latest.getMessageCreationTime() > creationTime;
+    }
+
+    /**
+     * IoT 鏂囨。鏈彁渚涚墿鏂欏拰鏁伴噺鏄庣粏锛岃繖閲屾部鐢ㄧ幇鏈夋弧鎵樺叆搴撻�氱煡鐨勫厹搴曠害瀹氥��
+     */
+    private MesToCombParam buildInboundParam(IotInstructionMessage message, String preferredLocNo) {
+        MesToCombParam param = new MesToCombParam();
+        param.setPalletId(message.getContainerId());
+        param.setOrderId("");
+        param.setBizNo(message.getInstructionId());
+        param.setAnfme(1D);
+        param.setFull(1);
+        param.setLocId(preferredLocNo);
+        param.setBoxType1("aws");
+        return param;
+    }
+
+    /**
+     * 浠呭綋鎸囧畾搴撲綅褰撳墠浠嶄负绌轰綅鏃舵墠寮哄埗浼樺厛浣跨敤锛屽惁鍒欏洖閫�鍒板師鏈夎嚜鍔ㄦ壘浣嶃��
+     */
+    private String resolvePreferredInboundLoc(IotInstructionMessage message) {
+        String preferredLoc = extractFirstDestination(message.getDestinationLocationIds());
+        if (Cools.isEmpty(preferredLoc)) {
+            return null;
+        }
+        LocMast locMast = locMastService.selectById(preferredLoc);
+        if (locMast != null && "O".equalsIgnoreCase(locMast.getLocSts())) {
+            return locMast.getLocNo();
+        }
+        return null;
+    }
+
+    private String resolveReferenceId(IotInstructionMessage message) {
+        return Cools.isEmpty(message.getReferenceId()) ? message.getInstructionId() : message.getReferenceId();
+    }
+
+    private Long updateAsFailure(IotPublishRecord record, String errorCode, String errorMessage) {
+        Date now = new Date();
+        record.setProcessStatus(IotConstants.PROCESS_STATUS_FAILED);
+        record.setOrderNo(Cools.isEmpty(record.getOrderNo()) ? record.getReferenceId() : record.getOrderNo());
+        record.setErrorCode(errorCode);
+        record.setErrorMessage(truncate(errorMessage, 500));
+        applyFeedback(record, IotConstants.FEEDBACK_FAILURE, errorCode, errorMessage, now);
+        iotPublishRecordService.updateById(record);
+        return record.getId();
+    }
+
+    private void applyFeedback(IotPublishRecord record, String status, String errorCode, String errorMessage, Date now) {
+        IotFeedbackMessage feedbackMessage = new IotFeedbackMessage();
+        feedbackMessage.setInstructionId(record.getInstructionId());
+        feedbackMessage.setStatus(status);
+        feedbackMessage.setErrorCode(errorCode);
+        feedbackMessage.setMessage(errorMessage);
+        feedbackMessage.setCreationTime(System.currentTimeMillis());
+
+        record.setFeedbackStatus(status);
+        record.setPublishTopic(iotProperties.getTopics().getIngressFeedback());
+        record.setPublishPayload(JSON.toJSONString(feedbackMessage));
+        record.setPublishStatus(IotConstants.PUBLISH_STATUS_PENDING);
+        record.setUpdateTime(now);
+    }
+
+    private String resolveResultMessage(R result, String defaultMessage) {
+        if (result == null) {
+            return defaultMessage;
+        }
+        Object msg = result.get("msg");
+        return msg == null ? defaultMessage : String.valueOf(msg);
+    }
+
+    private Integer resolveWrkNo(R result) {
+        if (result == null) {
+            return null;
+        }
+        Object wrkNo = result.get("wrkNo");
+        if (wrkNo instanceof Number) {
+            return ((Number) wrkNo).intValue();
+        }
+        if (wrkNo instanceof String && !Cools.isEmpty(String.valueOf(wrkNo))) {
+            return Integer.valueOf(String.valueOf(wrkNo));
+        }
+        return null;
+    }
+
+    private IotPublishRecord buildOutboundRecord(WrkMast wrkMast) {
+        Integer ioType = wrkMast.getIoType();
+        if (ioType == null) {
+            return null;
+        }
+        String containerId = resolveContainerId(wrkMast);
+        if (Cools.isEmpty(containerId)) {
+            return null;
+        }
+        if (Arrays.asList(1, 8, 11, 53, 54, 57).contains(ioType)) {
+            return buildStowOutboundRecord(wrkMast, containerId);
+        }
+        if (Arrays.asList(101, 108).contains(ioType)) {
+            return buildPickOutboundRecord(wrkMast, containerId);
+        }
+        return null;
+    }
+
+    private IotPublishRecord buildStowOutboundRecord(WrkMast wrkMast, String containerId) {
+        List<String> destinationLocationIds = wrkMast.getLocNo() == null
+                ? Collections.<String>emptyList()
+                : Collections.singletonList(wrkMast.getLocNo());
+        if (destinationLocationIds.isEmpty()) {
+            return null;
+        }
+        IotInstructionMessage payload = new IotInstructionMessage();
+        payload.setInstructionId(IotInstructionIdGenerator.generate(String.valueOf(wrkMast.getWrkNo())));
+        payload.setContainerId(containerId);
+        if (Objects.equals(wrkMast.getIoType(), 11)) {
+            payload.setSourceLocationId(wrkMast.getSourceLocNo());
+        }
+        payload.setDestinationLocationIds(destinationLocationIds);
+        if (!Cools.isEmpty(wrkMast.getUserNo())) {
+            payload.setReferenceId(wrkMast.getUserNo());
+        }
+        payload.setCreationTime(System.currentTimeMillis());
+        return initOutboundRecord(wrkMast, IotConstants.MESSAGE_TYPE_STOW, iotProperties.getTopics().getIngressStow(), payload);
+    }
+
+    private IotPublishRecord buildPickOutboundRecord(WrkMast wrkMast, String containerId) {
+        IotInstructionMessage payload = new IotInstructionMessage();
+        payload.setInstructionId(IotInstructionIdGenerator.generate(String.valueOf(wrkMast.getWrkNo())));
+        payload.setContainerId(containerId);
+        payload.setSourceLocationId(wrkMast.getSourceLocNo());
+        payload.setDestinationLocationIds(Collections.singletonList(resolveRemoteStationId(wrkMast.getStaNo())));
+        if (!Cools.isEmpty(wrkMast.getUserNo())) {
+            payload.setReferenceId(wrkMast.getUserNo());
+        }
+        payload.setCreationTime(System.currentTimeMillis());
+        return initOutboundRecord(wrkMast, IotConstants.MESSAGE_TYPE_PICK, iotProperties.getTopics().getIngressPick(), payload);
+    }
+
+    private IotPublishRecord initOutboundRecord(WrkMast wrkMast, String messageType, String publishTopic, IotInstructionMessage payload) {
+        Date now = new Date();
+        IotPublishRecord record = new IotPublishRecord();
+        record.setInstructionId(payload.getInstructionId());
+        record.setDirection(IotConstants.DIRECTION_OUTBOUND);
+        record.setMessageType(messageType);
+        record.setPublishTopic(publishTopic);
+        record.setContainerId(payload.getContainerId());
+        record.setReferenceId(payload.getReferenceId());
+        record.setSourceLocationId(payload.getSourceLocationId());
+        record.setDestinationLocationIds(normalizeDestinations(payload.getDestinationLocationIds()));
+        record.setMessageCreationTime(payload.getCreationTime());
+        record.setPublishPayload(JSON.toJSONString(payload));
+        record.setRawPayload(record.getPublishPayload());
+        record.setProcessStatus(IotConstants.PROCESS_STATUS_PENDING);
+        record.setPublishStatus(IotConstants.PUBLISH_STATUS_PENDING);
+        record.setWrkNo(wrkMast.getWrkNo());
+        record.setOrderNo(wrkMast.getUserNo());
+        record.setCreateTime(now);
+        record.setUpdateTime(now);
+        return record;
+    }
+
+    private String resolveContainerId(WrkMast wrkMast) {
+        if (!Cools.isEmpty(wrkMast.getBarcode())) {
+            return wrkMast.getBarcode();
+        }
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+        if (Cools.isEmpty(wrkDetls)) {
+            return null;
+        }
+        for (WrkDetl wrkDetl : wrkDetls) {
+            if (!Cools.isEmpty(wrkDetl.getZpallet())) {
+                return wrkDetl.getZpallet();
+            }
+        }
+        return null;
+    }
+
+    private String resolveRemoteStationId(Integer staNo) {
+        if (staNo == null) {
+            return null;
+        }
+        for (Map.Entry<String, Integer> entry : iotProperties.getPickStationMappings().entrySet()) {
+            if (Objects.equals(entry.getValue(), staNo)) {
+                return entry.getKey();
+            }
+        }
+        return String.valueOf(staNo);
+    }
+
+    private String extractFirstDestination(List<String> destinationLocationIds) {
+        if (Cools.isEmpty(destinationLocationIds)) {
+            return null;
+        }
+        for (String destinationLocationId : destinationLocationIds) {
+            if (!Cools.isEmpty(destinationLocationId)) {
+                return destinationLocationId;
+            }
+        }
+        return null;
+    }
+
+    private Long resolveCreationTime(Long creationTime) {
+        return creationTime == null ? System.currentTimeMillis() : creationTime;
+    }
+
+    private String normalizeDestinations(List<String> destinationLocationIds) {
+        if (Cools.isEmpty(destinationLocationIds)) {
+            return null;
+        }
+        return JSON.toJSONString(new ArrayList<String>(destinationLocationIds));
+    }
+
+    private String truncate(String message, int maxLength) {
+        if (message == null || message.length() <= maxLength) {
+            return message;
+        }
+        return message.substring(0, maxLength);
+    }
+}
diff --git a/src/main/java/com/zy/integration/iot/client/IotMqttClient.java b/src/main/java/com/zy/integration/iot/client/IotMqttClient.java
new file mode 100644
index 0000000..1904797
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/client/IotMqttClient.java
@@ -0,0 +1,10 @@
+package com.zy.integration.iot.client;
+
+public interface IotMqttClient {
+
+    void ensureConnected() throws Exception;
+
+    void publish(String topic, String payload) throws Exception;
+
+    boolean isConnected();
+}
diff --git a/src/main/java/com/zy/integration/iot/client/impl/PahoIotMqttClient.java b/src/main/java/com/zy/integration/iot/client/impl/PahoIotMqttClient.java
new file mode 100644
index 0000000..231666b
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/client/impl/PahoIotMqttClient.java
@@ -0,0 +1,205 @@
+package com.zy.integration.iot.client.impl;
+
+import com.core.common.Cools;
+import com.zy.integration.iot.client.IotMqttClient;
+import com.zy.integration.iot.handler.IotInboundMessageHandler;
+import com.zy.integration.iot.util.IotMqttSslUtils;
+import com.zy.iot.config.IotProperties;
+import com.zy.iot.entity.IotTopicConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * IoT MQTT 瀹㈡埛绔��
+ * 鍏煎 AWS IoT 鐨� mTLS 妯″紡锛屼篃鍏煎灞�鍩熺綉妯℃嫙 broker 鐨勬槑鏂� TCP 妯″紡銆�
+ */
+@Slf4j
+@Service
+public class PahoIotMqttClient implements IotMqttClient {
+
+    @Autowired
+    private IotProperties iotProperties;
+    @Autowired
+    private IotInboundMessageHandler inboundMessageHandler;
+
+    private volatile MqttClient mqttClient;
+
+    @PostConstruct
+    public void init() {
+        if (!iotProperties.isEnabled()) {
+            return;
+        }
+        try {
+            ensureConnected();
+        } catch (Exception e) {
+            log.error("initial connect to iot mqtt failed", e);
+        }
+    }
+
+    @PreDestroy
+    public void destroy() {
+        if (mqttClient == null) {
+            return;
+        }
+        try {
+            if (mqttClient.isConnected()) {
+                mqttClient.disconnect();
+            }
+            mqttClient.close();
+        } catch (Exception e) {
+            log.warn("close iot mqtt client failed", e);
+        }
+    }
+
+    /**
+     * 鎳掑姞杞藉缓杩烇紝棣栨鍙戦�佹垨鍚姩鏃惰嚜鍔ㄨ繛鎺ュ苟琛ヨ闃呬富棰樸��
+     */
+    @Override
+    public synchronized void ensureConnected() throws Exception {
+        if (!iotProperties.isEnabled()) {
+            return;
+        }
+        if (!hasRequiredConfig()) {
+            log.warn("iot config incomplete, mqtt client will not connect");
+            return;
+        }
+        if (mqttClient == null) {
+            mqttClient = createClient();
+        }
+        if (mqttClient.isConnected()) {
+            return;
+        }
+        mqttClient.connect(buildOptions());
+        subscribeTopics();
+    }
+
+    /**
+     * 缁熶竴鎸� QoS1 鍙戝竷锛屽吋椤惧彲闈犳�у拰瀹炵幇澶嶆潅搴︺��
+     */
+    @Override
+    public void publish(String topic, String payload) throws Exception {
+        if (!iotProperties.isEnabled() || Cools.isEmpty(topic) || payload == null) {
+            return;
+        }
+        ensureConnected();
+        if (mqttClient == null || !mqttClient.isConnected()) {
+            throw new MqttException(MqttException.REASON_CODE_CLIENT_NOT_CONNECTED);
+        }
+        MqttMessage mqttMessage = new MqttMessage(payload.getBytes(StandardCharsets.UTF_8));
+        mqttMessage.setQos(1);
+        mqttMessage.setRetained(false);
+        mqttClient.publish(topic, mqttMessage);
+    }
+
+    @Override
+    public boolean isConnected() {
+        return mqttClient != null && mqttClient.isConnected();
+    }
+
+    private boolean hasRequiredConfig() {
+        if (Cools.isEmpty(iotProperties.getServerUri()) || Cools.isEmpty(iotProperties.getResolvedClientId())) {
+            return false;
+        }
+        if (!iotProperties.isTlsEnabled()) {
+            return true;
+        }
+        return !Cools.isEmpty(iotProperties.getCaCertPath())
+                && !Cools.isEmpty(iotProperties.getClientCertPath())
+                && !Cools.isEmpty(iotProperties.getPrivateKeyPath());
+    }
+
+    private MqttClient createClient() throws Exception {
+        MqttClient client = new MqttClient(
+                iotProperties.getServerUri(),
+                iotProperties.getResolvedClientId(),
+                new MqttDefaultFilePersistence(resolvePersistenceDir())
+        );
+        client.setCallback(new MqttCallbackExtended() {
+            @Override
+            public void connectionLost(Throwable cause) {
+                log.warn("iot mqtt connection lost", cause);
+            }
+
+            @Override
+            public void messageArrived(String topic, MqttMessage message) {
+                inboundMessageHandler.handleMessage(topic, new String(message.getPayload(), StandardCharsets.UTF_8));
+            }
+
+            @Override
+            public void deliveryComplete(IMqttDeliveryToken token) {
+            }
+
+            @Override
+            public void connectComplete(boolean reconnect, String serverURI) {
+                try {
+                    subscribeTopics();
+                    log.info("iot mqtt connected, reconnect={}, serverURI={}", reconnect, serverURI);
+                } catch (Exception e) {
+                    log.error("subscribe iot topics failed", e);
+                }
+            }
+        });
+        return client;
+    }
+
+    private MqttConnectOptions buildOptions() throws Exception {
+        MqttConnectOptions options = new MqttConnectOptions();
+        options.setAutomaticReconnect(iotProperties.isAutomaticReconnect());
+        options.setCleanSession(iotProperties.isCleanSession());
+        options.setKeepAliveInterval(iotProperties.getKeepAliveSeconds());
+        options.setConnectionTimeout(iotProperties.getConnectionTimeoutSeconds());
+        if (iotProperties.isTlsEnabled()) {
+            options.setSocketFactory(IotMqttSslUtils.buildSocketFactory(
+                    iotProperties.getCaCertPath(),
+                    iotProperties.getClientCertPath(),
+                    iotProperties.getPrivateKeyPath()
+            ));
+        }
+        return options;
+    }
+
+    /**
+     * 鍙闃� XBPS 涓嬪彂鐨� stow/pick 鎸囦护鍜屽閮� feedback 鍥炴墽銆�
+     */
+    private synchronized void subscribeTopics() throws Exception {
+        if (mqttClient == null || !mqttClient.isConnected()) {
+            return;
+        }
+        IotTopicConfig topics = iotProperties.getTopics();
+        subscribe(topics.getEgressStow());
+        subscribe(topics.getEgressPick());
+        subscribe(topics.getEgressFeedback());
+    }
+
+    private void subscribe(String topic) throws Exception {
+        if (Cools.isEmpty(topic)) {
+            return;
+        }
+        mqttClient.subscribe(topic, 1);
+    }
+
+    private String resolvePersistenceDir() {
+        String configured = iotProperties.getPersistenceDir();
+        String dir = Cools.isEmpty(configured)
+                ? System.getProperty("java.io.tmpdir") + File.separator + "asrs-iot-mqtt"
+                : configured;
+        File file = new File(dir);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        return file.getAbsolutePath();
+    }
+}
diff --git a/src/main/java/com/zy/integration/iot/handler/IotInboundMessageHandler.java b/src/main/java/com/zy/integration/iot/handler/IotInboundMessageHandler.java
new file mode 100644
index 0000000..abaffe8
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/handler/IotInboundMessageHandler.java
@@ -0,0 +1,6 @@
+package com.zy.integration.iot.handler;
+
+public interface IotInboundMessageHandler {
+
+    void handleMessage(String topic, String payload);
+}
diff --git a/src/main/java/com/zy/integration/iot/handler/impl/IotInboundMessageHandlerImpl.java b/src/main/java/com/zy/integration/iot/handler/impl/IotInboundMessageHandlerImpl.java
new file mode 100644
index 0000000..1d21e4b
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/handler/impl/IotInboundMessageHandlerImpl.java
@@ -0,0 +1,57 @@
+package com.zy.integration.iot.handler.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
+import com.zy.integration.iot.biz.IotInstructionService;
+import com.zy.integration.iot.handler.IotInboundMessageHandler;
+import com.zy.integration.iot.publish.IotPublishService;
+import com.zy.iot.config.IotProperties;
+import com.zy.iot.entity.IotFeedbackMessage;
+import com.zy.iot.entity.IotInstructionMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * MQTT 鍏ョ珯鍒嗗彂鍣ㄣ��
+ * 鎸� topic 璇嗗埆 stow/pick/feedback锛屽苟鍦ㄦ帴鍗曞悗绔嬪嵆灏濊瘯鍥炲彂 feedback銆�
+ */
+@Slf4j
+@Service
+public class IotInboundMessageHandlerImpl implements IotInboundMessageHandler {
+
+    @Autowired
+    private IotProperties iotProperties;
+    @Autowired
+    private IotInstructionService iotInstructionService;
+    @Autowired
+    private IotPublishService iotPublishService;
+
+    /**
+     * MQTT 鍥炶皟灞傚彧鍋� topic 鍒嗗彂鍜屾姤鏂囧弽搴忓垪鍖栵紝涓氬姟鍔ㄤ綔浠嶄笅娌夊埌 service銆�
+     */
+    @Override
+    public void handleMessage(String topic, String payload) {
+        if (!iotProperties.isEnabled() || Cools.isEmpty(topic) || payload == null) {
+            return;
+        }
+        try {
+            Long recordId = null;
+            if (topic.equals(iotProperties.getTopics().getEgressStow())) {
+                recordId = iotInstructionService.handleStowInstruction(JSON.parseObject(payload, IotInstructionMessage.class), topic, payload);
+            } else if (topic.equals(iotProperties.getTopics().getEgressPick())) {
+                recordId = iotInstructionService.handlePickInstruction(JSON.parseObject(payload, IotInstructionMessage.class), topic, payload);
+            } else if (topic.equals(iotProperties.getTopics().getEgressFeedback())) {
+                iotInstructionService.handleFeedbackAck(JSON.parseObject(payload, IotFeedbackMessage.class), topic, payload);
+            } else {
+                log.warn("ignore unknown iot topic={}, payload={}", topic, payload);
+            }
+            if (recordId != null) {
+                // feedback 鍏堝啓鏈湴璁板綍锛屽啀绔嬪嵆灏濊瘯鍙戦�侊紱浼犺緭澶辫触鐢卞畾鏃朵换鍔¤ˉ鍋裤��
+                iotPublishService.publishRecordNow(recordId);
+            }
+        } catch (Exception e) {
+            log.error("handle iot inbound message failed, topic={}, payload={}", topic, payload, e);
+        }
+    }
+}
diff --git a/src/main/java/com/zy/integration/iot/publish/IotPublishService.java b/src/main/java/com/zy/integration/iot/publish/IotPublishService.java
new file mode 100644
index 0000000..1f0b743
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/publish/IotPublishService.java
@@ -0,0 +1,6 @@
+package com.zy.integration.iot.publish;
+
+public interface IotPublishService {
+
+    void publishRecordNow(Long recordId);
+}
diff --git a/src/main/java/com/zy/integration/iot/publish/impl/IotPublishServiceImpl.java b/src/main/java/com/zy/integration/iot/publish/impl/IotPublishServiceImpl.java
new file mode 100644
index 0000000..092ecde
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/publish/impl/IotPublishServiceImpl.java
@@ -0,0 +1,61 @@
+package com.zy.integration.iot.publish.impl;
+
+import com.core.common.Cools;
+import com.zy.integration.iot.client.IotMqttClient;
+import com.zy.integration.iot.publish.IotPublishService;
+import com.zy.iot.constant.IotConstants;
+import com.zy.iot.entity.IotPublishRecord;
+import com.zy.iot.service.IotPublishRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * IoT 缁熶竴鍙戝竷鍣ㄣ��
+ * 杩欓噷鍙鐞� MQTT 浼犺緭缁撴灉锛屼笟鍔℃垚鍔熶笌鍚︾敱鎸囦护澶勭悊闃舵鍐冲畾銆�
+ */
+@Slf4j
+@Service
+public class IotPublishServiceImpl implements IotPublishService {
+
+    @Autowired
+    private IotPublishRecordService iotPublishRecordService;
+    @Autowired
+    private IotMqttClient iotMqttClient;
+
+    /**
+     * 绔嬪嵆鍙戝竷鎸囧畾璁板綍锛涜嫢缃戠粶鍙戦�佸け璐ワ紝浠呮洿鏂扮姸鎬侊紝鍚庣画鐢辫皟搴﹀櫒閲嶈瘯銆�
+     */
+    @Override
+    public void publishRecordNow(Long recordId) {
+        if (recordId == null) {
+            return;
+        }
+        IotPublishRecord record = iotPublishRecordService.selectById(recordId);
+        if (record == null || Cools.isEmpty(record.getPublishTopic()) || Cools.isEmpty(record.getPublishPayload())) {
+            return;
+        }
+        Date now = new Date();
+        try {
+            iotMqttClient.publish(record.getPublishTopic(), record.getPublishPayload());
+            record.setPublishStatus(IotConstants.PUBLISH_STATUS_SUCCESS);
+            record.setUpdateTime(now);
+            iotPublishRecordService.updateById(record);
+        } catch (Exception e) {
+            record.setPublishStatus(IotConstants.PUBLISH_STATUS_FAILURE);
+            record.setErrorMessage(truncate(e.getMessage(), 500));
+            record.setUpdateTime(now);
+            iotPublishRecordService.updateById(record);
+            log.error("publish iot message failed, recordId={}", recordId, e);
+        }
+    }
+
+    private String truncate(String message, int maxLength) {
+        if (message == null || message.length() <= maxLength) {
+            return message;
+        }
+        return message.substring(0, maxLength);
+    }
+}
diff --git a/src/main/java/com/zy/integration/iot/task/IotPendingPublishScheduler.java b/src/main/java/com/zy/integration/iot/task/IotPendingPublishScheduler.java
new file mode 100644
index 0000000..813d184
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/task/IotPendingPublishScheduler.java
@@ -0,0 +1,49 @@
+package com.zy.integration.iot.task;
+
+import com.zy.integration.iot.publish.IotPublishService;
+import com.zy.iot.config.IotProperties;
+import com.zy.iot.entity.IotPublishRecord;
+import com.zy.iot.service.IotPublishRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 寰呭彂甯冩秷鎭ˉ鍋夸换鍔°��
+ * 璐熻矗鎵弿 PENDING/FAILURE 鐨勮褰曠户缁帹閫侊紝涓嶅涓氬姟 ACK_FAILURE 鍋氶潤榛橀噸鍙戙��
+ */
+@Slf4j
+@Component
+public class IotPendingPublishScheduler {
+
+    @Autowired
+    private IotProperties iotProperties;
+    @Autowired
+    private IotPublishRecordService iotPublishRecordService;
+    @Autowired
+    private IotPublishService iotPublishService;
+
+    /**
+     * 灏忔壒閲忚ˉ鍙戯紝閬垮厤鍗曟潯寮傚父娑堟伅鎷栦綇鏁存壒寰呭彂鏁版嵁銆�
+     */
+    @Scheduled(cron = "0/5 * * * * ? ")
+    private void execute() {
+        if (!iotProperties.isEnabled()) {
+            return;
+        }
+        List<IotPublishRecord> records = iotPublishRecordService.selectPendingPublishes(50);
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+        for (IotPublishRecord record : records) {
+            try {
+                iotPublishService.publishRecordNow(record.getId());
+            } catch (Exception e) {
+                log.error("publish pending iot record failed, id={}", record.getId(), e);
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/zy/integration/iot/util/IotMqttSslUtils.java b/src/main/java/com/zy/integration/iot/util/IotMqttSslUtils.java
new file mode 100644
index 0000000..780db87
--- /dev/null
+++ b/src/main/java/com/zy/integration/iot/util/IotMqttSslUtils.java
@@ -0,0 +1,87 @@
+package com.zy.integration.iot.util;
+
+import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+import org.bouncycastle.cert.X509CertificateHolder;
+import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.openssl.PEMKeyPair;
+import org.bouncycastle.openssl.PEMParser;
+import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManagerFactory;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+
+public final class IotMqttSslUtils {
+
+    private static final String BC_PROVIDER = "BC";
+
+    private IotMqttSslUtils() {
+    }
+
+    public static SSLSocketFactory buildSocketFactory(String caCertPath, String clientCertPath, String privateKeyPath) throws Exception {
+        ensureProvider();
+        X509Certificate caCertificate = readCertificate(caCertPath);
+        X509Certificate clientCertificate = readCertificate(clientCertPath);
+        PrivateKey privateKey = readPrivateKey(privateKeyPath);
+
+        KeyStore clientStore = KeyStore.getInstance(KeyStore.getDefaultType());
+        clientStore.load(null, null);
+        clientStore.setKeyEntry("iot-client-key", privateKey, new char[0], new Certificate[]{clientCertificate});
+
+        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+        keyManagerFactory.init(clientStore, new char[0]);
+
+        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
+        trustStore.load(null, null);
+        trustStore.setCertificateEntry("iot-ca", caCertificate);
+
+        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+        trustManagerFactory.init(trustStore);
+
+        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
+        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
+        return sslContext.getSocketFactory();
+    }
+
+    private static X509Certificate readCertificate(String path) throws Exception {
+        try (PEMParser parser = new PEMParser(new BufferedReader(new FileReader(path)))) {
+            Object object = parser.readObject();
+            if (!(object instanceof X509CertificateHolder)) {
+                throw new IllegalArgumentException("invalid certificate file: " + path);
+            }
+            return new JcaX509CertificateConverter()
+                    .setProvider(BC_PROVIDER)
+                    .getCertificate((X509CertificateHolder) object);
+        }
+    }
+
+    private static PrivateKey readPrivateKey(String path) throws Exception {
+        try (PEMParser parser = new PEMParser(new BufferedReader(new FileReader(path)))) {
+            Object object = parser.readObject();
+            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BC_PROVIDER);
+            if (object instanceof PEMKeyPair) {
+                return converter.getKeyPair((PEMKeyPair) object).getPrivate();
+            }
+            if (object instanceof PrivateKeyInfo) {
+                return converter.getPrivateKey((PrivateKeyInfo) object);
+            }
+            throw new IllegalArgumentException("invalid private key file: " + path);
+        }
+    }
+
+    private static void ensureProvider() {
+        if (Security.getProvider(BC_PROVIDER) == null) {
+            Security.addProvider(new BouncyCastleProvider());
+        }
+    }
+}
diff --git a/src/main/java/com/zy/iot/config/IotProperties.java b/src/main/java/com/zy/iot/config/IotProperties.java
new file mode 100644
index 0000000..42585ce
--- /dev/null
+++ b/src/main/java/com/zy/iot/config/IotProperties.java
@@ -0,0 +1,69 @@
+package com.zy.iot.config;
+
+import com.zy.iot.entity.IotTopicConfig;
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "iot")
+public class IotProperties {
+
+    private boolean enabled;
+
+    private String endpoint;
+
+    private Integer port = 8883;
+
+    private String thingName;
+
+    private String clientId;
+
+    private boolean cleanSession;
+
+    private boolean automaticReconnect = true;
+
+    private Integer keepAliveSeconds = 60;
+
+    private Integer connectionTimeoutSeconds = 10;
+
+    private String persistenceDir;
+
+    private String caCertPath;
+
+    private String clientCertPath;
+
+    private String privateKeyPath;
+
+    private IotTopicConfig topics = new IotTopicConfig();
+
+    private Map<String, Integer> pickStationMappings = new LinkedHashMap<>();
+
+    public String getResolvedClientId() {
+        if (clientId != null && clientId.trim().length() > 0) {
+            return clientId.trim();
+        }
+        return thingName;
+    }
+
+    public boolean isTlsEnabled() {
+        String serverUri = getServerUri();
+        return serverUri != null && serverUri.startsWith("ssl://");
+    }
+
+    public String getServerUri() {
+        if (endpoint == null || endpoint.trim().length() == 0) {
+            return null;
+        }
+        String trimmed = endpoint.trim();
+        if (trimmed.startsWith("ssl://") || trimmed.startsWith("tcp://")) {
+            return trimmed;
+        }
+        int resolvedPort = port == null ? 8883 : port;
+        return "ssl://" + trimmed + ":" + resolvedPort;
+    }
+}
diff --git a/src/main/java/com/zy/iot/constant/IotConstants.java b/src/main/java/com/zy/iot/constant/IotConstants.java
new file mode 100644
index 0000000..5539420
--- /dev/null
+++ b/src/main/java/com/zy/iot/constant/IotConstants.java
@@ -0,0 +1,36 @@
+package com.zy.iot.constant;
+
+public final class IotConstants {
+
+    private IotConstants() {
+    }
+
+    public static final String DIRECTION_INBOUND = "INBOUND";
+    public static final String DIRECTION_OUTBOUND = "OUTBOUND";
+
+    public static final String MESSAGE_TYPE_STOW = "STOW";
+    public static final String MESSAGE_TYPE_PICK = "PICK";
+    public static final String MESSAGE_TYPE_FEEDBACK = "FEEDBACK";
+
+    public static final String PROCESS_STATUS_RECEIVED = "RECEIVED";
+    public static final String PROCESS_STATUS_PROCESSED = "PROCESSED";
+    public static final String PROCESS_STATUS_FAILED = "FAILED";
+    public static final String PROCESS_STATUS_DELAYED = "DELAYED";
+    public static final String PROCESS_STATUS_DUPLICATE = "DUPLICATE";
+    public static final String PROCESS_STATUS_PENDING = "PENDING";
+
+    public static final String FEEDBACK_SUCCESS = "SUCCESS";
+    public static final String FEEDBACK_FAILURE = "FAILURE";
+
+    public static final String PUBLISH_STATUS_NOT_REQUIRED = "NOT_REQUIRED";
+    public static final String PUBLISH_STATUS_PENDING = "PENDING";
+    public static final String PUBLISH_STATUS_SUCCESS = "SUCCESS";
+    public static final String PUBLISH_STATUS_FAILURE = "FAILURE";
+    public static final String PUBLISH_STATUS_ACK_SUCCESS = "ACK_SUCCESS";
+    public static final String PUBLISH_STATUS_ACK_FAILURE = "ACK_FAILURE";
+
+    public static final String ERROR_CODE_DELAYED = "DELAYED_MESSAGE";
+    public static final String ERROR_CODE_DUPLICATE = "DUPLICATE_MESSAGE";
+    public static final String ERROR_CODE_STATION_MAPPING = "STATION_MAPPING_NOT_FOUND";
+    public static final String ERROR_CODE_TARGET_LOC = "TARGET_LOCATION_INVALID";
+}
diff --git a/src/main/java/com/zy/iot/entity/IotFeedbackMessage.java b/src/main/java/com/zy/iot/entity/IotFeedbackMessage.java
new file mode 100644
index 0000000..49805bf
--- /dev/null
+++ b/src/main/java/com/zy/iot/entity/IotFeedbackMessage.java
@@ -0,0 +1,17 @@
+package com.zy.iot.entity;
+
+import lombok.Data;
+
+@Data
+public class IotFeedbackMessage {
+
+    private String instructionId;
+
+    private String status;
+
+    private String errorCode;
+
+    private String message;
+
+    private Long creationTime;
+}
diff --git a/src/main/java/com/zy/iot/entity/IotInstructionMessage.java b/src/main/java/com/zy/iot/entity/IotInstructionMessage.java
new file mode 100644
index 0000000..a1fe344
--- /dev/null
+++ b/src/main/java/com/zy/iot/entity/IotInstructionMessage.java
@@ -0,0 +1,21 @@
+package com.zy.iot.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class IotInstructionMessage {
+
+    private String instructionId;
+
+    private String containerId;
+
+    private String sourceLocationId;
+
+    private List<String> destinationLocationIds;
+
+    private String referenceId;
+
+    private Long creationTime;
+}
diff --git a/src/main/java/com/zy/iot/entity/IotPublishRecord.java b/src/main/java/com/zy/iot/entity/IotPublishRecord.java
new file mode 100644
index 0000000..6ab11a9
--- /dev/null
+++ b/src/main/java/com/zy/iot/entity/IotPublishRecord.java
@@ -0,0 +1,89 @@
+package com.zy.iot.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("asr_iot_publish_record")
+public class IotPublishRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("instruction_id")
+    private String instructionId;
+
+    @TableField("direction")
+    private String direction;
+
+    @TableField("message_type")
+    private String messageType;
+
+    @TableField("receive_topic")
+    private String receiveTopic;
+
+    @TableField("publish_topic")
+    private String publishTopic;
+
+    @TableField("container_id")
+    private String containerId;
+
+    @TableField("reference_id")
+    private String referenceId;
+
+    @TableField("source_location_id")
+    private String sourceLocationId;
+
+    @TableField("destination_location_ids")
+    private String destinationLocationIds;
+
+    @TableField("message_creation_time")
+    private Long messageCreationTime;
+
+    @TableField("raw_payload")
+    private String rawPayload;
+
+    @TableField("publish_payload")
+    private String publishPayload;
+
+    @TableField("process_status")
+    private String processStatus;
+
+    @TableField("publish_status")
+    private String publishStatus;
+
+    @TableField("feedback_status")
+    private String feedbackStatus;
+
+    @TableField("error_code")
+    private String errorCode;
+
+    @TableField("error_message")
+    private String errorMessage;
+
+    @TableField("ack_payload")
+    private String ackPayload;
+
+    @TableField("ack_time")
+    private Date ackTime;
+
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    @TableField("order_no")
+    private String orderNo;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+}
diff --git a/src/main/java/com/zy/iot/entity/IotTopicConfig.java b/src/main/java/com/zy/iot/entity/IotTopicConfig.java
new file mode 100644
index 0000000..d09b609
--- /dev/null
+++ b/src/main/java/com/zy/iot/entity/IotTopicConfig.java
@@ -0,0 +1,19 @@
+package com.zy.iot.entity;
+
+import lombok.Data;
+
+@Data
+public class IotTopicConfig {
+
+    private String egressStow;
+
+    private String egressPick;
+
+    private String ingressStow;
+
+    private String ingressPick;
+
+    private String ingressFeedback;
+
+    private String egressFeedback;
+}
diff --git a/src/main/java/com/zy/iot/mapper/IotPublishRecordMapper.java b/src/main/java/com/zy/iot/mapper/IotPublishRecordMapper.java
new file mode 100644
index 0000000..3d46d2a
--- /dev/null
+++ b/src/main/java/com/zy/iot/mapper/IotPublishRecordMapper.java
@@ -0,0 +1,11 @@
+package com.zy.iot.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.iot.entity.IotPublishRecord;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface IotPublishRecordMapper extends BaseMapper<IotPublishRecord> {
+}
diff --git a/src/main/java/com/zy/iot/service/IotPublishRecordService.java b/src/main/java/com/zy/iot/service/IotPublishRecordService.java
new file mode 100644
index 0000000..5c9d1bf
--- /dev/null
+++ b/src/main/java/com/zy/iot/service/IotPublishRecordService.java
@@ -0,0 +1,15 @@
+package com.zy.iot.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.iot.entity.IotPublishRecord;
+
+import java.util.List;
+
+public interface IotPublishRecordService extends IService<IotPublishRecord> {
+
+    IotPublishRecord findByInstructionId(String instructionId);
+
+    IotPublishRecord findLatestInboundInstruction(String containerId, String messageType);
+
+    List<IotPublishRecord> selectPendingPublishes(int limit);
+}
diff --git a/src/main/java/com/zy/iot/service/impl/IotPublishRecordServiceImpl.java b/src/main/java/com/zy/iot/service/impl/IotPublishRecordServiceImpl.java
new file mode 100644
index 0000000..eb1cbf1
--- /dev/null
+++ b/src/main/java/com/zy/iot/service/impl/IotPublishRecordServiceImpl.java
@@ -0,0 +1,66 @@
+package com.zy.iot.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.zy.iot.constant.IotConstants;
+import com.zy.iot.entity.IotPublishRecord;
+import com.zy.iot.mapper.IotPublishRecordMapper;
+import com.zy.iot.service.IotPublishRecordService;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+@Service
+public class IotPublishRecordServiceImpl extends ServiceImpl<IotPublishRecordMapper, IotPublishRecord> implements IotPublishRecordService {
+
+    @Override
+    public IotPublishRecord findByInstructionId(String instructionId) {
+        if (Cools.isEmpty(instructionId)) {
+            return null;
+        }
+        return selectOne(new EntityWrapper<IotPublishRecord>().eq("instruction_id", instructionId));
+    }
+
+    @Override
+    public IotPublishRecord findLatestInboundInstruction(String containerId, String messageType) {
+        if (Cools.isEmpty(containerId) || Cools.isEmpty(messageType)) {
+            return null;
+        }
+        Wrapper<IotPublishRecord> wrapper = new EntityWrapper<IotPublishRecord>()
+                .eq("direction", IotConstants.DIRECTION_INBOUND)
+                .eq("message_type", messageType)
+                .eq("container_id", containerId)
+                .orderBy("message_creation_time", false)
+                .orderBy("create_time", false);
+        Page<IotPublishRecord> page = selectPage(new Page<IotPublishRecord>(1, 1), wrapper);
+        if (page == null || page.getRecords() == null || page.getRecords().isEmpty()) {
+            return null;
+        }
+        return page.getRecords().get(0);
+    }
+
+    @Override
+    public List<IotPublishRecord> selectPendingPublishes(int limit) {
+        if (limit <= 0) {
+            return Collections.emptyList();
+        }
+        Wrapper<IotPublishRecord> wrapper = new EntityWrapper<IotPublishRecord>()
+                .in("publish_status", Arrays.asList(IotConstants.PUBLISH_STATUS_PENDING, IotConstants.PUBLISH_STATUS_FAILURE))
+                .isNotNull("publish_topic")
+                .isNotNull("publish_payload")
+                .orderBy("create_time", true)
+                .orderBy("id", true);
+        Page<IotPublishRecord> page = selectPage(new Page<IotPublishRecord>(1, limit), wrapper);
+        if (page == null || page.getRecords() == null) {
+            return Collections.emptyList();
+        }
+        return page.getRecords();
+    }
+}
+
+
diff --git a/src/main/java/com/zy/iot/util/IotInstructionIdGenerator.java b/src/main/java/com/zy/iot/util/IotInstructionIdGenerator.java
new file mode 100644
index 0000000..b28dd22
--- /dev/null
+++ b/src/main/java/com/zy/iot/util/IotInstructionIdGenerator.java
@@ -0,0 +1,30 @@
+package com.zy.iot.util;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.Locale;
+import java.util.UUID;
+
+public final class IotInstructionIdGenerator {
+
+    private IotInstructionIdGenerator() {
+    }
+
+    public static String generate() {
+        return generate(UUID.randomUUID() + "-" + System.nanoTime());
+    }
+
+    public static String generate(String seed) {
+        try {
+            MessageDigest digest = MessageDigest.getInstance("SHA-1");
+            byte[] hash = digest.digest(seed.getBytes(StandardCharsets.UTF_8));
+            StringBuilder builder = new StringBuilder();
+            for (byte item : hash) {
+                builder.append(String.format(Locale.ROOT, "%02x", item));
+            }
+            return builder.substring(0, 20).toUpperCase(Locale.ROOT);
+        } catch (Exception e) {
+            throw new IllegalStateException("generate iot instruction id failed", e);
+        }
+    }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 4070614..f8aaf02 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -121,3 +121,36 @@
     stopOutTask: /openapi/cancelTaskBatch
     #璁惧鐘舵�佽幏鍙栧湴鍧�
     getDeviceStatus: /openapi/deviceStatus
+
+
+# AWS IoT 瀵规帴寮�鍏充笌 topic/璇佷功閰嶇疆銆�
+# 榛樿鍏抽棴锛屽彧鏈夐厤缃綈 endpoint 鍜岃瘉涔﹁矾寰勫悗鎵嶄細灏濊瘯寤鸿繛銆�
+iot:
+  enabled: true
+  endpoint: tcp://192.168.100.170:1883
+  port: 1883
+  thingName: asrs-iot-client
+  clientId: asrs-iot-client
+  cleanSession: false
+  automaticReconnect: true
+  keepAliveSeconds: 60
+  connectionTimeoutSeconds: 10
+  persistenceDir: .local/iot-mqtt
+  caCertPath:
+  clientCertPath:
+  privateKeyPath:
+  topics:
+    #浜氶┈閫婂彂閫佺粍鎵樼粰wms,鍦ㄦ墭鐩樹笂鏀跺埌绾哥鍚庯紝鍙戝竷鍫嗗灈鎸囦护浠ュ皢鎵樼洏鍙戦�佸埌浠撳簱銆�
+    egressStow: glenn/instruction/icna/egress/asrs/stow
+    #浜氶┈閫婂彂閫佸嚭搴撴寚浠ょ粰wms,鍚姩鎷i�夎姹傚悗锛屽彂甯冩嫞閫夋寚浠や互寮曞ASRS浠庢枡绠变腑鍙栬揣銆�
+    egressPick: glenn/instruction/icna/egress/asrs/pick
+    #wms鍏ュ簱瀹屾垚鍙戦�佺粰浜氶┈閫婏紝ASRS瀹為檯鎷栨嫿鎵樼洏鍒版枡绠卞悗锛屽彂甯冨爢鍨涘姩浣滀互鍚屾BPS鏁版嵁銆�
+    egressFeedback: glenn/instruction/icna/egress/asrs/feedback
+    #wms鍑哄簱瀹屾垚鍙戦�佺粰浜氶┈閫婏紝鍦ˋSRS瀹為檯浠庢枡绠卞彇璐у悗锛屽彂甯冩嫞閫夊姩浣渟z XBPS鏁版嵁銆�
+    ingressStow: glenn/instruction/icna/ingress/asrs/stow
+    #ASRS 鎺ユ敹鍒� XBPS 鎸囦护鍚庯紝鍚戝弽棣圶BPS 鍙戦�佸搷搴斻��
+    ingressPick: glenn/instruction/icna/ingress/asrs/pick
+    #鍦╔BPs鏀跺埌ASRS鎿嶄綔鍚庯紝鍚戝弽棣圓SRS鍙戦�佸搷搴�
+    ingressFeedback: glenn/instruction/icna/ingress/asrs/feedback
+  pickStationMappings:
+    ASRSOutbound1: 101
diff --git a/src/main/resources/sql/20260324_asr_iot_publish_record.sql b/src/main/resources/sql/20260324_asr_iot_publish_record.sql
new file mode 100644
index 0000000..4172107
--- /dev/null
+++ b/src/main/resources/sql/20260324_asr_iot_publish_record.sql
@@ -0,0 +1,47 @@
+IF NOT EXISTS (
+    SELECT 1
+    FROM sys.objects
+    WHERE object_id = OBJECT_ID(N'[dbo].[asr_iot_publish_record]')
+      AND type = N'U'
+)
+BEGIN
+    CREATE TABLE [dbo].[asr_iot_publish_record] (
+        [id] BIGINT IDENTITY(1,1) NOT NULL,
+        [instruction_id] VARCHAR(64) NOT NULL,
+        [direction] VARCHAR(16) NOT NULL,
+        [message_type] VARCHAR(16) NOT NULL,
+        [receive_topic] VARCHAR(255) NULL,
+        [publish_topic] VARCHAR(255) NULL,
+        [container_id] VARCHAR(128) NULL,
+        [reference_id] VARCHAR(128) NULL,
+        [source_location_id] VARCHAR(128) NULL,
+        [destination_location_ids] VARCHAR(500) NULL,
+        [message_creation_time] BIGINT NULL,
+        [raw_payload] VARCHAR(MAX) NULL,
+        [publish_payload] VARCHAR(MAX) NULL,
+        [process_status] VARCHAR(32) NULL,
+        [publish_status] VARCHAR(32) NULL,
+        [feedback_status] VARCHAR(16) NULL,
+        [error_code] VARCHAR(64) NULL,
+        [error_message] VARCHAR(500) NULL,
+        [ack_payload] VARCHAR(MAX) NULL,
+        [ack_time] DATETIME NULL,
+        [wrk_no] INT NULL,
+        [order_no] VARCHAR(128) NULL,
+        [create_time] DATETIME NULL,
+        [update_time] DATETIME NULL,
+        CONSTRAINT [PK_asr_iot_publish_record] PRIMARY KEY CLUSTERED ([id] ASC),
+        CONSTRAINT [UK_asr_iot_publish_record_instruction_id] UNIQUE NONCLUSTERED ([instruction_id] ASC)
+    );
+
+    CREATE NONCLUSTERED INDEX [IDX_asr_iot_publish_record_container_type]
+        ON [dbo].[asr_iot_publish_record] ([container_id] ASC, [message_type] ASC, [message_creation_time] DESC);
+
+    CREATE NONCLUSTERED INDEX [IDX_asr_iot_publish_record_publish_status]
+        ON [dbo].[asr_iot_publish_record] ([publish_status] ASC, [create_time] ASC);
+
+    EXEC sys.sp_addextendedproperty
+        @name = N'MS_Description', @value = N'ASRS IoT 鍙戝竷涓庡洖鎵ц褰�',
+        @level0type = N'SCHEMA', @level0name = N'dbo',
+        @level1type = N'TABLE',  @level1name = N'asr_iot_publish_record';
+END;
diff --git a/src/test/java/com/zy/integration/iot/IotSupportTest.java b/src/test/java/com/zy/integration/iot/IotSupportTest.java
new file mode 100644
index 0000000..b93cd14
--- /dev/null
+++ b/src/test/java/com/zy/integration/iot/IotSupportTest.java
@@ -0,0 +1,31 @@
+package com.zy.integration.iot;
+
+import com.zy.iot.config.IotProperties;
+import com.zy.iot.util.IotInstructionIdGenerator;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class IotSupportTest {
+
+    @Test
+    public void shouldResolveServerUriAndClientId() {
+        IotProperties properties = new IotProperties();
+        properties.setEndpoint("example-ats.iot.cn-north-1.amazonaws.com.cn");
+        properties.setPort(8883);
+        properties.setThingName("thing-a");
+
+        Assertions.assertEquals("ssl://example-ats.iot.cn-north-1.amazonaws.com.cn:8883", properties.getServerUri());
+        Assertions.assertEquals("thing-a", properties.getResolvedClientId());
+
+        properties.setClientId("client-b");
+        Assertions.assertEquals("client-b", properties.getResolvedClientId());
+    }
+
+    @Test
+    public void shouldGenerateStableLengthInstructionId() {
+        String instructionId = IotInstructionIdGenerator.generate("wrk-1001");
+
+        Assertions.assertEquals(20, instructionId.length());
+        Assertions.assertEquals(instructionId, instructionId.toUpperCase());
+    }
+}

--
Gitblit v1.9.1