@godv61/dsh-task-engine 0.23.2 → 0.23.3
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/docs/CHANGELOG.md +14 -8
- package/lib/client.js +38 -36
- package/lib/client.js.map +2 -2
- package/package.json +5 -5
- package/lib/custom-flow.d.ts +0 -212
- package/lib/custom-flow.js +0 -50
- package/lib/custom-flow.js.map +0 -1
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,14 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
按版本查阅功能变化。当前使用方式以[项目首页](../README.md)和使用指南为准;历史条目中的实现方式、限制与测试数量可能已被后续版本替代。
|
|
6
6
|
|
|
7
|
-
## 0.23.
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
## 0.23.3
|
|
8
|
+
|
|
9
|
+
- **适配 DSH 0.1.6-alpha.2 的 typert strict codec 契约变更**。该版本把 codec 从直接携带 `schema` 改为惰性工厂 `create: () => TypertSchema`,并在注册时硬校验 `typeof codec.create === 'function'`;旧写法会在插件加载阶段抛 `strict codec has no create() factory`,整份 Remote 贡献被拒绝。`src/client/remote.ts` 的 36 个 strict codec 现在**同时携带 `create` 与 `schema`**,因此同一份产物在 0.1.2-rc.1(桌面版)与 0.1.6-alpha.2(源码版)上都能加载。两处内联的 `z.object({...})` 提为具名常量,与文件既有风格一致。
|
|
10
|
+
- peer 范围补上 `|| ^0.1.6-alpha.2`。此前声明未覆盖该版本,pnpm 只在安装时警告、运行时不拦,导致问题在启动时才暴露。
|
|
11
|
+
- 注意:npm 的 semver 不匹配未被范围显式点名的预发布版本,因此后续每个新的 DSH alpha 都需要在此处追加,否则会重新出现同类加载失败。
|
|
12
|
+
|
|
13
|
+
## 0.23.2
|
|
14
|
+
|
|
15
|
+
- 修复 verify / skill_result 先执行命令后审批、批准权限未传入 shell 的问题;拒绝、取消或审批不可用时不执行命令。
|
|
16
|
+
- 审批显示实际验证命令;批准模式只用于本次命令和回执写入,不改变会话策略,也不重复申请保存回执的审批。
|
|
17
|
+
- 修正提交规则与手册中的模块名示例,第一段使用当前任务 id,第二段使用 status 的 commit.label;自定义格式以任务冻结流程为准。
|
|
18
|
+
- dshtest 首轮在 0.23.1 复现权限问题;修复后连续两轮完整开发、验证、审核、本地提交及归档回退通过。专项覆盖审批拒绝、原命令批准执行、证据过期和单次权限恢复,详见[发布说明](release-0.23.2.md)与[测试报告](testing/0.23.2/测试报告.md)。
|
|
19
|
+
|
|
20
|
+
## 0.23.1
|
|
15
21
|
|
|
16
22
|
- 汇总本轮候选版的资源来源、Windows 技能加载、实施审核保留、派工状态、真实技能/验证/提交回执及状态一致性修复。
|
|
17
23
|
- 新增 status.artifact_requirements,提前披露当前阶段的记录字段和缺项;未知字段拒绝时给出恢复指引,整次写入保持不变。
|
package/lib/client.js
CHANGED
|
@@ -4251,6 +4251,8 @@ var resourceRequestSchema = external_exports.object({
|
|
|
4251
4251
|
expectedHash: external_exports.string().optional()
|
|
4252
4252
|
});
|
|
4253
4253
|
var resourcePreviewSchema = external_exports.object({ ok: external_exports.boolean(), name: external_exports.string(), description: external_exports.string(), content: external_exports.string(), target: external_exports.string(), files: external_exports.number(), bytes: external_exports.number(), hash: external_exports.string(), conflict: external_exports.boolean(), error: external_exports.string().optional() });
|
|
4254
|
+
var resourceRootsRequestSchema = external_exports.object({ kind: external_exports.enum(["skill", "rule"]), path: external_exports.string() });
|
|
4255
|
+
var resourceRootsSchema = external_exports.object({ project: external_exports.string(), user: external_exports.string() });
|
|
4254
4256
|
var PACKAGE = "@godv61/dsh-task-engine";
|
|
4255
4257
|
var TYPERT_REMOTE = {
|
|
4256
4258
|
package: PACKAGE,
|
|
@@ -4261,8 +4263,8 @@ var TYPERT_REMOTE = {
|
|
|
4261
4263
|
namespace: "task-engine",
|
|
4262
4264
|
method,
|
|
4263
4265
|
invocation: { kind: "direct" },
|
|
4264
|
-
parameters: [{ name: "request", wire: "request", source: "json", codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourceImportRequest`, schema: resourceRequestSchema } }],
|
|
4265
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourcePreview`, schema: resourcePreviewSchema }
|
|
4266
|
+
parameters: [{ name: "request", wire: "request", source: "json", codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourceImportRequest`, create: () => resourceRequestSchema, schema: resourceRequestSchema } }],
|
|
4267
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourcePreview`, create: () => resourcePreviewSchema, schema: resourcePreviewSchema }
|
|
4266
4268
|
})),
|
|
4267
4269
|
{
|
|
4268
4270
|
id: `${PACKAGE}#task-engine/resourceRoots`,
|
|
@@ -4270,8 +4272,8 @@ var TYPERT_REMOTE = {
|
|
|
4270
4272
|
namespace: "task-engine",
|
|
4271
4273
|
method: "resourceRoots",
|
|
4272
4274
|
invocation: { kind: "direct" },
|
|
4273
|
-
parameters: [{ name: "request", wire: "request", source: "json", codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourceRootsRequest`,
|
|
4274
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourceRoots`,
|
|
4275
|
+
parameters: [{ name: "request", wire: "request", source: "json", codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourceRootsRequest`, create: () => resourceRootsRequestSchema, schema: resourceRootsRequestSchema } }],
|
|
4276
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ResourceRoots`, create: () => resourceRootsSchema, schema: resourceRootsSchema }
|
|
4275
4277
|
},
|
|
4276
4278
|
{
|
|
4277
4279
|
id: `${PACKAGE}#task-engine/read`,
|
|
@@ -4284,10 +4286,10 @@ var TYPERT_REMOTE = {
|
|
|
4284
4286
|
name: "path",
|
|
4285
4287
|
wire: "path",
|
|
4286
4288
|
source: "json",
|
|
4287
|
-
codec: { mode: "strict", typeSymbol: "string", schema: external_exports.string() }
|
|
4289
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4288
4290
|
}
|
|
4289
4291
|
],
|
|
4290
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#EngConfigView`, schema: viewSchema }
|
|
4292
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#EngConfigView`, create: () => viewSchema, schema: viewSchema }
|
|
4291
4293
|
},
|
|
4292
4294
|
{
|
|
4293
4295
|
id: `${PACKAGE}#task-engine/write`,
|
|
@@ -4300,10 +4302,10 @@ var TYPERT_REMOTE = {
|
|
|
4300
4302
|
name: "request",
|
|
4301
4303
|
wire: "request",
|
|
4302
4304
|
source: "json",
|
|
4303
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#EngWriteRequest`, schema: writeRequestSchema }
|
|
4305
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#EngWriteRequest`, create: () => writeRequestSchema, schema: writeRequestSchema }
|
|
4304
4306
|
}
|
|
4305
4307
|
],
|
|
4306
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#EngConfigView`, schema: viewSchema }
|
|
4308
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#EngConfigView`, create: () => viewSchema, schema: viewSchema }
|
|
4307
4309
|
},
|
|
4308
4310
|
{
|
|
4309
4311
|
id: `${PACKAGE}#task-engine/listSkills`,
|
|
@@ -4316,10 +4318,10 @@ var TYPERT_REMOTE = {
|
|
|
4316
4318
|
name: "path",
|
|
4317
4319
|
wire: "path",
|
|
4318
4320
|
source: "json",
|
|
4319
|
-
codec: { mode: "strict", typeSymbol: "string", schema: external_exports.string() }
|
|
4321
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4320
4322
|
}
|
|
4321
4323
|
],
|
|
4322
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#SkillCatalog`, schema: skillCatalogSchema }
|
|
4324
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#SkillCatalog`, create: () => skillCatalogSchema, schema: skillCatalogSchema }
|
|
4323
4325
|
},
|
|
4324
4326
|
{
|
|
4325
4327
|
id: `${PACKAGE}#task-engine/listRules`,
|
|
@@ -4332,10 +4334,10 @@ var TYPERT_REMOTE = {
|
|
|
4332
4334
|
name: "path",
|
|
4333
4335
|
wire: "path",
|
|
4334
4336
|
source: "json",
|
|
4335
|
-
codec: { mode: "strict", typeSymbol: "string", schema: external_exports.string() }
|
|
4337
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4336
4338
|
}
|
|
4337
4339
|
],
|
|
4338
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#RuleCatalog`, schema: ruleCatalogSchema }
|
|
4340
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#RuleCatalog`, create: () => ruleCatalogSchema, schema: ruleCatalogSchema }
|
|
4339
4341
|
},
|
|
4340
4342
|
{
|
|
4341
4343
|
id: `${PACKAGE}#task-engine/writeSkill`,
|
|
@@ -4348,10 +4350,10 @@ var TYPERT_REMOTE = {
|
|
|
4348
4350
|
name: "request",
|
|
4349
4351
|
wire: "request",
|
|
4350
4352
|
source: "json",
|
|
4351
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteSkillRequest`, schema: writeSkillRequestSchema }
|
|
4353
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteSkillRequest`, create: () => writeSkillRequestSchema, schema: writeSkillRequestSchema }
|
|
4352
4354
|
}
|
|
4353
4355
|
],
|
|
4354
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, schema: writeResourceResultSchema }
|
|
4356
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, create: () => writeResourceResultSchema, schema: writeResourceResultSchema }
|
|
4355
4357
|
},
|
|
4356
4358
|
{
|
|
4357
4359
|
id: `${PACKAGE}#task-engine/installSkill`,
|
|
@@ -4364,10 +4366,10 @@ var TYPERT_REMOTE = {
|
|
|
4364
4366
|
name: "request",
|
|
4365
4367
|
wire: "request",
|
|
4366
4368
|
source: "json",
|
|
4367
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#InstallSkillRequest`, schema: installSkillRequestSchema }
|
|
4369
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#InstallSkillRequest`, create: () => installSkillRequestSchema, schema: installSkillRequestSchema }
|
|
4368
4370
|
}
|
|
4369
4371
|
],
|
|
4370
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, schema: writeResourceResultSchema }
|
|
4372
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, create: () => writeResourceResultSchema, schema: writeResourceResultSchema }
|
|
4371
4373
|
},
|
|
4372
4374
|
{
|
|
4373
4375
|
id: `${PACKAGE}#task-engine/listDirs`,
|
|
@@ -4380,10 +4382,10 @@ var TYPERT_REMOTE = {
|
|
|
4380
4382
|
name: "request",
|
|
4381
4383
|
wire: "request",
|
|
4382
4384
|
source: "json",
|
|
4383
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ListDirsRequest`, schema: listDirsRequestSchema }
|
|
4385
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ListDirsRequest`, create: () => listDirsRequestSchema, schema: listDirsRequestSchema }
|
|
4384
4386
|
}
|
|
4385
4387
|
],
|
|
4386
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ListDirsView`, schema: listDirsViewSchema }
|
|
4388
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ListDirsView`, create: () => listDirsViewSchema, schema: listDirsViewSchema }
|
|
4387
4389
|
},
|
|
4388
4390
|
{
|
|
4389
4391
|
id: `${PACKAGE}#task-engine/writeRule`,
|
|
@@ -4396,10 +4398,10 @@ var TYPERT_REMOTE = {
|
|
|
4396
4398
|
name: "request",
|
|
4397
4399
|
wire: "request",
|
|
4398
4400
|
source: "json",
|
|
4399
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteRuleRequest`, schema: writeRuleRequestSchema }
|
|
4401
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteRuleRequest`, create: () => writeRuleRequestSchema, schema: writeRuleRequestSchema }
|
|
4400
4402
|
}
|
|
4401
4403
|
],
|
|
4402
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, schema: writeResourceResultSchema }
|
|
4404
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, create: () => writeResourceResultSchema, schema: writeResourceResultSchema }
|
|
4403
4405
|
},
|
|
4404
4406
|
{
|
|
4405
4407
|
id: `${PACKAGE}#task-engine/readSkill`,
|
|
@@ -4412,10 +4414,10 @@ var TYPERT_REMOTE = {
|
|
|
4412
4414
|
name: "request",
|
|
4413
4415
|
wire: "request",
|
|
4414
4416
|
source: "json",
|
|
4415
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadSkillRequest`, schema: readSkillRequestSchema }
|
|
4417
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadSkillRequest`, create: () => readSkillRequestSchema, schema: readSkillRequestSchema }
|
|
4416
4418
|
}
|
|
4417
4419
|
],
|
|
4418
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadSkillResult`, schema: readSkillResultSchema }
|
|
4420
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadSkillResult`, create: () => readSkillResultSchema, schema: readSkillResultSchema }
|
|
4419
4421
|
},
|
|
4420
4422
|
{
|
|
4421
4423
|
id: `${PACKAGE}#task-engine/readRule`,
|
|
@@ -4428,10 +4430,10 @@ var TYPERT_REMOTE = {
|
|
|
4428
4430
|
name: "request",
|
|
4429
4431
|
wire: "request",
|
|
4430
4432
|
source: "json",
|
|
4431
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadRuleRequest`, schema: readRuleRequestSchema }
|
|
4433
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadRuleRequest`, create: () => readRuleRequestSchema, schema: readRuleRequestSchema }
|
|
4432
4434
|
}
|
|
4433
4435
|
],
|
|
4434
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadRuleResult`, schema: readRuleResultSchema }
|
|
4436
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#ReadRuleResult`, create: () => readRuleResultSchema, schema: readRuleResultSchema }
|
|
4435
4437
|
},
|
|
4436
4438
|
{
|
|
4437
4439
|
id: `${PACKAGE}#task-engine/deleteSkill`,
|
|
@@ -4444,10 +4446,10 @@ var TYPERT_REMOTE = {
|
|
|
4444
4446
|
name: "request",
|
|
4445
4447
|
wire: "request",
|
|
4446
4448
|
source: "json",
|
|
4447
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#DeleteSkillRequest`, schema: deleteSkillRequestSchema }
|
|
4449
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#DeleteSkillRequest`, create: () => deleteSkillRequestSchema, schema: deleteSkillRequestSchema }
|
|
4448
4450
|
}
|
|
4449
4451
|
],
|
|
4450
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, schema: writeResourceResultSchema }
|
|
4452
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, create: () => writeResourceResultSchema, schema: writeResourceResultSchema }
|
|
4451
4453
|
},
|
|
4452
4454
|
{
|
|
4453
4455
|
id: `${PACKAGE}#task-engine/deleteRule`,
|
|
@@ -4460,10 +4462,10 @@ var TYPERT_REMOTE = {
|
|
|
4460
4462
|
name: "request",
|
|
4461
4463
|
wire: "request",
|
|
4462
4464
|
source: "json",
|
|
4463
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#DeleteRuleRequest`, schema: deleteRuleRequestSchema }
|
|
4465
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#DeleteRuleRequest`, create: () => deleteRuleRequestSchema, schema: deleteRuleRequestSchema }
|
|
4464
4466
|
}
|
|
4465
4467
|
],
|
|
4466
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, schema: writeResourceResultSchema }
|
|
4468
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#WriteResourceResult`, create: () => writeResourceResultSchema, schema: writeResourceResultSchema }
|
|
4467
4469
|
},
|
|
4468
4470
|
{
|
|
4469
4471
|
id: `${PACKAGE}#task-engine/readTasks`,
|
|
@@ -4476,10 +4478,10 @@ var TYPERT_REMOTE = {
|
|
|
4476
4478
|
name: "path",
|
|
4477
4479
|
wire: "path",
|
|
4478
4480
|
source: "json",
|
|
4479
|
-
codec: { mode: "strict", typeSymbol: "string", schema: external_exports.string() }
|
|
4481
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4480
4482
|
}
|
|
4481
4483
|
],
|
|
4482
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#TaskLedgerView`, schema: taskLedgerViewSchema }
|
|
4484
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#TaskLedgerView`, create: () => taskLedgerViewSchema, schema: taskLedgerViewSchema }
|
|
4483
4485
|
},
|
|
4484
4486
|
{
|
|
4485
4487
|
id: `${PACKAGE}#task-engine/readInit`,
|
|
@@ -4492,10 +4494,10 @@ var TYPERT_REMOTE = {
|
|
|
4492
4494
|
name: "path",
|
|
4493
4495
|
wire: "path",
|
|
4494
4496
|
source: "json",
|
|
4495
|
-
codec: { mode: "strict", typeSymbol: "string", schema: external_exports.string() }
|
|
4497
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4496
4498
|
}
|
|
4497
4499
|
],
|
|
4498
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitView`, schema: initViewSchema }
|
|
4500
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitView`, create: () => initViewSchema, schema: initViewSchema }
|
|
4499
4501
|
},
|
|
4500
4502
|
{
|
|
4501
4503
|
id: `${PACKAGE}#task-engine/writeInit`,
|
|
@@ -4508,10 +4510,10 @@ var TYPERT_REMOTE = {
|
|
|
4508
4510
|
name: "request",
|
|
4509
4511
|
wire: "request",
|
|
4510
4512
|
source: "json",
|
|
4511
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitWriteRequest`, schema: initWriteRequestSchema }
|
|
4513
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitWriteRequest`, create: () => initWriteRequestSchema, schema: initWriteRequestSchema }
|
|
4512
4514
|
}
|
|
4513
4515
|
],
|
|
4514
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitWriteResult`, schema: initWriteResultSchema }
|
|
4516
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitWriteResult`, create: () => initWriteResultSchema, schema: initWriteResultSchema }
|
|
4515
4517
|
},
|
|
4516
4518
|
{
|
|
4517
4519
|
id: `${PACKAGE}#task-engine/generateInit`,
|
|
@@ -4524,10 +4526,10 @@ var TYPERT_REMOTE = {
|
|
|
4524
4526
|
name: "request",
|
|
4525
4527
|
wire: "request",
|
|
4526
4528
|
source: "json",
|
|
4527
|
-
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitGenerateRequest`, schema: initGenerateRequestSchema }
|
|
4529
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitGenerateRequest`, create: () => initGenerateRequestSchema, schema: initGenerateRequestSchema }
|
|
4528
4530
|
}
|
|
4529
4531
|
],
|
|
4530
|
-
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitDraft`, schema: initDraftSchema }
|
|
4532
|
+
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#InitDraft`, create: () => initDraftSchema, schema: initDraftSchema }
|
|
4531
4533
|
}
|
|
4532
4534
|
]
|
|
4533
4535
|
};
|