@alwaysai/device-agent 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/lib/application-control/environment-variables.d.ts.map +1 -1
  2. package/lib/application-control/environment-variables.js +9 -4
  3. package/lib/application-control/environment-variables.js.map +1 -1
  4. package/lib/application-control/environment-variables.test.js +1 -1
  5. package/lib/application-control/environment-variables.test.js.map +1 -1
  6. package/lib/application-control/install.d.ts.map +1 -1
  7. package/lib/application-control/install.js +6 -2
  8. package/lib/application-control/install.js.map +1 -1
  9. package/lib/application-control/models.d.ts.map +1 -1
  10. package/lib/application-control/models.js +4 -2
  11. package/lib/application-control/models.js.map +1 -1
  12. package/lib/application-control/status.js +4 -5
  13. package/lib/application-control/status.js.map +1 -1
  14. package/lib/cloud-connection/device-agent-cloud-connection.d.ts +3 -3
  15. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
  16. package/lib/cloud-connection/device-agent-cloud-connection.js +114 -99
  17. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
  18. package/lib/cloud-connection/live-updates-handler.d.ts +1 -0
  19. package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
  20. package/lib/cloud-connection/live-updates-handler.js +22 -4
  21. package/lib/cloud-connection/live-updates-handler.js.map +1 -1
  22. package/lib/cloud-connection/messages.d.ts.map +1 -1
  23. package/lib/cloud-connection/messages.js +3 -4
  24. package/lib/cloud-connection/messages.js.map +1 -1
  25. package/lib/cloud-connection/shadow-handler.d.ts +14 -21
  26. package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
  27. package/lib/cloud-connection/shadow-handler.js +162 -108
  28. package/lib/cloud-connection/shadow-handler.js.map +1 -1
  29. package/lib/cloud-connection/shadow-handler.test.js +100 -83
  30. package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
  31. package/lib/device-control/device-control.d.ts +7 -14
  32. package/lib/device-control/device-control.d.ts.map +1 -1
  33. package/lib/device-control/device-control.js +37 -14
  34. package/lib/device-control/device-control.js.map +1 -1
  35. package/lib/secure-tunneling/secure-tunneling.d.ts +105 -0
  36. package/lib/secure-tunneling/secure-tunneling.d.ts.map +1 -0
  37. package/lib/secure-tunneling/secure-tunneling.js +435 -0
  38. package/lib/secure-tunneling/secure-tunneling.js.map +1 -0
  39. package/lib/secure-tunneling/secure-tunneling.test.d.ts +2 -0
  40. package/lib/secure-tunneling/secure-tunneling.test.d.ts.map +1 -0
  41. package/lib/secure-tunneling/secure-tunneling.test.js +1070 -0
  42. package/lib/secure-tunneling/secure-tunneling.test.js.map +1 -0
  43. package/lib/secure-tunneling/spawner-detached.d.ts +6 -0
  44. package/lib/secure-tunneling/spawner-detached.d.ts.map +1 -0
  45. package/lib/secure-tunneling/spawner-detached.js +107 -0
  46. package/lib/secure-tunneling/spawner-detached.js.map +1 -0
  47. package/lib/subcommands/app/analytics.d.ts.map +1 -1
  48. package/lib/subcommands/app/analytics.js +9 -13
  49. package/lib/subcommands/app/analytics.js.map +1 -1
  50. package/lib/subcommands/app/env-vars.d.ts.map +1 -1
  51. package/lib/subcommands/app/env-vars.js +11 -16
  52. package/lib/subcommands/app/env-vars.js.map +1 -1
  53. package/lib/subcommands/app/models.d.ts.map +1 -1
  54. package/lib/subcommands/app/models.js +12 -16
  55. package/lib/subcommands/app/models.js.map +1 -1
  56. package/lib/subcommands/device/clean.d.ts.map +1 -1
  57. package/lib/subcommands/device/clean.js +3 -1
  58. package/lib/subcommands/device/clean.js.map +1 -1
  59. package/lib/subcommands/device/device.d.ts.map +1 -1
  60. package/lib/subcommands/device/device.js +14 -6
  61. package/lib/subcommands/device/device.js.map +1 -1
  62. package/lib/util/cloud-mode-ready.d.ts +1 -0
  63. package/lib/util/cloud-mode-ready.d.ts.map +1 -1
  64. package/lib/util/cloud-mode-ready.js +36 -1
  65. package/lib/util/cloud-mode-ready.js.map +1 -1
  66. package/package.json +2 -2
  67. package/src/application-control/environment-variables.test.ts +1 -1
  68. package/src/application-control/environment-variables.ts +9 -6
  69. package/src/application-control/install.ts +7 -3
  70. package/src/application-control/models.ts +11 -6
  71. package/src/application-control/status.ts +8 -8
  72. package/src/cloud-connection/device-agent-cloud-connection.ts +161 -131
  73. package/src/cloud-connection/live-updates-handler.ts +34 -6
  74. package/src/cloud-connection/messages.ts +3 -4
  75. package/src/cloud-connection/shadow-handler.test.ts +101 -84
  76. package/src/cloud-connection/shadow-handler.ts +275 -133
  77. package/src/device-control/device-control.ts +46 -19
  78. package/src/secure-tunneling/secure-tunneling.test.ts +1239 -0
  79. package/src/secure-tunneling/secure-tunneling.ts +606 -0
  80. package/src/secure-tunneling/spawner-detached.ts +123 -0
  81. package/src/subcommands/app/analytics.ts +16 -13
  82. package/src/subcommands/app/env-vars.ts +18 -16
  83. package/src/subcommands/app/models.ts +20 -16
  84. package/src/subcommands/device/clean.ts +4 -1
  85. package/src/subcommands/device/device.ts +26 -10
  86. package/src/util/cloud-mode-ready.ts +36 -0
  87. package/lib/secure-tunneling/index.d.ts +0 -5
  88. package/lib/secure-tunneling/index.d.ts.map +0 -1
  89. package/lib/secure-tunneling/index.js +0 -64
  90. package/lib/secure-tunneling/index.js.map +0 -1
  91. package/src/secure-tunneling/index.ts +0 -74
@@ -3,157 +3,211 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ShadowHandler = void 0;
4
4
  const app_configuration_schemas_1 = require("@alwaysai/app-configuration-schemas");
5
5
  const application_control_1 = require("../application-control");
6
+ const device_control_1 = require("../device-control/device-control");
6
7
  const logger_1 = require("../util/logger");
7
8
  const shadow_1 = require("./shadow");
8
- const device_control_1 = require("../device-control/device-control");
9
9
  const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
10
10
  class ShadowHandler {
11
11
  constructor(clientId, publisher) {
12
+ this.projectShadowTopics = [];
12
13
  this.clientId = clientId;
13
14
  this.publisher = publisher;
14
- this.shadowPrefix = `$aws/things/${this.clientId}/shadow/name/`;
15
15
  this.shadowTopics = {
16
- projects: {
17
- get: `${this.shadowPrefix}projects/get`,
18
- getAccepted: `${this.shadowPrefix}projects/get/accepted`,
19
- getRejected: `${this.shadowPrefix}projects/get/rejected`,
20
- update: `${this.shadowPrefix}projects/update`,
21
- updateDelta: `${this.shadowPrefix}projects/update/delta`,
22
- updateAccepted: `${this.shadowPrefix}projects/update/accepted`,
23
- updateRejected: `${this.shadowPrefix}projects/update/rejected`,
24
- delete: `${this.shadowPrefix}projects/delete`
16
+ project: {
17
+ get: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'get'),
18
+ getAccepted: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'get/accepted'),
19
+ getRejected: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'get/rejected'),
20
+ update: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update'),
21
+ updateDelta: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/delta'),
22
+ updateAccepted: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
23
+ updateRejected: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/rejected')
25
24
  },
26
25
  systemInfo: {
27
- update: `${this.shadowPrefix}system-info/update`
26
+ update: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'system-info', 'update')
27
+ },
28
+ secureTunnel: {
29
+ get: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'get'),
30
+ getAccepted: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'get/accepted'),
31
+ getRejected: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'get/rejected'),
32
+ update: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'update'),
33
+ updateDelta: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'update/delta'),
34
+ updateAccepted: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'update/accepted'),
35
+ updateRejected: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'update/rejected'),
36
+ delete: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'delete'),
37
+ deleteAccepted: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'delete/accepted'),
38
+ deleteRejected: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'secure-tunnel', 'delete/rejected')
28
39
  }
29
40
  };
41
+ this.projectShadowTopics.push(this.shadowTopics.project.getAccepted);
42
+ this.projectShadowTopics.push(this.shadowTopics.project.getRejected);
43
+ this.projectShadowTopics.push(this.shadowTopics.project.updateDelta);
44
+ this.projectShadowTopics.push(this.shadowTopics.project.updateAccepted);
45
+ this.projectShadowTopics.push(this.shadowTopics.project.updateRejected);
30
46
  }
31
- async handleNamedShadowUpdate({ delta }) {
32
- const updates = [];
33
- const deltaKeys = Object.keys(delta);
34
- for (const projectId of deltaKeys) {
35
- const projectShadow = delta[projectId];
36
- // For incoming shadow updates, there will be no TxID, so it needs to be generated here.
37
- const txId = (0, device_agent_schemas_1.generateTxId)();
38
- const shadowUpdate = { projectId, txId };
39
- if (projectShadow.appConfig) {
40
- let newAppCfg;
41
- try {
42
- newAppCfg = JSON.parse(projectShadow.appConfig);
43
- }
44
- catch (error) {
45
- logger_1.logger.error(`Could not parse the appConfig for transaction ${txId}!\n${error}`);
46
- continue;
47
- }
48
- if (!(0, app_configuration_schemas_1.validateAppConfig)(newAppCfg)) {
49
- // FIXME: Raise an exception to be handled at higher layer
50
- logger_1.logger.error(`Received invalid app config for ${projectId}!\n${JSON.stringify(app_configuration_schemas_1.validateAppConfig.errors, null, 2)}`);
47
+ async generateAppConfigUpdate({ appConfig, txId, projectId }) {
48
+ let appCfgUpdate;
49
+ let newAppCfg;
50
+ // Handle errors and validation
51
+ try {
52
+ newAppCfg = JSON.parse(appConfig);
53
+ }
54
+ catch (error) {
55
+ logger_1.logger.error(`Could not parse the appConfig for transaction ${txId}!\n${error}`);
56
+ return null;
57
+ }
58
+ if (!(0, app_configuration_schemas_1.validateAppConfig)(newAppCfg)) {
59
+ // FIXME: Raise an exception to be handled at higher layer
60
+ logger_1.logger.error(`Received invalid app config for ${projectId}!\n${JSON.stringify(app_configuration_schemas_1.validateAppConfig.errors, null, 2)}`);
61
+ return null;
62
+ }
63
+ // If all ok, return the AppConfigUpdate
64
+ logger_1.logger.info(`Found a delta for app config shadow. Updating ${projectId}`);
65
+ const { updatedModels } = await (0, shadow_1.getAppCfgModelsDiff)({
66
+ newAppCfg,
67
+ projectId
68
+ });
69
+ if (updatedModels && Object.keys(updatedModels).length) {
70
+ appCfgUpdate = { newAppCfg, updatedModels };
71
+ }
72
+ else {
73
+ appCfgUpdate = { newAppCfg };
74
+ }
75
+ return appCfgUpdate;
76
+ }
77
+ async processProjectShadowUpdates({ delta }) {
78
+ const shadowUpdatesPromises = [];
79
+ for (const [projectId, projectDelta] of Object.entries(delta)) {
80
+ if (projectDelta) {
81
+ const valid = (0, device_agent_schemas_1.validateProjectShadowUpdate)(projectDelta);
82
+ if (!valid) {
83
+ logger_1.logger.error(`Error validating shadow update: ${JSON.stringify({ projectDelta, errors: device_agent_schemas_1.validateProjectShadowUpdate.errors }, null, 2)}`);
51
84
  continue;
52
85
  }
53
- const { updatedModels } = await (0, shadow_1.getAppCfgModelsDiff)({
54
- newAppCfg,
55
- projectId
56
- });
57
- if (updatedModels && Object.keys(updatedModels).length) {
58
- shadowUpdate.appCfgUpdate = { newAppCfg, updatedModels };
59
- }
60
- else {
61
- shadowUpdate.appCfgUpdate = { newAppCfg };
62
- }
63
- }
64
- else {
65
- logger_1.logger.info(`Ignoring app config shadow update for ${projectId} due to no delta`);
66
- }
67
- if (projectShadow.envVars) {
68
- const envVars = projectShadow.envVars;
69
- shadowUpdate.envVarUpdate = { envVars };
70
- }
71
- else {
72
- logger_1.logger.info(`Ignoring app environment variable shadow update for ${projectId} due to no delta`);
86
+ shadowUpdatesPromises.push(this.processProjectShadowUpdate({
87
+ projectId,
88
+ projectDelta
89
+ }));
73
90
  }
74
- if (shadowUpdate.appCfgUpdate || shadowUpdate.envVarUpdate) {
75
- updates.push(shadowUpdate);
91
+ }
92
+ return (await Promise.all(shadowUpdatesPromises)).filter((promise) => promise !== null);
93
+ }
94
+ async processProjectShadowUpdate({ projectId, projectDelta }) {
95
+ const txId = (0, device_agent_schemas_1.generateTxId)();
96
+ const shadowUpdate = { projectId, txId };
97
+ // Handle appConfig Updates
98
+ if (!projectDelta.appConfig) {
99
+ logger_1.logger.info(`Ignoring app config shadow update for ${projectId} due to no delta`);
100
+ }
101
+ else {
102
+ logger_1.logger.info(`Found a delta for app config shadow. Updating ${projectId}`);
103
+ const appConfig = projectDelta.appConfig;
104
+ const appCfgUpdate = await this.generateAppConfigUpdate({
105
+ appConfig,
106
+ txId,
107
+ projectId
108
+ });
109
+ if (appCfgUpdate) {
110
+ shadowUpdate.appCfgUpdate = appCfgUpdate;
76
111
  }
77
112
  }
78
- return updates;
113
+ // Handle envVars Updates
114
+ if (!projectDelta.envVars) {
115
+ logger_1.logger.info(`Ignoring app environment variable shadow update for ${projectId} due to no delta`);
116
+ }
117
+ else {
118
+ logger_1.logger.info(`Found a delta for app environment variable shadow. Updating ${projectId}`);
119
+ const envVars = projectDelta.envVars;
120
+ shadowUpdate.envVarUpdate = { envVars };
121
+ }
122
+ return shadowUpdate.appCfgUpdate || shadowUpdate.envVarUpdate
123
+ ? shadowUpdate
124
+ : null;
79
125
  }
80
126
  // Public interface
81
- async handleShadowTopic({ topic, payload, clientToken }) {
127
+ async handleProjectShadow({ topic, payload, clientToken }) {
82
128
  // TODO: make use a function like the other topic getters
83
- const shadowName = topic.split('/')[5];
129
+ if (!this.projectShadowTopics.includes(topic)) {
130
+ throw Error(`Topic ${topic} is not in the ${this.projectShadowTopics}`);
131
+ }
84
132
  switch (topic) {
85
- case this.shadowTopics.projects.updateAccepted:
133
+ case this.shadowTopics.project.updateAccepted: {
86
134
  if (clientToken === this.clientId) {
87
- logger_1.logger.debug(`Ignoring delta caused by Device Agent: ${JSON.stringify({ topic, payload }, null, 2)}`);
135
+ logger_1.logger.debug(`Ignoring message as it was caused by Device Agent itself: ${JSON.stringify({ topic, payload }, null, 2)}`);
136
+ break;
137
+ }
138
+ const desired = (0, device_agent_schemas_1.getDesiredFromMessage)(payload);
139
+ if (!desired) {
140
+ logger_1.logger.debug(`No desired state found in message: ${JSON.stringify(payload)}`);
141
+ }
142
+ else {
143
+ return await this.processProjectShadowUpdates({ delta: desired });
144
+ }
145
+ break;
146
+ }
147
+ case this.shadowTopics.project.getAccepted: {
148
+ if (clientToken !== this.clientId) {
149
+ logger_1.logger.debug(`Ignoring message as it was caused by Device Agent itself: ${JSON.stringify({ topic, payload }, null, 2)}`);
88
150
  break;
89
151
  }
90
- return await this.handleNamedShadowUpdate({ delta: payload.desired });
91
- case this.shadowTopics.projects.getAccepted:
92
- if (payload['delta']) {
93
- return await this.handleNamedShadowUpdate({
94
- delta: payload['delta']
152
+ if (payload.state.delta) {
153
+ return await this.processProjectShadowUpdates({
154
+ delta: payload.state.delta
95
155
  });
96
156
  }
97
157
  else {
98
- logger_1.logger.info(`No delta updates in named shadow '${shadowName}'`);
158
+ logger_1.logger.info(`No delta in projects.getAccepted in named shadow '${topic.split('/')[5]}'`);
99
159
  }
100
160
  break;
161
+ }
162
+ case this.shadowTopics.project.getRejected:
163
+ case this.shadowTopics.project.updateDelta:
164
+ case this.shadowTopics.project.updateRejected: {
165
+ // Not handling these for now
166
+ break;
167
+ }
101
168
  default:
102
- logger_1.logger.info(`Ignoring shadow message: ${JSON.stringify({ topic, payload }, null, 2)}`);
169
+ logger_1.logger.info(`Did not match a correct topic. Ignoring shadow message: ${JSON.stringify({ topic, payload }, null, 2)}`);
103
170
  }
104
171
  return [];
105
172
  }
106
173
  async updateSystemInfoShadow() {
107
174
  const systemInfo = await (0, device_control_1.getSystemInformation)();
108
- const packet = {
109
- state: {
110
- reported: systemInfo
111
- },
112
- clientToken: this.clientId
113
- };
114
- const topic = this.shadowTopics.systemInfo.update;
115
- this.publisher.publish(topic, JSON.stringify(packet));
175
+ this.publisher.publish((0, device_agent_schemas_1.getShadowTopic)(this.clientId, 'system-info', 'update'), JSON.stringify((0, device_agent_schemas_1.buildUpdateSystemInfoShadowMessage)(this.clientId, systemInfo)));
116
176
  }
117
177
  async updateProjectShadow(projectId) {
118
178
  const appCfg = await (0, application_control_1.readAppCfgFile)({ projectId });
119
179
  const envVars = await (0, application_control_1.getAllEnvs)({ projectId });
120
- const packet = {
121
- state: {
122
- reported: {
123
- [projectId]: {
124
- appConfig: JSON.stringify(appCfg),
125
- envVars
126
- }
127
- }
128
- },
129
- clientToken: this.clientId
130
- };
131
- const topic = this.shadowTopics.projects.update;
132
- this.publisher.publish(topic, JSON.stringify(packet));
133
- }
134
- getShadowUpdates() {
135
- const topic = this.shadowTopics.projects.get;
136
- const packet = {
137
- clientToken: this.clientId
180
+ const toReport = {
181
+ [projectId]: {
182
+ appConfig: JSON.stringify(appCfg),
183
+ envVars
184
+ }
138
185
  };
139
- this.publisher.publish(topic, JSON.stringify(packet));
186
+ this.publisher.publish((0, device_agent_schemas_1.getShadowTopic)(this.clientId, 'projects', 'update'), JSON.stringify((0, device_agent_schemas_1.buildUpdateProjectShadowMessage)({
187
+ clientId: this.clientId,
188
+ reported: toReport
189
+ })));
140
190
  }
141
- clearAppConfig(projectId) {
142
- const topic = this.shadowTopics.projects.update;
143
- // TODO: We should actually send only desired and handle the delta
144
- // to update reported
145
- const packet = {
146
- state: {
147
- desired: {
148
- [projectId]: null
149
- },
150
- reported: {
151
- [projectId]: null
191
+ async updateProjectEnvVars({ projectId, envVars }) {
192
+ await (0, application_control_1.setEnv)({ projectId, envVars });
193
+ this.publisher.publish((0, device_agent_schemas_1.getShadowTopic)(this.clientId, 'projects', 'update'), JSON.stringify((0, device_agent_schemas_1.buildUpdateProjectShadowMessage)({
194
+ clientId: this.clientId,
195
+ reported: {
196
+ [projectId]: {
197
+ envVars
152
198
  }
153
- },
154
- clientToken: this.clientId
155
- };
156
- this.publisher.publish(topic, JSON.stringify(packet));
199
+ }
200
+ })));
201
+ }
202
+ getProjectShadowUpdates() {
203
+ this.publisher.publish((0, device_agent_schemas_1.getShadowTopic)(this.clientId, 'projects', 'get'), JSON.stringify((0, device_agent_schemas_1.buildBaseShadowMessage)(this.clientId)));
204
+ }
205
+ clearProjectShadow(projectId) {
206
+ this.publisher.publish((0, device_agent_schemas_1.getShadowTopic)(this.clientId, 'projects', 'update'), JSON.stringify((0, device_agent_schemas_1.buildUpdateProjectShadowMessage)({
207
+ clientId: this.clientId,
208
+ reported: { [projectId]: null },
209
+ desired: { [projectId]: null }
210
+ })));
157
211
  }
158
212
  }
159
213
  exports.ShadowHandler = ShadowHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"shadow-handler.js","sourceRoot":"","sources":["../../src/cloud-connection/shadow-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shadow-handler.js","sourceRoot":"","sources":["../../src/cloud-connection/shadow-handler.ts"],"names":[],"mappings":";;;AAAA,mFAG6C;AAC7C,gEAKgC;AAChC,qEAAwE;AACxE,2CAAwC;AAExC,qCAAgE;AAChE,yEAWwC;AAkBxC,MAAa,aAAa;IAKxB,YAAY,QAAgB,EAAE,SAAoB;QAF3C,wBAAmB,GAAa,EAAE,CAAC;QAGxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG;YAClB,OAAO,EAAE;gBACP,GAAG,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC;gBAChD,WAAW,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC;gBACjE,WAAW,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC;gBACjE,MAAM,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;gBACtD,WAAW,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC;gBACjE,cAAc,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,iBAAiB,CAAC;gBACvE,cAAc,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,UAAU,EAAE,iBAAiB,CAAC;aACxE;YACD,UAAU,EAAE;gBACV,MAAM,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC;aAC1D;YACD,YAAY,EAAE;gBACZ,GAAG,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;gBACrD,WAAW,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC;gBACtE,WAAW,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC;gBACtE,MAAM,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC;gBAC3D,WAAW,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC;gBACtE,cAAc,EAAE,IAAA,qCAAc,EAC5B,QAAQ,EACR,eAAe,EACf,iBAAiB,CAClB;gBACD,cAAc,EAAE,IAAA,qCAAc,EAC5B,QAAQ,EACR,eAAe,EACf,iBAAiB,CAClB;gBACD,MAAM,EAAE,IAAA,qCAAc,EAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC;gBAC3D,cAAc,EAAE,IAAA,qCAAc,EAC5B,QAAQ,EACR,eAAe,EACf,iBAAiB,CAClB;gBACD,cAAc,EAAE,IAAA,qCAAc,EAC5B,QAAQ,EACR,eAAe,EACf,iBAAiB,CAClB;aACF;SACF,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACxE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,SAAS,EAKV;QACC,IAAI,YAAiB,CAAC;QACtB,IAAI,SAAc,CAAC;QAEnB,+BAA+B;QAC/B,IAAI;YACF,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SACnC;QAAC,OAAO,KAAK,EAAE;YACd,eAAM,CAAC,KAAK,CACV,iDAAiD,IAAI,MAAM,KAAK,EAAE,CACnE,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,IAAA,6CAAiB,EAAC,SAAS,CAAC,EAAE;YACjC,0DAA0D;YAC1D,eAAM,CAAC,KAAK,CACV,mCAAmC,SAAS,MAAM,IAAI,CAAC,SAAS,CAC9D,6CAAiB,CAAC,MAAM,EACxB,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;YACF,OAAO,IAAI,CAAC;SACb;QAED,wCAAwC;QACxC,eAAM,CAAC,IAAI,CAAC,iDAAiD,SAAS,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,4BAAmB,EAAC;YAClD,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;YACtD,YAAY,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;SAC7C;aAAM;YACL,YAAY,GAAG,EAAE,SAAS,EAAE,CAAC;SAC9B;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,EACxC,KAAK,EAGN;QACC,MAAM,qBAAqB,GAAmC,EAAE,CAAC;QAEjE,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC7D,IAAI,YAAY,EAAE;gBAChB,MAAM,KAAK,GAAG,IAAA,kDAA2B,EAAC,YAAY,CAAC,CAAC;gBACxD,IAAI,CAAC,KAAK,EAAE;oBACV,eAAM,CAAC,KAAK,CACV,mCAAmC,IAAI,CAAC,SAAS,CAC/C,EAAE,YAAY,EAAE,MAAM,EAAE,kDAA2B,CAAC,MAAM,EAAE,EAC5D,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;oBACF,SAAS;iBACV;gBAED,qBAAqB,CAAC,IAAI,CACxB,IAAI,CAAC,0BAA0B,CAAC;oBAC9B,SAAS;oBACT,YAAY;iBACb,CAAC,CACH,CAAC;aACH;SACF;QACD,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CACtD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CACZ,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,EACvC,SAAS,EACT,YAAY,EAIb;QACC,MAAM,IAAI,GAAG,IAAA,mCAAY,GAAE,CAAC;QAC5B,MAAM,YAAY,GAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAEvD,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC3B,eAAM,CAAC,IAAI,CACT,yCAAyC,SAAS,kBAAkB,CACrE,CAAC;SACH;aAAM;YACL,eAAM,CAAC,IAAI,CAAC,iDAAiD,SAAS,EAAE,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;YACzC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC;gBACtD,SAAS;gBACT,IAAI;gBACJ,SAAS;aACV,CAAC,CAAC;YAEH,IAAI,YAAY,EAAE;gBAChB,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC;aAC1C;SACF;QAED,yBAAyB;QACzB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YACzB,eAAM,CAAC,IAAI,CACT,uDAAuD,SAAS,kBAAkB,CACnF,CAAC;SACH;aAAM;YACL,eAAM,CAAC,IAAI,CACT,+DAA+D,SAAS,EAAE,CAC3E,CAAC;YACF,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YACrC,YAAY,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,CAAC;SACzC;QAED,OAAO,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,YAAY;YAC3D,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,mBAAmB;IAEZ,KAAK,CAAC,mBAAmB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,WAAW,EAKZ;QACC,yDAAyD;QACzD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,KAAK,CAAC,SAAS,KAAK,kBAAkB,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;SACzE;QACD,QAAQ,KAAK,EAAE;YACb,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC7C,IAAI,WAAW,KAAK,IAAI,CAAC,QAAQ,EAAE;oBACjC,eAAM,CAAC,KAAK,CACV,6DAA6D,IAAI,CAAC,SAAS,CACzE,EAAE,KAAK,EAAE,OAAO,EAAE,EAClB,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;oBACF,MAAM;iBACP;gBACD,MAAM,OAAO,GAAG,IAAA,4CAAqB,EAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,OAAO,EAAE;oBACZ,eAAM,CAAC,KAAK,CACV,sCAAsC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAChE,CAAC;iBACH;qBAAM;oBACL,OAAO,MAAM,IAAI,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;iBACnE;gBACD,MAAM;aACP;YACD,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,WAAW,KAAK,IAAI,CAAC,QAAQ,EAAE;oBACjC,eAAM,CAAC,KAAK,CACV,6DAA6D,IAAI,CAAC,SAAS,CACzE,EAAE,KAAK,EAAE,OAAO,EAAE,EAClB,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;oBACF,MAAM;iBACP;gBACD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;oBACvB,OAAO,MAAM,IAAI,CAAC,2BAA2B,CAAC;wBAC5C,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;qBAC3B,CAAC,CAAC;iBACJ;qBAAM;oBACL,eAAM,CAAC,IAAI,CACT,qDACE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CACpB,GAAG,CACJ,CAAC;iBACH;gBACD,MAAM;aACP;YACD,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3C,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3C,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC7C,6BAA6B;gBAC7B,MAAM;aACP;YACD;gBACE,eAAM,CAAC,IAAI,CACT,2DAA2D,IAAI,CAAC,SAAS,CACvE,EAAE,KAAK,EAAE,OAAO,EAAE,EAClB,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;SACL;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,sBAAsB;QACjC,MAAM,UAAU,GAAG,MAAM,IAAA,qCAAoB,GAAE,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,IAAA,qCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,EACtD,IAAI,CAAC,SAAS,CACZ,IAAA,yDAAkC,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAC9D,CACF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,SAAiB;QAChD,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAc,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAA4B;YACxC,CAAC,SAAS,CAAC,EAAE;gBACX,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACjC,OAAO;aACR;SACF,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,IAAA,qCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EACnD,IAAI,CAAC,SAAS,CACZ,IAAA,sDAA+B,EAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,QAAQ;SACnB,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,EAChC,SAAS,EACT,OAAO,EAIR;QACC,MAAM,IAAA,4BAAM,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,IAAA,qCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EACnD,IAAI,CAAC,SAAS,CACZ,IAAA,sDAA+B,EAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE;gBACR,CAAC,SAAS,CAAC,EAAE;oBACX,OAAO;iBACR;aACF;SACF,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAEM,uBAAuB;QAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,IAAA,qCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,EAChD,IAAI,CAAC,SAAS,CAAC,IAAA,6CAAsB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CACtD,CAAC;IACJ,CAAC;IAEM,kBAAkB,CAAC,SAAiB;QACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CACpB,IAAA,qCAAc,EAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,EACnD,IAAI,CAAC,SAAS,CACZ,IAAA,sDAA+B,EAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE;SAC/B,CAAC,CACH,CACF,CAAC;IACJ,CAAC;CACF;AApVD,sCAoVC"}