@camstack/addon-provider-ecowitt 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { createServer } from "http";
3
3
  import { EventEmitter } from "events";
4
+ import { createSocket } from "dgram";
4
5
  //#region \0rolldown/runtime.js
5
6
  var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
6
7
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
@@ -4648,7 +4649,7 @@ function preprocess(fn, schema) {
4648
4649
  });
4649
4650
  }
4650
4651
  //#endregion
4651
- //#region ../types/dist/sleep-B3AOslwX.mjs
4652
+ //#region ../types/dist/sleep-C2M2zF7x.mjs
4652
4653
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4653
4654
  EventCategory["SystemBoot"] = "system.boot";
4654
4655
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -6216,6 +6217,12 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
6216
6217
  DeviceType["Switch"] = "switch";
6217
6218
  DeviceType["Sensor"] = "sensor";
6218
6219
  DeviceType["Thermostat"] = "thermostat";
6220
+ /** Air-conditioner / heat-pump climate device (HVAC) — shares the
6221
+ * `climate-control` cap surface with `Thermostat` but renders a
6222
+ * dedicated AC-appropriate control UI (mode chips, fan speed,
6223
+ * independent vertical/horizontal swing). Sources: native Gree, and
6224
+ * reusable by other AC integrations. */
6225
+ DeviceType["Climate"] = "climate";
6219
6226
  DeviceType["Button"] = "button";
6220
6227
  /** Generic stateless event emitter — carries a device's EXACT declared
6221
6228
  * event vocabulary verbatim (no normalization). Installed with the
@@ -9011,7 +9018,7 @@ var climateControlCapability = {
9011
9018
  scope: "device",
9012
9019
  deviceNative: true,
9013
9020
  mode: "singleton",
9014
- deviceTypes: [DeviceType.Thermostat],
9021
+ deviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
9015
9022
  methods: {
9016
9023
  setMode: method(object({
9017
9024
  deviceId: number().int().nonnegative(),
@@ -13610,10 +13617,30 @@ var deviceProviderCapability = {
13610
13617
  type: string()
13611
13618
  }))),
13612
13619
  supportsDiscovery: method(object({}), boolean()),
13613
- discoverDevices: method(object({}), array(DiscoveryCandidateSchema), {
13620
+ /**
13621
+ * Run a network scan. `params` carries optional provider-specific scan
13622
+ * inputs (e.g. a broadcast address / subnet for cross-subnet discovery),
13623
+ * shaped by `getDiscoveryParamsSchema`. Omitted for the generic scan
13624
+ * (provider uses its local-network default).
13625
+ */
13626
+ discoverDevices: method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
13614
13627
  kind: "mutation",
13615
13628
  auth: "admin"
13616
13629
  }),
13630
+ /**
13631
+ * Optional form schema (`ConfigUISchema`) for the EXTRA per-scan inputs a
13632
+ * provider accepts (e.g. Gree's broadcast address for a different subnet).
13633
+ * `null` when the provider takes no extra scan params — the generic
13634
+ * aggregated scan never renders this; the per-integration scan does.
13635
+ */
13636
+ getDiscoveryParamsSchema: method(object({}), CreationSchemaOutputSchema),
13637
+ /**
13638
+ * The DeviceType this provider creates via manual add (Camera for
13639
+ * Reolink/ONVIF, Container for Gree, Hub for Ecowitt). `null` when the
13640
+ * provider does not support manual creation. Lets the Add-Device dialog
13641
+ * pick the right type instead of assuming Camera.
13642
+ */
13643
+ getManualCreationType: method(object({}), object({ deviceType: _enum(DeviceType).nullable() })),
13617
13644
  adoptDiscoveredDevice: method(object({ candidate: DiscoveryCandidateSchema }), DeviceSummarySchema, {
13618
13645
  kind: "mutation",
13619
13646
  auth: "admin"
@@ -13737,9 +13764,23 @@ var BaseDeviceProvider = class extends BaseAddon {
13737
13764
  async supportsDiscovery() {
13738
13765
  return false;
13739
13766
  }
13740
- async discoverDevices() {
13767
+ async discoverDevices(_input) {
13741
13768
  return [];
13742
13769
  }
13770
+ /** Extra per-scan input form (e.g. a broadcast address for another subnet).
13771
+ * Null = no extra params. Override in providers that support scoped scans. */
13772
+ async getDiscoveryParamsSchema() {
13773
+ return null;
13774
+ }
13775
+ /**
13776
+ * The DeviceType this provider creates via manual add — derived from the
13777
+ * `deviceClasses` map (first registered type). `null` when manual creation is
13778
+ * unsupported. Lets the Add-Device dialog pick the right type per provider.
13779
+ */
13780
+ async getManualCreationType() {
13781
+ if (!await this.supportsManualCreation()) return { deviceType: null };
13782
+ return { deviceType: Object.values(DeviceType).find((t) => this.deviceClasses[t] !== void 0) ?? null };
13783
+ }
13743
13784
  async adoptDiscoveredDevice(_input) {
13744
13785
  throw new Error(`${this.providerName} provider does not support discovery-based adoption`);
13745
13786
  }
@@ -14786,83 +14827,34 @@ var GetStateInputSchema = object({
14786
14827
  * HA: entity_id (returns the cached entity state). */
14787
14828
  key: string()
14788
14829
  });
14789
- var brokerCapability = {
14790
- name: "broker",
14791
- scope: "system",
14792
- mode: "collection",
14793
- providerKind: "broker",
14794
- status: {
14795
- schema: RegistryStatusSchema,
14796
- kind: "poll"
14797
- },
14798
- methods: {
14799
- list: method(ListInputSchema, array(BrokerInfoSchema$1)),
14800
- get: method(GetInputSchema, BrokerInfoSchema$1.nullable()),
14801
- /** Enumerate which addon provides which broker kind(s) for the
14802
- * unified create picker. The auto-mount fans this array across
14803
- * every registered `broker` provider (array-output method), so the
14804
- * picker sees every kind from every provider in one call. */
14805
- listProviders: method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }),
14806
- add: method(AddInputSchema, AddResultSchema, {
14807
- kind: "mutation",
14808
- auth: "admin"
14809
- }),
14810
- remove: method(RemoveInputSchema, _void(), {
14811
- kind: "mutation",
14812
- auth: "admin"
14813
- }),
14814
- testConnection: method(GetInputSchema, TestConnectionResultSchema, {
14815
- kind: "mutation",
14816
- auth: "admin"
14817
- }),
14818
- /** Read the persisted settings record for a broker (kind-specific
14819
- * shape). Admin-only — settings may contain secrets. Returns `null`
14820
- * when the broker id is unknown to the provider (the collection
14821
- * fallback may route a foreign id to the first provider). */
14822
- getSettings: method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }),
14823
- /** Overwrite the persisted settings record. The kind-specific
14824
- * provider validates the shape and applies the change (reconnects
14825
- * if credentials changed). */
14826
- setSettings: method(object({
14827
- id: string(),
14828
- settings: SettingsRecordSchema$1
14829
- }), _void(), {
14830
- kind: "mutation",
14831
- auth: "admin"
14832
- }),
14833
- /** Returns the kind-specific connection config the consumer needs
14834
- * to open its own client (MQTT pattern: `{url, username, password,
14835
- * clientIdPrefix}`). HA providers MAY return the auth envelope
14836
- * but typical HA consumers use `publish` / `subscribe` instead.
14837
- * Returns `null` when the broker id is unknown to the provider. */
14838
- getBrokerConfig: method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }),
14839
- getSettingsSchema: method(SettingsSchemaInputSchema, SettingsSchemaResultSchema, { auth: "admin" }),
14840
- testSettings: method(TestSettingsInputSchema, TestSettingsResultSchema, {
14841
- kind: "mutation",
14842
- auth: "admin"
14843
- }),
14844
- publish: method(PublishInputSchema, unknown(), {
14845
- kind: "mutation",
14846
- auth: "admin"
14847
- }),
14848
- subscribe: method(SubscribeInputSchema, SubscribeResultSchema, {
14849
- kind: "mutation",
14850
- auth: "admin"
14851
- }),
14852
- unsubscribe: method(UnsubscribeInputSchema, _void(), {
14853
- kind: "mutation",
14854
- auth: "admin"
14855
- }),
14856
- /** Read the broker's cached state for a key. Returns `null` when
14857
- * unknown to the broker (never published / unknown entity). */
14858
- getState: method(GetStateInputSchema, unknown().nullable()),
14859
- /** Status method — explicit registration with a `z.void()` input so
14860
- * the codegen-generated tRPC router types its input as
14861
- * `{addonId?: string, nodeId?: string}` (system-scoped collection
14862
- * shape) instead of the device-scoped `{deviceId}` fallback. */
14863
- getStatus: method(_void(), RegistryStatusSchema)
14864
- }
14865
- };
14830
+ method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, BrokerInfoSchema$1.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
14831
+ kind: "mutation",
14832
+ auth: "admin"
14833
+ }), method(RemoveInputSchema, _void(), {
14834
+ kind: "mutation",
14835
+ auth: "admin"
14836
+ }), method(GetInputSchema, TestConnectionResultSchema, {
14837
+ kind: "mutation",
14838
+ auth: "admin"
14839
+ }), method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }), method(object({
14840
+ id: string(),
14841
+ settings: SettingsRecordSchema$1
14842
+ }), _void(), {
14843
+ kind: "mutation",
14844
+ auth: "admin"
14845
+ }), method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }), method(SettingsSchemaInputSchema, SettingsSchemaResultSchema, { auth: "admin" }), method(TestSettingsInputSchema, TestSettingsResultSchema, {
14846
+ kind: "mutation",
14847
+ auth: "admin"
14848
+ }), method(PublishInputSchema, unknown(), {
14849
+ kind: "mutation",
14850
+ auth: "admin"
14851
+ }), method(SubscribeInputSchema, SubscribeResultSchema, {
14852
+ kind: "mutation",
14853
+ auth: "admin"
14854
+ }), method(UnsubscribeInputSchema, _void(), {
14855
+ kind: "mutation",
14856
+ auth: "admin"
14857
+ }), method(GetStateInputSchema, unknown().nullable()), method(_void(), RegistryStatusSchema);
14866
14858
  DeviceType.Camera;
14867
14859
  /**
14868
14860
  * `custom-model-registry` — collection cap exposing operator-registered
@@ -15098,36 +15090,19 @@ var ResyncResultSchema = object({
15098
15090
  * provider re-derived the device. 0/absent for a normal incremental re-sync. */
15099
15091
  removedChildren: number().int().nonnegative().optional()
15100
15092
  });
15101
- var deviceAdoptionCapability = {
15102
- name: "device-adoption",
15103
- scope: "system",
15104
- mode: "singleton",
15105
- status: {
15106
- schema: AdoptionStatusSchema,
15107
- kind: "poll"
15108
- },
15109
- methods: {
15110
- listCandidateFilters: method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }),
15111
- listCandidates: method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }),
15112
- getCandidate: method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }),
15113
- refresh: method(object({ integrationId: string() }), AdoptionStatusSchema, {
15114
- kind: "mutation",
15115
- auth: "admin"
15116
- }),
15117
- adopt: method(AdoptInputSchema, AdoptResultSchema, {
15118
- kind: "mutation",
15119
- auth: "admin"
15120
- }),
15121
- release: method(ReleaseInputSchema, _void(), {
15122
- kind: "mutation",
15123
- auth: "admin"
15124
- }),
15125
- resync: method(ResyncInputSchema, ResyncResultSchema, {
15126
- kind: "mutation",
15127
- auth: "admin"
15128
- })
15129
- }
15130
- };
15093
+ method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
15094
+ kind: "mutation",
15095
+ auth: "admin"
15096
+ }), method(AdoptInputSchema, AdoptResultSchema, {
15097
+ kind: "mutation",
15098
+ auth: "admin"
15099
+ }), method(ReleaseInputSchema, _void(), {
15100
+ kind: "mutation",
15101
+ auth: "admin"
15102
+ }), method(ResyncInputSchema, ResyncResultSchema, {
15103
+ kind: "mutation",
15104
+ auth: "admin"
15105
+ });
15131
15106
  /**
15132
15107
  * `device-export` — collection cap for addons that export camstack
15133
15108
  * devices to external ecosystems (HomeAssistant via MQTT discovery,
@@ -15650,7 +15625,10 @@ method(object({
15650
15625
  }), FieldProbeResultSchema, {
15651
15626
  kind: "mutation",
15652
15627
  auth: "admin"
15653
- }), method(ListCandidatesInputSchema.extend({ addonId: string() }), ListCandidatesOutputSchema, { auth: "admin" }), method(object({
15628
+ }), method(object({
15629
+ addonId: string(),
15630
+ integrationId: string()
15631
+ }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema.extend({ addonId: string() }), ListCandidatesOutputSchema, { auth: "admin" }), method(object({
15654
15632
  addonId: string(),
15655
15633
  integrationId: string()
15656
15634
  }), AdoptionStatusSchema, {
@@ -15665,7 +15643,24 @@ method(object({
15665
15643
  }), method(ResyncInputSchema, ResyncResultSchema, {
15666
15644
  kind: "mutation",
15667
15645
  auth: "admin"
15646
+ }), method(object({}), object({ providers: array(object({
15647
+ addonId: string(),
15648
+ label: string()
15649
+ })).readonly() }), { auth: "admin" }), method(object({}), object({ groups: array(object({
15650
+ addonId: string(),
15651
+ label: string(),
15652
+ candidates: array(DiscoveryCandidateSchema).readonly(),
15653
+ error: string().nullable()
15654
+ })).readonly() }), {
15655
+ kind: "mutation",
15656
+ auth: "admin"
15668
15657
  }), method(object({
15658
+ addonId: string(),
15659
+ params: record(string(), unknown()).optional()
15660
+ }), object({ candidates: array(DiscoveryCandidateSchema).readonly() }), {
15661
+ kind: "mutation",
15662
+ auth: "admin"
15663
+ }), method(object({ addonId: string() }), object({ deviceType: _enum(DeviceType).nullable() }), { auth: "admin" }), method(object({ addonId: string() }), unknown(), { auth: "admin" }), method(object({
15669
15664
  deviceId: number(),
15670
15665
  key: string(),
15671
15666
  value: unknown()
@@ -18317,6 +18312,17 @@ var AvailableIntegrationTypeSchema = object({
18317
18312
  iconUrl: string().nullable(),
18318
18313
  color: string(),
18319
18314
  instanceMode: string(),
18315
+ /**
18316
+ * Integration wizard `mode` (LOCKED MODEL): `standalone` (create
18317
+ * immediately then add devices, no config step/button), `account` (config
18318
+ * step), or `broker` (broker step). Derived server-side by
18319
+ * `getAvailableTypes` when the addon manifest omits an explicit `mode`.
18320
+ */
18321
+ mode: _enum([
18322
+ "standalone",
18323
+ "account",
18324
+ "broker"
18325
+ ]),
18320
18326
  discoveryMode: string(),
18321
18327
  /**
18322
18328
  * Which integration-marker cap the addon declared, so the wizard can
@@ -20777,6 +20783,12 @@ Object.freeze({
20777
20783
  addonId: null,
20778
20784
  access: "create"
20779
20785
  },
20786
+ "deviceManager.adoptionListCandidateFilters": {
20787
+ capName: "device-manager",
20788
+ capScope: "system",
20789
+ addonId: null,
20790
+ access: "view"
20791
+ },
20780
20792
  "deviceManager.adoptionListCandidates": {
20781
20793
  capName: "device-manager",
20782
20794
  capScope: "system",
@@ -20825,12 +20837,30 @@ Object.freeze({
20825
20837
  addonId: null,
20826
20838
  access: "create"
20827
20839
  },
20840
+ "deviceManager.discoverAllProviders": {
20841
+ capName: "device-manager",
20842
+ capScope: "system",
20843
+ addonId: null,
20844
+ access: "create"
20845
+ },
20828
20846
  "deviceManager.discoverDevices": {
20829
20847
  capName: "device-manager",
20830
20848
  capScope: "system",
20831
20849
  addonId: null,
20832
20850
  access: "create"
20833
20851
  },
20852
+ "deviceManager.discoverProvider": {
20853
+ capName: "device-manager",
20854
+ capScope: "system",
20855
+ addonId: null,
20856
+ access: "create"
20857
+ },
20858
+ "deviceManager.discoveryProviders": {
20859
+ capName: "device-manager",
20860
+ capScope: "system",
20861
+ addonId: null,
20862
+ access: "view"
20863
+ },
20834
20864
  "deviceManager.enable": {
20835
20865
  capName: "device-manager",
20836
20866
  capScope: "system",
@@ -20981,6 +21011,18 @@ Object.freeze({
20981
21011
  addonId: null,
20982
21012
  access: "create"
20983
21013
  },
21014
+ "deviceManager.providerCreationType": {
21015
+ capName: "device-manager",
21016
+ capScope: "system",
21017
+ addonId: null,
21018
+ access: "view"
21019
+ },
21020
+ "deviceManager.providerDiscoveryParamsSchema": {
21021
+ capName: "device-manager",
21022
+ capScope: "system",
21023
+ addonId: null,
21024
+ access: "view"
21025
+ },
20984
21026
  "deviceManager.registerDevice": {
20985
21027
  capName: "device-manager",
20986
21028
  capScope: "system",
@@ -21197,6 +21239,18 @@ Object.freeze({
21197
21239
  addonId: null,
21198
21240
  access: "view"
21199
21241
  },
21242
+ "deviceProvider.getDiscoveryParamsSchema": {
21243
+ capName: "device-provider",
21244
+ capScope: "system",
21245
+ addonId: null,
21246
+ access: "view"
21247
+ },
21248
+ "deviceProvider.getManualCreationType": {
21249
+ capName: "device-provider",
21250
+ capScope: "system",
21251
+ addonId: null,
21252
+ access: "view"
21253
+ },
21200
21254
  "deviceProvider.getStatus": {
21201
21255
  capName: "device-provider",
21202
21256
  capScope: "system",
@@ -24035,7 +24089,7 @@ object({
24035
24089
  schemaVersion: literal(1)
24036
24090
  });
24037
24091
  //#endregion
24038
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/symbols.js
24092
+ //#region node_modules/undici/lib/core/symbols.js
24039
24093
  var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24040
24094
  module.exports = {
24041
24095
  kClose: Symbol("close"),
@@ -24106,7 +24160,7 @@ var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24106
24160
  };
24107
24161
  }));
24108
24162
  //#endregion
24109
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/errors.js
24163
+ //#region node_modules/undici/lib/core/errors.js
24110
24164
  var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24111
24165
  var kUndiciError = Symbol.for("undici.error.UND_ERR");
24112
24166
  var UndiciError = class extends Error {
@@ -24464,7 +24518,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24464
24518
  };
24465
24519
  }));
24466
24520
  //#endregion
24467
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/constants.js
24521
+ //#region node_modules/undici/lib/core/constants.js
24468
24522
  var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24469
24523
  /** @type {Record<string, string | undefined>} */
24470
24524
  var headerNameLowerCasedRecord = {};
@@ -24577,7 +24631,7 @@ var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24577
24631
  };
24578
24632
  }));
24579
24633
  //#endregion
24580
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/tree.js
24634
+ //#region node_modules/undici/lib/core/tree.js
24581
24635
  var require_tree = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24582
24636
  var { wellknownHeaderNames, headerNameLowerCasedRecord } = require_constants$4();
24583
24637
  var TstNode = class TstNode {
@@ -24687,7 +24741,7 @@ var require_tree = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24687
24741
  };
24688
24742
  }));
24689
24743
  //#endregion
24690
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/util.js
24744
+ //#region node_modules/undici/lib/core/util.js
24691
24745
  var require_util$7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24692
24746
  var assert$26 = __require("node:assert");
24693
24747
  var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols$4();
@@ -25141,7 +25195,7 @@ var require_util$7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25141
25195
  };
25142
25196
  }));
25143
25197
  //#endregion
25144
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/diagnostics.js
25198
+ //#region node_modules/undici/lib/core/diagnostics.js
25145
25199
  var require_diagnostics = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25146
25200
  var diagnosticsChannel = __require("node:diagnostics_channel");
25147
25201
  var util$2 = __require("node:util");
@@ -25238,7 +25292,7 @@ var require_diagnostics = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25238
25292
  module.exports = { channels };
25239
25293
  }));
25240
25294
  //#endregion
25241
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/request.js
25295
+ //#region node_modules/undici/lib/core/request.js
25242
25296
  var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25243
25297
  var { InvalidArgumentError, NotSupportedError } = require_errors();
25244
25298
  var assert$25 = __require("node:assert");
@@ -25457,7 +25511,7 @@ var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25457
25511
  module.exports = Request;
25458
25512
  }));
25459
25513
  //#endregion
25460
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/dispatcher.js
25514
+ //#region node_modules/undici/lib/dispatcher/dispatcher.js
25461
25515
  var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25462
25516
  var EventEmitter$1 = __require("node:events");
25463
25517
  var Dispatcher = class extends EventEmitter$1 {
@@ -25503,7 +25557,7 @@ var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25503
25557
  module.exports = Dispatcher;
25504
25558
  }));
25505
25559
  //#endregion
25506
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/dispatcher-base.js
25560
+ //#region node_modules/undici/lib/dispatcher/dispatcher-base.js
25507
25561
  var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25508
25562
  var Dispatcher = require_dispatcher();
25509
25563
  var { ClientDestroyedError, ClientClosedError, InvalidArgumentError } = require_errors();
@@ -25625,7 +25679,7 @@ var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) =
25625
25679
  module.exports = DispatcherBase;
25626
25680
  }));
25627
25681
  //#endregion
25628
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/util/timers.js
25682
+ //#region node_modules/undici/lib/util/timers.js
25629
25683
  var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25630
25684
  /**
25631
25685
  * This module offers an optimized timer implementation designed for scenarios
@@ -25963,7 +26017,7 @@ var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25963
26017
  };
25964
26018
  }));
25965
26019
  //#endregion
25966
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/connect.js
26020
+ //#region node_modules/undici/lib/core/connect.js
25967
26021
  var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25968
26022
  var net$1 = __require("node:net");
25969
26023
  var assert$24 = __require("node:assert");
@@ -26133,7 +26187,7 @@ var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26133
26187
  module.exports = buildConnector;
26134
26188
  }));
26135
26189
  //#endregion
26136
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/utils.js
26190
+ //#region node_modules/undici/lib/llhttp/utils.js
26137
26191
  var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
26138
26192
  Object.defineProperty(exports, "__esModule", { value: true });
26139
26193
  exports.enumToMap = void 0;
@@ -26148,7 +26202,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
26148
26202
  exports.enumToMap = enumToMap;
26149
26203
  }));
26150
26204
  //#endregion
26151
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/constants.js
26205
+ //#region node_modules/undici/lib/llhttp/constants.js
26152
26206
  var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
26153
26207
  Object.defineProperty(exports, "__esModule", { value: true });
26154
26208
  exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;
@@ -26481,19 +26535,19 @@ var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
26481
26535
  };
26482
26536
  }));
26483
26537
  //#endregion
26484
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/llhttp-wasm.js
26538
+ //#region node_modules/undici/lib/llhttp/llhttp-wasm.js
26485
26539
  var require_llhttp_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26486
26540
  var { Buffer: Buffer$2 } = __require("node:buffer");
26487
26541
  module.exports = Buffer$2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
26488
26542
  }));
26489
26543
  //#endregion
26490
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
26544
+ //#region node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
26491
26545
  var require_llhttp_simd_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26492
26546
  var { Buffer: Buffer$1 } = __require("node:buffer");
26493
26547
  module.exports = Buffer$1.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
26494
26548
  }));
26495
26549
  //#endregion
26496
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/constants.js
26550
+ //#region node_modules/undici/lib/web/fetch/constants.js
26497
26551
  var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26498
26552
  var corsSafeListedMethods = [
26499
26553
  "GET",
@@ -26711,7 +26765,7 @@ var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26711
26765
  };
26712
26766
  }));
26713
26767
  //#endregion
26714
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/global.js
26768
+ //#region node_modules/undici/lib/web/fetch/global.js
26715
26769
  var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26716
26770
  var globalOrigin = Symbol.for("undici.globalOrigin.1");
26717
26771
  function getGlobalOrigin() {
@@ -26742,7 +26796,7 @@ var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26742
26796
  };
26743
26797
  }));
26744
26798
  //#endregion
26745
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/data-url.js
26799
+ //#region node_modules/undici/lib/web/fetch/data-url.js
26746
26800
  var require_data_url = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26747
26801
  var assert$23 = __require("node:assert");
26748
26802
  var encoder = new TextEncoder();
@@ -27077,7 +27131,7 @@ var require_data_url = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27077
27131
  };
27078
27132
  }));
27079
27133
  //#endregion
27080
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/webidl.js
27134
+ //#region node_modules/undici/lib/web/fetch/webidl.js
27081
27135
  var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27082
27136
  var { types: types$3, inspect } = __require("node:util");
27083
27137
  var { markAsUncloneable } = __require("node:worker_threads");
@@ -27393,7 +27447,7 @@ var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27393
27447
  module.exports = { webidl };
27394
27448
  }));
27395
27449
  //#endregion
27396
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/util.js
27450
+ //#region node_modules/undici/lib/web/fetch/util.js
27397
27451
  var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27398
27452
  var { Transform: Transform$2 } = __require("node:stream");
27399
27453
  var zlib$1 = __require("node:zlib");
@@ -28206,7 +28260,7 @@ var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28206
28260
  };
28207
28261
  }));
28208
28262
  //#endregion
28209
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/symbols.js
28263
+ //#region node_modules/undici/lib/web/fetch/symbols.js
28210
28264
  var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28211
28265
  module.exports = {
28212
28266
  kUrl: Symbol("url"),
@@ -28217,7 +28271,7 @@ var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28217
28271
  };
28218
28272
  }));
28219
28273
  //#endregion
28220
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/file.js
28274
+ //#region node_modules/undici/lib/web/fetch/file.js
28221
28275
  var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28222
28276
  var { Blob: Blob$2, File: File$1 } = __require("node:buffer");
28223
28277
  var { kState } = require_symbols$3();
@@ -28280,7 +28334,7 @@ var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28280
28334
  };
28281
28335
  }));
28282
28336
  //#endregion
28283
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/formdata.js
28337
+ //#region node_modules/undici/lib/web/fetch/formdata.js
28284
28338
  var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28285
28339
  var { isBlobLike, iteratorMixin } = require_util$6();
28286
28340
  var { kState } = require_symbols$3();
@@ -28415,7 +28469,7 @@ var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28415
28469
  };
28416
28470
  }));
28417
28471
  //#endregion
28418
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/formdata-parser.js
28472
+ //#region node_modules/undici/lib/web/fetch/formdata-parser.js
28419
28473
  var require_formdata_parser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28420
28474
  var { isUSVString, bufferToLowerCasedHeaderName } = require_util$7();
28421
28475
  var { utf8DecodeBytes } = require_util$6();
@@ -28614,7 +28668,7 @@ var require_formdata_parser = /* @__PURE__ */ __commonJSMin(((exports, module) =
28614
28668
  };
28615
28669
  }));
28616
28670
  //#endregion
28617
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/body.js
28671
+ //#region node_modules/undici/lib/web/fetch/body.js
28618
28672
  var require_body = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28619
28673
  var util = require_util$7();
28620
28674
  var { ReadableStreamFrom, isBlobLike, isReadableStreamLike, readableStreamClose, createDeferredPromise, fullyReadBody, extractMimeType, utf8DecodeBytes } = require_util$6();
@@ -28871,7 +28925,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r\n\r\n`);
28871
28925
  };
28872
28926
  }));
28873
28927
  //#endregion
28874
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/client-h1.js
28928
+ //#region node_modules/undici/lib/dispatcher/client-h1.js
28875
28929
  var require_client_h1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28876
28930
  var assert$19 = __require("node:assert");
28877
28931
  var util = require_util$7();
@@ -29727,7 +29781,7 @@ var require_client_h1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
29727
29781
  module.exports = connectH1;
29728
29782
  }));
29729
29783
  //#endregion
29730
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/client-h2.js
29784
+ //#region node_modules/undici/lib/dispatcher/client-h2.js
29731
29785
  var require_client_h2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
29732
29786
  var assert$18 = __require("node:assert");
29733
29787
  var { pipeline: pipeline$2 } = __require("node:stream");
@@ -30113,7 +30167,7 @@ var require_client_h2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30113
30167
  module.exports = connectH2;
30114
30168
  }));
30115
30169
  //#endregion
30116
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/handler/redirect-handler.js
30170
+ //#region node_modules/undici/lib/handler/redirect-handler.js
30117
30171
  var require_redirect_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30118
30172
  var util = require_util$7();
30119
30173
  var { kBodyUsed } = require_symbols$4();
@@ -30239,7 +30293,7 @@ var require_redirect_handler = /* @__PURE__ */ __commonJSMin(((exports, module)
30239
30293
  module.exports = RedirectHandler;
30240
30294
  }));
30241
30295
  //#endregion
30242
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/redirect-interceptor.js
30296
+ //#region node_modules/undici/lib/interceptor/redirect-interceptor.js
30243
30297
  var require_redirect_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30244
30298
  var RedirectHandler = require_redirect_handler();
30245
30299
  function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
@@ -30259,7 +30313,7 @@ var require_redirect_interceptor = /* @__PURE__ */ __commonJSMin(((exports, modu
30259
30313
  module.exports = createRedirectInterceptor;
30260
30314
  }));
30261
30315
  //#endregion
30262
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/client.js
30316
+ //#region node_modules/undici/lib/dispatcher/client.js
30263
30317
  var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30264
30318
  var assert$16 = __require("node:assert");
30265
30319
  var net = __require("node:net");
@@ -30594,7 +30648,7 @@ var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30594
30648
  module.exports = Client;
30595
30649
  }));
30596
30650
  //#endregion
30597
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/fixed-queue.js
30651
+ //#region node_modules/undici/lib/dispatcher/fixed-queue.js
30598
30652
  var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30599
30653
  var kSize = 2048;
30600
30654
  var kMask = kSize - 1;
@@ -30643,7 +30697,7 @@ var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30643
30697
  };
30644
30698
  }));
30645
30699
  //#endregion
30646
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/pool-stats.js
30700
+ //#region node_modules/undici/lib/dispatcher/pool-stats.js
30647
30701
  var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30648
30702
  var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols$4();
30649
30703
  var kPool = Symbol("pool");
@@ -30673,7 +30727,7 @@ var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30673
30727
  module.exports = PoolStats;
30674
30728
  }));
30675
30729
  //#endregion
30676
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/pool-base.js
30730
+ //#region node_modules/undici/lib/dispatcher/pool-base.js
30677
30731
  var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30678
30732
  var DispatcherBase = require_dispatcher_base();
30679
30733
  var FixedQueue = require_fixed_queue();
@@ -30807,7 +30861,7 @@ var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30807
30861
  };
30808
30862
  }));
30809
30863
  //#endregion
30810
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/pool.js
30864
+ //#region node_modules/undici/lib/dispatcher/pool.js
30811
30865
  var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30812
30866
  var { PoolBase, kClients, kNeedDrain, kAddClient, kGetDispatcher } = require_pool_base();
30813
30867
  var Client = require_client();
@@ -30868,7 +30922,7 @@ var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30868
30922
  module.exports = Pool;
30869
30923
  }));
30870
30924
  //#endregion
30871
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/balanced-pool.js
30925
+ //#region node_modules/undici/lib/dispatcher/balanced-pool.js
30872
30926
  var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30873
30927
  var { BalancedPoolMissingUpstreamError, InvalidArgumentError } = require_errors();
30874
30928
  var { PoolBase, kClients, kNeedDrain, kAddClient, kRemoveClient, kGetDispatcher } = require_pool_base();
@@ -30979,7 +31033,7 @@ var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) =>
30979
31033
  module.exports = BalancedPool;
30980
31034
  }));
30981
31035
  //#endregion
30982
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/agent.js
31036
+ //#region node_modules/undici/lib/dispatcher/agent.js
30983
31037
  var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30984
31038
  var { InvalidArgumentError } = require_errors();
30985
31039
  var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
@@ -31059,7 +31113,7 @@ var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31059
31113
  module.exports = Agent;
31060
31114
  }));
31061
31115
  //#endregion
31062
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/proxy-agent.js
31116
+ //#region node_modules/undici/lib/dispatcher/proxy-agent.js
31063
31117
  var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31064
31118
  var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
31065
31119
  var { URL: URL$1 } = __require("node:url");
@@ -31257,7 +31311,7 @@ var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31257
31311
  module.exports = ProxyAgent;
31258
31312
  }));
31259
31313
  //#endregion
31260
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
31314
+ //#region node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
31261
31315
  var require_env_http_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31262
31316
  var DispatcherBase = require_dispatcher_base();
31263
31317
  var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols$4();
@@ -31357,7 +31411,7 @@ var require_env_http_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, modu
31357
31411
  module.exports = EnvHttpProxyAgent;
31358
31412
  }));
31359
31413
  //#endregion
31360
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/handler/retry-handler.js
31414
+ //#region node_modules/undici/lib/handler/retry-handler.js
31361
31415
  var require_retry_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31362
31416
  var assert$15 = __require("node:assert");
31363
31417
  var { kRetryHandlerDefaultRetry } = require_symbols$4();
@@ -31579,7 +31633,7 @@ var require_retry_handler = /* @__PURE__ */ __commonJSMin(((exports, module) =>
31579
31633
  };
31580
31634
  }));
31581
31635
  //#endregion
31582
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/retry-agent.js
31636
+ //#region node_modules/undici/lib/dispatcher/retry-agent.js
31583
31637
  var require_retry_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31584
31638
  var Dispatcher = require_dispatcher();
31585
31639
  var RetryHandler = require_retry_handler();
@@ -31611,7 +31665,7 @@ var require_retry_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31611
31665
  module.exports = RetryAgent;
31612
31666
  }));
31613
31667
  //#endregion
31614
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/readable.js
31668
+ //#region node_modules/undici/lib/api/readable.js
31615
31669
  var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31616
31670
  var assert$14 = __require("node:assert");
31617
31671
  var { Readable: Readable$2 } = __require("node:stream");
@@ -31839,7 +31893,7 @@ var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31839
31893
  };
31840
31894
  }));
31841
31895
  //#endregion
31842
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/util.js
31896
+ //#region node_modules/undici/lib/api/util.js
31843
31897
  var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31844
31898
  var assert$13 = __require("node:assert");
31845
31899
  var { ResponseStatusCodeError } = require_errors();
@@ -31892,7 +31946,7 @@ var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31892
31946
  };
31893
31947
  }));
31894
31948
  //#endregion
31895
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-request.js
31949
+ //#region node_modules/undici/lib/api/api-request.js
31896
31950
  var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31897
31951
  var assert$12 = __require("node:assert");
31898
31952
  var { Readable } = require_readable();
@@ -32044,7 +32098,7 @@ var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32044
32098
  module.exports.RequestHandler = RequestHandler;
32045
32099
  }));
32046
32100
  //#endregion
32047
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/abort-signal.js
32101
+ //#region node_modules/undici/lib/api/abort-signal.js
32048
32102
  var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32049
32103
  var { addAbortListener } = require_util$7();
32050
32104
  var { RequestAbortedError } = require_errors();
@@ -32083,7 +32137,7 @@ var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32083
32137
  };
32084
32138
  }));
32085
32139
  //#endregion
32086
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-stream.js
32140
+ //#region node_modules/undici/lib/api/api-stream.js
32087
32141
  var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32088
32142
  var assert$11 = __require("node:assert");
32089
32143
  var { finished: finished$1, PassThrough: PassThrough$1 } = __require("node:stream");
@@ -32228,7 +32282,7 @@ var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32228
32282
  module.exports = stream;
32229
32283
  }));
32230
32284
  //#endregion
32231
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-pipeline.js
32285
+ //#region node_modules/undici/lib/api/api-pipeline.js
32232
32286
  var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32233
32287
  var { Readable: Readable$1, Duplex, PassThrough } = __require("node:stream");
32234
32288
  var { InvalidArgumentError, InvalidReturnValueError, RequestAbortedError } = require_errors();
@@ -32396,7 +32450,7 @@ var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32396
32450
  module.exports = pipeline;
32397
32451
  }));
32398
32452
  //#endregion
32399
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-upgrade.js
32453
+ //#region node_modules/undici/lib/api/api-upgrade.js
32400
32454
  var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32401
32455
  var { InvalidArgumentError, SocketError } = require_errors();
32402
32456
  var { AsyncResource: AsyncResource$1 } = __require("node:async_hooks");
@@ -32475,7 +32529,7 @@ var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32475
32529
  module.exports = upgrade;
32476
32530
  }));
32477
32531
  //#endregion
32478
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-connect.js
32532
+ //#region node_modules/undici/lib/api/api-connect.js
32479
32533
  var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32480
32534
  var assert$8 = __require("node:assert");
32481
32535
  var { AsyncResource } = __require("node:async_hooks");
@@ -32553,7 +32607,7 @@ var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32553
32607
  module.exports = connect;
32554
32608
  }));
32555
32609
  //#endregion
32556
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/index.js
32610
+ //#region node_modules/undici/lib/api/index.js
32557
32611
  var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32558
32612
  module.exports.request = require_api_request();
32559
32613
  module.exports.stream = require_api_stream();
@@ -32562,7 +32616,7 @@ var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32562
32616
  module.exports.connect = require_api_connect();
32563
32617
  }));
32564
32618
  //#endregion
32565
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-errors.js
32619
+ //#region node_modules/undici/lib/mock/mock-errors.js
32566
32620
  var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32567
32621
  var { UndiciError } = require_errors();
32568
32622
  var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
@@ -32581,7 +32635,7 @@ var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32581
32635
  } };
32582
32636
  }));
32583
32637
  //#endregion
32584
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-symbols.js
32638
+ //#region node_modules/undici/lib/mock/mock-symbols.js
32585
32639
  var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32586
32640
  module.exports = {
32587
32641
  kAgent: Symbol("agent"),
@@ -32606,7 +32660,7 @@ var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32606
32660
  };
32607
32661
  }));
32608
32662
  //#endregion
32609
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-utils.js
32663
+ //#region node_modules/undici/lib/mock/mock-utils.js
32610
32664
  var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32611
32665
  var { MockNotMatchedError } = require_mock_errors();
32612
32666
  var { kDispatches, kMockAgent, kOriginalDispatch, kOrigin, kGetNetConnect } = require_mock_symbols();
@@ -32843,7 +32897,7 @@ var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32843
32897
  };
32844
32898
  }));
32845
32899
  //#endregion
32846
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-interceptor.js
32900
+ //#region node_modules/undici/lib/mock/mock-interceptor.js
32847
32901
  var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32848
32902
  var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
32849
32903
  var { kDispatches, kDispatchKey, kDefaultHeaders, kDefaultTrailers, kContentLength, kMockDispatch } = require_mock_symbols();
@@ -32983,7 +33037,7 @@ var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module)
32983
33037
  module.exports.MockScope = MockScope;
32984
33038
  }));
32985
33039
  //#endregion
32986
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-client.js
33040
+ //#region node_modules/undici/lib/mock/mock-client.js
32987
33041
  var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32988
33042
  var { promisify: promisify$1 } = __require("node:util");
32989
33043
  var Client = require_client();
@@ -33026,7 +33080,7 @@ var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33026
33080
  module.exports = MockClient;
33027
33081
  }));
33028
33082
  //#endregion
33029
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-pool.js
33083
+ //#region node_modules/undici/lib/mock/mock-pool.js
33030
33084
  var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33031
33085
  var { promisify } = __require("node:util");
33032
33086
  var Pool = require_pool();
@@ -33069,7 +33123,7 @@ var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33069
33123
  module.exports = MockPool;
33070
33124
  }));
33071
33125
  //#endregion
33072
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/pluralizer.js
33126
+ //#region node_modules/undici/lib/mock/pluralizer.js
33073
33127
  var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33074
33128
  var singulars = {
33075
33129
  pronoun: "it",
@@ -33101,7 +33155,7 @@ var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33101
33155
  };
33102
33156
  }));
33103
33157
  //#endregion
33104
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/pending-interceptors-formatter.js
33158
+ //#region node_modules/undici/lib/mock/pending-interceptors-formatter.js
33105
33159
  var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33106
33160
  var { Transform: Transform$1 } = __require("node:stream");
33107
33161
  var { Console } = __require("node:console");
@@ -33136,7 +33190,7 @@ var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exp
33136
33190
  };
33137
33191
  }));
33138
33192
  //#endregion
33139
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-agent.js
33193
+ //#region node_modules/undici/lib/mock/mock-agent.js
33140
33194
  var require_mock_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33141
33195
  var { kClients } = require_symbols$4();
33142
33196
  var Agent = require_agent();
@@ -33239,7 +33293,7 @@ ${pendingInterceptorsFormatter.format(pending)}
33239
33293
  module.exports = MockAgent;
33240
33294
  }));
33241
33295
  //#endregion
33242
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/global.js
33296
+ //#region node_modules/undici/lib/global.js
33243
33297
  var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33244
33298
  var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
33245
33299
  var { InvalidArgumentError } = require_errors();
@@ -33263,7 +33317,7 @@ var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33263
33317
  };
33264
33318
  }));
33265
33319
  //#endregion
33266
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/handler/decorator-handler.js
33320
+ //#region node_modules/undici/lib/handler/decorator-handler.js
33267
33321
  var require_decorator_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33268
33322
  module.exports = class DecoratorHandler {
33269
33323
  #handler;
@@ -33298,7 +33352,7 @@ var require_decorator_handler = /* @__PURE__ */ __commonJSMin(((exports, module)
33298
33352
  };
33299
33353
  }));
33300
33354
  //#endregion
33301
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/redirect.js
33355
+ //#region node_modules/undici/lib/interceptor/redirect.js
33302
33356
  var require_redirect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33303
33357
  var RedirectHandler = require_redirect_handler();
33304
33358
  module.exports = (opts) => {
@@ -33313,7 +33367,7 @@ var require_redirect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33313
33367
  };
33314
33368
  }));
33315
33369
  //#endregion
33316
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/retry.js
33370
+ //#region node_modules/undici/lib/interceptor/retry.js
33317
33371
  var require_retry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33318
33372
  var RetryHandler = require_retry_handler();
33319
33373
  module.exports = (globalOpts) => {
@@ -33334,7 +33388,7 @@ var require_retry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33334
33388
  };
33335
33389
  }));
33336
33390
  //#endregion
33337
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/dump.js
33391
+ //#region node_modules/undici/lib/interceptor/dump.js
33338
33392
  var require_dump = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33339
33393
  var util = require_util$7();
33340
33394
  var { InvalidArgumentError, RequestAbortedError } = require_errors();
@@ -33401,7 +33455,7 @@ var require_dump = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33401
33455
  module.exports = createDumpInterceptor;
33402
33456
  }));
33403
33457
  //#endregion
33404
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/dns.js
33458
+ //#region node_modules/undici/lib/interceptor/dns.js
33405
33459
  var require_dns = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33406
33460
  var { isIP } = __require("node:net");
33407
33461
  var { lookup } = __require("node:dns");
@@ -33614,7 +33668,7 @@ var require_dns = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33614
33668
  };
33615
33669
  }));
33616
33670
  //#endregion
33617
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/headers.js
33671
+ //#region node_modules/undici/lib/web/fetch/headers.js
33618
33672
  var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33619
33673
  var { kConstruct } = require_symbols$4();
33620
33674
  var { kEnumerableProperty } = require_util$7();
@@ -33979,7 +34033,7 @@ var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33979
34033
  };
33980
34034
  }));
33981
34035
  //#endregion
33982
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/response.js
34036
+ //#region node_modules/undici/lib/web/fetch/response.js
33983
34037
  var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33984
34038
  var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
33985
34039
  var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
@@ -34292,7 +34346,7 @@ var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34292
34346
  };
34293
34347
  }));
34294
34348
  //#endregion
34295
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/dispatcher-weakref.js
34349
+ //#region node_modules/undici/lib/web/fetch/dispatcher-weakref.js
34296
34350
  var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34297
34351
  var { kConnected, kSize } = require_symbols$4();
34298
34352
  var CompatWeakRef = class {
@@ -34329,7 +34383,7 @@ var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module
34329
34383
  };
34330
34384
  }));
34331
34385
  //#endregion
34332
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/request.js
34386
+ //#region node_modules/undici/lib/web/fetch/request.js
34333
34387
  var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34334
34388
  var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
34335
34389
  var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
@@ -34838,7 +34892,7 @@ var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34838
34892
  };
34839
34893
  }));
34840
34894
  //#endregion
34841
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/index.js
34895
+ //#region node_modules/undici/lib/web/fetch/index.js
34842
34896
  var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34843
34897
  var { makeNetworkError, makeAppropriateNetworkError, filterResponse, makeResponse, fromInnerResponse } = require_response();
34844
34898
  var { HeadersList } = require_headers();
@@ -35536,7 +35590,7 @@ var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35536
35590
  };
35537
35591
  }));
35538
35592
  //#endregion
35539
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/symbols.js
35593
+ //#region node_modules/undici/lib/web/fileapi/symbols.js
35540
35594
  var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35541
35595
  module.exports = {
35542
35596
  kState: Symbol("FileReader state"),
@@ -35548,7 +35602,7 @@ var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35548
35602
  };
35549
35603
  }));
35550
35604
  //#endregion
35551
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/progressevent.js
35605
+ //#region node_modules/undici/lib/web/fileapi/progressevent.js
35552
35606
  var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35553
35607
  var { webidl } = require_webidl();
35554
35608
  var kState = Symbol("ProgressEvent state");
@@ -35614,7 +35668,7 @@ var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) =>
35614
35668
  module.exports = { ProgressEvent };
35615
35669
  }));
35616
35670
  //#endregion
35617
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/encoding.js
35671
+ //#region node_modules/undici/lib/web/fileapi/encoding.js
35618
35672
  var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35619
35673
  /**
35620
35674
  * @see https://encoding.spec.whatwg.org/#concept-encoding-get
@@ -35856,7 +35910,7 @@ var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35856
35910
  module.exports = { getEncoding };
35857
35911
  }));
35858
35912
  //#endregion
35859
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/util.js
35913
+ //#region node_modules/undici/lib/web/fileapi/util.js
35860
35914
  var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35861
35915
  var { kState, kError, kResult, kAborted, kLastProgressEventFired } = require_symbols$2();
35862
35916
  var { ProgressEvent } = require_progressevent();
@@ -36032,7 +36086,7 @@ var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36032
36086
  };
36033
36087
  }));
36034
36088
  //#endregion
36035
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/filereader.js
36089
+ //#region node_modules/undici/lib/web/fileapi/filereader.js
36036
36090
  var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36037
36091
  var { staticPropertyDescriptors, readOperation, fireAProgressEvent } = require_util$4();
36038
36092
  var { kState, kError, kResult, kEvents, kAborted } = require_symbols$2();
@@ -36245,12 +36299,12 @@ var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36245
36299
  module.exports = { FileReader };
36246
36300
  }));
36247
36301
  //#endregion
36248
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/symbols.js
36302
+ //#region node_modules/undici/lib/web/cache/symbols.js
36249
36303
  var require_symbols$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36250
36304
  module.exports = { kConstruct: require_symbols$4().kConstruct };
36251
36305
  }));
36252
36306
  //#endregion
36253
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/util.js
36307
+ //#region node_modules/undici/lib/web/cache/util.js
36254
36308
  var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36255
36309
  var assert$3 = __require("node:assert");
36256
36310
  var { URLSerializer } = require_data_url();
@@ -36284,7 +36338,7 @@ var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36284
36338
  };
36285
36339
  }));
36286
36340
  //#endregion
36287
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/cache.js
36341
+ //#region node_modules/undici/lib/web/cache/cache.js
36288
36342
  var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36289
36343
  var { kConstruct } = require_symbols$1();
36290
36344
  var { urlEquals, getFieldValues } = require_util$3();
@@ -36733,7 +36787,7 @@ var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36733
36787
  module.exports = { Cache };
36734
36788
  }));
36735
36789
  //#endregion
36736
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/cachestorage.js
36790
+ //#region node_modules/undici/lib/web/cache/cachestorage.js
36737
36791
  var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36738
36792
  var { kConstruct } = require_symbols$1();
36739
36793
  var { Cache } = require_cache();
@@ -36823,7 +36877,7 @@ var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36823
36877
  module.exports = { CacheStorage };
36824
36878
  }));
36825
36879
  //#endregion
36826
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/constants.js
36880
+ //#region node_modules/undici/lib/web/cookies/constants.js
36827
36881
  var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36828
36882
  module.exports = {
36829
36883
  maxAttributeValueSize: 1024,
@@ -36831,7 +36885,7 @@ var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36831
36885
  };
36832
36886
  }));
36833
36887
  //#endregion
36834
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/util.js
36888
+ //#region node_modules/undici/lib/web/cookies/util.js
36835
36889
  var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36836
36890
  /**
36837
36891
  * @param {string} value
@@ -37025,7 +37079,7 @@ var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37025
37079
  };
37026
37080
  }));
37027
37081
  //#endregion
37028
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/parse.js
37082
+ //#region node_modules/undici/lib/web/cookies/parse.js
37029
37083
  var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37030
37084
  var { maxNameValuePairSize, maxAttributeValueSize } = require_constants$1();
37031
37085
  var { isCTLExcludingHtab } = require_util$2();
@@ -37127,7 +37181,7 @@ var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37127
37181
  };
37128
37182
  }));
37129
37183
  //#endregion
37130
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/index.js
37184
+ //#region node_modules/undici/lib/web/cookies/index.js
37131
37185
  var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37132
37186
  var { parseSetCookie } = require_parse();
37133
37187
  var { stringify } = require_util$2();
@@ -37278,7 +37332,7 @@ var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37278
37332
  };
37279
37333
  }));
37280
37334
  //#endregion
37281
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/events.js
37335
+ //#region node_modules/undici/lib/web/websocket/events.js
37282
37336
  var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37283
37337
  var { webidl } = require_webidl();
37284
37338
  var { kEnumerableProperty } = require_util$7();
@@ -37541,7 +37595,7 @@ var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37541
37595
  };
37542
37596
  }));
37543
37597
  //#endregion
37544
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/constants.js
37598
+ //#region node_modules/undici/lib/web/websocket/constants.js
37545
37599
  var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37546
37600
  module.exports = {
37547
37601
  uid: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
@@ -37586,7 +37640,7 @@ var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37586
37640
  };
37587
37641
  }));
37588
37642
  //#endregion
37589
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/symbols.js
37643
+ //#region node_modules/undici/lib/web/websocket/symbols.js
37590
37644
  var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37591
37645
  module.exports = {
37592
37646
  kWebSocketURL: Symbol("url"),
@@ -37600,7 +37654,7 @@ var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37600
37654
  };
37601
37655
  }));
37602
37656
  //#endregion
37603
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/util.js
37657
+ //#region node_modules/undici/lib/web/websocket/util.js
37604
37658
  var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37605
37659
  var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols();
37606
37660
  var { states, opcodes } = require_constants();
@@ -37782,7 +37836,7 @@ var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37782
37836
  };
37783
37837
  }));
37784
37838
  //#endregion
37785
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/frame.js
37839
+ //#region node_modules/undici/lib/web/websocket/frame.js
37786
37840
  var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37787
37841
  var { maxUnsigned16Bit } = require_constants();
37788
37842
  var BUFFER_SIZE = 16386;
@@ -37854,7 +37908,7 @@ var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37854
37908
  module.exports = { WebsocketFrameSend };
37855
37909
  }));
37856
37910
  //#endregion
37857
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/connection.js
37911
+ //#region node_modules/undici/lib/web/websocket/connection.js
37858
37912
  var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37859
37913
  var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants();
37860
37914
  var { kReadyState, kSentClose, kByteParser, kReceivedClose, kResponse } = require_symbols();
@@ -38019,7 +38073,7 @@ var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38019
38073
  };
38020
38074
  }));
38021
38075
  //#endregion
38022
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/permessage-deflate.js
38076
+ //#region node_modules/undici/lib/web/websocket/permessage-deflate.js
38023
38077
  var require_permessage_deflate = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38024
38078
  var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("node:zlib");
38025
38079
  var { isValidClientWindowBits } = require_util$1();
@@ -38098,7 +38152,7 @@ var require_permessage_deflate = /* @__PURE__ */ __commonJSMin(((exports, module
38098
38152
  module.exports = { PerMessageDeflate };
38099
38153
  }));
38100
38154
  //#endregion
38101
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/receiver.js
38155
+ //#region node_modules/undici/lib/web/websocket/receiver.js
38102
38156
  var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38103
38157
  var { Writable } = __require("node:stream");
38104
38158
  var assert = __require("node:assert");
@@ -38415,7 +38469,7 @@ var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38415
38469
  module.exports = { ByteParser };
38416
38470
  }));
38417
38471
  //#endregion
38418
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/sender.js
38472
+ //#region node_modules/undici/lib/web/websocket/sender.js
38419
38473
  var require_sender = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38420
38474
  var { WebsocketFrameSend } = require_frame();
38421
38475
  var { opcodes, sendHints } = require_constants();
@@ -38495,7 +38549,7 @@ var require_sender = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38495
38549
  module.exports = { SendQueue };
38496
38550
  }));
38497
38551
  //#endregion
38498
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/websocket.js
38552
+ //#region node_modules/undici/lib/web/websocket/websocket.js
38499
38553
  var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38500
38554
  var { webidl } = require_webidl();
38501
38555
  var { URLSerializer } = require_data_url();
@@ -38796,7 +38850,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38796
38850
  module.exports = { WebSocket };
38797
38851
  }));
38798
38852
  //#endregion
38799
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/eventsource/util.js
38853
+ //#region node_modules/undici/lib/web/eventsource/util.js
38800
38854
  var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38801
38855
  /**
38802
38856
  * Checks if the given value is a valid LastEventId.
@@ -38828,7 +38882,7 @@ var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38828
38882
  };
38829
38883
  }));
38830
38884
  //#endregion
38831
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/eventsource/eventsource-stream.js
38885
+ //#region node_modules/undici/lib/web/eventsource/eventsource-stream.js
38832
38886
  var require_eventsource_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38833
38887
  var { Transform } = __require("node:stream");
38834
38888
  var { isASCIINumber, isValidLastEventId } = require_util();
@@ -39050,7 +39104,7 @@ var require_eventsource_stream = /* @__PURE__ */ __commonJSMin(((exports, module
39050
39104
  module.exports = { EventSourceStream };
39051
39105
  }));
39052
39106
  //#endregion
39053
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/eventsource/eventsource.js
39107
+ //#region node_modules/undici/lib/web/eventsource/eventsource.js
39054
39108
  var require_eventsource = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39055
39109
  var { pipeline } = __require("node:stream");
39056
39110
  var { fetching } = require_fetch();
@@ -39363,7 +39417,7 @@ var require_eventsource = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39363
39417
  };
39364
39418
  }));
39365
39419
  //#endregion
39366
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/index.js
39420
+ //#region node_modules/undici/index.js
39367
39421
  var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39368
39422
  var Client = require_client();
39369
39423
  var Dispatcher = require_dispatcher();
@@ -39488,7 +39542,7 @@ var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39488
39542
  module.exports.EventSource = EventSource;
39489
39543
  }));
39490
39544
  //#endregion
39491
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/util.js
39545
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/util.js
39492
39546
  var util;
39493
39547
  (function(util) {
39494
39548
  util.assertEqual = (_) => {};
@@ -39584,7 +39638,7 @@ var getParsedType = (data) => {
39584
39638
  }
39585
39639
  };
39586
39640
  //#endregion
39587
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/ZodError.js
39641
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/ZodError.js
39588
39642
  var ZodIssueCode = util.arrayToEnum([
39589
39643
  "invalid_type",
39590
39644
  "invalid_literal",
@@ -39683,7 +39737,7 @@ ZodError.create = (issues) => {
39683
39737
  return new ZodError(issues);
39684
39738
  };
39685
39739
  //#endregion
39686
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/locales/en.js
39740
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/locales/en.js
39687
39741
  var errorMap = (issue, _ctx) => {
39688
39742
  let message;
39689
39743
  switch (issue.code) {
@@ -39760,13 +39814,13 @@ var errorMap = (issue, _ctx) => {
39760
39814
  return { message };
39761
39815
  };
39762
39816
  //#endregion
39763
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/errors.js
39817
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/errors.js
39764
39818
  var overrideErrorMap = errorMap;
39765
39819
  function getErrorMap() {
39766
39820
  return overrideErrorMap;
39767
39821
  }
39768
39822
  //#endregion
39769
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/parseUtil.js
39823
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/parseUtil.js
39770
39824
  var makeIssue = (params) => {
39771
39825
  const { data, path, errorMaps, issueData } = params;
39772
39826
  const fullPath = [...path, ...issueData.path || []];
@@ -39870,14 +39924,14 @@ var isDirty = (x) => x.status === "dirty";
39870
39924
  var isValid = (x) => x.status === "valid";
39871
39925
  var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
39872
39926
  //#endregion
39873
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/errorUtil.js
39927
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/errorUtil.js
39874
39928
  var errorUtil;
39875
39929
  (function(errorUtil) {
39876
39930
  errorUtil.errToObj = (message) => typeof message === "string" ? { message } : message || {};
39877
39931
  errorUtil.toString = (message) => typeof message === "string" ? message : message?.message;
39878
39932
  })(errorUtil || (errorUtil = {}));
39879
39933
  //#endregion
39880
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/types.js
39934
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/types.js
39881
39935
  var ParseInputLazyPath = class {
39882
39936
  constructor(parent, value, path, key) {
39883
39937
  this._cachedPath = [];
@@ -43029,7 +43083,7 @@ ZodNullable.create;
43029
43083
  ZodEffects.createWithPreprocess;
43030
43084
  ZodPipeline.create;
43031
43085
  //#endregion
43032
- //#region ../../node_modules/@apocaliss92/nodewitt/dist/index.js
43086
+ //#region node_modules/@apocaliss92/nodewitt/dist/index.js
43033
43087
  var import_undici = require_undici();
43034
43088
  var DEFAULT_PORT = 80;
43035
43089
  var DEFAULT_TIMEOUT_MS = 3e4;
@@ -43983,6 +44037,71 @@ var fixed = {
43983
44037
  combo: [...COMBO_KEYS],
43984
44038
  co2_pm: [...COMBO_KEYS]
43985
44039
  };
44040
+ var WEATHER_STATION_MODELS = /* @__PURE__ */ new Set([
44041
+ "wh69",
44042
+ "wh65",
44043
+ "ws90",
44044
+ "wh80",
44045
+ "ws80",
44046
+ "wh90",
44047
+ "wh77",
44048
+ "wh85",
44049
+ "ws85",
44050
+ "wh68",
44051
+ "weather_station",
44052
+ "weather_station_wh69",
44053
+ "weather_station_ws90",
44054
+ "weather_station_wh90",
44055
+ "weather_station_wh77"
44056
+ ]);
44057
+ var CHANNEL_SENSOR_MODELS = /* @__PURE__ */ new Set([
44058
+ "wh31",
44059
+ "wh41",
44060
+ "wh52",
44061
+ "wh51",
44062
+ "wh55",
44063
+ "wh34",
44064
+ "wn34",
44065
+ "wh35",
44066
+ "wn35",
44067
+ "wh54",
44068
+ "temp_hum",
44069
+ "pm25",
44070
+ "soil",
44071
+ "soil_ec",
44072
+ "leak",
44073
+ "temp_only",
44074
+ "leaf_wetness",
44075
+ "lds"
44076
+ ]);
44077
+ var EXTERNAL_MODELS = /* @__PURE__ */ new Set([
44078
+ "wh57",
44079
+ "wh40",
44080
+ "wh45",
44081
+ "wh46",
44082
+ "lightning",
44083
+ "rain",
44084
+ "combo",
44085
+ "co2_pm"
44086
+ ]);
44087
+ var GATEWAY_MODELS = /* @__PURE__ */ new Set([
44088
+ "wh25",
44089
+ "indoor_station",
44090
+ "wh26",
44091
+ "wn32",
44092
+ "outdoor_temp_hum",
44093
+ "wn38",
44094
+ "bgt"
44095
+ ]);
44096
+ function categoryForModel(model) {
44097
+ const key = norm(model ?? "");
44098
+ if (key === "") return "gateway";
44099
+ if (WEATHER_STATION_MODELS.has(key)) return "weather-station";
44100
+ if (CHANNEL_SENSOR_MODELS.has(key)) return "channel-sensor";
44101
+ if (EXTERNAL_MODELS.has(key)) return "external";
44102
+ if (GATEWAY_MODELS.has(key)) return "gateway";
44103
+ return "gateway";
44104
+ }
43986
44105
  function liveDataKeysForModel(model, channel) {
43987
44106
  const key = norm(model);
43988
44107
  const channelBuilder = Object.prototype.hasOwnProperty.call(channelized, key) ? channelized[key] : void 0;
@@ -44075,6 +44194,7 @@ var LocalPoller = class {
44075
44194
  scanTimer;
44076
44195
  mappingTimer;
44077
44196
  started = false;
44197
+ mappingPrimed = false;
44078
44198
  gatewayTempUnit = "C";
44079
44199
  stationInfo = {};
44080
44200
  /** Gateway identity (model/firmware) captured from the last `/get_version`. Best-effort. */
@@ -44111,6 +44231,7 @@ var LocalPoller = class {
44111
44231
  this.scanTimer = void 0;
44112
44232
  this.mappingTimer = void 0;
44113
44233
  this.started = false;
44234
+ this.mappingPrimed = false;
44114
44235
  }
44115
44236
  /** Re-read the gateway unit + sensor list and rebuild the live-key -> hardware-id mapping. Offline-tolerant. */
44116
44237
  async refreshMapping() {
@@ -44125,6 +44246,7 @@ var LocalPoller = class {
44125
44246
  };
44126
44247
  const sensors = await this.opts.endpoints.getAllSensors();
44127
44248
  this.mapper.updateMapping(sensors);
44249
+ this.mappingPrimed = true;
44128
44250
  } catch (error) {
44129
44251
  this.opts.onError(error);
44130
44252
  }
@@ -44132,12 +44254,14 @@ var LocalPoller = class {
44132
44254
  /** Fetch + decode + resolve a single live-data snapshot, then emit it. Offline-tolerant. */
44133
44255
  async poll() {
44134
44256
  try {
44257
+ if (!this.mappingPrimed) await this.refreshMapping();
44135
44258
  const raw = await this.opts.endpoints.getLiveData();
44136
44259
  this.opts.onRawFrame?.(raw);
44137
44260
  const resolved = decodeLiveData(raw, this.mapper, {}, this.gatewayTempUnit).map((reading) => ({
44138
44261
  ...reading,
44139
44262
  hardwareId: GATEWAY_KEYS.has(reading.key) ? void 0 : reading.forceHardwareId ?? this.mapper.getHardwareId(reading.key)
44140
44263
  }));
44264
+ if (!this.mappingPrimed) return;
44141
44265
  this.opts.onReadings(resolved);
44142
44266
  } catch (error) {
44143
44267
  this.opts.onError(error);
@@ -44741,11 +44865,13 @@ var Station = class {
44741
44865
  const info = lookup.getSensorInfoForKey(r.key) ?? (owner !== void 0 ? lookup.getSensorInfo(owner) : void 0);
44742
44866
  const id = `${owner ?? GATEWAY_OWNER}:${r.key}`;
44743
44867
  const signal = signalToNumber(info?.signal);
44868
+ const category = categoryForModel(info?.model);
44744
44869
  this.upsert(id, {
44745
44870
  id,
44746
44871
  ...owner !== void 0 ? { hardwareId: owner } : {},
44747
44872
  ...info?.model ? { model: info.model } : {},
44748
44873
  ...info?.channel !== void 0 ? { channel: info.channel } : {},
44874
+ category,
44749
44875
  ...cls.name !== void 0 ? { name: cls.name } : {},
44750
44876
  quantity: cls.quantity,
44751
44877
  value: r.value,
@@ -44777,9 +44903,11 @@ var Station = class {
44777
44903
  if (cls.kind === "battery") continue;
44778
44904
  if (cls.kind !== "measurement") continue;
44779
44905
  const id = `${this.pushOwner(passkey, r.channel)}:${r.key}`;
44906
+ const category = r.channel !== void 0 ? "channel-sensor" : "gateway";
44780
44907
  this.upsert(id, {
44781
44908
  id,
44782
44909
  ...r.channel !== void 0 ? { channel: r.channel } : {},
44910
+ category,
44783
44911
  ...cls.name !== void 0 ? { name: cls.name } : {},
44784
44912
  quantity: cls.quantity,
44785
44913
  value: r.value,
@@ -44878,6 +45006,101 @@ var TypedEmitter = class {
44878
45006
  return this;
44879
45007
  }
44880
45008
  };
45009
+ var CMD_BROADCAST = 18;
45010
+ var DISCOVERY_PORT = 46e3;
45011
+ function buildScanPacket() {
45012
+ const size = 3;
45013
+ const checksum = CMD_BROADCAST + size & 255;
45014
+ return Buffer.from([
45015
+ 255,
45016
+ 255,
45017
+ CMD_BROADCAST,
45018
+ size,
45019
+ checksum
45020
+ ]);
45021
+ }
45022
+ function verifyChecksum(buf) {
45023
+ if (buf.length < 4) return false;
45024
+ let sum = 0;
45025
+ for (let i = 2; i < buf.length - 1; i += 1) sum = sum + (buf[i] ?? 0) & 255;
45026
+ return sum === buf[buf.length - 1];
45027
+ }
45028
+ function parseBroadcastResponse(buf) {
45029
+ if (buf.length < 18) return null;
45030
+ if (buf[0] !== 255 || buf[1] !== 255 || buf[2] !== CMD_BROADCAST) return null;
45031
+ if (!verifyChecksum(buf)) return null;
45032
+ const mac = macFromBytes(buf.subarray(5, 11));
45033
+ const tcpPort = buf.readUInt16BE(15);
45034
+ const ssidLen = buf[17] ?? 0;
45035
+ const ssidEnd = Math.min(18 + ssidLen, buf.length - 1);
45036
+ const { module, model, firmware } = splitSsid(buf.subarray(18, ssidEnd).toString("ascii").trim());
45037
+ return {
45038
+ mac,
45039
+ module,
45040
+ model,
45041
+ firmware,
45042
+ tcpPort
45043
+ };
45044
+ }
45045
+ function macFromBytes(bytes) {
45046
+ return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join(":");
45047
+ }
45048
+ function splitSsid(ssid) {
45049
+ const spaceIdx = ssid.indexOf(" ");
45050
+ const module = spaceIdx >= 0 ? ssid.slice(0, spaceIdx) : ssid;
45051
+ const firmwareRaw = spaceIdx >= 0 ? ssid.slice(spaceIdx + 1).trim() : "";
45052
+ const wifiIdx = module.indexOf("-WIFI");
45053
+ return {
45054
+ module,
45055
+ model: wifiIdx > 0 ? module.slice(0, wifiIdx) : void 0,
45056
+ firmware: firmwareRaw.length > 0 ? firmwareRaw : void 0
45057
+ };
45058
+ }
45059
+ function discoverGateways(socket, opts) {
45060
+ const port = opts?.port ?? DISCOVERY_PORT;
45061
+ const broadcastAddr = opts?.broadcastAddr ?? "255.255.255.255";
45062
+ const timeoutMs = opts?.timeoutMs ?? 3e3;
45063
+ const byMac = /* @__PURE__ */ new Map();
45064
+ socket.onMessage((m) => {
45065
+ const frame = parseBroadcastResponse(m.data);
45066
+ if (frame === null) return;
45067
+ byMac.set(frame.mac, {
45068
+ ip: m.address,
45069
+ mac: frame.mac,
45070
+ name: frame.module.length > 0 ? frame.module : frame.mac,
45071
+ ...frame.model !== void 0 ? { model: frame.model } : {},
45072
+ ...frame.firmware !== void 0 ? { firmware: frame.firmware } : {}
45073
+ });
45074
+ });
45075
+ socket.setBroadcast(true);
45076
+ const scan = buildScanPacket();
45077
+ return new Promise((resolve) => {
45078
+ socket.send(scan, port, broadcastAddr);
45079
+ setTimeout(() => resolve([...byMac.values()]), timeoutMs);
45080
+ });
45081
+ }
45082
+ function createDgramSocket() {
45083
+ return new Promise((resolve, reject) => {
45084
+ const socket = createSocket({
45085
+ type: "udp4",
45086
+ reuseAddr: true
45087
+ });
45088
+ socket.once("error", reject);
45089
+ socket.bind(() => {
45090
+ socket.removeListener("error", reject);
45091
+ resolve({
45092
+ send: (data, port, address) => new Promise((res, rej) => socket.send(data, port, address, (err) => err ? rej(err) : res())),
45093
+ onMessage: (handler) => socket.on("message", (data, rinfo) => handler({
45094
+ data,
45095
+ address: rinfo.address,
45096
+ port: rinfo.port
45097
+ })),
45098
+ setBroadcast: (enabled) => socket.setBroadcast(enabled),
45099
+ close: () => new Promise((res) => socket.close(() => res()))
45100
+ });
45101
+ });
45102
+ });
45103
+ }
44881
45104
  function toError(error) {
44882
45105
  return error instanceof Error ? error : new Error(String(error));
44883
45106
  }
@@ -44902,6 +45125,21 @@ var Ecowitt = class _Ecowitt {
44902
45125
  return _Ecowitt.#buildListener(defaultListenerBuilder(options));
44903
45126
  }
44904
45127
  /**
45128
+ * Discover Ecowitt gateways on the network via the `CMD_BROADCAST` UDP probe (port 46000). Opens a
45129
+ * throwaway UDP socket, sweeps the broadcast address (local subnet by default, or a directed
45130
+ * broadcast passed via {@link DiscoverOptions.broadcastAddr} for another subnet), collects
45131
+ * responders deduped by MAC, and closes the socket. No `Ecowitt` instance or connection is
45132
+ * created — the caller maps the results to whatever onboarding flow it uses.
45133
+ */
45134
+ static async discover(options) {
45135
+ const socket = await createDgramSocket();
45136
+ try {
45137
+ return await discoverGateways(socket, options);
45138
+ } finally {
45139
+ await socket.close().catch(() => void 0);
45140
+ }
45141
+ }
45142
+ /**
44905
45143
  * Build a local-transport facade from a transport builder. The wiring closure that hands the
44906
45144
  * builder its `onReadings`/`onError` callbacks lives HERE, inside the class, so it can call the
44907
45145
  * `#`-private ingest seams directly — no public method, no cast. `#`-private so it is unreachable
@@ -45107,6 +45345,219 @@ objectType({
45107
45345
  })
45108
45346
  });
45109
45347
  //#endregion
45348
+ //#region src/config.ts
45349
+ /**
45350
+ * Operator-supplied Ecowitt gateway settings for ONE broker (= one station).
45351
+ * Two transports behind a `transport` discriminator:
45352
+ *
45353
+ * - `local` (local-poll): the addon polls the gateway over HTTP (`host`/`port`/
45354
+ * optional `password`, with poll + mapping intervals).
45355
+ * - `listener` (push): the addon runs an HTTP server the gateway uploads to
45356
+ * (the gateway's "Customized" upload must point at the hub's LAN IP:port).
45357
+ *
45358
+ * Local-poll is the recommended default — it has no inbound-IP constraint.
45359
+ */
45360
+ var baseFields = {
45361
+ /** Human-overridable station identity used to scope the adopted gateway. */
45362
+ stationId: string().default("").describe("Optional stable station id (auto-derived when blank)") };
45363
+ var ecowittConfigSchema = discriminatedUnion("transport", [object({
45364
+ transport: literal("local"),
45365
+ host: string().min(1).describe("Ecowitt gateway host name or IP address"),
45366
+ port: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(80)).describe("Gateway HTTP port"),
45367
+ password: string().default("").describe("Gateway password (optional — newer firmware)"),
45368
+ pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e3).max(36e5).default(6e4)).describe("Live-data poll interval (ms)"),
45369
+ mappingIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(6e5)).describe("Sensor-map refresh interval (ms)"),
45370
+ ...baseFields
45371
+ }), object({
45372
+ transport: literal("listener"),
45373
+ listenPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(4199)).describe("Local TCP port the gateway uploads to"),
45374
+ listenHost: string().default("").describe("Optional bind host (blank = all interfaces)"),
45375
+ ...baseFields
45376
+ })]);
45377
+ /**
45378
+ * Narrow an `unknown` value to a shallow-cloned plain object record, or an empty
45379
+ * record when it is not a plain object. Mirrors the Homematic `toRecord` helper —
45380
+ * a cast-free boundary narrowing.
45381
+ */
45382
+ function toRecord(value) {
45383
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));
45384
+ return {};
45385
+ }
45386
+ /** Coerce a loose settings blob through the connection schema, applying defaults.
45387
+ * A blob with no `transport` defaults to `local` for back-compat with simple forms. */
45388
+ function settingsToEcowittConfig(settings) {
45389
+ const raw = toRecord(settings);
45390
+ if (raw["transport"] !== "local" && raw["transport"] !== "listener") raw["transport"] = "local";
45391
+ return ecowittConfigSchema.parse(raw);
45392
+ }
45393
+ /**
45394
+ * Persisted config for an Ecowitt gateway {@link import('@camstack/types').DeviceType.Hub}
45395
+ * device. The operator-supplied CONNECTION lives directly on the device (Reolink
45396
+ * pattern) — there is no broker registry. The gateway owns its own live nodewitt
45397
+ * client keyed on its own `stableId`; group Container children reference it via
45398
+ * their `gatewayId` config field.
45399
+ */
45400
+ var ecowittGatewaySchema = object({
45401
+ /** The transport + endpoint the gateway's live client dials / binds. */
45402
+ connection: ecowittConfigSchema,
45403
+ /** Provenance marker used to scope offline / cascade helpers. */
45404
+ system: literal("ecowitt-gateway").optional()
45405
+ });
45406
+ /**
45407
+ * Hand-written connection form for the gateway device-creation UI (standalone
45408
+ * mode — Reolink pattern). The connection lives on the gateway DEVICE config,
45409
+ * not in a broker registry. A `name` field is included so the operator names
45410
+ * the gateway Hub at creation time (mirrors the Reolink creation form).
45411
+ */
45412
+ function buildConnectionFormSchema() {
45413
+ return { sections: [
45414
+ {
45415
+ id: "identity",
45416
+ title: "Gateway",
45417
+ columns: 1,
45418
+ fields: [{
45419
+ type: "text",
45420
+ key: "name",
45421
+ label: "Name",
45422
+ required: true,
45423
+ placeholder: "Weather station"
45424
+ }]
45425
+ },
45426
+ {
45427
+ id: "transport",
45428
+ title: "Transport",
45429
+ description: "Choose how CamStack reads the gateway. Local poll connects out to the gateway (recommended). Push listener runs a server the gateway uploads to — configure the gateway \"Customized\" upload to point at this hub.",
45430
+ columns: 1,
45431
+ fields: [{
45432
+ type: "select",
45433
+ key: "transport",
45434
+ label: "Transport",
45435
+ default: "local",
45436
+ options: [{
45437
+ value: "local",
45438
+ label: "Local poll (recommended)"
45439
+ }, {
45440
+ value: "listener",
45441
+ label: "Push listener"
45442
+ }]
45443
+ }]
45444
+ },
45445
+ {
45446
+ id: "local",
45447
+ title: "Local poll settings",
45448
+ columns: 2,
45449
+ fields: [
45450
+ {
45451
+ type: "text",
45452
+ key: "host",
45453
+ label: "Gateway host / IP",
45454
+ placeholder: "192.168.1.50",
45455
+ showWhen: {
45456
+ field: "transport",
45457
+ equals: "local"
45458
+ }
45459
+ },
45460
+ {
45461
+ type: "number",
45462
+ key: "port",
45463
+ label: "HTTP port",
45464
+ min: 1,
45465
+ max: 65535,
45466
+ default: 80,
45467
+ showWhen: {
45468
+ field: "transport",
45469
+ equals: "local"
45470
+ }
45471
+ },
45472
+ {
45473
+ type: "password",
45474
+ key: "password",
45475
+ label: "Password (optional)",
45476
+ showToggle: true,
45477
+ showWhen: {
45478
+ field: "transport",
45479
+ equals: "local"
45480
+ }
45481
+ },
45482
+ {
45483
+ type: "number",
45484
+ key: "pollIntervalMs",
45485
+ label: "Poll interval (ms)",
45486
+ min: 1e3,
45487
+ max: 36e5,
45488
+ default: 6e4,
45489
+ showWhen: {
45490
+ field: "transport",
45491
+ equals: "local"
45492
+ }
45493
+ }
45494
+ ]
45495
+ },
45496
+ {
45497
+ id: "listener",
45498
+ title: "Push listener settings",
45499
+ columns: 2,
45500
+ fields: [{
45501
+ type: "number",
45502
+ key: "listenPort",
45503
+ label: "Listen port",
45504
+ min: 1,
45505
+ max: 65535,
45506
+ default: 4199,
45507
+ showWhen: {
45508
+ field: "transport",
45509
+ equals: "listener"
45510
+ }
45511
+ }, {
45512
+ type: "text",
45513
+ key: "listenHost",
45514
+ label: "Bind host (optional)",
45515
+ placeholder: "all interfaces",
45516
+ showWhen: {
45517
+ field: "transport",
45518
+ equals: "listener"
45519
+ }
45520
+ }]
45521
+ }
45522
+ ] };
45523
+ }
45524
+ /**
45525
+ * Slugify a host / station id into a readable, stable row-key fragment. Exported so the discovery
45526
+ * candidate's `stableId` matches exactly what `generateStableId` derives on adopt (else a re-scan of
45527
+ * an already-added gateway would not be detected as onboarded).
45528
+ */
45529
+ function slugifyHost(value) {
45530
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
45531
+ }
45532
+ /**
45533
+ * Extra per-scan inputs for Ecowitt network discovery. Mirrors Gree's scan form. On a flat network,
45534
+ * leave blank to sweep the addon node's local subnet. Gateways on ANOTHER subnet usually can't be
45535
+ * reached by a directed broadcast (most routers don't forward it) — enter the gateway's IP instead:
45536
+ * the `CMD_BROADCAST` probe answers a unicast just as well and returns the gateway's identity.
45537
+ */
45538
+ function buildDiscoveryParamsFormSchema() {
45539
+ return { sections: [{
45540
+ id: "scan",
45541
+ title: "Scan options",
45542
+ description: "Leave empty to scan the local subnet. To find a gateway on a different subnet, enter that subnet’s broadcast address (e.g. 192.168.20.255) or the gateway’s IP directly (e.g. 192.168.20.181).",
45543
+ columns: 1,
45544
+ fields: [{
45545
+ type: "text",
45546
+ key: "broadcastAddress",
45547
+ label: "Broadcast address or gateway IP",
45548
+ required: false,
45549
+ placeholder: "192.168.20.255"
45550
+ }, {
45551
+ type: "number",
45552
+ key: "timeoutMs",
45553
+ label: "UDP timeout (ms)",
45554
+ min: 500,
45555
+ max: 3e4,
45556
+ default: 3e3
45557
+ }]
45558
+ }] };
45559
+ }
45560
+ //#endregion
45110
45561
  //#region src/ecowitt-integration-manager.ts
45111
45562
  /** Build the real nodewitt facade for a transport. Pure. */
45112
45563
  function defaultEcowittFacadeFactory(config) {
@@ -45247,500 +45698,82 @@ var EcowittIntegrationManager = class {
45247
45698
  await this.start();
45248
45699
  }
45249
45700
  };
45250
- /** True when two configs are the "same connection" (no facade rebuild needed). */
45251
- function sameConnection(a, b) {
45252
- if (a === null || b === null) return false;
45253
- if (a.transport !== b.transport) return false;
45254
- if (a.transport === "local" && b.transport === "local") return a.host === b.host && a.port === b.port && a.password === b.password && a.pollIntervalMs === b.pollIntervalMs && a.mappingIntervalMs === b.mappingIntervalMs;
45255
- if (a.transport === "listener" && b.transport === "listener") return a.listenPort === b.listenPort && a.listenHost === b.listenHost;
45256
- return false;
45257
- }
45258
45701
  //#endregion
45259
45702
  //#region src/ecowitt-gateway.ts
45260
45703
  /**
45261
- * Per-broker registry that device classes use to reach the live {@link Ecowitt}
45262
- * facade (and its current sensor snapshot) for a given gateway.
45704
+ * Per-gateway registry that device classes use to reach the live {@link Ecowitt}
45705
+ * client (and its current sensor snapshot) for a given gateway. Keyed on the
45706
+ * gateway {@link import('@camstack/types').DeviceType.Hub} device's `stableId`
45707
+ * (standalone mode — the connection lives on the gateway device, not a broker).
45263
45708
  *
45264
- * Because the nodewitt facade's `stop()` is TERMINAL, the integration manager
45265
- * recreates the facade on reconnect / settings change and re-publishes it here.
45266
- * Device classes always read through the resolver, so they transparently pick up
45267
- * the new facade. Mirrors the Homematic / Dreame in-process facade resolver.
45709
+ * Because the nodewitt client's `stop()` is TERMINAL, the gateway device
45710
+ * recreates the client on reconnect / settings change and re-publishes it here.
45711
+ * Container + sensor children always read through the resolver, so they
45712
+ * transparently pick up the new client. Mirrors the Homematic / Dreame in-process
45713
+ * facade resolver.
45268
45714
  */
45269
45715
  var EcowittFacadeResolver = class {
45270
45716
  #facades = /* @__PURE__ */ new Map();
45271
- /** Publish or remove the facade for a broker id. `null` removes the entry. */
45272
- set(brokerId, facade) {
45717
+ /**
45718
+ * Per-gateway snapshot fan-out. Container + sensor children subscribe here
45719
+ * instead of attaching directly to the nodewitt facade's EventEmitter — a
45720
+ * station with >10 sensors would otherwise trip Node's default MaxListeners
45721
+ * cap (one listener per child on a single emitter). The gateway device pumps
45722
+ * this bus once per snapshot from its single facade subscription; a plain
45723
+ * `Set` of callbacks has no listener limit.
45724
+ */
45725
+ #snapshotSubs = /* @__PURE__ */ new Map();
45726
+ /** Publish or remove the client for a gateway id. `null` removes the entry. */
45727
+ set(gatewayId, facade) {
45273
45728
  if (facade === null) {
45274
- this.#facades.delete(brokerId);
45729
+ this.#facades.delete(gatewayId);
45275
45730
  return;
45276
45731
  }
45277
- this.#facades.set(brokerId, facade);
45278
- }
45279
- /** The live facade for a broker id, or null when unknown / stopped. */
45280
- get(brokerId) {
45281
- return this.#facades.get(brokerId) ?? null;
45282
- }
45283
- /** All current sensors for a broker's gateway, or [] when unknown. */
45284
- getSensors(brokerId) {
45285
- return this.#facades.get(brokerId)?.getSensors() ?? [];
45286
- }
45287
- /** Resolve a single sensor by its stable id for a broker, or null. */
45288
- getSensor(brokerId, sensorId) {
45289
- return this.getSensors(brokerId).find((s) => s.id === sensorId) ?? null;
45290
- }
45291
- /** Remove all registered facades (called on full shutdown). */
45292
- clear() {
45293
- this.#facades.clear();
45294
- }
45295
- };
45296
- /** The single in-process per-broker facade resolver shared between the registry
45297
- * and device instances. */
45298
- var ecowittFacades = new EcowittFacadeResolver();
45299
- //#endregion
45300
- //#region src/ecowitt-broker-registry.ts
45301
- /**
45302
- * Manages N live Ecowitt gateway connections ("brokers"), each backed by an
45303
- * {@link EcowittIntegrationManager}. Allocates stable ids (`ecowitt_001`, …),
45304
- * CRUD, an integration FK index, lifecycle helpers. Mirrors the Homematic /
45305
- * Dreame registry; on the default factory path it publishes each freshly-built
45306
- * facade on `ecowittFacades` so device classes can read sensors in-process.
45307
- */
45308
- var EcowittBrokerRegistry = class {
45309
- #logger;
45310
- #onBrokerConnected;
45311
- #onBrokerDisconnected;
45312
- #onSensorsChanged;
45313
- #makeManager;
45314
- #managers = /* @__PURE__ */ new Map();
45315
- #integrationToBroker = /* @__PURE__ */ new Map();
45316
- #nextId = 1;
45317
- constructor(logger, deps = {}) {
45318
- this.#logger = logger;
45319
- this.#onBrokerConnected = deps.onBrokerConnected ?? (() => void 0);
45320
- this.#onBrokerDisconnected = deps.onBrokerDisconnected ?? (() => void 0);
45321
- this.#onSensorsChanged = deps.onSensorsChanged ?? (() => void 0);
45322
- this.#makeManager = deps.makeManager ?? ((opts) => new EcowittIntegrationManager({
45323
- id: opts.id,
45324
- name: opts.name,
45325
- connection: opts.connection,
45326
- logger: opts.logger,
45327
- onConnected: opts.onConnected,
45328
- onDisconnected: opts.onDisconnected,
45329
- onSensorsChanged: opts.onSensorsChanged,
45330
- onFacadeBuilt: (id, facade) => ecowittFacades.set(id, facade)
45331
- }));
45332
- }
45333
- async restore(entries) {
45334
- for (const entry of entries) this.#seedCounter(entry.id);
45335
- for (const entry of entries) try {
45336
- await this.#startManager(entry);
45337
- } catch (err) {
45338
- this.#logger.warn("EcowittBrokerRegistry: failed to restore manager", {
45339
- tags: { brokerId: entry.id },
45340
- meta: { error: errMsg(err) }
45341
- });
45342
- }
45343
- }
45344
- async shutdown() {
45345
- const ids = Array.from(this.#managers.keys());
45346
- await Promise.all(ids.map(async (id) => {
45347
- try {
45348
- await this.#managers.get(id)?.stop();
45349
- } catch (err) {
45350
- this.#logger.warn("EcowittBrokerRegistry: shutdown stop failed", {
45351
- tags: { brokerId: id },
45352
- meta: { error: errMsg(err) }
45353
- });
45354
- }
45355
- }));
45356
- this.#managers.clear();
45357
- this.#integrationToBroker.clear();
45358
- ecowittFacades.clear();
45732
+ this.#facades.set(gatewayId, facade);
45359
45733
  }
45360
- setOnBrokerConnected(cb) {
45361
- this.#onBrokerConnected = cb;
45362
- }
45363
- setOnBrokerDisconnected(cb) {
45364
- this.#onBrokerDisconnected = cb;
45365
- }
45366
- setOnSensorsChanged(cb) {
45367
- this.#onSensorsChanged = cb;
45368
- }
45369
- async createEntry(name, connection, opts = {}) {
45370
- const id = this.#allocateId();
45371
- const entry = {
45372
- id,
45373
- name,
45374
- connection,
45375
- ...opts.integrationId !== void 0 ? { integrationId: opts.integrationId } : {}
45376
- };
45377
- await this.#startManager(entry);
45378
- if (opts.integrationId !== void 0) this.#integrationToBroker.set(opts.integrationId, id);
45379
- return entry;
45380
- }
45381
- async removeEntry(id) {
45382
- const mgr = this.#managers.get(id);
45383
- if (!mgr) throw new Error(`EcowittBrokerRegistry: unknown broker id "${id}"`);
45384
- for (const [integrationId, brokerId] of this.#integrationToBroker.entries()) if (brokerId === id) this.#integrationToBroker.delete(integrationId);
45385
- this.#managers.delete(id);
45386
- ecowittFacades.set(id, null);
45387
- try {
45388
- await mgr.stop();
45389
- } catch (err) {
45390
- this.#logger.warn("EcowittBrokerRegistry: removeEntry stop failed", {
45391
- tags: { brokerId: id },
45392
- meta: { error: errMsg(err) }
45393
- });
45734
+ /** Subscribe a child to per-gateway snapshot ticks. Returns an unsubscribe fn. */
45735
+ onSnapshot(gatewayId, cb) {
45736
+ let set = this.#snapshotSubs.get(gatewayId);
45737
+ if (!set) {
45738
+ set = /* @__PURE__ */ new Set();
45739
+ this.#snapshotSubs.set(gatewayId, set);
45394
45740
  }
45395
- }
45396
- async updateEntry(id, connection) {
45397
- const mgr = this.#managers.get(id);
45398
- if (!mgr) throw new Error(`EcowittBrokerRegistry: unknown broker id "${id}"`);
45399
- await mgr.applyConnection(connection);
45400
- return {
45401
- id,
45402
- name: mgr.getInfo().name,
45403
- connection
45741
+ set.add(cb);
45742
+ return () => {
45743
+ const current = this.#snapshotSubs.get(gatewayId);
45744
+ current?.delete(cb);
45745
+ if (current && current.size === 0) this.#snapshotSubs.delete(gatewayId);
45404
45746
  };
45405
45747
  }
45406
- linkIntegration(integrationId, brokerId) {
45407
- this.#integrationToBroker.set(integrationId, brokerId);
45408
- }
45409
- getBrokerIdByIntegrationId(integrationId) {
45410
- const brokerId = this.#integrationToBroker.get(integrationId);
45411
- if (brokerId === void 0) throw new Error(`EcowittBrokerRegistry: no broker linked for integration id "${integrationId}"`);
45412
- return brokerId;
45413
- }
45414
- list() {
45415
- return Array.from(this.#managers.values()).map((m) => m.getInfo());
45416
- }
45417
- get(id) {
45418
- return this.#managers.get(id)?.getInfo() ?? null;
45419
- }
45420
- getConnection(id) {
45421
- return this.#managers.get(id)?.getConnection() ?? null;
45422
- }
45423
- size() {
45424
- return this.#managers.size;
45748
+ /** Fan a single facade snapshot out to every subscribed child for a gateway. */
45749
+ emitSnapshot(gatewayId) {
45750
+ const set = this.#snapshotSubs.get(gatewayId);
45751
+ if (!set) return;
45752
+ for (const cb of set) try {
45753
+ cb();
45754
+ } catch {}
45425
45755
  }
45426
- connectedCount() {
45427
- let count = 0;
45428
- for (const mgr of this.#managers.values()) if (mgr.getInfo().status === "connected") count++;
45429
- return count;
45756
+ /** The live client for a gateway id, or null when unknown / stopped. */
45757
+ get(gatewayId) {
45758
+ return this.#facades.get(gatewayId) ?? null;
45430
45759
  }
45431
- async #startManager(entry) {
45432
- if (this.#managers.has(entry.id)) {
45433
- if (entry.integrationId !== void 0) this.#integrationToBroker.set(entry.integrationId, entry.id);
45434
- return;
45435
- }
45436
- const mgr = this.#makeManager({
45437
- id: entry.id,
45438
- name: entry.name,
45439
- connection: entry.connection,
45440
- logger: this.#logger,
45441
- onConnected: (id) => this.#onBrokerConnected(id),
45442
- onDisconnected: (id) => this.#onBrokerDisconnected(id),
45443
- onSensorsChanged: (id, sensors) => this.#onSensorsChanged(id, sensors)
45444
- });
45445
- this.#managers.set(entry.id, mgr);
45446
- if (entry.integrationId !== void 0) this.#integrationToBroker.set(entry.integrationId, entry.id);
45447
- await mgr.start();
45760
+ /** All current sensors for a gateway, or [] when unknown. */
45761
+ getSensors(gatewayId) {
45762
+ return this.#facades.get(gatewayId)?.getSensors() ?? [];
45448
45763
  }
45449
- #allocateId() {
45450
- const id = `ecowitt_${String(this.#nextId).padStart(3, "0")}`;
45451
- this.#nextId++;
45452
- return id;
45764
+ /** Resolve a single sensor by its stable id for a gateway, or null. */
45765
+ getSensor(gatewayId, sensorId) {
45766
+ return this.getSensors(gatewayId).find((s) => s.id === sensorId) ?? null;
45453
45767
  }
45454
- #seedCounter(id) {
45455
- const match = /^ecowitt_(\d+)$/.exec(id);
45456
- if (match === null || match[1] === void 0) return;
45457
- const n = parseInt(match[1], 10);
45458
- if (!isNaN(n)) this.#nextId = Math.max(this.#nextId, n + 1);
45768
+ /** Remove all registered clients (called on full shutdown). */
45769
+ clear() {
45770
+ this.#facades.clear();
45771
+ this.#snapshotSubs.clear();
45459
45772
  }
45460
45773
  };
45461
- //#endregion
45462
- //#region src/config.ts
45463
- /**
45464
- * Operator-supplied Ecowitt gateway settings for ONE broker (= one station).
45465
- * Two transports behind a `transport` discriminator:
45466
- *
45467
- * - `local` (local-poll): the addon polls the gateway over HTTP (`host`/`port`/
45468
- * optional `password`, with poll + mapping intervals).
45469
- * - `listener` (push): the addon runs an HTTP server the gateway uploads to
45470
- * (the gateway's "Customized" upload must point at the hub's LAN IP:port).
45471
- *
45472
- * Local-poll is the recommended default — it has no inbound-IP constraint.
45473
- */
45474
- var baseFields = {
45475
- /** Human-overridable station identity used to scope the adopted gateway. */
45476
- stationId: string().default("").describe("Optional stable station id (auto-derived when blank)") };
45477
- var ecowittConfigSchema = discriminatedUnion("transport", [object({
45478
- transport: literal("local"),
45479
- host: string().min(1).describe("Ecowitt gateway host name or IP address"),
45480
- port: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(80)).describe("Gateway HTTP port"),
45481
- password: string().default("").describe("Gateway password (optional — newer firmware)"),
45482
- pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e3).max(36e5).default(6e4)).describe("Live-data poll interval (ms)"),
45483
- mappingIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(6e5)).describe("Sensor-map refresh interval (ms)"),
45484
- ...baseFields
45485
- }), object({
45486
- transport: literal("listener"),
45487
- listenPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(4199)).describe("Local TCP port the gateway uploads to"),
45488
- listenHost: string().default("").describe("Optional bind host (blank = all interfaces)"),
45489
- ...baseFields
45490
- })]);
45491
- /** Top-level addon config — an ordered list of broker entries (default empty). */
45492
- var ecowittAddonConfigSchema = object({ brokers: array(object({
45493
- id: string().min(1),
45494
- name: string().min(1),
45495
- connection: ecowittConfigSchema,
45496
- integrationId: string().optional()
45497
- })).default([]) });
45498
- /**
45499
- * Narrow an `unknown` value to a shallow-cloned plain object record, or an empty
45500
- * record when it is not a plain object. Mirrors the Homematic `toRecord` helper —
45501
- * a cast-free boundary narrowing.
45502
- */
45503
- function toRecord(value) {
45504
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));
45505
- return {};
45506
- }
45507
- /** Coerce a loose settings blob through the connection schema, applying defaults.
45508
- * A blob with no `transport` defaults to `local` for back-compat with simple forms. */
45509
- function settingsToEcowittConfig(settings) {
45510
- const raw = toRecord(settings);
45511
- if (raw["transport"] !== "local" && raw["transport"] !== "listener") raw["transport"] = "local";
45512
- return ecowittConfigSchema.parse(raw);
45513
- }
45514
- /** Hand-written connection form for the broker/integration creation UI. */
45515
- function buildConnectionFormSchema() {
45516
- return { sections: [
45517
- {
45518
- id: "transport",
45519
- title: "Transport",
45520
- description: "Choose how CamStack reads the gateway. Local poll connects out to the gateway (recommended). Push listener runs a server the gateway uploads to — configure the gateway \"Customized\" upload to point at this hub.",
45521
- columns: 1,
45522
- fields: [{
45523
- type: "select",
45524
- key: "transport",
45525
- label: "Transport",
45526
- default: "local",
45527
- options: [{
45528
- value: "local",
45529
- label: "Local poll (recommended)"
45530
- }, {
45531
- value: "listener",
45532
- label: "Push listener"
45533
- }]
45534
- }]
45535
- },
45536
- {
45537
- id: "local",
45538
- title: "Local poll settings",
45539
- columns: 2,
45540
- fields: [
45541
- {
45542
- type: "text",
45543
- key: "host",
45544
- label: "Gateway host / IP",
45545
- placeholder: "192.168.1.50",
45546
- showWhen: {
45547
- field: "transport",
45548
- equals: "local"
45549
- }
45550
- },
45551
- {
45552
- type: "number",
45553
- key: "port",
45554
- label: "HTTP port",
45555
- min: 1,
45556
- max: 65535,
45557
- default: 80,
45558
- showWhen: {
45559
- field: "transport",
45560
- equals: "local"
45561
- }
45562
- },
45563
- {
45564
- type: "password",
45565
- key: "password",
45566
- label: "Password (optional)",
45567
- showToggle: true,
45568
- showWhen: {
45569
- field: "transport",
45570
- equals: "local"
45571
- }
45572
- },
45573
- {
45574
- type: "number",
45575
- key: "pollIntervalMs",
45576
- label: "Poll interval (ms)",
45577
- min: 1e3,
45578
- max: 36e5,
45579
- default: 6e4,
45580
- showWhen: {
45581
- field: "transport",
45582
- equals: "local"
45583
- }
45584
- }
45585
- ]
45586
- },
45587
- {
45588
- id: "listener",
45589
- title: "Push listener settings",
45590
- columns: 2,
45591
- fields: [{
45592
- type: "number",
45593
- key: "listenPort",
45594
- label: "Listen port",
45595
- min: 1,
45596
- max: 65535,
45597
- default: 4199,
45598
- showWhen: {
45599
- field: "transport",
45600
- equals: "listener"
45601
- }
45602
- }, {
45603
- type: "text",
45604
- key: "listenHost",
45605
- label: "Bind host (optional)",
45606
- placeholder: "all interfaces",
45607
- showWhen: {
45608
- field: "transport",
45609
- equals: "listener"
45610
- }
45611
- }]
45612
- }
45613
- ] };
45614
- }
45615
- //#endregion
45616
- //#region src/ecowitt-broker-provider.ts
45617
- var ECOWITT_KIND = "ecowitt";
45618
- /**
45619
- * Construct the `broker` cap provider for the Ecowitt addon. Pure builder.
45620
- * Mirrors `buildDreameBrokerProvider`. The connection has no single secret to
45621
- * redact (the optional local password is the only one) — preserved on empty
45622
- * round-trip like the other providers.
45623
- */
45624
- function buildEcowittBrokerProvider(deps) {
45625
- const { ownerAddonId, registry, getBrokers, persistBrokers, cascadeRemoveDevices, logger } = deps;
45626
- const owns = (id) => getBrokers().some((b) => b.id === id);
45627
- /** Redact the local-poll password for an outbound settings read. */
45628
- const redact = (entry) => {
45629
- if (entry.connection.transport === "local") return {
45630
- ...entry.connection,
45631
- password: ""
45632
- };
45633
- return { ...entry.connection };
45634
- };
45635
- return {
45636
- list: async ({ kind }) => {
45637
- if (kind && kind !== ECOWITT_KIND) return [];
45638
- return registry.list().map((info) => ({
45639
- ...info,
45640
- addonId: ownerAddonId
45641
- }));
45642
- },
45643
- get: async ({ id }) => {
45644
- const info = registry.get(id);
45645
- return info ? {
45646
- ...info,
45647
- addonId: ownerAddonId
45648
- } : null;
45649
- },
45650
- listProviders: async () => [{
45651
- addonId: ownerAddonId,
45652
- kinds: [{
45653
- kind: ECOWITT_KIND,
45654
- label: "Ecowitt"
45655
- }]
45656
- }],
45657
- add: async ({ kind, name, settings }) => {
45658
- if (kind !== ECOWITT_KIND) throw new Error(`provider-ecowitt: only kind '${ECOWITT_KIND}' is handled here (got '${kind}')`);
45659
- const entry = await registry.createEntry(name, settingsToEcowittConfig(settings));
45660
- await persistBrokers([...getBrokers(), entry]);
45661
- return { id: entry.id };
45662
- },
45663
- remove: async ({ id }) => {
45664
- if (!owns(id)) return;
45665
- await registry.removeEntry(id);
45666
- await cascadeRemoveDevices(id).catch((err) => {
45667
- logger.warn("ecowitt: broker cascade-remove threw", {
45668
- tags: { brokerId: id },
45669
- meta: { error: errMsg(err) }
45670
- });
45671
- });
45672
- await persistBrokers(getBrokers().filter((b) => b.id !== id));
45673
- },
45674
- testConnection: async ({ id }) => {
45675
- if (!owns(id)) return {
45676
- ok: false,
45677
- error: "unknown broker"
45678
- };
45679
- const info = registry.get(id);
45680
- if (!info) return {
45681
- ok: false,
45682
- error: "unknown broker"
45683
- };
45684
- if (info.status === "connected") return {
45685
- ok: true,
45686
- latencyMs: info.lastCheckedAt ? Math.max(0, Date.now() - info.lastCheckedAt) : 0
45687
- };
45688
- return {
45689
- ok: false,
45690
- error: info.error ?? `status: ${info.status}`
45691
- };
45692
- },
45693
- getSettings: async ({ id }) => {
45694
- const entry = getBrokers().find((b) => b.id === id);
45695
- if (!entry) return null;
45696
- return redact(entry);
45697
- },
45698
- setSettings: async ({ id, settings }) => {
45699
- if (!owns(id)) return;
45700
- const existing = getBrokers().find((b) => b.id === id);
45701
- if (!existing) return;
45702
- const parsed = settingsToEcowittConfig(settings);
45703
- const merged = parsed.transport === "local" && existing.connection.transport === "local" ? {
45704
- ...parsed,
45705
- password: parsed.password.length > 0 ? parsed.password : existing.connection.password
45706
- } : parsed;
45707
- const updated = await registry.updateEntry(id, merged);
45708
- await persistBrokers(getBrokers().map((b) => b.id === id ? updated : b));
45709
- },
45710
- getBrokerConfig: async ({ id }) => {
45711
- const entry = getBrokers().find((b) => b.id === id);
45712
- if (!entry) return null;
45713
- return redact(entry);
45714
- },
45715
- getSettingsSchema: async ({ kind }) => {
45716
- if (kind !== ECOWITT_KIND) return null;
45717
- return buildConnectionFormSchema();
45718
- },
45719
- testSettings: async ({ kind, settings }) => {
45720
- if (kind !== ECOWITT_KIND) return {
45721
- ok: false,
45722
- error: `unsupported kind: ${kind}`
45723
- };
45724
- try {
45725
- settingsToEcowittConfig(settings);
45726
- return { ok: true };
45727
- } catch (err) {
45728
- return {
45729
- ok: false,
45730
- error: errMsg(err)
45731
- };
45732
- }
45733
- },
45734
- publish: async () => null,
45735
- subscribe: async () => ({ subscriptionId: "" }),
45736
- unsubscribe: async () => void 0,
45737
- getState: async () => null,
45738
- getStatus: async () => ({
45739
- brokerCount: registry.size(),
45740
- connectedCount: registry.connectedCount()
45741
- })
45742
- };
45743
- }
45774
+ /** The single in-process per-gateway client resolver shared between the gateway
45775
+ * device and its container / sensor children. */
45776
+ var ecowittFacades = new EcowittFacadeResolver();
45744
45777
  //#endregion
45745
45778
  //#region src/ecowitt-mapping.ts
45746
45779
  /**
@@ -45902,18 +45935,64 @@ var QUANTITY_LABEL = {
45902
45935
  lightning_count: "Lightning count",
45903
45936
  vpd: "VPD"
45904
45937
  };
45938
+ /** All device groups, in stable presentation order. */
45939
+ var ECOWITT_DEVICE_GROUPS = [
45940
+ "gateway",
45941
+ "weather-station",
45942
+ "temp-sensor-ch1"
45943
+ ];
45944
+ /** Human label for a device group (used as the per-group Container name suffix). */
45945
+ function deviceGroupLabel(group) {
45946
+ switch (group) {
45947
+ case "gateway": return "Gateway";
45948
+ case "weather-station": return "Weather Station";
45949
+ case "temp-sensor-ch1": return "Temp Sensor CH1";
45950
+ }
45951
+ }
45952
+ /**
45953
+ * Map a sensor's self-describing nodewitt {@link SensorCategory} (+ its channel)
45954
+ * to the camstack {@link EcowittDeviceGroup} it belongs to. Pure, total.
45955
+ *
45956
+ * The split:
45957
+ * - `weather-station` → `'weather-station'`.
45958
+ * - `channel-sensor` with channel 1 → `'temp-sensor-ch1'` (the CH1 split-out).
45959
+ * - everything else → `'gateway'`.
45960
+ *
45961
+ * CH2..8 grouping (documented decision): channel-sensors on channels 2–8 are
45962
+ * deliberately grouped under `'gateway'`, NOT given their own group. The group
45963
+ * enum is intentionally a fixed THREE (the product wants exactly gateway /
45964
+ * weather-station / CH1-temp surfaces); the gateway device is the natural home
45965
+ * for "everything else" — it already owns the console's indoor readings and the
45966
+ * standalone external sensors. A per-channel device explosion (CH2…CH8 each their
45967
+ * own device) is out of scope here and can be layered on later by widening the
45968
+ * enum, without changing this function's `weather-station`/`temp-sensor-ch1`
45969
+ * branches. `external` (lightning/rain/combo) and `gateway` (console/indoor)
45970
+ * categories also fall here, by design.
45971
+ *
45972
+ * Accepts an optional `category` (a persisted/older sensor may lack one): an
45973
+ * absent category resolves to `'gateway'`, the same safe default nodewitt uses
45974
+ * for an unattributed reading.
45975
+ */
45976
+ function deviceGroupForSensor(category, channel) {
45977
+ if (category === "weather-station") return "weather-station";
45978
+ if (category === "channel-sensor" && channel === 1) return "temp-sensor-ch1";
45979
+ return "gateway";
45980
+ }
45905
45981
  //#endregion
45906
45982
  //#region src/ecowitt-discovery.ts
45907
45983
  /**
45908
- * Build the SINGLE gateway adoption candidate (a {@link DeviceType.Container})
45909
- * with one preview accessory child per sensor. The gateway is keyed on the
45910
- * broker id one broker = one gateway = one Container. Pure: no I/O.
45911
- *
45912
- * Per the plan (model A), each sensor maps to a typed sensor cap; the `weather`
45913
- * cap is intentionally NOT used (a raw station has no sky-state `condition`).
45984
+ * The native id a group Container candidate is keyed on: `<gatewayId>:<group>`.
45985
+ * `gatewayId` is the gateway Hub's stableId, which ALREADY carries the `ecowitt:`
45986
+ * prefix (see `addon.ts` generateStableId) so this must NOT re-add it, else the
45987
+ * id double-prefixes to `ecowitt:ecowitt:<gw>:<group>`. One physical gateway
45988
+ * yields THREE candidates (one per {@link EcowittDeviceGroup}).
45914
45989
  */
45915
- function buildEcowittGatewayCandidate(input) {
45916
- const children = input.sensors.map((sensor) => ({
45990
+ function groupNativeId(gatewayId, group) {
45991
+ return `${gatewayId}:${group}`;
45992
+ }
45993
+ /** A preview accessory child for one sensor. */
45994
+ function sensorChild(sensor) {
45995
+ return {
45917
45996
  childNativeId: sensor.id,
45918
45997
  name: sensorLabel(sensor.quantity, sensor.channel, sensor.name, sensor.id),
45919
45998
  type: DeviceType.Sensor,
@@ -45922,215 +46001,61 @@ function buildEcowittGatewayCandidate(input) {
45922
46001
  alreadyAdopted: false,
45923
46002
  adoptedDeviceId: null,
45924
46003
  capabilities: [capForQuantity(sensor.quantity)]
45925
- }));
45926
- return {
45927
- childNativeId: input.brokerId,
45928
- name: input.gatewayName,
45929
- type: DeviceType.Container,
45930
- status: "online",
45931
- metadata: { serialNumber: input.brokerId },
45932
- alreadyAdopted: input.adoptedDeviceId !== null,
45933
- adoptedDeviceId: input.adoptedDeviceId,
45934
- capabilities: [],
45935
- children
45936
- };
45937
- }
45938
- //#endregion
45939
- //#region src/ecowitt-adoption-provider.ts
45940
- /** Single granularity: the whole gateway adopts as one Container. */
45941
- var DEVICES_FILTER = {
45942
- id: "devices",
45943
- label: "Devices",
45944
- isDefault: true
45945
- };
45946
- /** Resolve the adopted gateway CamStack device id for a broker, or null. */
45947
- async function adoptedGatewayId(brokerId, listAdoptedEcowitt) {
45948
- const all = await listAdoptedEcowitt();
45949
- for (const d of all) if (d.config["system"] === "ecowitt" && d.config["brokerId"] === brokerId) return d.id;
45950
- return null;
45951
- }
45952
- /**
45953
- * Construct the `device-adoption` cap provider for the Ecowitt addon. Pure
45954
- * builder. One broker = one gateway = one Container candidate; its sensors are
45955
- * preview accessory children that the Container's `getAccessoryChildren()`
45956
- * materialises live on adoption. Mirrors the Dreame adoption provider.
45957
- */
45958
- function buildEcowittAdoptionProvider(deps) {
45959
- const { registry, getBrokerIdForIntegration, listAdoptedEcowitt, adoptGateway, removeDevice, findDeviceConfig, logger } = deps;
45960
- async function gatewayCandidateForBroker(brokerId) {
45961
- const facade = registry.getFacadeForBroker(brokerId);
45962
- if (facade === null) return null;
45963
- const info = registry.list().find((b) => b.id === brokerId);
45964
- const adoptedDeviceId = await adoptedGatewayId(brokerId, listAdoptedEcowitt);
45965
- return buildEcowittGatewayCandidate({
45966
- brokerId,
45967
- gatewayName: info?.name ?? "Ecowitt gateway",
45968
- sensors: facade.getSensors(),
45969
- adoptedDeviceId
45970
- });
45971
- }
45972
- return {
45973
- listCandidateFilters: async () => ({ filters: [DEVICES_FILTER] }),
45974
- listCandidates: async ({ integrationId, page, pageSize }) => {
45975
- const candidate = await gatewayCandidateForBroker(await getBrokerIdForIntegration(integrationId));
45976
- const candidates = candidate !== null ? [candidate] : [];
45977
- return {
45978
- candidates,
45979
- totalCount: candidates.length,
45980
- page,
45981
- pageSize
45982
- };
45983
- },
45984
- getCandidate: async ({ integrationId, childNativeId }) => {
45985
- const candidate = await gatewayCandidateForBroker(await getBrokerIdForIntegration(integrationId));
45986
- return candidate !== null && candidate.childNativeId === childNativeId ? candidate : null;
45987
- },
45988
- getStatus: async () => {
45989
- try {
45990
- const brokers = registry.list();
45991
- let candidateCount = 0;
45992
- for (const broker of brokers) if (await gatewayCandidateForBroker(broker.id) !== null) candidateCount += 1;
45993
- const adoptedCount = (await listAdoptedEcowitt()).filter((d) => d.config["system"] === "ecowitt").length;
45994
- return {
45995
- lastDiscoveryAt: Date.now(),
45996
- candidateCount,
45997
- adoptedCount,
45998
- lastError: null
45999
- };
46000
- } catch (err) {
46001
- logger.warn("ecowitt adoption: getStatus failed", { meta: { error: errMsg(err) } });
46002
- return {
46003
- lastDiscoveryAt: null,
46004
- candidateCount: 0,
46005
- adoptedCount: 0,
46006
- lastError: errMsg(err)
46007
- };
46008
- }
46009
- },
46010
- refresh: async ({ integrationId }) => {
46011
- const brokerId = await getBrokerIdForIntegration(integrationId);
46012
- const candidate = await gatewayCandidateForBroker(brokerId);
46013
- const adoptedCount = (await listAdoptedEcowitt()).filter((d) => d.config["system"] === "ecowitt" && d.config["brokerId"] === brokerId).length;
46014
- return {
46015
- lastDiscoveryAt: Date.now(),
46016
- candidateCount: candidate !== null ? 1 : 0,
46017
- adoptedCount,
46018
- lastError: null
46019
- };
46020
- },
46021
- adopt: async ({ integrationId, childNativeIds, perCandidate }) => {
46022
- const brokerId = await getBrokerIdForIntegration(integrationId);
46023
- if (registry.getFacadeForBroker(brokerId) === null) throw new Error(`ecowitt adopt: broker ${brokerId} not connected`);
46024
- const adopted = [];
46025
- let failures = 0;
46026
- const info = registry.list().find((b) => b.id === brokerId);
46027
- for (const nativeId of childNativeIds) {
46028
- if (nativeId !== brokerId) {
46029
- logger.warn("ecowitt adopt: only the gateway candidate is adoptable — skipping", { meta: {
46030
- nativeId,
46031
- brokerId
46032
- } });
46033
- failures++;
46034
- continue;
46035
- }
46036
- try {
46037
- const { deviceId, accessoryDeviceIds } = await adoptGateway({
46038
- brokerId,
46039
- integrationId,
46040
- name: perCandidate?.[nativeId]?.name ?? info?.name ?? "Ecowitt gateway"
46041
- });
46042
- adopted.push({
46043
- childNativeId: nativeId,
46044
- parentDeviceId: deviceId,
46045
- accessoryDeviceIds
46046
- });
46047
- } catch (err) {
46048
- logger.warn("ecowitt adopt: failed to adopt gateway", { meta: {
46049
- brokerId,
46050
- error: errMsg(err)
46051
- } });
46052
- failures++;
46053
- }
46054
- }
46055
- if (adopted.length === 0 && failures > 0) throw new Error(`ecowitt adopt: all ${failures} adopt(s) failed`);
46056
- return { adopted };
46057
- },
46058
- release: async ({ camDeviceId }) => {
46059
- await removeDevice(camDeviceId);
46060
- },
46061
- resync: async ({ camDeviceId }) => {
46062
- const cfg = await findDeviceConfig(camDeviceId);
46063
- if (cfg === null) throw new Error(`ecowitt resync: device ${camDeviceId} not found`);
46064
- if (cfg["system"] !== "ecowitt") throw new Error(`ecowitt resync: device ${camDeviceId} is not an Ecowitt device`);
46065
- const brokerId = String(cfg["brokerId"]);
46066
- if (!(registry.getFacadeForBroker(brokerId) !== null)) throw new Error(`ecowitt resync: broker ${brokerId} no longer connected`);
46067
- return {
46068
- changed: false,
46069
- rebuiltChildren: 0
46070
- };
46071
- }
46072
46004
  };
46073
46005
  }
46074
- //#endregion
46075
- //#region src/ecowitt-broker-device-cascade.ts
46076
- /**
46077
- * Remove every adopted Ecowitt PARENT device (children cascade via the kernel)
46078
- * whose persisted config carries `{ system: 'ecowitt', brokerId }`. Used on
46079
- * broker.remove and integration delete. Best-effort per device; returns the
46080
- * count removed. Mirrors the Homematic / Dreame cascade helper.
46081
- */
46082
- async function cascadeRemoveDevicesForBroker(input) {
46083
- const { reg, devices, addonId, brokerId, logger } = input;
46084
- let removed = 0;
46085
- for (const d of reg.getAllForAddon(addonId)) {
46086
- if (d.parentDeviceId !== null) continue;
46087
- const cfg = await devices.loadConfig(d.id).catch(() => ({}));
46088
- if (cfg["system"] !== "ecowitt" || cfg["brokerId"] !== brokerId) continue;
46089
- try {
46090
- await devices.remove(d.id);
46091
- removed += 1;
46092
- } catch (err) {
46093
- logger.warn("ecowitt: broker cascade-remove failed", {
46094
- tags: { deviceId: d.id },
46095
- meta: {
46096
- brokerId,
46097
- error: errMsg(err)
46098
- }
46099
- });
46100
- }
46101
- }
46102
- return removed;
46103
- }
46104
- //#endregion
46105
- //#region src/ecowitt-broker-offline.ts
46106
46006
  /**
46107
- * Set every Ecowitt device belonging to `brokerId` to the requested online
46108
- * state. Every Ecowitt top-level gateway Container carries
46109
- * `{ system: 'ecowitt', brokerId }`. Churn-free; returns the count transitioned.
46110
- * Mirrors the Homematic / Dreame offline helper.
46007
+ * Build the THREE gateway adoption candidates (one {@link DeviceType.Container}
46008
+ * per {@link EcowittDeviceGroup}) for a single physical gateway. Each Container
46009
+ * carries only the sensors whose device group matches, as preview accessory
46010
+ * children that the Container's `getAccessoryChildren()` materialises on
46011
+ * adoption. Pure: no I/O.
46012
+ *
46013
+ * Discovery option (documented decision): we return 3 SEPARATE top-level
46014
+ * Container candidates (not 1 parent with 3 group-tagged children). Each maps 1:1
46015
+ * to a real adopted device, so the existing per-candidate adopt/release/resync
46016
+ * machinery (keyed on `childNativeId`) extends directly — the alternative
46017
+ * (nested group children under one parent) would require a new two-level
46018
+ * adoption shape and is higher-risk. Sensors are split by
46019
+ * {@link deviceGroupForSensor}; an empty group still yields a Container so its
46020
+ * sensors can appear as they come online over time (additive reconcile).
46021
+ *
46022
+ * Per the plan (model A), each sensor maps to a typed sensor cap; the `weather`
46023
+ * cap is intentionally NOT used (a raw station has no sky-state `condition`).
46111
46024
  */
46112
- function setBrokerDevicesOnline(devices, brokerId, online) {
46113
- let count = 0;
46114
- for (const dev of devices) {
46115
- if (dev.config.get("system") !== "ecowitt") continue;
46116
- if (dev.config.get("brokerId") !== brokerId) continue;
46117
- if (dev.online === online) continue;
46118
- dev.markOnline(online);
46119
- count += 1;
46120
- }
46121
- return count;
46025
+ function buildEcowittGatewayCandidates(input) {
46026
+ const byGroup = /* @__PURE__ */ new Map();
46027
+ for (const group of ECOWITT_DEVICE_GROUPS) byGroup.set(group, []);
46028
+ for (const sensor of input.sensors) {
46029
+ const group = deviceGroupForSensor(sensor.category, sensor.channel);
46030
+ byGroup.get(group)?.push(sensorChild(sensor));
46031
+ }
46032
+ return ECOWITT_DEVICE_GROUPS.map((group) => {
46033
+ const adoptedDeviceId = input.adoptedDeviceIdByGroup[group] ?? null;
46034
+ const children = byGroup.get(group) ?? [];
46035
+ return {
46036
+ childNativeId: groupNativeId(input.gatewayId, group),
46037
+ name: `${input.gatewayName} — ${deviceGroupLabel(group)}`,
46038
+ type: DeviceType.Container,
46039
+ status: "online",
46040
+ metadata: { serialNumber: input.gatewayId },
46041
+ alreadyAdopted: adoptedDeviceId !== null,
46042
+ adoptedDeviceId,
46043
+ capabilities: [],
46044
+ children
46045
+ };
46046
+ });
46122
46047
  }
46123
46048
  //#endregion
46124
46049
  //#region src/devices/ecowitt-sensor-device.ts
46125
46050
  /**
46126
46051
  * Persisted config every Ecowitt sensor child carries. `sensorId` resolves the
46127
- * live reading from the facade; `brokerId` selects the gateway; `quantity` is
46128
- * the Ecowitt physical quantity that drives the cap selection;
46129
- * `system`/`integrationId` are provenance.
46052
+ * live reading from the gateway's client; `gatewayId` selects the gateway (its
46053
+ * Hub stableId); `quantity` is the Ecowitt physical quantity that drives the cap
46054
+ * selection; `system`/`integrationId` are provenance.
46130
46055
  */
46131
46056
  var ecowittSensorSchema = object({
46132
46057
  sensorId: string().min(1).describe("Ecowitt sensor stable id"),
46133
- brokerId: string().min(1).describe("Registry broker id"),
46058
+ gatewayId: string().min(1).describe("Parent gateway Hub stableId"),
46134
46059
  quantity: string().min(1).describe("Ecowitt physical quantity"),
46135
46060
  system: literal("ecowitt").optional(),
46136
46061
  integrationId: string().optional()
@@ -46174,7 +46099,7 @@ var SUPPORTED_CAPS = new Set([
46174
46099
  var EcowittSensorDevice = class extends BaseDevice {
46175
46100
  features = [];
46176
46101
  sensorId;
46177
- brokerId;
46102
+ gatewayId;
46178
46103
  capName;
46179
46104
  valueKey;
46180
46105
  /**
@@ -46190,7 +46115,7 @@ var EcowittSensorDevice = class extends BaseDevice {
46190
46115
  const persisted = ecowittSensorSchema.parse(ctx.persistedConfig ?? {});
46191
46116
  super(ctx, ecowittSensorSchema, { type: ctx.deviceMeta.type });
46192
46117
  this.sensorId = persisted.sensorId;
46193
- this.brokerId = persisted.brokerId;
46118
+ this.gatewayId = persisted.gatewayId;
46194
46119
  const cap = capForQuantity(persisted.quantity);
46195
46120
  this.capName = SUPPORTED_CAPS.has(cap) ? cap : "numeric-sensor";
46196
46121
  this.valueKey = valueFieldForCap(this.capName);
@@ -46200,11 +46125,8 @@ var EcowittSensorDevice = class extends BaseDevice {
46200
46125
  system: "ecowitt"
46201
46126
  });
46202
46127
  }
46203
- get facade() {
46204
- return ecowittFacades.get(this.brokerId);
46205
- }
46206
46128
  resolveSensor() {
46207
- return ecowittFacades.getSensor(this.brokerId, this.sensorId);
46129
+ return ecowittFacades.getSensor(this.gatewayId, this.sensorId);
46208
46130
  }
46209
46131
  async onActivate() {
46210
46132
  await super.onActivate();
@@ -46221,13 +46143,12 @@ var EcowittSensorDevice = class extends BaseDevice {
46221
46143
  this.snapshotUnsub = null;
46222
46144
  }
46223
46145
  }
46224
- /** Attach a facade `snapshot` listener that recomputes this sensor's slice. */
46146
+ /** Subscribe to per-gateway snapshot ticks (recompute this sensor's slice).
46147
+ * Uses the resolver's shared fan-out bus rather than the facade EventEmitter
46148
+ * directly, so N sensors on one gateway never trip Node's MaxListeners cap.
46149
+ * Works even before the facade exists — `recomputeSlice` no-ops on a missing
46150
+ * sensor and replays once the gateway pumps the first snapshot. */
46225
46151
  attachSnapshotListener() {
46226
- const facade = this.facade;
46227
- if (!facade) {
46228
- this.ctx.logger.debug("EcowittSensorDevice: facade not present; no live listener yet", { meta: { sensorId: this.sensorId } });
46229
- return;
46230
- }
46231
46152
  const onSnapshot = () => {
46232
46153
  try {
46233
46154
  this.recomputeSlice();
@@ -46238,10 +46159,7 @@ var EcowittSensorDevice = class extends BaseDevice {
46238
46159
  } });
46239
46160
  }
46240
46161
  };
46241
- facade.on("snapshot", onSnapshot);
46242
- this.snapshotUnsub = () => {
46243
- facade.off("snapshot", onSnapshot);
46244
- };
46162
+ this.snapshotUnsub = ecowittFacades.onSnapshot(this.gatewayId, onSnapshot);
46245
46163
  }
46246
46164
  /** Recompute + write this sensor's typed cap slice (+ battery) from the live reading. */
46247
46165
  recomputeSlice() {
@@ -46391,41 +46309,53 @@ var ecowittSensorEntrySchema = object({
46391
46309
  sensorId: string(),
46392
46310
  quantity: string(),
46393
46311
  channel: number().optional(),
46394
- name: string().optional()
46312
+ name: string().optional(),
46313
+ category: _enum([
46314
+ "gateway",
46315
+ "weather-station",
46316
+ "channel-sensor",
46317
+ "external"
46318
+ ]).optional()
46395
46319
  });
46396
46320
  /**
46397
- * Persisted config for an Ecowitt gateway Container. `brokerId` selects the
46398
- * gateway facade; `sensors[]` is the additively-reconciled list of sensors that
46399
- * fan out as accessory children (updated by the addon via `applyDerivedSpec` on
46400
- * every `snapshot` push). `system`/`integrationId`/`name` are provenance.
46321
+ * Persisted config for one Ecowitt gateway-group Container. `gatewayId` selects
46322
+ * the parent gateway's live nodewitt client (the gateway Hub device's
46323
+ * `stableId`); `sensors[]` is the additively-reconciled list of sensors that fan
46324
+ * out as accessory children (updated by the gateway device via `applyDerivedSpec`
46325
+ * on every `snapshot` push). `system`/`integrationId`/`name` are provenance.
46401
46326
  */
46402
46327
  var ecowittContainerSchema = object({
46403
- brokerId: string().min(1).describe("Registry broker id"),
46328
+ gatewayId: string().min(1).describe("Parent gateway Hub stableId"),
46329
+ deviceGroup: _enum([
46330
+ "gateway",
46331
+ "weather-station",
46332
+ "temp-sensor-ch1"
46333
+ ]).default("gateway"),
46404
46334
  sensors: array(ecowittSensorEntrySchema).default([]),
46405
46335
  integrationId: string().optional(),
46406
46336
  system: literal("ecowitt").optional(),
46407
46337
  name: string().optional()
46408
46338
  });
46409
46339
  /**
46410
- * Parent gateway Container for one Ecowitt station. Owns no caps itself it
46411
- * declares `getAccessoryChildren()` so the kernel auto-spawns one
46412
- * {@link EcowittSensorDevice} per sensor in the LIVE `sensors[]` config and
46413
- * reconciles additions/removals when the addon re-persists the list via
46414
- * `applyDerivedSpec`. Mirrors `HaContainerDevice` (which reads its `entities[]`
46415
- * live and is re-derived on reconcile).
46340
+ * One gateway-group Container for an Ecowitt station. A CHILD of the gateway Hub
46341
+ * (standalone mode). Owns no caps itself — it declares `getAccessoryChildren()`
46342
+ * so the kernel auto-spawns one {@link EcowittSensorDevice} per sensor in the
46343
+ * LIVE `sensors[]` config and reconciles additions/removals when the gateway
46344
+ * re-persists the list via `applyDerivedSpec`. Mirrors `HaContainerDevice` (which
46345
+ * reads its `entities[]` live and is re-derived on reconcile).
46416
46346
  */
46417
46347
  var EcowittContainerDevice = class extends BaseDevice {
46418
46348
  features = [DeviceFeature.Resyncable];
46419
- brokerId;
46349
+ gatewayId;
46420
46350
  integrationId;
46421
46351
  constructor(ctx) {
46422
46352
  const cfg = ecowittContainerSchema.parse(ctx.persistedConfig ?? {});
46423
46353
  super(ctx, ecowittContainerSchema, { type: DeviceType.Container });
46424
- this.brokerId = cfg.brokerId;
46354
+ this.gatewayId = cfg.gatewayId;
46425
46355
  this.integrationId = cfg.integrationId;
46426
- this.online = ecowittFacades.get(this.brokerId) !== null;
46356
+ this.online = ecowittFacades.get(this.gatewayId) !== null;
46427
46357
  this.updateSourceInfo({
46428
- id: this.brokerId,
46358
+ id: this.gatewayId,
46429
46359
  system: "ecowitt"
46430
46360
  });
46431
46361
  }
@@ -46440,7 +46370,7 @@ var EcowittContainerDevice = class extends BaseDevice {
46440
46370
  };
46441
46371
  const config = {
46442
46372
  sensorId: sensor.sensorId,
46443
- brokerId: this.brokerId,
46373
+ gatewayId: this.gatewayId,
46444
46374
  quantity: sensor.quantity,
46445
46375
  capabilities: [capForQuantity(sensor.quantity)],
46446
46376
  system: "ecowitt",
@@ -46456,328 +46386,290 @@ var EcowittContainerDevice = class extends BaseDevice {
46456
46386
  }
46457
46387
  };
46458
46388
  //#endregion
46459
- //#region src/addon.ts
46460
- /** Default multi-broker config — a fresh install starts with no gateways. */
46461
- var DEFAULTS = { brokers: [] };
46389
+ //#region src/devices/ecowitt-gateway-device.ts
46462
46390
  /**
46463
- * Ecowitt weather-station device-provider addon (multi-gateway).
46391
+ * Ecowitt gateway — a {@link DeviceType.Hub} device (standalone mode, Reolink
46392
+ * pattern). The operator-supplied CONNECTION lives on THIS device's config; the
46393
+ * gateway owns exactly one live `@apocaliss92/nodewitt` client (via an
46394
+ * {@link EcowittIntegrationManager}) keyed on its own `stableId` and published on
46395
+ * the in-process {@link ecowittFacades} resolver so its container + sensor
46396
+ * children read the live snapshot.
46464
46397
  *
46465
- * Wraps the `@apocaliss92/nodewitt` local-poll / push client. One registered
46466
- * gateway = one "broker"; each adopted gateway becomes a {@link DeviceType.Container}
46467
- * parent that fans out one typed sensor child per `Sensor.quantity`. Modelled on
46468
- * the Homematic / Home Assistant / Dreame device-provider template, with an
46469
- * additive sensor reconcile (sensors appear over time): on each `snapshot` push
46470
- * the addon re-persists the gateway Container's `sensors[]` via the generic
46471
- * `applyDerivedSpec`, which spawns new sensor children + removes orphaned ones.
46398
+ * It registers the `device-discovery` cap: `refreshDiscovery`/`listDiscovered`
46399
+ * enumerate the THREE gateway-group Container candidates (gateway /
46400
+ * weather-station / temp-sensor-ch1) that actually have sensors; `adoptDevice`
46401
+ * spawns a group {@link EcowittContainerDevice} child whose sensors materialise
46402
+ * as entity children; `releaseDevice` removes it. On every nodewitt snapshot the
46403
+ * gateway re-derives each adopted group Container's `sensors[]` additively.
46472
46404
  */
46473
- var EcowittProviderAddon = class extends BaseDeviceProvider {
46474
- addonId = "provider-ecowitt";
46475
- providerName = "Ecowitt";
46476
- deviceClasses = { [DeviceType.Container]: EcowittContainerDevice };
46477
- registry = null;
46478
- constructor() {
46479
- super({ ...DEFAULTS });
46405
+ var EcowittGatewayDevice = class extends BaseDevice {
46406
+ features = [];
46407
+ manager = null;
46408
+ eventUnsubscribers = [];
46409
+ latestSensors = [];
46410
+ constructor(ctx) {
46411
+ ecowittGatewaySchema.parse(ctx.persistedConfig ?? {});
46412
+ super(ctx, ecowittGatewaySchema, { type: DeviceType.Hub });
46413
+ this.online = false;
46414
+ this.registerDeviceDiscovery();
46415
+ this.updateSourceInfo({
46416
+ id: this.stableId,
46417
+ system: "ecowitt"
46418
+ });
46480
46419
  }
46481
- async onInitialize() {
46482
- const regs = await super.onInitialize();
46483
- this.registry = new EcowittBrokerRegistry(this.ctx.logger);
46484
- this.registry.setOnBrokerConnected((brokerId) => {
46485
- this.ctx.logger.info("Ecowitt: broker connected", { meta: { brokerId } });
46486
- this.setBrokerDevicesOnline(brokerId, true);
46487
- });
46488
- this.registry.setOnBrokerDisconnected((brokerId) => {
46489
- this.setBrokerDevicesOnline(brokerId, false);
46490
- });
46491
- this.registry.setOnSensorsChanged((brokerId, sensors) => {
46492
- this.reconcileGatewaySensors(brokerId, sensors);
46493
- });
46494
- await this.registry.restore(this.config.brokers);
46495
- this.ctx.logger.info("Ecowitt: provider initialised", { meta: { brokerCount: this.config.brokers.length } });
46496
- await this.reconcileIntegrationsToBrokers();
46497
- this.subscribeIntegrationLifecycle();
46498
- return [
46499
- ...regs,
46500
- {
46501
- capability: brokerCapability,
46502
- provider: this.buildBrokerProvider()
46503
- },
46504
- {
46505
- capability: deviceAdoptionCapability,
46506
- provider: this.buildAdoptionProvider()
46507
- }
46508
- ];
46420
+ /** Adopt a pre-built manager (created by `onCreateDevice` so the live client
46421
+ * starts once) mirrors `ReolinkHub.adoptApi`. Published on the resolver so
46422
+ * children pick it up. */
46423
+ adoptManager(manager) {
46424
+ this.manager = manager;
46425
+ const facade = manager.facade;
46426
+ if (facade !== null) ecowittFacades.set(this.stableId, facade);
46509
46427
  }
46510
- async onConfigChanged() {
46511
- const reg = this.registry;
46512
- if (!reg) return;
46513
- const persisted = this.config.brokers;
46514
- const liveIds = new Set(reg.list().map((b) => b.id));
46515
- const persistedIds = new Set(persisted.map((e) => e.id));
46516
- for (const liveId of liveIds) if (!persistedIds.has(liveId)) try {
46517
- await reg.removeEntry(liveId);
46518
- } catch (err) {
46519
- this.ctx.logger.warn("Ecowitt onConfigChanged: removeEntry failed", { meta: {
46520
- brokerId: liveId,
46521
- error: errMsg(err)
46522
- } });
46523
- }
46524
- for (const entry of persisted) {
46525
- if (entry.id && liveIds.has(entry.id)) {
46526
- if (sameConnection(entry.connection, reg.getConnection(entry.id))) continue;
46527
- try {
46528
- await reg.updateEntry(entry.id, entry.connection);
46529
- } catch (err) {
46530
- this.ctx.logger.warn("Ecowitt onConfigChanged: updateEntry failed", { meta: {
46531
- brokerId: entry.id,
46532
- error: errMsg(err)
46533
- } });
46534
- }
46535
- continue;
46536
- }
46537
- try {
46538
- const created = await reg.createEntry(entry.name, entry.connection);
46539
- if (created.id !== entry.id) {
46540
- const next = persisted.map((b) => b === entry ? {
46541
- ...b,
46542
- id: created.id
46543
- } : b);
46544
- await this.updateGlobalSettings({ brokers: next });
46545
- }
46546
- } catch (err) {
46547
- this.ctx.logger.warn("Ecowitt onConfigChanged: failed to start new broker", { meta: {
46548
- brokerName: entry.name,
46549
- error: errMsg(err)
46550
- } });
46551
- }
46552
- }
46428
+ async onActivate() {
46429
+ if (this.manager === null) this.ensureManager().catch((err) => {
46430
+ this.ctx.logger.warn("Ecowitt gateway initial connect failed", { meta: { error: errMsg(err) } });
46431
+ });
46432
+ else this.refreshDiscoveryFromClient().catch(() => {});
46433
+ this.eventUnsubscribers.push(this.ctx.eventBus.subscribe({ category: EventCategory.DeviceUnregistered }, (event) => {
46434
+ if (event.data.parentDeviceId !== this.id) return;
46435
+ this.refreshDiscoveryFromClient().catch(() => {});
46436
+ }));
46553
46437
  }
46554
- async onShutdown() {
46555
- try {
46556
- await this.registry?.shutdown();
46438
+ async removeDevice() {
46439
+ for (const unsub of this.eventUnsubscribers) try {
46440
+ unsub();
46441
+ } catch {}
46442
+ this.eventUnsubscribers.length = 0;
46443
+ const mgr = this.manager;
46444
+ this.manager = null;
46445
+ ecowittFacades.set(this.stableId, null);
46446
+ if (mgr) try {
46447
+ await mgr.stop();
46557
46448
  } catch (err) {
46558
- this.ctx.logger.warn("Ecowitt: provider shutdown error", { meta: { error: errMsg(err) } });
46449
+ this.ctx.logger.warn("Ecowitt gateway: client stop failed", { meta: { error: errMsg(err) } });
46559
46450
  }
46560
- this.registry = null;
46561
- await super.onShutdown();
46562
46451
  }
46563
- /** Stable id, broker-scoped. One broker = one gateway, so the brokerId alone
46564
- * is the unique key for the gateway Container. */
46565
- generateStableId(_type, config) {
46566
- return `ecowitt:${String(config?.["brokerId"] ?? "unknown")}`;
46567
- }
46568
- /**
46569
- * Re-derive the adopted gateway Container's `sensors[]` from the live snapshot.
46570
- * When the set changed, re-persist it via the generic `applyDerivedSpec`, which
46571
- * the kernel uses to re-run `getAccessoryChildren()` (spawning new sensor
46572
- * children + removing orphaned ones). Best-effort; never throws.
46573
- */
46574
- async reconcileGatewaySensors(brokerId, sensors) {
46575
- try {
46576
- const reg = this.ctx.kernel.deviceRegistry;
46577
- const devices = this.ctx.kernel.devices;
46578
- if (!reg || !devices) return;
46579
- let containerId = null;
46580
- for (const d of reg.getAllForAddon(this.addonId)) {
46581
- if (d.parentDeviceId !== null) continue;
46582
- const cfg = await devices.loadConfig(d.id).catch(() => ({}));
46583
- if (cfg["system"] === "ecowitt" && cfg["brokerId"] === brokerId) {
46584
- containerId = d.id;
46585
- break;
46586
- }
46587
- }
46588
- if (containerId === null) return;
46589
- const nextSensors = sensors.map((s) => ({
46590
- sensorId: s.id,
46591
- quantity: s.quantity,
46592
- ...s.channel !== void 0 ? { channel: s.channel } : {},
46593
- ...s.name !== void 0 ? { name: s.name } : {}
46594
- }));
46595
- const cfg = await devices.loadConfig(containerId).catch(() => ({}));
46596
- if (sensorsEqual(Array.isArray(cfg["sensors"]) ? cfg["sensors"] : [], nextSensors)) return;
46597
- await devices.applyDerivedSpec(containerId, { config: { sensors: nextSensors } });
46598
- this.ctx.logger.info("Ecowitt: gateway sensors reconciled", { meta: {
46599
- brokerId,
46600
- deviceId: containerId,
46601
- sensorCount: nextSensors.length
46602
- } });
46452
+ async applySettingsPatch(patch) {
46453
+ if (!("connection" in patch)) return;
46454
+ const parsed = ecowittGatewaySchema.parse({
46455
+ connection: patch["connection"],
46456
+ system: "ecowitt-gateway"
46457
+ });
46458
+ await this.config.setAll({ connection: parsed.connection });
46459
+ const mgr = this.manager;
46460
+ if (mgr) try {
46461
+ await mgr.applyConnection(parsed.connection);
46603
46462
  } catch (err) {
46604
- this.ctx.logger.warn("Ecowitt: gateway sensor reconcile failed", { meta: {
46605
- brokerId,
46606
- error: errMsg(err)
46607
- } });
46463
+ this.ctx.logger.warn("Ecowitt gateway: applyConnection failed", { meta: { error: errMsg(err) } });
46608
46464
  }
46609
- }
46610
- buildBrokerProvider() {
46611
- return buildEcowittBrokerProvider({
46612
- ownerAddonId: this.ctx.id,
46613
- registry: this.requireRegistry(),
46614
- getBrokers: () => this.config.brokers,
46615
- persistBrokers: (brokers) => this.updateGlobalSettings({ brokers: [...brokers] }),
46616
- cascadeRemoveDevices: (brokerId) => this.cascadeRemoveDevicesForBroker(brokerId),
46617
- logger: this.ctx.logger
46465
+ else await this.ensureManager().catch((err) => {
46466
+ this.ctx.logger.warn("Ecowitt gateway re-connect after settings change failed", { meta: { error: errMsg(err) } });
46618
46467
  });
46619
46468
  }
46620
- async cascadeRemoveDevicesForBroker(brokerId) {
46621
- const reg = this.ctx.kernel.deviceRegistry;
46622
- const devices = this.ctx.kernel.devices;
46623
- if (!reg || !devices) return;
46624
- await cascadeRemoveDevicesForBroker({
46625
- reg,
46626
- devices,
46627
- addonId: this.addonId,
46628
- brokerId,
46629
- logger: this.ctx.logger
46469
+ /** Build + start the per-device nodewitt client (if not already running). */
46470
+ async ensureManager() {
46471
+ if (this.manager !== null) return;
46472
+ const connection = this.config.values.connection;
46473
+ const mgr = new EcowittIntegrationManager({
46474
+ id: this.stableId,
46475
+ name: this.name,
46476
+ connection,
46477
+ logger: this.ctx.logger,
46478
+ onConnected: () => this.setGatewayOnline(true),
46479
+ onDisconnected: () => this.setGatewayOnline(false),
46480
+ onSensorsChanged: (_id, sensors) => this.handleSensorsChanged(sensors),
46481
+ onFacadeBuilt: (_id, facade) => ecowittFacades.set(this.stableId, facade)
46630
46482
  });
46483
+ this.manager = mgr;
46484
+ await mgr.start();
46631
46485
  }
46632
- async reconcileIntegrationsToBrokers() {
46633
- try {
46634
- const mine = (await this.ctx.api.integrations.list.query()).filter((i) => i.addonId === this.ctx.id);
46635
- const surviving = new Set(mine.map((i) => i.id));
46636
- for (const integration of mine) {
46637
- const settings = await this.ctx.api.integrations.getSettings.query({ id: integration.id });
46638
- const brokerId = typeof settings["brokerId"] === "string" ? settings["brokerId"] : void 0;
46639
- if (brokerId === void 0) continue;
46640
- if (!this.config.brokers.some((b) => b.id === brokerId)) {
46641
- this.ctx.logger.warn("Ecowitt integration→broker: linked broker not found", { meta: {
46642
- integrationId: integration.id,
46643
- brokerId
46644
- } });
46645
- continue;
46646
- }
46647
- this.requireRegistry().linkIntegration(integration.id, brokerId);
46648
- }
46649
- const toRemove = this.config.brokers.filter((b) => b.integrationId !== void 0 && !surviving.has(b.integrationId)).map((b) => b.id);
46650
- if (toRemove.length === 0) return;
46651
- for (const id of toRemove) try {
46652
- await this.requireRegistry().removeEntry(id);
46653
- await this.cascadeRemoveDevicesForBroker(id);
46654
- } catch (err) {
46655
- this.ctx.logger.warn("Ecowitt integration→broker: broker cleanup failed", { meta: {
46656
- brokerId: id,
46657
- error: errMsg(err)
46658
- } });
46659
- }
46660
- const nextBrokers = this.config.brokers.filter((b) => !toRemove.includes(b.id));
46661
- await this.updateGlobalSettings({ brokers: nextBrokers });
46662
- } catch (err) {
46663
- this.ctx.logger.warn("Ecowitt integration→broker reconcile failed", { meta: { error: errMsg(err) } });
46664
- }
46665
- }
46666
- subscribeIntegrationLifecycle() {
46667
- const handler = (event) => {
46668
- const addonId = event.data["addonId"];
46669
- if (typeof addonId === "string" && addonId !== this.ctx.id) return;
46670
- this.reconcileIntegrationsToBrokers();
46671
- };
46672
- this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationEnabled }, handler);
46673
- this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationDisabled }, handler);
46674
- this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationDeleted }, handler);
46675
- }
46676
- buildAdoptionProvider() {
46677
- return buildEcowittAdoptionProvider({
46678
- registry: {
46679
- getFacadeForBroker: (id) => this.requireRegistry().get(id) !== null ? { getSensors: () => ecowittFacades.getSensors(id) } : null,
46680
- list: () => this.requireRegistry().list().map((b) => ({
46681
- id: b.id,
46682
- name: b.name
46683
- }))
46684
- },
46685
- logger: this.ctx.logger,
46686
- getBrokerIdForIntegration: async (id) => {
46687
- const brokerId = (await this.ctx.api.integrations.getSettings.query({ id }))["brokerId"];
46688
- if (typeof brokerId !== "string") throw new Error(`integration ${id} has no linked brokerId`);
46689
- return brokerId;
46486
+ setGatewayOnline(online) {
46487
+ if (this.online === online) return;
46488
+ this.markOnline(online);
46489
+ this.ctx.logger.info("Ecowitt gateway " + (online ? "online" : "offline"), { tags: { deviceId: this.id } });
46490
+ this.setContainersOnline(online).catch(() => {});
46491
+ }
46492
+ async setContainersOnline(online) {
46493
+ const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
46494
+ for (const child of children) {
46495
+ if (child.type !== DeviceType.Container) continue;
46496
+ if (child.online === online) continue;
46497
+ child.markOnline(online);
46498
+ }
46499
+ }
46500
+ /** On each snapshot: cache sensors, re-derive discovery, additively reconcile
46501
+ * every adopted group Container's `sensors[]`. */
46502
+ handleSensorsChanged(sensors) {
46503
+ this.latestSensors = sensors;
46504
+ this.refreshDiscoveryFromClient().catch(() => {});
46505
+ this.reconcileGroupSensors(sensors).catch((err) => {
46506
+ this.ctx.logger.warn("Ecowitt gateway: sensor reconcile failed", { meta: { error: errMsg(err) } });
46507
+ });
46508
+ ecowittFacades.emitSnapshot(this.stableId);
46509
+ }
46510
+ registerDeviceDiscovery() {
46511
+ this.ctx.registerNativeCap(deviceDiscoveryCapability, {
46512
+ getStatus: async ({ deviceId }) => {
46513
+ if (deviceId !== this.id) return null;
46514
+ return this.runtimeState.getCapState("device-discovery") ?? null;
46690
46515
  },
46691
- listAdoptedEcowitt: async () => {
46692
- const reg = this.ctx.kernel.deviceRegistry;
46693
- const devices = this.ctx.kernel.devices;
46694
- if (!reg || !devices) return [];
46695
- const out = [];
46696
- for (const d of reg.getAllForAddon(this.addonId)) {
46697
- if (d.parentDeviceId !== null) continue;
46698
- const config = await devices.loadConfig(d.id).catch(() => ({}));
46699
- out.push({
46700
- id: d.id,
46701
- config
46702
- });
46703
- }
46704
- return out;
46516
+ listDiscovered: async ({ deviceId }) => {
46517
+ if (deviceId !== this.id) return [];
46518
+ return this.runtimeState.getCapState("device-discovery")?.discovered ?? [];
46705
46519
  },
46706
- adoptGateway: async ({ brokerId, integrationId, name }) => {
46707
- const devices = this.ctx.kernel.devices;
46708
- if (!devices) throw new Error("ecowitt adopt: kernel.devices unavailable");
46709
- const config = {
46710
- brokerId,
46711
- sensors: ecowittFacades.getSensors(brokerId).map((s) => ({
46712
- sensorId: s.id,
46713
- quantity: s.quantity,
46714
- ...s.channel !== void 0 ? { channel: s.channel } : {},
46715
- ...s.name !== void 0 ? { name: s.name } : {}
46716
- })),
46717
- system: "ecowitt",
46718
- integrationId,
46719
- name
46720
- };
46721
- const stableId = this.generateStableId(DeviceType.Container, config);
46722
- const device = await devices.create(stableId, EcowittContainerDevice, config, null, {
46723
- type: DeviceType.Container,
46724
- name,
46725
- integrationId
46726
- });
46727
- const children = await devices.getChildren(device.id);
46728
- return {
46729
- deviceId: device.id,
46730
- accessoryDeviceIds: children.map((c) => c.id)
46731
- };
46520
+ refreshDiscovery: async ({ deviceId }) => {
46521
+ if (deviceId !== this.id) return [];
46522
+ await this.refreshDiscoveryFromClient();
46523
+ return this.runtimeState.getCapState("device-discovery")?.discovered ?? [];
46732
46524
  },
46733
- removeDevice: async (id) => {
46734
- await this.ctx.kernel.devices?.remove(id);
46525
+ adoptDevice: async ({ deviceId, childNativeId, name }) => {
46526
+ if (deviceId !== this.id) throw new Error(`adoptDevice: deviceId mismatch — got ${deviceId}, expected ${this.id}`);
46527
+ return this.adoptGroupContainer(childNativeId, name);
46735
46528
  },
46736
- findDeviceConfig: async (id) => {
46737
- const devices = this.ctx.kernel.devices;
46738
- if (!devices) return null;
46739
- return devices.loadConfig(id).catch(() => null);
46529
+ releaseDevice: async ({ deviceId, childDeviceId }) => {
46530
+ if (deviceId !== this.id) return;
46531
+ await this.releaseGroupContainer(childDeviceId);
46740
46532
  }
46741
46533
  });
46534
+ this.setCapSlice(deviceDiscoveryCapability, {
46535
+ discovered: [],
46536
+ lastDiscoveryAt: null,
46537
+ lastError: null,
46538
+ lastFetchedAt: 0
46539
+ });
46742
46540
  }
46743
- globalSettingsSchema() {
46744
- return this.schema({ sections: [{
46745
- id: "ecowitt-broker",
46746
- title: "Ecowitt gateway",
46747
- description: "Ecowitt gateways are managed in the External systems → Brokers tab.",
46748
- columns: 1,
46749
- fields: [{
46750
- type: "info",
46751
- key: "brokerHelp",
46752
- label: "Gateways are managed separately",
46753
- content: "This integration links to an Ecowitt gateway broker. Add, edit, or remove gateways from External systems → Brokers. The integration only stores a reference to its broker."
46754
- }]
46755
- }] });
46756
- }
46757
- async supportsManualCreation() {
46758
- return false;
46759
- }
46760
- async onGetCreationSchema(_type) {
46761
- return null;
46541
+ /** Enumerate the three gateway-group Container candidates from the live client
46542
+ * snapshot, flag `alreadyAdopted` per group, persist into the slice. */
46543
+ async refreshDiscoveryFromClient() {
46544
+ let lastError = null;
46545
+ let discovered = [];
46546
+ try {
46547
+ const sensors = ecowittFacades.get(this.stableId)?.getSensors() ?? this.latestSensors;
46548
+ const adoptedByGroup = await this.adoptedContainerIdByGroup();
46549
+ discovered = buildEcowittGatewayCandidates({
46550
+ gatewayId: this.stableId,
46551
+ gatewayName: this.name,
46552
+ sensors,
46553
+ adoptedDeviceIdByGroup: adoptedByGroup
46554
+ });
46555
+ } catch (err) {
46556
+ lastError = errMsg(err);
46557
+ this.ctx.logger.warn("Ecowitt gateway discovery refresh failed", { meta: { error: lastError } });
46558
+ }
46559
+ this.runtimeState.setCapState(deviceDiscoveryCapability.name, {
46560
+ discovered,
46561
+ lastDiscoveryAt: Date.now(),
46562
+ lastError,
46563
+ lastFetchedAt: Date.now()
46564
+ });
46762
46565
  }
46763
- async onCreateDevice(_type, _config) {
46764
- throw new Error("Ecowitt gateways are adopted, not created manually");
46566
+ /** Map each device group → the adopted group Container's device id (null when
46567
+ * not adopted), by walking this gateway's direct children. */
46568
+ async adoptedContainerIdByGroup() {
46569
+ const out = {};
46570
+ const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
46571
+ for (const child of children) {
46572
+ if (child.type !== DeviceType.Container) continue;
46573
+ const cfg = await this.ctx.devices.loadConfig(child.id).catch(() => ({}));
46574
+ if (cfg["system"] !== "ecowitt") continue;
46575
+ out[configDeviceGroup(cfg)] = child.id;
46576
+ }
46577
+ return out;
46765
46578
  }
46766
- setBrokerDevicesOnline(brokerId, online) {
46767
- const reg = this.ctx.kernel.deviceRegistry;
46768
- if (!reg) return;
46769
- const n = setBrokerDevicesOnline(reg.getAllForAddon(this.addonId), brokerId, online);
46770
- if (n > 0) this.ctx.logger.info("Ecowitt: broker devices " + (online ? "online" : "offline"), { meta: {
46771
- brokerId,
46772
- count: n
46773
- } });
46579
+ /** Promote a discovered group candidate to a real group Container child. */
46580
+ async adoptGroupContainer(childNativeId, nameOverride) {
46581
+ const group = ECOWITT_DEVICE_GROUPS.find((g) => groupNativeId(this.stableId, g) === childNativeId);
46582
+ if (group === void 0) throw new Error(`adoptDevice: ${childNativeId} does not match any gateway group`);
46583
+ const existingId = (await this.adoptedContainerIdByGroup())[group];
46584
+ if (typeof existingId === "number") {
46585
+ const existing = (await this.ctx.devices.getAll()).find((d) => d.id === existingId);
46586
+ if (existing) return {
46587
+ deviceId: existing.id,
46588
+ stableId: existing.stableId
46589
+ };
46590
+ }
46591
+ const sensors = (ecowittFacades.get(this.stableId)?.getSensors() ?? this.latestSensors).filter((s) => deviceGroupForSensor(s.category, s.channel) === group).map(sensorToEntry);
46592
+ const name = nameOverride ?? `${this.name} — ${group}`;
46593
+ const config = {
46594
+ gatewayId: this.stableId,
46595
+ deviceGroup: group,
46596
+ sensors,
46597
+ system: "ecowitt",
46598
+ name
46599
+ };
46600
+ const stableId = `${this.stableId}:${group}`;
46601
+ const created = await this.ctx.devices.create(stableId, EcowittContainerDevice, config, this.id, {
46602
+ type: DeviceType.Container,
46603
+ name
46604
+ });
46605
+ this.ctx.logger.info("Ecowitt gateway: adopted group container", {
46606
+ tags: { deviceId: created.id },
46607
+ meta: {
46608
+ group,
46609
+ stableId,
46610
+ sensorCount: sensors.length
46611
+ }
46612
+ });
46613
+ await this.refreshDiscoveryFromClient().catch(() => {});
46614
+ return {
46615
+ deviceId: created.id,
46616
+ stableId
46617
+ };
46774
46618
  }
46775
- requireRegistry() {
46776
- if (!this.registry) throw new Error("Ecowitt provider not initialised");
46777
- return this.registry;
46619
+ async releaseGroupContainer(childDeviceId) {
46620
+ const child = (await this.ctx.devices.getAll()).find((d) => d.id === childDeviceId);
46621
+ if (!child || child.parentDeviceId !== this.id) throw new Error(`releaseDevice: ${childDeviceId} is not a child of gateway ${this.id}`);
46622
+ await this.ctx.devices.remove(childDeviceId);
46623
+ await this.refreshDiscoveryFromClient().catch(() => {});
46624
+ }
46625
+ /** Re-derive every adopted group Container's `sensors[]` from the live
46626
+ * snapshot (group-filtered) and re-persist via `applyDerivedSpec` when it
46627
+ * changed. Best-effort. */
46628
+ async reconcileGroupSensors(sensors) {
46629
+ const byGroup = bucketSensorsByGroup(sensors);
46630
+ const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
46631
+ for (const child of children) {
46632
+ if (child.type !== DeviceType.Container) continue;
46633
+ const cfg = await this.ctx.devices.loadConfig(child.id).catch(() => ({}));
46634
+ if (cfg["system"] !== "ecowitt") continue;
46635
+ const group = configDeviceGroup(cfg);
46636
+ const nextSensors = byGroup.get(group) ?? [];
46637
+ if (sensorsEqual(Array.isArray(cfg["sensors"]) ? cfg["sensors"] : [], nextSensors)) continue;
46638
+ await this.ctx.devices.applyDerivedSpec(child.id, { config: { sensors: nextSensors } });
46639
+ this.ctx.logger.info("Ecowitt gateway: group sensors reconciled", { meta: {
46640
+ deviceId: child.id,
46641
+ group,
46642
+ sensorCount: nextSensors.length
46643
+ } });
46644
+ }
46778
46645
  }
46779
46646
  };
46780
- /** Structural equality of two persisted sensor lists (order-independent by id). */
46647
+ /** Resolve `deviceGroup` from a persisted container config (defaults to 'gateway'). */
46648
+ function configDeviceGroup(config) {
46649
+ const g = config["deviceGroup"];
46650
+ return ECOWITT_DEVICE_GROUPS.find((group) => group === g) ?? "gateway";
46651
+ }
46652
+ /** Build the persisted sensor entry (incl. self-describing category) from a live Sensor. */
46653
+ function sensorToEntry(s) {
46654
+ return {
46655
+ sensorId: s.id,
46656
+ quantity: s.quantity,
46657
+ ...s.channel !== void 0 ? { channel: s.channel } : {},
46658
+ ...s.name !== void 0 ? { name: s.name } : {},
46659
+ ...s.category !== void 0 ? { category: s.category } : {}
46660
+ };
46661
+ }
46662
+ /** Bucket live sensors into their device group. */
46663
+ function bucketSensorsByGroup(sensors) {
46664
+ const byGroup = /* @__PURE__ */ new Map();
46665
+ for (const group of ECOWITT_DEVICE_GROUPS) byGroup.set(group, []);
46666
+ for (const s of sensors) {
46667
+ const group = deviceGroupForSensor(s.category, s.channel);
46668
+ byGroup.get(group)?.push(sensorToEntry(s));
46669
+ }
46670
+ return byGroup;
46671
+ }
46672
+ /** Structural equality of two persisted sensor lists (order-independent by id + name). */
46781
46673
  function sensorsEqual(a, b) {
46782
46674
  if (a.length !== b.length) return false;
46783
46675
  const aById = /* @__PURE__ */ new Map();
@@ -46795,4 +46687,140 @@ function sensorsEqual(a, b) {
46795
46687
  return true;
46796
46688
  }
46797
46689
  //#endregion
46798
- export { EcowittProviderAddon, buildConnectionFormSchema as a, settingsToEcowittConfig as c, valueFieldForCap as i, capForQuantity as n, ecowittAddonConfigSchema as o, sensorLabel as r, ecowittConfigSchema as s, buildEcowittGatewayCandidate as t };
46690
+ //#region src/addon.ts
46691
+ /**
46692
+ * Ecowitt weather-station device-provider addon — `mode: standalone` (the
46693
+ * Reolink pattern). No broker, no device-adoption cap. A gateway is added as a
46694
+ * DEVICE via the manual-creation form: the CONNECTION (transport / host / port /
46695
+ * password OR listener) lives on the gateway DEVICE config. The created gateway
46696
+ * is a {@link DeviceType.Hub} ({@link EcowittGatewayDevice}) that owns its own
46697
+ * live `@apocaliss92/nodewitt` client and registers `device-discovery` to adopt
46698
+ * its own children: up to THREE group {@link DeviceType.Container} children
46699
+ * (gateway / weather-station / temp-sensor-ch1), each fanning out one typed
46700
+ * sensor child per `Sensor.quantity`.
46701
+ *
46702
+ * `instanceMode: multiple` — many gateways may be added.
46703
+ */
46704
+ var EcowittProviderAddon = class extends BaseDeviceProvider {
46705
+ addonId = "provider-ecowitt";
46706
+ providerName = "Ecowitt";
46707
+ deviceClasses = {
46708
+ [DeviceType.Hub]: EcowittGatewayDevice,
46709
+ [DeviceType.Container]: EcowittContainerDevice
46710
+ };
46711
+ constructor() {
46712
+ super({});
46713
+ }
46714
+ async supportsDiscovery() {
46715
+ return true;
46716
+ }
46717
+ async getDiscoveryParamsSchema() {
46718
+ return buildDiscoveryParamsFormSchema();
46719
+ }
46720
+ async discoverDevices(input) {
46721
+ const broadcastAddr = typeof input?.params?.["broadcastAddress"] === "string" ? input.params["broadcastAddress"].trim() : "";
46722
+ const timeoutMs = typeof input?.params?.["timeoutMs"] === "number" ? input.params["timeoutMs"] : void 0;
46723
+ const gateways = await Ecowitt.discover({
46724
+ ...broadcastAddr.length > 0 ? { broadcastAddr } : {},
46725
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
46726
+ });
46727
+ this.ctx.logger.info("Ecowitt discovery complete", { meta: {
46728
+ count: gateways.length,
46729
+ broadcastAddr: broadcastAddr.length > 0 ? broadcastAddr : "local"
46730
+ } });
46731
+ return gateways.map((g) => {
46732
+ const displayName = g.model ?? g.name;
46733
+ return {
46734
+ stableId: `ecowitt:${slugifyHost(g.ip)}`,
46735
+ type: DeviceType.Hub,
46736
+ suggestedName: displayName,
46737
+ prefilledConfig: {
46738
+ name: displayName,
46739
+ connection: {
46740
+ transport: "local",
46741
+ host: g.ip
46742
+ }
46743
+ }
46744
+ };
46745
+ });
46746
+ }
46747
+ async adoptDiscoveredDevice(input) {
46748
+ return this.createDevice({
46749
+ type: DeviceType.Hub,
46750
+ config: input.candidate.prefilledConfig
46751
+ });
46752
+ }
46753
+ async supportsManualCreation() {
46754
+ return true;
46755
+ }
46756
+ async onGetCreationSchema(type) {
46757
+ if (type !== DeviceType.Hub) return null;
46758
+ return buildConnectionFormSchema();
46759
+ }
46760
+ async onCreateDevice(type, config) {
46761
+ if (type !== DeviceType.Hub) throw new Error(`Ecowitt provider does not support device type: ${type}`);
46762
+ const name = typeof config["name"] === "string" ? config["name"].trim() : "";
46763
+ if (!name) throw new Error("Gateway name is required");
46764
+ const connection = settingsToEcowittConfig(config);
46765
+ if (connection.transport === "local" && connection.host.trim().length === 0) throw new Error("Gateway host is required for local-poll transport");
46766
+ const stableId = this.generateStableId(DeviceType.Hub, { connection });
46767
+ const manager = new EcowittIntegrationManager({
46768
+ id: stableId,
46769
+ name,
46770
+ connection,
46771
+ logger: this.ctx.logger,
46772
+ onConnected: () => void 0,
46773
+ onDisconnected: () => void 0,
46774
+ onSensorsChanged: () => void 0,
46775
+ onFacadeBuilt: (_id, facade) => ecowittFacades.set(stableId, facade)
46776
+ });
46777
+ try {
46778
+ await manager.start();
46779
+ } catch (err) {
46780
+ this.ctx.logger.warn("Ecowitt create: initial client start failed — device kept", { meta: {
46781
+ stableId,
46782
+ error: errMsg(err)
46783
+ } });
46784
+ }
46785
+ return {
46786
+ meta: {
46787
+ type: DeviceType.Hub,
46788
+ name
46789
+ },
46790
+ config: {
46791
+ connection,
46792
+ system: "ecowitt-gateway"
46793
+ },
46794
+ onAfterCreate: async (device) => {
46795
+ if (device instanceof EcowittGatewayDevice) device.adoptManager(manager);
46796
+ }
46797
+ };
46798
+ }
46799
+ /**
46800
+ * Gateway stableId — derived from the connection (Reolink-style host/identity
46801
+ * key), NOT a broker id. Priority: `stationId` (operator-provided stable id) →
46802
+ * `host` (local transport) → `listen:<port>` (listener transport). Re-adding
46803
+ * the same gateway reuses its persisted row.
46804
+ */
46805
+ generateStableId(_type, config) {
46806
+ const connection = extractConnection(config);
46807
+ const station = typeof connection?.stationId === "string" ? connection.stationId.trim() : "";
46808
+ if (station.length > 0) return `ecowitt:${slugifyHost(station)}`;
46809
+ if (connection?.transport === "local") {
46810
+ const host = connection.host.trim();
46811
+ if (host.length > 0) return `ecowitt:${slugifyHost(host)}`;
46812
+ }
46813
+ if (connection?.transport === "listener") return `ecowitt:listen-${connection.listenPort}`;
46814
+ throw new Error("Ecowitt: gateway resolved neither a station id nor a host/listen endpoint — cannot persist a stable row key.");
46815
+ }
46816
+ };
46817
+ /** Narrow the create-spec config's `connection` field to an {@link EcowittConfig}. */
46818
+ function extractConnection(config) {
46819
+ const raw = config?.["connection"];
46820
+ if (typeof raw !== "object" || raw === null) return null;
46821
+ const transport = raw.transport;
46822
+ if (transport !== "local" && transport !== "listener") return null;
46823
+ return settingsToEcowittConfig(raw);
46824
+ }
46825
+ //#endregion
46826
+ export { EcowittProviderAddon, deviceGroupForSensor as a, valueFieldForCap as c, ecowittGatewaySchema as d, settingsToEcowittConfig as f, capForQuantity as i, buildConnectionFormSchema as l, groupNativeId as n, deviceGroupLabel as o, ECOWITT_DEVICE_GROUPS as r, sensorLabel as s, buildEcowittGatewayCandidates as t, ecowittConfigSchema as u };