sf-git-merge-driver 1.3.0 → 1.4.0-dev-159.21317248282-1

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 (115) hide show
  1. package/README.md +30 -6
  2. package/lib/commands/git/merge/driver/run.js +3 -5
  3. package/lib/commands/git/merge/driver/run.js.map +1 -1
  4. package/lib/constant/conflictConstant.d.ts +3 -3
  5. package/lib/constant/conflictConstant.js +3 -3
  6. package/lib/constant/conflictConstant.js.map +1 -1
  7. package/lib/constant/metadataConstant.d.ts +1 -0
  8. package/lib/constant/metadataConstant.js +7 -0
  9. package/lib/constant/metadataConstant.js.map +1 -1
  10. package/lib/constant/parserConstant.d.ts +6 -0
  11. package/lib/constant/parserConstant.js +6 -0
  12. package/lib/constant/parserConstant.js.map +1 -1
  13. package/lib/driver/MergeDriver.d.ts +3 -0
  14. package/lib/driver/MergeDriver.js +5 -1
  15. package/lib/driver/MergeDriver.js.map +1 -1
  16. package/lib/merger/ConflictMarkerBuilder.d.ts +3 -0
  17. package/lib/merger/ConflictMarkerBuilder.js +33 -0
  18. package/lib/merger/ConflictMarkerBuilder.js.map +1 -0
  19. package/lib/merger/ConflictMarkerFormatter.d.ts +14 -0
  20. package/lib/merger/ConflictMarkerFormatter.js +43 -0
  21. package/lib/merger/ConflictMarkerFormatter.js.map +1 -0
  22. package/lib/merger/JsonMerger.d.ts +3 -0
  23. package/lib/merger/JsonMerger.js +19 -194
  24. package/lib/merger/JsonMerger.js.map +1 -1
  25. package/lib/merger/MergeContext.d.ts +17 -0
  26. package/lib/merger/MergeContext.js +2 -0
  27. package/lib/merger/MergeContext.js.map +1 -0
  28. package/lib/merger/MergeOrchestrator.d.ts +13 -0
  29. package/lib/merger/MergeOrchestrator.js +46 -0
  30. package/lib/merger/MergeOrchestrator.js.map +1 -0
  31. package/lib/merger/MergeScenarioFactory.d.ts +2 -0
  32. package/lib/merger/MergeScenarioFactory.js +22 -0
  33. package/lib/merger/MergeScenarioFactory.js.map +1 -0
  34. package/lib/merger/XmlMerger.d.ts +5 -0
  35. package/lib/merger/XmlMerger.js +19 -16
  36. package/lib/merger/XmlMerger.js.map +1 -1
  37. package/lib/merger/nodes/KeyedArrayMergeNode.d.ts +12 -0
  38. package/lib/merger/nodes/KeyedArrayMergeNode.js +67 -0
  39. package/lib/merger/nodes/KeyedArrayMergeNode.js.map +1 -0
  40. package/lib/merger/nodes/MergeNode.d.ts +5 -0
  41. package/lib/merger/nodes/MergeNode.js +2 -0
  42. package/lib/merger/nodes/MergeNode.js.map +1 -0
  43. package/lib/merger/nodes/MergeNodeFactory.d.ts +9 -0
  44. package/lib/merger/nodes/MergeNodeFactory.js +21 -0
  45. package/lib/merger/nodes/MergeNodeFactory.js.map +1 -0
  46. package/lib/merger/nodes/ObjectMergeNode.d.ts +20 -0
  47. package/lib/merger/nodes/ObjectMergeNode.js +49 -0
  48. package/lib/merger/nodes/ObjectMergeNode.js.map +1 -0
  49. package/lib/merger/nodes/TextArrayMergeNode.d.ts +12 -0
  50. package/lib/merger/nodes/TextArrayMergeNode.js +66 -0
  51. package/lib/merger/nodes/TextArrayMergeNode.js.map +1 -0
  52. package/lib/merger/nodes/TextMergeNode.d.ts +12 -0
  53. package/lib/merger/nodes/TextMergeNode.js +36 -0
  54. package/lib/merger/nodes/TextMergeNode.js.map +1 -0
  55. package/lib/merger/nodes/nodeUtils.d.ts +5 -0
  56. package/lib/merger/nodes/nodeUtils.js +20 -0
  57. package/lib/merger/nodes/nodeUtils.js.map +1 -0
  58. package/lib/merger/strategies/AllPresentStrategy.d.ts +7 -0
  59. package/lib/merger/strategies/AllPresentStrategy.js +36 -0
  60. package/lib/merger/strategies/AllPresentStrategy.js.map +1 -0
  61. package/lib/merger/strategies/AncestorAndLocalStrategy.d.ts +8 -0
  62. package/lib/merger/strategies/AncestorAndLocalStrategy.js +64 -0
  63. package/lib/merger/strategies/AncestorAndLocalStrategy.js.map +1 -0
  64. package/lib/merger/strategies/AncestorAndOtherStrategy.d.ts +8 -0
  65. package/lib/merger/strategies/AncestorAndOtherStrategy.js +64 -0
  66. package/lib/merger/strategies/AncestorAndOtherStrategy.js.map +1 -0
  67. package/lib/merger/strategies/AncestorOnlyStrategy.d.ts +6 -0
  68. package/lib/merger/strategies/AncestorOnlyStrategy.js +19 -0
  69. package/lib/merger/strategies/AncestorOnlyStrategy.js.map +1 -0
  70. package/lib/merger/strategies/LocalAndOtherStrategy.d.ts +7 -0
  71. package/lib/merger/strategies/LocalAndOtherStrategy.js +45 -0
  72. package/lib/merger/strategies/LocalAndOtherStrategy.js.map +1 -0
  73. package/lib/merger/strategies/LocalOnlyStrategy.d.ts +6 -0
  74. package/lib/merger/strategies/LocalOnlyStrategy.js +14 -0
  75. package/lib/merger/strategies/LocalOnlyStrategy.js.map +1 -0
  76. package/lib/merger/strategies/NoneStrategy.d.ts +6 -0
  77. package/lib/merger/strategies/NoneStrategy.js +8 -0
  78. package/lib/merger/strategies/NoneStrategy.js.map +1 -0
  79. package/lib/merger/strategies/OtherOnlyStrategy.d.ts +6 -0
  80. package/lib/merger/strategies/OtherOnlyStrategy.js +14 -0
  81. package/lib/merger/strategies/OtherOnlyStrategy.js.map +1 -0
  82. package/lib/merger/strategies/ScenarioStrategy.d.ts +5 -0
  83. package/lib/merger/strategies/ScenarioStrategy.js +2 -0
  84. package/lib/merger/strategies/ScenarioStrategy.js.map +1 -0
  85. package/lib/merger/strategies/ScenarioStrategyFactory.d.ts +3 -0
  86. package/lib/merger/strategies/ScenarioStrategyFactory.js +23 -0
  87. package/lib/merger/strategies/ScenarioStrategyFactory.js.map +1 -0
  88. package/lib/merger/strategies/TextMergeStrategy.d.ts +32 -0
  89. package/lib/merger/strategies/TextMergeStrategy.js +80 -0
  90. package/lib/merger/strategies/TextMergeStrategy.js.map +1 -0
  91. package/lib/service/MetadataService.js +2 -0
  92. package/lib/service/MetadataService.js.map +1 -1
  93. package/lib/service/NamespaceHandler.js +1 -2
  94. package/lib/service/NamespaceHandler.js.map +1 -1
  95. package/lib/service/installService.js +5 -3
  96. package/lib/service/installService.js.map +1 -1
  97. package/lib/types/conflictTypes.d.ts +1 -1
  98. package/lib/types/mergeResult.d.ts +8 -0
  99. package/lib/types/mergeResult.js +33 -0
  100. package/lib/types/mergeResult.js.map +1 -0
  101. package/lib/types/mergeScenario.d.ts +0 -1
  102. package/lib/types/mergeScenario.js +0 -20
  103. package/lib/types/mergeScenario.js.map +1 -1
  104. package/lib/utils/mergeUtils.d.ts +0 -4
  105. package/lib/utils/mergeUtils.js +0 -7
  106. package/lib/utils/mergeUtils.js.map +1 -1
  107. package/npm-shrinkwrap.json +724 -721
  108. package/oclif.manifest.json +4 -4
  109. package/package.json +9 -9
  110. package/lib/merger/conflictMarker.d.ts +0 -12
  111. package/lib/merger/conflictMarker.js +0 -37
  112. package/lib/merger/conflictMarker.js.map +0 -1
  113. package/lib/merger/textAttribute.d.ts +0 -3
  114. package/lib/merger/textAttribute.js +0 -56
  115. package/lib/merger/textAttribute.js.map +0 -1
@@ -170,7 +170,7 @@
170
170
  "char": "S",
171
171
  "name": "ancestor-conflict-tag",
172
172
  "summary": "string used to tag ancestor version in conflicts",
173
- "default": "BASE",
173
+ "default": "base",
174
174
  "hasDynamicHelp": false,
175
175
  "multiple": false,
176
176
  "type": "option"
@@ -179,7 +179,7 @@
179
179
  "char": "X",
180
180
  "name": "local-conflict-tag",
181
181
  "summary": "string used to tag local version in conflicts",
182
- "default": "LOCAL",
182
+ "default": "ours",
183
183
  "hasDynamicHelp": false,
184
184
  "multiple": false,
185
185
  "type": "option"
@@ -188,7 +188,7 @@
188
188
  "char": "Y",
189
189
  "name": "other-conflict-tag",
190
190
  "summary": "string used to tag other version in conflicts",
191
- "default": "REMOTE",
191
+ "default": "theirs",
192
192
  "hasDynamicHelp": false,
193
193
  "multiple": false,
194
194
  "type": "option"
@@ -338,5 +338,5 @@
338
338
  ]
339
339
  }
340
340
  },
341
- "version": "1.3.0"
341
+ "version": "1.4.0-dev-159.21317248282-1"
342
342
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sf-git-merge-driver",
3
- "description": "git remote add origin git@github.com:scolladon/sf-git-merge-driver.git",
4
- "version": "1.3.0",
3
+ "description": "Git merge driver for Salesforce metadata XML files - automatically resolves merge conflicts in profiles, permission sets, and 50+ metadata types",
4
+ "version": "1.4.0-dev-159.21317248282-1",
5
5
  "exports": "./lib/driver/MergeDriver.js",
6
6
  "type": "module",
7
7
  "author": "Sébastien Colladon (colladonsebastien@gmail.com)",
@@ -11,17 +11,17 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@oclif/core": "^4.8.0",
14
- "@salesforce/core": "^8.24.0",
14
+ "@salesforce/core": "^8.25.0",
15
15
  "@salesforce/sf-plugins-core": "^12.2.6",
16
16
  "fast-equals": "^6.0.0",
17
17
  "fast-xml-parser": "^5.3.3",
18
- "lodash-es": "^4.17.22",
18
+ "lodash-es": "^4.17.23",
19
19
  "simple-git": "^3.30.0"
20
20
  },
21
21
  "devDependencies": {
22
- "@biomejs/biome": "2.3.10",
23
- "@commitlint/config-conventional": "^20.2.0",
24
- "@oclif/plugin-help": "^6.2.36",
22
+ "@biomejs/biome": "2.3.11",
23
+ "@commitlint/config-conventional": "^20.3.1",
24
+ "@oclif/plugin-help": "^6.2.37",
25
25
  "@salesforce/cli-plugins-testkit": "^5.3.41",
26
26
  "@salesforce/dev-config": "^4.3.2",
27
27
  "@types/chai": "^5.2.3",
@@ -29,10 +29,10 @@
29
29
  "chai": "^6.2.2",
30
30
  "husky": "^9.1.7",
31
31
  "jest": "^30.2.0",
32
- "knip": "^5.78.0",
32
+ "knip": "^5.82.1",
33
33
  "mocha": "^11.7.5",
34
34
  "nyc": "^17.1.0",
35
- "oclif": "^4.22.61",
35
+ "oclif": "^4.22.68",
36
36
  "shx": "^0.4.0",
37
37
  "ts-jest": "^29.4.6",
38
38
  "ts-node": "^10.9.2",
@@ -1,12 +0,0 @@
1
- import { conflicConfig } from '../types/conflictTypes.js';
2
- import type { JsonArray, JsonObject } from '../types/jsonTypes.js';
3
- export declare class ConflictMarker {
4
- private static hasConflict;
5
- private static baseMarker;
6
- private static localMarker;
7
- private static otherMarker;
8
- private static separatorMarker;
9
- static hasConflictMarker(): boolean;
10
- static addConflictMarkers(acc: JsonArray, local: JsonObject | JsonArray, ancestor: JsonObject | JsonArray, other: JsonObject | JsonArray): void;
11
- static setConflictConfig(conflictConfig: conflicConfig): void;
12
- }
@@ -1,37 +0,0 @@
1
- import { isEmpty } from 'lodash-es';
2
- import { ANCESTOR_CONFLICT_MARKER, LOCAL_CONFLICT_MARKER, OTHER_CONFLICT_MARKER, SEPARATOR, } from '../constant/conflictConstant.js';
3
- import { SALESFORCE_EOL } from '../constant/metadataConstant.js';
4
- import { TEXT_TAG } from '../constant/parserConstant.js';
5
- const buildMarker = (marker, size, tag) => {
6
- return `${marker.repeat(size)} ${tag}`;
7
- };
8
- const buildSeparator = (size) => {
9
- return `${SEPARATOR.repeat(size)}`;
10
- };
11
- export class ConflictMarker {
12
- static hasConflict = false;
13
- static baseMarker;
14
- static localMarker;
15
- static otherMarker;
16
- static separatorMarker;
17
- static hasConflictMarker() {
18
- return ConflictMarker.hasConflict;
19
- }
20
- static addConflictMarkers(acc, local, ancestor, other) {
21
- ConflictMarker.hasConflict = true;
22
- acc.push({ [TEXT_TAG]: `${SALESFORCE_EOL}${ConflictMarker.localMarker}` });
23
- acc.push(isEmpty(local) ? { [TEXT_TAG]: SALESFORCE_EOL } : local);
24
- acc.push({ [TEXT_TAG]: ConflictMarker.baseMarker });
25
- acc.push(isEmpty(ancestor) ? { [TEXT_TAG]: SALESFORCE_EOL } : ancestor);
26
- acc.push({ [TEXT_TAG]: ConflictMarker.separatorMarker });
27
- acc.push(isEmpty(other) ? { [TEXT_TAG]: SALESFORCE_EOL } : other);
28
- acc.push({ [TEXT_TAG]: ConflictMarker.otherMarker });
29
- }
30
- static setConflictConfig(conflictConfig) {
31
- ConflictMarker.baseMarker = buildMarker(ANCESTOR_CONFLICT_MARKER, conflictConfig.conflictMarkerSize, conflictConfig.ancestorConflictTag);
32
- ConflictMarker.localMarker = buildMarker(LOCAL_CONFLICT_MARKER, conflictConfig.conflictMarkerSize, conflictConfig.localConflictTag);
33
- ConflictMarker.otherMarker = buildMarker(OTHER_CONFLICT_MARKER, conflictConfig.conflictMarkerSize, conflictConfig.otherConflictTag);
34
- ConflictMarker.separatorMarker = buildSeparator(conflictConfig.conflictMarkerSize);
35
- }
36
- }
37
- //# sourceMappingURL=conflictMarker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conflictMarker.js","sourceRoot":"","sources":["../../src/merger/conflictMarker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,GACV,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAIxD,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,GAAW,EAAU,EAAE;IACxE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;AACxC,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE;IAC9C,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;AACpC,CAAC,CAAA;AAED,MAAM,OAAO,cAAc;IACjB,MAAM,CAAC,WAAW,GAAG,KAAK,CAAA;IAC1B,MAAM,CAAC,UAAU,CAAQ;IACzB,MAAM,CAAC,WAAW,CAAQ;IAC1B,MAAM,CAAC,WAAW,CAAQ;IAC1B,MAAM,CAAC,eAAe,CAAQ;IAE/B,MAAM,CAAC,iBAAiB;QAC7B,OAAO,cAAc,CAAC,WAAW,CAAA;IACnC,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAC9B,GAAc,EACd,KAA6B,EAC7B,QAAgC,EAChC,KAA6B;QAE7B,cAAc,CAAC,WAAW,GAAG,IAAI,CAAA;QACjC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAC1E,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACjE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAA;QACnD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,CAAA;QACxD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACjE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,CAAA;IACtD,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,cAA6B;QAC3D,cAAc,CAAC,UAAU,GAAG,WAAW,CACrC,wBAAwB,EACxB,cAAc,CAAC,kBAAkB,EACjC,cAAc,CAAC,mBAAmB,CACnC,CAAA;QACD,cAAc,CAAC,WAAW,GAAG,WAAW,CACtC,qBAAqB,EACrB,cAAc,CAAC,kBAAkB,EACjC,cAAc,CAAC,gBAAgB,CAChC,CAAA;QACD,cAAc,CAAC,WAAW,GAAG,WAAW,CACtC,qBAAqB,EACrB,cAAc,CAAC,kBAAkB,EACjC,cAAc,CAAC,gBAAgB,CAChC,CAAA;QACD,cAAc,CAAC,eAAe,GAAG,cAAc,CAC7C,cAAc,CAAC,kBAAkB,CAClC,CAAA;IACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { JsonArray, JsonObject, JsonValue } from '../types/jsonTypes.js';
2
- export declare const generateObj: (value: JsonValue | null, attrib: string) => JsonObject;
3
- export declare const mergeTextAttribute: (ancestor: JsonValue | null, local: JsonValue | null, other: JsonValue | null, attrib: string) => JsonArray;
@@ -1,56 +0,0 @@
1
- import { deepEqual } from 'fast-equals';
2
- import { isNil } from 'lodash-es';
3
- import { TEXT_TAG } from '../constant/parserConstant.js';
4
- import { getScenario, MergeScenario } from '../types/mergeScenario.js';
5
- import { ConflictMarker } from './conflictMarker.js';
6
- export const generateObj = (value, attrib) => {
7
- return isNil(value) ? {} : { [attrib]: [{ [TEXT_TAG]: value }] };
8
- };
9
- export const mergeTextAttribute = (ancestor, local, other, attrib) => {
10
- const objAnc = generateObj(ancestor, attrib);
11
- const objlocal = generateObj(local, attrib);
12
- const objother = generateObj(other, attrib);
13
- const scenario = getScenario(objAnc, objlocal, objother);
14
- const acc = [];
15
- // Early return for identical values
16
- if (deepEqual(local, other) &&
17
- (scenario === MergeScenario.LOCAL_AND_OTHER ||
18
- scenario === MergeScenario.ALL)) {
19
- return [objlocal];
20
- }
21
- // Handle specific merge scenarios
22
- switch (scenario) {
23
- case MergeScenario.OTHER_ONLY:
24
- acc.push(objother);
25
- break;
26
- case MergeScenario.LOCAL_ONLY:
27
- acc.push(objlocal);
28
- break;
29
- case MergeScenario.LOCAL_AND_OTHER:
30
- ConflictMarker.addConflictMarkers(acc, objlocal, {}, objother);
31
- break;
32
- case MergeScenario.ANCESTOR_AND_OTHER:
33
- if (ancestor !== other) {
34
- ConflictMarker.addConflictMarkers(acc, {}, objAnc, objother);
35
- }
36
- break;
37
- case MergeScenario.ANCESTOR_AND_LOCAL:
38
- if (ancestor !== local) {
39
- ConflictMarker.addConflictMarkers(acc, objlocal, objAnc, {});
40
- }
41
- break;
42
- case MergeScenario.ALL:
43
- if (ancestor === local) {
44
- acc.push(objother);
45
- }
46
- else if (ancestor === other) {
47
- acc.push(objlocal);
48
- }
49
- else {
50
- ConflictMarker.addConflictMarkers(acc, objlocal, objAnc, objother);
51
- }
52
- break;
53
- }
54
- return acc;
55
- };
56
- //# sourceMappingURL=textAttribute.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"textAttribute.js","sourceRoot":"","sources":["../../src/merger/textAttribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAuB,EACvB,MAAc,EACF,EAAE;IACd,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAA0B,EAC1B,KAAuB,EACvB,KAAuB,EACvB,MAAc,EACH,EAAE;IACb,MAAM,MAAM,GAAe,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAe,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAe,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAkB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACvE,MAAM,GAAG,GAAc,EAAE,CAAA;IAEzB,oCAAoC;IACpC,IACE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;QACvB,CAAC,QAAQ,KAAK,aAAa,CAAC,eAAe;YACzC,QAAQ,KAAK,aAAa,CAAC,GAAG,CAAC,EACjC,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IAED,kCAAkC;IAClC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClB,MAAK;QAEP,KAAK,aAAa,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClB,MAAK;QAEP,KAAK,aAAa,CAAC,eAAe;YAChC,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC9D,MAAK;QAEP,KAAK,aAAa,CAAC,kBAAkB;YACnC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC9D,CAAC;YACD,MAAK;QAEP,KAAK,aAAa,CAAC,kBAAkB;YACnC,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;YAC9D,CAAC;YACD,MAAK;QAEP,KAAK,aAAa,CAAC,GAAG;YACpB,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,CAAC;iBAAM,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACpE,CAAC;YACD,MAAK;IACT,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}