wormclaude 1.0.119 → 1.0.121

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 (232) hide show
  1. package/dist/theme.js +1 -1
  2. package/dist/tui.js +6 -1
  3. package/package.json +1 -1
  4. package/skills/build-mcp-app/SKILL.md +0 -393
  5. package/skills/build-mcp-app/references/abuse-protection.md +0 -60
  6. package/skills/build-mcp-app/references/apps-sdk-messages.md +0 -227
  7. package/skills/build-mcp-app/references/directory-checklist.md +0 -18
  8. package/skills/build-mcp-app/references/iframe-sandbox.md +0 -164
  9. package/skills/build-mcp-app/references/payload-budgeting.md +0 -54
  10. package/skills/build-mcp-app/references/widget-templates.md +0 -249
  11. package/skills/build-mcp-server/SKILL.md +0 -222
  12. package/skills/build-mcp-server/references/auth.md +0 -108
  13. package/skills/build-mcp-server/references/deploy-cloudflare-workers.md +0 -106
  14. package/skills/build-mcp-server/references/elicitation.md +0 -129
  15. package/skills/build-mcp-server/references/remote-http-scaffold.md +0 -211
  16. package/skills/build-mcp-server/references/resources-and-prompts.md +0 -122
  17. package/skills/build-mcp-server/references/server-capabilities.md +0 -164
  18. package/skills/build-mcp-server/references/tool-design.md +0 -189
  19. package/skills/build-mcp-server/references/versions.md +0 -25
  20. package/skills/build-mcpb/SKILL.md +0 -200
  21. package/skills/build-mcpb/references/local-security.md +0 -149
  22. package/skills/build-mcpb/references/manifest-schema.md +0 -156
  23. package/skills/docx/script/__init__.py +0 -1
  24. package/skills/docx/script/accept_chages.py +0 -135
  25. package/skills/docx/script/comment.py +0 -318
  26. package/skills/docx/script/office/helpers/__init__.py +0 -0
  27. package/skills/docx/script/office/helpers/merge_runs.py +0 -199
  28. package/skills/docx/script/office/helpers/simplify_redlines.py +0 -197
  29. package/skills/docx/script/office/pack.py +0 -159
  30. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  31. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  32. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  33. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  34. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  35. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  36. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  37. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  38. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  39. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  40. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  41. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  42. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  43. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  44. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  45. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  46. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  47. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  48. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  49. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  50. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  51. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  52. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  53. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  54. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  55. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  56. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  57. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  58. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  59. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  60. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  61. package/skills/docx/script/office/schemas/mce/mc.xsd +0 -75
  62. package/skills/docx/script/office/schemas/microsoft/wml-2010.xsd +0 -560
  63. package/skills/docx/script/office/schemas/microsoft/wml-2012.xsd +0 -67
  64. package/skills/docx/script/office/schemas/microsoft/wml-2018.xsd +0 -14
  65. package/skills/docx/script/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  66. package/skills/docx/script/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  67. package/skills/docx/script/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  68. package/skills/docx/script/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  69. package/skills/docx/script/office/soffice.py +0 -183
  70. package/skills/docx/script/office/unpack.py +0 -132
  71. package/skills/docx/script/office/validate.py +0 -117
  72. package/skills/docx/script/office/validators/__init__.py +0 -15
  73. package/skills/docx/script/office/validators/base.py +0 -851
  74. package/skills/docx/script/office/validators/docx.py +0 -446
  75. package/skills/docx/script/office/validators/pptx.py +0 -275
  76. package/skills/docx/script/office/validators/redlining.py +0 -247
  77. package/skills/docx/script/templates/comments.xml +0 -3
  78. package/skills/docx/script/templates/commentsExtended.xml +0 -3
  79. package/skills/docx/script/templates/commentsExtensible.xml +0 -3
  80. package/skills/docx/script/templates/commentsIds.xml +0 -3
  81. package/skills/docx/script/templates/people.xml +0 -3
  82. package/skills/docx/skill.md +0 -593
  83. package/skills/explain.md +0 -14
  84. package/skills/frontend-design/SKILL.md +0 -42
  85. package/skills/pdf/FORMS.md +0 -294
  86. package/skills/pdf/REFERENCE.md +0 -612
  87. package/skills/pdf/SKILL.md +0 -314
  88. package/skills/pdf/scripts/check_bounding_boxes.py +0 -65
  89. package/skills/pdf/scripts/check_fillable_fields.py +0 -11
  90. package/skills/pdf/scripts/convert_pdf_to_images.py +0 -33
  91. package/skills/pdf/scripts/create_validation_image.py +0 -37
  92. package/skills/pdf/scripts/extract_form_field_info.py +0 -122
  93. package/skills/pdf/scripts/extract_form_structure.py +0 -115
  94. package/skills/pdf/scripts/fill_fillable_fields.py +0 -98
  95. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
  96. package/skills/playground/SKILL.md +0 -77
  97. package/skills/playground/templates/code-map.md +0 -158
  98. package/skills/playground/templates/concept-map.md +0 -73
  99. package/skills/playground/templates/data-explorer.md +0 -67
  100. package/skills/playground/templates/design-playground.md +0 -67
  101. package/skills/playground/templates/diff-review.md +0 -179
  102. package/skills/playground/templates/document-critique.md +0 -171
  103. package/skills/pptx/SKILL.md +0 -230
  104. package/skills/pptx/editing.md +0 -205
  105. package/skills/pptx/pptxgenjs.md +0 -437
  106. package/skills/pptx/scripts/__init__.py +0 -0
  107. package/skills/pptx/scripts/add_slide.py +0 -195
  108. package/skills/pptx/scripts/clean.py +0 -286
  109. package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  110. package/skills/pptx/scripts/office/helpers/merge_runs.py +0 -199
  111. package/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
  112. package/skills/pptx/scripts/office/pack.py +0 -159
  113. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  114. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  115. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  116. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  117. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  118. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  119. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  120. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  121. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  122. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  123. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  124. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  125. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  126. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  127. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  128. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  129. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  130. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  131. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  132. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  133. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  134. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  135. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  136. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  137. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  138. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  139. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  140. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  141. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  142. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  143. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  144. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
  145. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  146. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  147. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  148. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  149. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  150. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  151. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  152. package/skills/pptx/scripts/office/soffice.py +0 -183
  153. package/skills/pptx/scripts/office/unpack.py +0 -132
  154. package/skills/pptx/scripts/office/validate.py +0 -117
  155. package/skills/pptx/scripts/office/validators/__init__.py +0 -15
  156. package/skills/pptx/scripts/office/validators/base.py +0 -851
  157. package/skills/pptx/scripts/office/validators/docx.py +0 -446
  158. package/skills/pptx/scripts/office/validators/pptx.py +0 -275
  159. package/skills/pptx/scripts/office/validators/redlining.py +0 -247
  160. package/skills/pptx/scripts/thumbnail.py +0 -289
  161. package/skills/recon.md +0 -16
  162. package/skills/security-audit/SKILL.md +0 -26
  163. package/skills/talent-creator/SKILL.md +0 -486
  164. package/skills/talent-creator/agents/analyzer.md +0 -274
  165. package/skills/talent-creator/agents/comparator.md +0 -202
  166. package/skills/talent-creator/agents/grader.md +0 -223
  167. package/skills/talent-creator/assets/eval_review.html +0 -146
  168. package/skills/talent-creator/eval-viewer/generate_review.py +0 -471
  169. package/skills/talent-creator/eval-viewer/viewer.html +0 -1325
  170. package/skills/talent-creator/references/schemas.md +0 -430
  171. package/skills/talent-creator/scripts/__init__.py +0 -0
  172. package/skills/talent-creator/scripts/aggregate_benchmark.py +0 -401
  173. package/skills/talent-creator/scripts/generate_report.py +0 -326
  174. package/skills/talent-creator/scripts/improve_description.py +0 -247
  175. package/skills/talent-creator/scripts/package_skill.py +0 -136
  176. package/skills/talent-creator/scripts/quick_validate.py +0 -146
  177. package/skills/talent-creator/scripts/run_eval.py +0 -310
  178. package/skills/talent-creator/scripts/run_loop.py +0 -328
  179. package/skills/talent-creator/scripts/utils.py +0 -47
  180. package/skills/xlsx/SKILL.md +0 -300
  181. package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  182. package/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -199
  183. package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -197
  184. package/skills/xlsx/scripts/office/pack.py +0 -159
  185. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  186. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  187. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  188. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  189. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  190. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  191. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  192. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  193. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  194. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  195. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  196. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  197. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  198. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  199. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  200. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  201. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  202. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  203. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  204. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  205. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  206. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  207. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  208. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  209. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  210. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  211. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  212. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  213. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  214. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  215. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  216. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -75
  217. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  218. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  219. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  220. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  221. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  222. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  223. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  224. package/skills/xlsx/scripts/office/soffice.py +0 -183
  225. package/skills/xlsx/scripts/office/unpack.py +0 -132
  226. package/skills/xlsx/scripts/office/validate.py +0 -117
  227. package/skills/xlsx/scripts/office/validators/__init__.py +0 -15
  228. package/skills/xlsx/scripts/office/validators/base.py +0 -851
  229. package/skills/xlsx/scripts/office/validators/docx.py +0 -446
  230. package/skills/xlsx/scripts/office/validators/pptx.py +0 -275
  231. package/skills/xlsx/scripts/office/validators/redlining.py +0 -247
  232. package/skills/xlsx/scripts/recalc.py +0 -184
@@ -1,275 +0,0 @@
1
- """
2
- Validator for PowerPoint presentation XML files against XSD schemas.
3
- """
4
-
5
- import re
6
-
7
- from .base import BaseSchemaValidator
8
-
9
-
10
- class PPTXSchemaValidator(BaseSchemaValidator):
11
-
12
- PRESENTATIONML_NAMESPACE = (
13
- "http://schemas.openxmlformats.org/presentationml/2006/main"
14
- )
15
-
16
- ELEMENT_RELATIONSHIP_TYPES = {
17
- "sldid": "slide",
18
- "sldmasterid": "slidemaster",
19
- "notesmasterid": "notesmaster",
20
- "sldlayoutid": "slidelayout",
21
- "themeid": "theme",
22
- "tablestyleid": "tablestyles",
23
- }
24
-
25
- def validate(self):
26
- if not self.validate_xml():
27
- return False
28
-
29
- all_valid = True
30
- if not self.validate_namespaces():
31
- all_valid = False
32
-
33
- if not self.validate_unique_ids():
34
- all_valid = False
35
-
36
- if not self.validate_uuid_ids():
37
- all_valid = False
38
-
39
- if not self.validate_file_references():
40
- all_valid = False
41
-
42
- if not self.validate_slide_layout_ids():
43
- all_valid = False
44
-
45
- if not self.validate_content_types():
46
- all_valid = False
47
-
48
- if not self.validate_against_xsd():
49
- all_valid = False
50
-
51
- if not self.validate_notes_slide_references():
52
- all_valid = False
53
-
54
- if not self.validate_all_relationship_ids():
55
- all_valid = False
56
-
57
- if not self.validate_no_duplicate_slide_layouts():
58
- all_valid = False
59
-
60
- return all_valid
61
-
62
- def validate_uuid_ids(self):
63
- import lxml.etree
64
-
65
- errors = []
66
- uuid_pattern = re.compile(
67
- r"^[\{\(]?[0-9A-Fa-f]{8}-?[0-9A-Fa-f]{4}-?[0-9A-Fa-f]{4}-?[0-9A-Fa-f]{4}-?[0-9A-Fa-f]{12}[\}\)]?$"
68
- )
69
-
70
- for xml_file in self.xml_files:
71
- try:
72
- root = lxml.etree.parse(str(xml_file)).getroot()
73
-
74
- for elem in root.iter():
75
- for attr, value in elem.attrib.items():
76
- attr_name = attr.split("}")[-1].lower()
77
- if attr_name == "id" or attr_name.endswith("id"):
78
- if self._looks_like_uuid(value):
79
- if not uuid_pattern.match(value):
80
- errors.append(
81
- f" {xml_file.relative_to(self.unpacked_dir)}: "
82
- f"Line {elem.sourceline}: ID '{value}' appears to be a UUID but contains invalid hex characters"
83
- )
84
-
85
- except (lxml.etree.XMLSyntaxError, Exception) as e:
86
- errors.append(
87
- f" {xml_file.relative_to(self.unpacked_dir)}: Error: {e}"
88
- )
89
-
90
- if errors:
91
- print(f"FAILED - Found {len(errors)} UUID ID validation errors:")
92
- for error in errors:
93
- print(error)
94
- return False
95
- else:
96
- if self.verbose:
97
- print("PASSED - All UUID-like IDs contain valid hex values")
98
- return True
99
-
100
- def _looks_like_uuid(self, value):
101
- clean_value = value.strip("{}()").replace("-", "")
102
- return len(clean_value) == 32 and all(c.isalnum() for c in clean_value)
103
-
104
- def validate_slide_layout_ids(self):
105
- import lxml.etree
106
-
107
- errors = []
108
-
109
- slide_masters = list(self.unpacked_dir.glob("ppt/slideMasters/*.xml"))
110
-
111
- if not slide_masters:
112
- if self.verbose:
113
- print("PASSED - No slide masters found")
114
- return True
115
-
116
- for slide_master in slide_masters:
117
- try:
118
- root = lxml.etree.parse(str(slide_master)).getroot()
119
-
120
- rels_file = slide_master.parent / "_rels" / f"{slide_master.name}.rels"
121
-
122
- if not rels_file.exists():
123
- errors.append(
124
- f" {slide_master.relative_to(self.unpacked_dir)}: "
125
- f"Missing relationships file: {rels_file.relative_to(self.unpacked_dir)}"
126
- )
127
- continue
128
-
129
- rels_root = lxml.etree.parse(str(rels_file)).getroot()
130
-
131
- valid_layout_rids = set()
132
- for rel in rels_root.findall(
133
- f".//{{{self.PACKAGE_RELATIONSHIPS_NAMESPACE}}}Relationship"
134
- ):
135
- rel_type = rel.get("Type", "")
136
- if "slideLayout" in rel_type:
137
- valid_layout_rids.add(rel.get("Id"))
138
-
139
- for sld_layout_id in root.findall(
140
- f".//{{{self.PRESENTATIONML_NAMESPACE}}}sldLayoutId"
141
- ):
142
- r_id = sld_layout_id.get(
143
- f"{{{self.OFFICE_RELATIONSHIPS_NAMESPACE}}}id"
144
- )
145
- layout_id = sld_layout_id.get("id")
146
-
147
- if r_id and r_id not in valid_layout_rids:
148
- errors.append(
149
- f" {slide_master.relative_to(self.unpacked_dir)}: "
150
- f"Line {sld_layout_id.sourceline}: sldLayoutId with id='{layout_id}' "
151
- f"references r:id='{r_id}' which is not found in slide layout relationships"
152
- )
153
-
154
- except (lxml.etree.XMLSyntaxError, Exception) as e:
155
- errors.append(
156
- f" {slide_master.relative_to(self.unpacked_dir)}: Error: {e}"
157
- )
158
-
159
- if errors:
160
- print(f"FAILED - Found {len(errors)} slide layout ID validation errors:")
161
- for error in errors:
162
- print(error)
163
- print(
164
- "Remove invalid references or add missing slide layouts to the relationships file."
165
- )
166
- return False
167
- else:
168
- if self.verbose:
169
- print("PASSED - All slide layout IDs reference valid slide layouts")
170
- return True
171
-
172
- def validate_no_duplicate_slide_layouts(self):
173
- import lxml.etree
174
-
175
- errors = []
176
- slide_rels_files = list(self.unpacked_dir.glob("ppt/slides/_rels/*.xml.rels"))
177
-
178
- for rels_file in slide_rels_files:
179
- try:
180
- root = lxml.etree.parse(str(rels_file)).getroot()
181
-
182
- layout_rels = [
183
- rel
184
- for rel in root.findall(
185
- f".//{{{self.PACKAGE_RELATIONSHIPS_NAMESPACE}}}Relationship"
186
- )
187
- if "slideLayout" in rel.get("Type", "")
188
- ]
189
-
190
- if len(layout_rels) > 1:
191
- errors.append(
192
- f" {rels_file.relative_to(self.unpacked_dir)}: has {len(layout_rels)} slideLayout references"
193
- )
194
-
195
- except Exception as e:
196
- errors.append(
197
- f" {rels_file.relative_to(self.unpacked_dir)}: Error: {e}"
198
- )
199
-
200
- if errors:
201
- print("FAILED - Found slides with duplicate slideLayout references:")
202
- for error in errors:
203
- print(error)
204
- return False
205
- else:
206
- if self.verbose:
207
- print("PASSED - All slides have exactly one slideLayout reference")
208
- return True
209
-
210
- def validate_notes_slide_references(self):
211
- import lxml.etree
212
-
213
- errors = []
214
- notes_slide_references = {}
215
-
216
- slide_rels_files = list(self.unpacked_dir.glob("ppt/slides/_rels/*.xml.rels"))
217
-
218
- if not slide_rels_files:
219
- if self.verbose:
220
- print("PASSED - No slide relationship files found")
221
- return True
222
-
223
- for rels_file in slide_rels_files:
224
- try:
225
- root = lxml.etree.parse(str(rels_file)).getroot()
226
-
227
- for rel in root.findall(
228
- f".//{{{self.PACKAGE_RELATIONSHIPS_NAMESPACE}}}Relationship"
229
- ):
230
- rel_type = rel.get("Type", "")
231
- if "notesSlide" in rel_type:
232
- target = rel.get("Target", "")
233
- if target:
234
- normalized_target = target.replace("../", "")
235
-
236
- slide_name = rels_file.stem.replace(
237
- ".xml", ""
238
- )
239
-
240
- if normalized_target not in notes_slide_references:
241
- notes_slide_references[normalized_target] = []
242
- notes_slide_references[normalized_target].append(
243
- (slide_name, rels_file)
244
- )
245
-
246
- except (lxml.etree.XMLSyntaxError, Exception) as e:
247
- errors.append(
248
- f" {rels_file.relative_to(self.unpacked_dir)}: Error: {e}"
249
- )
250
-
251
- for target, references in notes_slide_references.items():
252
- if len(references) > 1:
253
- slide_names = [ref[0] for ref in references]
254
- errors.append(
255
- f" Notes slide '{target}' is referenced by multiple slides: {', '.join(slide_names)}"
256
- )
257
- for slide_name, rels_file in references:
258
- errors.append(f" - {rels_file.relative_to(self.unpacked_dir)}")
259
-
260
- if errors:
261
- print(
262
- f"FAILED - Found {len([e for e in errors if not e.startswith(' ')])} notes slide reference validation errors:"
263
- )
264
- for error in errors:
265
- print(error)
266
- print("Each slide may optionally have its own slide file.")
267
- return False
268
- else:
269
- if self.verbose:
270
- print("PASSED - All notes slide references are unique")
271
- return True
272
-
273
-
274
- if __name__ == "__main__":
275
- raise RuntimeError("This module should not be run directly.")
@@ -1,247 +0,0 @@
1
- """
2
- Validator for tracked changes in Word documents.
3
- """
4
-
5
- import subprocess
6
- import tempfile
7
- import zipfile
8
- from pathlib import Path
9
-
10
-
11
- class RedliningValidator:
12
-
13
- def __init__(self, unpacked_dir, original_docx, verbose=False, author="Claude"):
14
- self.unpacked_dir = Path(unpacked_dir)
15
- self.original_docx = Path(original_docx)
16
- self.verbose = verbose
17
- self.author = author
18
- self.namespaces = {
19
- "w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main"
20
- }
21
-
22
- def repair(self) -> int:
23
- return 0
24
-
25
- def validate(self):
26
- modified_file = self.unpacked_dir / "word" / "document.xml"
27
- if not modified_file.exists():
28
- print(f"FAILED - Modified document.xml not found at {modified_file}")
29
- return False
30
-
31
- try:
32
- import xml.etree.ElementTree as ET
33
-
34
- tree = ET.parse(modified_file)
35
- root = tree.getroot()
36
-
37
- del_elements = root.findall(".//w:del", self.namespaces)
38
- ins_elements = root.findall(".//w:ins", self.namespaces)
39
-
40
- author_del_elements = [
41
- elem
42
- for elem in del_elements
43
- if elem.get(f"{{{self.namespaces['w']}}}author") == self.author
44
- ]
45
- author_ins_elements = [
46
- elem
47
- for elem in ins_elements
48
- if elem.get(f"{{{self.namespaces['w']}}}author") == self.author
49
- ]
50
-
51
- if not author_del_elements and not author_ins_elements:
52
- if self.verbose:
53
- print(f"PASSED - No tracked changes by {self.author} found.")
54
- return True
55
-
56
- except Exception:
57
- pass
58
-
59
- with tempfile.TemporaryDirectory() as temp_dir:
60
- temp_path = Path(temp_dir)
61
-
62
- try:
63
- with zipfile.ZipFile(self.original_docx, "r") as zip_ref:
64
- zip_ref.extractall(temp_path)
65
- except Exception as e:
66
- print(f"FAILED - Error unpacking original docx: {e}")
67
- return False
68
-
69
- original_file = temp_path / "word" / "document.xml"
70
- if not original_file.exists():
71
- print(
72
- f"FAILED - Original document.xml not found in {self.original_docx}"
73
- )
74
- return False
75
-
76
- try:
77
- import xml.etree.ElementTree as ET
78
-
79
- modified_tree = ET.parse(modified_file)
80
- modified_root = modified_tree.getroot()
81
- original_tree = ET.parse(original_file)
82
- original_root = original_tree.getroot()
83
- except ET.ParseError as e:
84
- print(f"FAILED - Error parsing XML files: {e}")
85
- return False
86
-
87
- self._remove_author_tracked_changes(original_root)
88
- self._remove_author_tracked_changes(modified_root)
89
-
90
- modified_text = self._extract_text_content(modified_root)
91
- original_text = self._extract_text_content(original_root)
92
-
93
- if modified_text != original_text:
94
- error_message = self._generate_detailed_diff(
95
- original_text, modified_text
96
- )
97
- print(error_message)
98
- return False
99
-
100
- if self.verbose:
101
- print(f"PASSED - All changes by {self.author} are properly tracked")
102
- return True
103
-
104
- def _generate_detailed_diff(self, original_text, modified_text):
105
- error_parts = [
106
- f"FAILED - Document text doesn't match after removing {self.author}'s tracked changes",
107
- "",
108
- "Likely causes:",
109
- " 1. Modified text inside another author's <w:ins> or <w:del> tags",
110
- " 2. Made edits without proper tracked changes",
111
- " 3. Didn't nest <w:del> inside <w:ins> when deleting another's insertion",
112
- "",
113
- "For pre-redlined documents, use correct patterns:",
114
- " - To reject another's INSERTION: Nest <w:del> inside their <w:ins>",
115
- " - To restore another's DELETION: Add new <w:ins> AFTER their <w:del>",
116
- "",
117
- ]
118
-
119
- git_diff = self._get_git_word_diff(original_text, modified_text)
120
- if git_diff:
121
- error_parts.extend(["Differences:", "============", git_diff])
122
- else:
123
- error_parts.append("Unable to generate word diff (git not available)")
124
-
125
- return "\n".join(error_parts)
126
-
127
- def _get_git_word_diff(self, original_text, modified_text):
128
- try:
129
- with tempfile.TemporaryDirectory() as temp_dir:
130
- temp_path = Path(temp_dir)
131
-
132
- original_file = temp_path / "original.txt"
133
- modified_file = temp_path / "modified.txt"
134
-
135
- original_file.write_text(original_text, encoding="utf-8")
136
- modified_file.write_text(modified_text, encoding="utf-8")
137
-
138
- result = subprocess.run(
139
- [
140
- "git",
141
- "diff",
142
- "--word-diff=plain",
143
- "--word-diff-regex=.",
144
- "-U0",
145
- "--no-index",
146
- str(original_file),
147
- str(modified_file),
148
- ],
149
- capture_output=True,
150
- text=True,
151
- )
152
-
153
- if result.stdout.strip():
154
- lines = result.stdout.split("\n")
155
- content_lines = []
156
- in_content = False
157
- for line in lines:
158
- if line.startswith("@@"):
159
- in_content = True
160
- continue
161
- if in_content and line.strip():
162
- content_lines.append(line)
163
-
164
- if content_lines:
165
- return "\n".join(content_lines)
166
-
167
- result = subprocess.run(
168
- [
169
- "git",
170
- "diff",
171
- "--word-diff=plain",
172
- "-U0",
173
- "--no-index",
174
- str(original_file),
175
- str(modified_file),
176
- ],
177
- capture_output=True,
178
- text=True,
179
- )
180
-
181
- if result.stdout.strip():
182
- lines = result.stdout.split("\n")
183
- content_lines = []
184
- in_content = False
185
- for line in lines:
186
- if line.startswith("@@"):
187
- in_content = True
188
- continue
189
- if in_content and line.strip():
190
- content_lines.append(line)
191
- return "\n".join(content_lines)
192
-
193
- except (subprocess.CalledProcessError, FileNotFoundError, Exception):
194
- pass
195
-
196
- return None
197
-
198
- def _remove_author_tracked_changes(self, root):
199
- ins_tag = f"{{{self.namespaces['w']}}}ins"
200
- del_tag = f"{{{self.namespaces['w']}}}del"
201
- author_attr = f"{{{self.namespaces['w']}}}author"
202
-
203
- for parent in root.iter():
204
- to_remove = []
205
- for child in parent:
206
- if child.tag == ins_tag and child.get(author_attr) == self.author:
207
- to_remove.append(child)
208
- for elem in to_remove:
209
- parent.remove(elem)
210
-
211
- deltext_tag = f"{{{self.namespaces['w']}}}delText"
212
- t_tag = f"{{{self.namespaces['w']}}}t"
213
-
214
- for parent in root.iter():
215
- to_process = []
216
- for child in parent:
217
- if child.tag == del_tag and child.get(author_attr) == self.author:
218
- to_process.append((child, list(parent).index(child)))
219
-
220
- for del_elem, del_index in reversed(to_process):
221
- for elem in del_elem.iter():
222
- if elem.tag == deltext_tag:
223
- elem.tag = t_tag
224
-
225
- for child in reversed(list(del_elem)):
226
- parent.insert(del_index, child)
227
- parent.remove(del_elem)
228
-
229
- def _extract_text_content(self, root):
230
- p_tag = f"{{{self.namespaces['w']}}}p"
231
- t_tag = f"{{{self.namespaces['w']}}}t"
232
-
233
- paragraphs = []
234
- for p_elem in root.findall(f".//{p_tag}"):
235
- text_parts = []
236
- for t_elem in p_elem.findall(f".//{t_tag}"):
237
- if t_elem.text:
238
- text_parts.append(t_elem.text)
239
- paragraph_text = "".join(text_parts)
240
- if paragraph_text:
241
- paragraphs.append(paragraph_text)
242
-
243
- return "\n".join(paragraphs)
244
-
245
-
246
- if __name__ == "__main__":
247
- raise RuntimeError("This module should not be run directly.")
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" ?>
2
- <w:comments xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:oel="http://schemas.microsoft.com/office/2019/extlst" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16du="http://schemas.microsoft.com/office/word/2023/wordml/word16du" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16sdtfl="http://schemas.microsoft.com/office/word/2024/wordml/sdtformatlock" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh w16sdtfl w16du wp14">
3
- </w:comments>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" ?>
2
- <w15:commentsEx xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:oel="http://schemas.microsoft.com/office/2019/extlst" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16du="http://schemas.microsoft.com/office/word/2023/wordml/word16du" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16sdtfl="http://schemas.microsoft.com/office/word/2024/wordml/sdtformatlock" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh w16sdtfl w16du wp14">
3
- </w15:commentsEx>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" ?>
2
- <w16cex:commentsExtensible xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:oel="http://schemas.microsoft.com/office/2019/extlst" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16du="http://schemas.microsoft.com/office/word/2023/wordml/word16du" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16sdtfl="http://schemas.microsoft.com/office/word/2024/wordml/sdtformatlock" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:cr="http://schemas.microsoft.com/office/comments/2020/reactions" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh w16sdtfl cr w16du wp14">
3
- </w16cex:commentsExtensible>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" ?>
2
- <w16cid:commentsIds xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:oel="http://schemas.microsoft.com/office/2019/extlst" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16du="http://schemas.microsoft.com/office/word/2023/wordml/word16du" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16sdtfl="http://schemas.microsoft.com/office/word/2024/wordml/sdtformatlock" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh w16sdtfl w16du wp14">
3
- </w16cid:commentsIds>
@@ -1,3 +0,0 @@
1
- <?xml version="1.0" ?>
2
- <w15:people xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml">
3
- </w15:people>