m0saic 0.3.2 → 0.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 (224) hide show
  1. package/README.md +23 -16
  2. package/dist/browseE2e.js +1 -1
  3. package/dist/connectionsFromEnv.js +1 -1
  4. package/dist/e2eTemplateVariants.js +1 -1
  5. package/dist/frontDoor.js +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/inlineDsl.js +1 -1
  8. package/dist/mcp/bridgeClient.js +1 -1
  9. package/dist/mcp/server.js +1 -1
  10. package/dist/mcp/tools.js +1 -1
  11. package/dist/mosaicxRunner.js +1 -1
  12. package/dist/outputPattern.js +1 -1
  13. package/dist/showcaseFeed.js +1 -1
  14. package/dist/templateDoctor.js +1 -1
  15. package/dist/utils/checkFeasibility.js +1 -1
  16. package/dist/utils/collectRenderErrors.js +1 -1
  17. package/dist/utils/enrichImageAlphaFromDoc.js +1 -1
  18. package/dist/utils/ensureFfmpeg.js +1 -1
  19. package/dist/utils/extractLayoutMeta.js +1 -1
  20. package/dist/utils/failureHints.js +1 -1
  21. package/dist/utils/ffmpegProbe.js +1 -1
  22. package/dist/utils/formatM0saicForCli.js +1 -1
  23. package/dist/utils/hashFile.js +1 -1
  24. package/dist/utils/helpGroups.js +1 -1
  25. package/dist/utils/installContext.js +1 -1
  26. package/dist/utils/invocation.js +1 -1
  27. package/dist/utils/licenseActivation.js +1 -1
  28. package/dist/utils/licenseActivationWorker.js +1 -1
  29. package/dist/utils/mosaicSpinner.js +1 -1
  30. package/dist/utils/parseDimensions.js +1 -1
  31. package/dist/utils/pathInfo.js +1 -1
  32. package/dist/utils/readJsonArg.js +1 -1
  33. package/dist/utils/renderOutcome.js +1 -1
  34. package/dist/utils/renderReport.js +1 -1
  35. package/dist/utils/renderSignals.js +1 -1
  36. package/dist/utils/renderWorkspace.js +1 -1
  37. package/dist/utils/reportOutputFormat.js +1 -1
  38. package/dist/utils/resolveLayoutFileProps.js +1 -0
  39. package/dist/utils/setupFfmpeg.js +1 -1
  40. package/dist/utils/telemetry.js +1 -1
  41. package/dist/utils/telemetryFlushWorker.js +1 -1
  42. package/dist/utils/telemetryUpstream.js +1 -1
  43. package/dist/utils/telemetryUsage.js +1 -1
  44. package/dist/utils/templateInstall.js +1 -0
  45. package/dist/utils/templateRepoKeys.js +1 -0
  46. package/dist/utils/templateSources.js +1 -0
  47. package/dist/utils/toolchainConfig.js +1 -1
  48. package/dist/utils/tutorialDuration.js +1 -1
  49. package/dist/utils/updateCheck.js +1 -1
  50. package/dist/utils/updateCheckWorker.js +1 -1
  51. package/dist/utils/validateSourceCounts.js +1 -1
  52. package/dist/utils/versions.js +1 -1
  53. package/dist/webCustomizeLink.js +1 -1
  54. package/node_modules/@m0saic/core/dist/core/buildChildMosaicSource.js +1 -1
  55. package/node_modules/@m0saic/core/dist/core/buildChunkCommands.js +1 -1
  56. package/node_modules/@m0saic/core/dist/core/buildEncodeCommands.js +1 -1
  57. package/node_modules/@m0saic/core/dist/core/buildLavfiSource.js +1 -1
  58. package/node_modules/@m0saic/core/dist/core/buildMediaSource.js +1 -1
  59. package/node_modules/@m0saic/core/dist/core/buildMosaicNode.js +1 -1
  60. package/node_modules/@m0saic/core/dist/core/buildMosaicPlanFromFile.js +1 -1
  61. package/node_modules/@m0saic/core/dist/core/buildSvgTextSource.js +1 -1
  62. package/node_modules/@m0saic/core/dist/core/buildTextRenderCommand.js +1 -1
  63. package/node_modules/@m0saic/core/dist/core/collectRefTargets.js +1 -1
  64. package/node_modules/@m0saic/core/dist/core/index.js +1 -1
  65. package/node_modules/@m0saic/core/dist/core/maskCacheDir.js +1 -1
  66. package/node_modules/@m0saic/core/dist/core/maskWorkerBridge.js +1 -1
  67. package/node_modules/@m0saic/core/dist/core/playbackPlaySpeed.js +1 -1
  68. package/node_modules/@m0saic/core/dist/core/prepareProps.js +1 -1
  69. package/node_modules/@m0saic/core/dist/core/primaryOutput.js +1 -1
  70. package/node_modules/@m0saic/core/dist/core/rasterizeMaskPng.js +1 -1
  71. package/node_modules/@m0saic/core/dist/core/rasterizeSvgMediaPng.js +1 -1
  72. package/node_modules/@m0saic/core/dist/core/refTargetTap.js +1 -1
  73. package/node_modules/@m0saic/core/dist/core/resolveMasks.js +1 -1
  74. package/node_modules/@m0saic/core/dist/core/resolveMasksSync.js +1 -1
  75. package/node_modules/@m0saic/core/dist/core/resolveStrokeRingsSync.js +1 -1
  76. package/node_modules/@m0saic/core/dist/core/roundedRectMask.js +1 -1
  77. package/node_modules/@m0saic/core/dist/core/strokeRing.js +1 -1
  78. package/node_modules/@m0saic/core/dist/core/svgRaster.js +1 -1
  79. package/node_modules/@m0saic/core/dist/defaults.js +1 -1
  80. package/node_modules/@m0saic/core/dist/ffmpeg/backgroundImageInput.js +1 -1
  81. package/node_modules/@m0saic/core/dist/ffmpeg/bufferGuard.js +1 -1
  82. package/node_modules/@m0saic/core/dist/ffmpeg/ffmpegCommands.js +1 -1
  83. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyBackdropBlur.js +1 -1
  84. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyBlur.js +1 -1
  85. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyBorderRadius.js +1 -1
  86. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyCamera.js +1 -1
  87. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyChromaKey.js +1 -1
  88. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyFade.js +1 -1
  89. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyGrade.js +1 -1
  90. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyMask.js +1 -1
  91. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyNoise.js +1 -1
  92. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyPixelize.js +1 -1
  93. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyRotate.js +1 -1
  94. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyStroke.js +1 -1
  95. package/node_modules/@m0saic/core/dist/ffmpeg/filters/applyTileEffects.js +1 -1
  96. package/node_modules/@m0saic/core/dist/ffmpeg/filters/coverCrop.js +1 -1
  97. package/node_modules/@m0saic/core/dist/ffmpeg/filters/index.js +1 -1
  98. package/node_modules/@m0saic/core/dist/ffmpeg/filters/sourceRectCrop.js +1 -1
  99. package/node_modules/@m0saic/core/dist/ffmpeg/gridLowering.js +1 -1
  100. package/node_modules/@m0saic/core/dist/ffmpeg/index.js +1 -1
  101. package/node_modules/@m0saic/core/dist/ffmpeg/splitAvMux.js +1 -1
  102. package/node_modules/@m0saic/core/dist/ffmpeg/stillOutput.js +1 -0
  103. package/node_modules/@m0saic/core/dist/ffmpeg/threadGuard.js +1 -1
  104. package/node_modules/@m0saic/core/dist/flatten/index.js +1 -1
  105. package/node_modules/@m0saic/core/dist/fs/index.js +1 -1
  106. package/node_modules/@m0saic/core/dist/fs/tempWorkspace.js +1 -1
  107. package/node_modules/@m0saic/core/dist/index.js +1 -1
  108. package/node_modules/@m0saic/core/dist/media/buildAssetManifestFromInputs.js +1 -1
  109. package/node_modules/@m0saic/core/dist/media/buildMediaRegistryFromInput.js +1 -1
  110. package/node_modules/@m0saic/core/dist/media/collectMediaInputsFromInvocationProps.js +1 -1
  111. package/node_modules/@m0saic/core/dist/media/collectMediaInputsFromMosaicRenderableFile.js +1 -1
  112. package/node_modules/@m0saic/core/dist/media/collectMediaInputsFromProps.js +1 -1
  113. package/node_modules/@m0saic/core/dist/media/index.js +1 -1
  114. package/node_modules/@m0saic/core/dist/media/internalMintAsset.js +1 -1
  115. package/node_modules/@m0saic/core/dist/media/remoteUrl.js +1 -1
  116. package/node_modules/@m0saic/core/dist/media/stageUnsafeFilenames.js +1 -1
  117. package/node_modules/@m0saic/core/dist/media/types.js +1 -1
  118. package/node_modules/@m0saic/core/dist/output/index.js +1 -1
  119. package/node_modules/@m0saic/core/dist/output/resolveOutputFormat.js +1 -1
  120. package/node_modules/@m0saic/core/dist/output/types.js +1 -1
  121. package/node_modules/@m0saic/core/dist/probe/cellLuminanceProbe.js +1 -1
  122. package/node_modules/@m0saic/core/dist/probe/extractSubtitleCues.js +1 -1
  123. package/node_modules/@m0saic/core/dist/probe/helpers.js +1 -1
  124. package/node_modules/@m0saic/core/dist/probe/index.js +1 -1
  125. package/node_modules/@m0saic/core/dist/probe/luminanceProbe.js +1 -1
  126. package/node_modules/@m0saic/core/dist/probe/probeMedia.js +1 -1
  127. package/node_modules/@m0saic/core/dist/probe/runFFprobe.js +1 -1
  128. package/node_modules/@m0saic/core/dist/probe/types.js +1 -1
  129. package/node_modules/@m0saic/core/dist/runtime/engineRedaction.js +1 -1
  130. package/node_modules/@m0saic/core/dist/runtime/ffmpegFailure.js +1 -1
  131. package/node_modules/@m0saic/core/dist/runtime/filterPreflight.js +1 -1
  132. package/node_modules/@m0saic/core/dist/runtime/hashFile.js +1 -1
  133. package/node_modules/@m0saic/core/dist/runtime/index.js +1 -1
  134. package/node_modules/@m0saic/core/dist/runtime/pathInfo.js +1 -1
  135. package/node_modules/@m0saic/core/dist/runtime/perfHeatmap.js +1 -1
  136. package/node_modules/@m0saic/core/dist/runtime/perfReport.js +1 -1
  137. package/node_modules/@m0saic/core/dist/runtime/pipelineM0p.js +1 -1
  138. package/node_modules/@m0saic/core/dist/runtime/renderCostModel.constants.js +1 -1
  139. package/node_modules/@m0saic/core/dist/runtime/renderCostModel.js +1 -1
  140. package/node_modules/@m0saic/core/dist/runtime/renderReport.js +1 -1
  141. package/node_modules/@m0saic/core/dist/runtime/renderSidecars.js +1 -1
  142. package/node_modules/@m0saic/core/dist/runtime/resolveMosaicx.js +1 -1
  143. package/node_modules/@m0saic/core/dist/runtime/runPlan.js +1 -1
  144. package/node_modules/@m0saic/core/dist/runtime/types.js +1 -1
  145. package/node_modules/@m0saic/core/dist/runtime/upstream.js +1 -1
  146. package/node_modules/@m0saic/core/dist/runtime/writeSidecars.js +1 -1
  147. package/node_modules/@m0saic/core/dist/types/chunk.js +1 -1
  148. package/node_modules/@m0saic/core/dist/types/index.js +1 -1
  149. package/node_modules/@m0saic/core/dist/types/mosaic-plan.js +1 -1
  150. package/node_modules/@m0saic/core/dist/utils/assertTiming.js +1 -1
  151. package/node_modules/@m0saic/core/dist/utils/command.js +1 -1
  152. package/node_modules/@m0saic/core/dist/utils/createEngineContext.js +1 -1
  153. package/node_modules/@m0saic/core/dist/utils/createTemplateRenderCache.js +1 -1
  154. package/node_modules/@m0saic/core/dist/utils/ffmpegColor.js +1 -1
  155. package/node_modules/@m0saic/core/dist/utils/formatDuration.js +1 -1
  156. package/node_modules/@m0saic/core/dist/utils/fsSafeId.js +1 -1
  157. package/node_modules/@m0saic/core/dist/utils/index.js +1 -1
  158. package/node_modules/@m0saic/core/dist/utils/lowerRenderableToMosaicDocument.js +1 -1
  159. package/node_modules/@m0saic/core/dist/utils/movSafeCodec.js +1 -1
  160. package/node_modules/@m0saic/core/dist/utils/resolveBoxFrac.js +1 -1
  161. package/node_modules/@m0saic/core/dist/validate/index.js +1 -1
  162. package/node_modules/@m0saic/core/package.json +1 -1
  163. package/node_modules/@m0saic/core/scripts/mask-rasterize-core.js +1 -1
  164. package/node_modules/@m0saic/core/scripts/mask-rasterize-worker.js +1 -1
  165. package/node_modules/@m0saic/core/scripts/mask-worker-thread.js +1 -1
  166. package/node_modules/@m0saic/dictionary/package.json +1 -1
  167. package/node_modules/@m0saic/dsl-file-formats/dist/cjs/m0v/m0vFile.js +2 -2
  168. package/node_modules/@m0saic/dsl-file-formats/package.json +1 -1
  169. package/node_modules/@m0saic/knowledge/docs/README.md +1 -0
  170. package/node_modules/@m0saic/knowledge/docs/file-formats/m0p-and-custom-field.md +1 -1
  171. package/node_modules/@m0saic/knowledge/docs/runtime/cli-usage.md +186 -46
  172. package/node_modules/@m0saic/knowledge/docs/runtime/ffmpeg-expression-limits.md +7 -0
  173. package/node_modules/@m0saic/knowledge/docs/templates/README.md +5 -1
  174. package/node_modules/@m0saic/knowledge/docs/templates/patterns/print-authoring.md +97 -0
  175. package/node_modules/@m0saic/knowledge/docs/templates/reference/brand-schema.md +73 -0
  176. package/node_modules/@m0saic/knowledge/docs/templates/reference/prop-bindings.md +31 -1
  177. package/node_modules/@m0saic/knowledge/docs/templates/render-lifecycle.md +26 -1
  178. package/node_modules/@m0saic/knowledge/docs/templates/ui-controls.md +42 -0
  179. package/node_modules/@m0saic/knowledge/package.json +1 -1
  180. package/node_modules/@m0saic/platform/dist/cjs/mosaic/propBindings/index.js +1 -1
  181. package/node_modules/@m0saic/platform/dist/cjs/mosaic/propBindings/propBindings.js +1 -1
  182. package/node_modules/@m0saic/platform/dist/cjs/share/shareQuery.js +1 -1
  183. package/node_modules/@m0saic/platform/package.json +1 -1
  184. package/node_modules/@m0saic/product/dist/__fixtures__/tarGz.js +1 -0
  185. package/node_modules/@m0saic/product/dist/communityRelease.js +1 -1
  186. package/node_modules/@m0saic/product/dist/freeTierLicense.js +1 -1
  187. package/node_modules/@m0saic/product/dist/index.js +1 -1
  188. package/node_modules/@m0saic/product/dist/installedTemplateRepos.js +1 -0
  189. package/node_modules/@m0saic/product/dist/licenseActivationNotice.js +1 -1
  190. package/node_modules/@m0saic/product/dist/licenseFile.js +1 -1
  191. package/node_modules/@m0saic/product/dist/licenseToken.js +1 -1
  192. package/node_modules/@m0saic/product/dist/makeScratchPath.js +1 -1
  193. package/node_modules/@m0saic/product/dist/postRenderWrapper.js +1 -1
  194. package/node_modules/@m0saic/product/dist/publicKeys.js +1 -1
  195. package/node_modules/@m0saic/product/dist/revokedKeys.js +1 -1
  196. package/node_modules/@m0saic/product/dist/templateBundle.js +1 -0
  197. package/node_modules/@m0saic/product/dist/upstreamDefaults.js +1 -1
  198. package/node_modules/@m0saic/product/dist/workspaceScaffold.js +1 -1
  199. package/node_modules/@m0saic/product/package.json +1 -1
  200. package/node_modules/@m0saic/template-utils/dist/media/defaultMedia.browser.js +1 -0
  201. package/node_modules/@m0saic/template-utils/dist/media/starterSvgInline.js +1 -0
  202. package/node_modules/@m0saic/template-utils/package.json +1 -1
  203. package/node_modules/@m0saic/templates/dist/m0saic/alpine/bar-graph/v3/bar-graph.js +1 -0
  204. package/node_modules/@m0saic/templates/dist/m0saic/alpine/bar-graph/v3/index.js +1 -0
  205. package/node_modules/@m0saic/templates/dist/m0saic/alpine/index.js +1 -1
  206. package/node_modules/@m0saic/templates/dist/m0saic/alpine/line-chart/v4/index.js +1 -0
  207. package/node_modules/@m0saic/templates/dist/m0saic/alpine/line-chart/v4/line-chart.js +1 -0
  208. package/node_modules/@m0saic/templates/dist/m0saic/brand/business-card/v3/business-card.js +1 -0
  209. package/node_modules/@m0saic/templates/dist/m0saic/brand/business-card/v3/index.js +1 -0
  210. package/node_modules/@m0saic/templates/dist/m0saic/brand/business-card/v3/layout.js +1 -0
  211. package/node_modules/@m0saic/templates/dist/m0saic/brand/index.js +1 -1
  212. package/node_modules/@m0saic/templates/dist/template-catalog.json +486 -6
  213. package/node_modules/@m0saic/templates/dist/template-registry.js +1 -1
  214. package/node_modules/@m0saic/templates/dist/web.js +1 -1
  215. package/node_modules/@m0saic/templates/package.json +1 -1
  216. package/node_modules/@m0saic/templates/template-catalog.json +486 -6
  217. package/node_modules/@m0saic/templates/template-manifest.json +69 -0
  218. package/node_modules/@m0saic/templates/web-template-ids.json +3 -0
  219. package/node_modules/@m0saic/templates-advanced/package.json +1 -1
  220. package/node_modules/@m0saic/text/package.json +1 -1
  221. package/node_modules/@m0saic/types/package.json +1 -1
  222. package/node_modules/@m0saic/types-internal/dist/analytics/featureKeys.js +1 -1
  223. package/node_modules/@m0saic/types-internal/package.json +1 -1
  224. package/package.json +13 -13
@@ -1 +1 @@
1
- 'use strict';var _0x5008c3=_0x41c2;(function(_0x161224,_0x373b78){var _0x146442=_0x41c2,_0x1c0d0f=_0x161224();while(!![]){try{var _0x3707ca=parseInt(_0x146442(0xbb))/0x1*(-parseInt(_0x146442(0xbe))/0x2)+-parseInt(_0x146442(0xbf))/0x3*(-parseInt(_0x146442(0xc9))/0x4)+-parseInt(_0x146442(0xca))/0x5+parseInt(_0x146442(0xc5))/0x6*(parseInt(_0x146442(0xba))/0x7)+-parseInt(_0x146442(0xc6))/0x8*(parseInt(_0x146442(0xc1))/0x9)+parseInt(_0x146442(0xce))/0xa*(-parseInt(_0x146442(0xc0))/0xb)+parseInt(_0x146442(0xc7))/0xc*(parseInt(_0x146442(0xc8))/0xd);if(_0x3707ca===_0x373b78)break;else _0x1c0d0f['push'](_0x1c0d0f['shift']());}catch(_0x19240f){_0x1c0d0f['push'](_0x1c0d0f['shift']());}}}(_0x5442,0x48bf1));Object[_0x5008c3(0xcd)](exports,_0x5008c3(0xbc),{'value':!0x0}),exports[_0x5008c3(0xc3)]=exports[_0x5008c3(0xcc)]=exports[_0x5008c3(0xbd)]=exports[_0x5008c3(0xc2)]=void 0x0;var _0x3bfc1b=require(_0x5008c3(0xcb));Object[_0x5008c3(0xcd)](exports,_0x5008c3(0xc2),{'enumerable':!0x0,'get':function(){var _0x29327a=_0x5008c3;return _0x3bfc1b[_0x29327a(0xc2)];}}),Object[_0x5008c3(0xcd)](exports,_0x5008c3(0xbd),{'enumerable':!0x0,'get':function(){var _0x3cbb81=_0x5008c3;return _0x3bfc1b[_0x3cbb81(0xbd)];}}),Object[_0x5008c3(0xcd)](exports,_0x5008c3(0xcc),{'enumerable':!0x0,'get':function(){var _0x598e07=_0x5008c3;return _0x3bfc1b[_0x598e07(0xcc)];}});var _0x302477=require(_0x5008c3(0xc4));function _0x41c2(_0x117927,_0x2f4138){_0x117927=_0x117927-0xba;var _0x544257=_0x5442();var _0x41c244=_0x544257[_0x117927];if(_0x41c2['ADIzpM']===undefined){var _0x486061=function(_0x15650c){var _0x520e2d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x3bfc1b='',_0x302477='';for(var _0x14fc29=0x0,_0xd943c2,_0x3f779d,_0x1aaee8=0x0;_0x3f779d=_0x15650c['charAt'](_0x1aaee8++);~_0x3f779d&&(_0xd943c2=_0x14fc29%0x4?_0xd943c2*0x40+_0x3f779d:_0x3f779d,_0x14fc29++%0x4)?_0x3bfc1b+=String['fromCharCode'](0xff&_0xd943c2>>(-0x2*_0x14fc29&0x6)):0x0){_0x3f779d=_0x520e2d['indexOf'](_0x3f779d);}for(var _0x3b1fed=0x0,_0x2b9f11=_0x3bfc1b['length'];_0x3b1fed<_0x2b9f11;_0x3b1fed++){_0x302477+='%'+('00'+_0x3bfc1b['charCodeAt'](_0x3b1fed)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x302477);};_0x41c2['pAIKCL']=_0x486061,_0x41c2['uSmTpJ']={},_0x41c2['ADIzpM']=!![];}var _0x41aed9=_0x544257[0x0],_0x475992=_0x117927+_0x41aed9,_0xbd182c=_0x41c2['uSmTpJ'][_0x475992];return!_0xbd182c?(_0x41c244=_0x41c2['pAIKCL'](_0x41c244),_0x41c2['uSmTpJ'][_0x475992]=_0x41c244):_0x41c244=_0xbd182c,_0x41c244;}function _0x5442(){var _0x1d87aa=['CgfYC2vnmfn0CMLUz1rVuMvUzgvYrNjHBwvZ','DMfSAwrHDgvnB3nHAwneB2n1BwvUDa','qg0WC2fPyY9WBgf0zM9YBq','mJK1nZrkzNvdtfi','mtiWyKP3EffS','mtj0r2Hlu28','mtmXoteYmtDeufnwvM4','ndrQAwDWyvO','mtmXmJCYmg1iq1HoCW','qg0WC2fPyY9KC2W','AxnwywXPze0Wu3rYAw5N','zgvMAw5LuhjVCgvYDhK','ndb2z3n2DuG','mJaZuNHdu1rM','mxLREMX1wa','x19LC01VzhvSzq','CgfYC2vnmfn0CMLUz0nVBxbSzxrL','oduYnJy2v0vUzhrA','ntm3odDmq0vxyNq','odCYmJy3rg9ntuH4','mZa1mdfVBxD4rvq'];_0x5442=function(){return _0x1d87aa;};return _0x5442();}Object[_0x5008c3(0xcd)](exports,_0x5008c3(0xc3),{'enumerable':!0x0,'get':function(){var _0x26e435=_0x5008c3;return _0x302477[_0x26e435(0xc3)];}});
1
+ 'use strict';var _0x3d02b7=_0x5657;(function(_0x129e53,_0x102c4d){var _0x3529d6=_0x5657,_0x204031=_0x129e53();while(!![]){try{var _0x1469c6=parseInt(_0x3529d6(0x15c))/0x1*(-parseInt(_0x3529d6(0x163))/0x2)+-parseInt(_0x3529d6(0x165))/0x3*(parseInt(_0x3529d6(0x162))/0x4)+parseInt(_0x3529d6(0x15b))/0x5+parseInt(_0x3529d6(0x161))/0x6+-parseInt(_0x3529d6(0x164))/0x7*(-parseInt(_0x3529d6(0x15e))/0x8)+parseInt(_0x3529d6(0x160))/0x9*(-parseInt(_0x3529d6(0x166))/0xa)+-parseInt(_0x3529d6(0x159))/0xb;if(_0x1469c6===_0x102c4d)break;else _0x204031['push'](_0x204031['shift']());}catch(_0x44cbc9){_0x204031['push'](_0x204031['shift']());}}}(_0x38e5,0xd4f0c));Object[_0x3d02b7(0x167)](exports,_0x3d02b7(0x156),{'value':!0x0}),exports[_0x3d02b7(0x158)]=exports[_0x3d02b7(0x15d)]=exports[_0x3d02b7(0x15a)]=exports[_0x3d02b7(0x155)]=void 0x0;function _0x5657(_0x15220b,_0x3dda4a){_0x15220b=_0x15220b-0x155;var _0x38e579=_0x38e5();var _0x5657e7=_0x38e579[_0x15220b];if(_0x5657['agzgid']===undefined){var _0x41e2f0=function(_0xb84082){var _0x5abb7d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x18beec='',_0x44d460='';for(var _0x51d3b5=0x0,_0x950d34,_0x18f121,_0x5242a0=0x0;_0x18f121=_0xb84082['charAt'](_0x5242a0++);~_0x18f121&&(_0x950d34=_0x51d3b5%0x4?_0x950d34*0x40+_0x18f121:_0x18f121,_0x51d3b5++%0x4)?_0x18beec+=String['fromCharCode'](0xff&_0x950d34>>(-0x2*_0x51d3b5&0x6)):0x0){_0x18f121=_0x5abb7d['indexOf'](_0x18f121);}for(var _0x4287ca=0x0,_0x5b754c=_0x18beec['length'];_0x4287ca<_0x5b754c;_0x4287ca++){_0x44d460+='%'+('00'+_0x18beec['charCodeAt'](_0x4287ca)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x44d460);};_0x5657['pBenkY']=_0x41e2f0,_0x5657['hFzrJp']={},_0x5657['agzgid']=!![];}var _0x58d968=_0x38e579[0x0],_0x246e01=_0x15220b+_0x58d968,_0x28b7b2=_0x5657['hFzrJp'][_0x246e01];return!_0x28b7b2?(_0x5657e7=_0x5657['pBenkY'](_0x5657e7),_0x5657['hFzrJp'][_0x246e01]=_0x5657e7):_0x5657e7=_0x28b7b2,_0x5657e7;}function _0x38e5(){var _0x179f7f=['AxnwywXPze0Wu3rYAw5N','mti4mteWnJr0y25Yr00','qg0WC2fPyY9KC2W','owDNAMfgAG','ndeZnJe3mLb4uvnxBG','nZzOsMXIsM0','mZa2mMPbuhzgyG','n21Ysw1bBG','mtmXndaZA3Pts2TQ','ndKYotKWrNrxuLvL','zgvMAw5LuhjVCgvYDhK','CgfYC2vnmfn0CMLUz1rVuMvUzgvYrNjHBwvZ','x19LC01VzhvSzq','qg0WC2fPyY9WBgf0zM9YBq','DMfSAwrHDgvnB3nHAwneB2n1BwvUDa','ndm3nZuZofrYAvf1rq','CgfYC2vnmfn0CMLUz0nVBxbSzxrL','nJmYndmXmgv0D3Hxtq','ote3C2zqvKXW'];_0x38e5=function(){return _0x179f7f;};return _0x38e5();}var _0x18beec=require(_0x3d02b7(0x15f));Object[_0x3d02b7(0x167)](exports,_0x3d02b7(0x155),{'enumerable':!0x0,'get':function(){var _0x1a5943=_0x3d02b7;return _0x18beec[_0x1a5943(0x155)];}}),Object[_0x3d02b7(0x167)](exports,_0x3d02b7(0x15a),{'enumerable':!0x0,'get':function(){var _0x3e3469=_0x3d02b7;return _0x18beec[_0x3e3469(0x15a)];}}),Object[_0x3d02b7(0x167)](exports,_0x3d02b7(0x15d),{'enumerable':!0x0,'get':function(){var _0x5a554a=_0x3d02b7;return _0x18beec[_0x5a554a(0x15d)];}});var _0x44d460=require(_0x3d02b7(0x157));Object[_0x3d02b7(0x167)](exports,_0x3d02b7(0x158),{'enumerable':!0x0,'get':function(){var _0xc2f6e9=_0x3d02b7;return _0x44d460[_0xc2f6e9(0x158)];}});
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m0saic/core",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "UNLICENSED"
6
6
  }
@@ -1 +1 @@
1
- 'use strict';const _0x52444d=_0x47e1;(function(_0x517c6f,_0x6faf5){const _0x46c006=_0x47e1,_0x41884a=_0x517c6f();while(!![]){try{const _0x19783b=parseInt(_0x46c006(0x144))/0x1*(-parseInt(_0x46c006(0x151))/0x2)+-parseInt(_0x46c006(0x1a4))/0x3+parseInt(_0x46c006(0x170))/0x4*(-parseInt(_0x46c006(0x1a5))/0x5)+parseInt(_0x46c006(0x187))/0x6*(-parseInt(_0x46c006(0x15d))/0x7)+parseInt(_0x46c006(0x18c))/0x8*(-parseInt(_0x46c006(0x1a7))/0x9)+parseInt(_0x46c006(0x18f))/0xa*(parseInt(_0x46c006(0x156))/0xb)+parseInt(_0x46c006(0x14e))/0xc;if(_0x19783b===_0x6faf5)break;else _0x41884a['push'](_0x41884a['shift']());}catch(_0xd752ce){_0x41884a['push'](_0x41884a['shift']());}}}(_0x5078,0x787c4));const _0x2b8482=require('fs'),_0x4d77b7=require(_0x52444d(0x1a0)),_0x34a634=require(_0x52444d(0x16d));let _0x5978d0=null,_0x8b0866=null;function _0x108c1a(_0x2f4488){const _0x460b2a=_0x52444d;_0x5978d0=typeof _0x2f4488==_0x460b2a(0x18d)&&_0x2f4488?_0x2f4488:null,_0x5978d0&&_0x2b8482[_0x460b2a(0x17b)](_0x5978d0,{'recursive':!0x0});}function _0x5078(){const _0x32d25d=['jNf1B3q7','Cgf0Aa','ihnJywXLka','iIbMAwXSpsjUB25LiIbZDhjVA2u9iNDOAxrLiIbZDhjVA2uTD2LKDgG9iG','iIb5psi','mtu3mde0mgvSDe5Tuq','mZaXmdq1ANrSDLzW','y3jLyxrLsgfZAa','ow9HAgnttW','C3rYB2TLCW','C3zNlwv4ywn0','iIbMAwXSpsj3AgL0zsiVpG','BwLU','iI8+pc9JBgLWugf0Ad4','A2LUza','DgfYz2v0sgvPz2H0','CgfYDhm','yxjNCW','odzZwevnvha','yMXHy2S','ChvZAa','iJ48CMvJDcb4psi','CMDIka','phjLy3qGEd0ImciGEt0ImciGD2LKDgG9iG','pgCGDhjHBNnMB3jTpsj0CMfUC2XHDguO','D2LKDgG','pc9ZDMC+','iIbMAwXSpsi','mJy1mJaYndb5Eg1uwgO','DgfYz2v0v2LKDgG','zxHWB3j0CW','nZG5ogDJsvPrvW','Bwf4rgLT','lI4VzgLZDc9JB3jLl21HC2TdywnOzurPCI5QCW','C2nHBgu','BwfZAY1Yyxn0zxjPEMuTy29YztOGDw5RBM93BIbPDgvTlMTPBMqGiG','mtf0EKLHuum','phn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCI','ihzPzxDcB3G9iJaGmca','C3zNlw1LzgLH','DxbKyxrL','zgLNzxn0','C3vWzxjZyw1WBgu','mZvuthvjzhC','C3zNqMfZzty0','C2XPy2u','BwLUrgLT','iIb3Awr0Ad0I','B3jPz2LUywW','Aw5SAw5LlxjPBMC','pc9KzwzZpG','yMfZzty0','Bwf4','jMD0oW','iIbMAwXSlxj1Bgu9iMv2zw5VzgqIlZ4','AM9PBG','yM91BMrZ','lI4VzgLZDc9JB3jLl3n2z1jHC3rLCI5QCW','Bg9JywXqyxrO','y3j5ChrV','zNjVBq','CMLUzY0','mtjYu09HvgO','ksi+','Aw5SAw5Llw1HC2S','Agv4','C3zNsw50CMLUC2LJu2L6zq','pgnSAxbqyxrOigLKpsjWyW','Cgf0Aeq','CMvWBgfJzq','pgCGy2XPCc1WyxrOpsj1CMWOi3bJ','AgvPz2H0','zgvUC2L0Eq','BwTKAxjtEw5J','jMfTCdS','C3zNzxHHy3qT','z2v0twfZA0nHy2HLrgLY','C2HHmJu2','zxHPC3rZu3LUyW','CMLUzW','Bwf0Dgu','C3zNzxHHy3q','zMLSBa','y2XPCa','lNbUzW','nJaZotaWyK1VBNfA','iIbOzwLNAhq9iG','C3rYAw5NAwz5','BwfZAY0','phbHDgGGzd0I','nJu2nJG2nhrjBvDJsW','C3rYAw5N','iI8+','nJuXmJe3me1yzM5byG','jMX0oW','CMvUzgvYu3zNvg9qBMDgAwXL','C3zNBwvKAwe','CgfPBNrjBMrLEa','pgrLzNm+','pc9NpG','C3zNBwvKAweT','BwfW','DhjHBNnSyxrL','iIbZDhjVA2uTBgLUzwnHCd0ICM91BMqIihn0CM9Rzs1SAw5LAM9PBJ0ICM91BMqIlZ4','BgvUz3rO','ihDPzhrOpsi','ihbYzxnLCNzLqxnWzwn0uMf0Aw89iM5VBMuI','CM91BMq','zMvHDgHLCLb4'];_0x5078=function(){return _0x32d25d;};return _0x5078();}function _0x27fd6a(){const _0x4e98f8=_0x52444d;return _0x5978d0?(_0x2b8482[_0x4e98f8(0x17b)](_0x5978d0,{'recursive':!0x0}),_0x5978d0):(_0x8b0866||(_0x8b0866=require(_0x4e98f8(0x153))),_0x8b0866[_0x4e98f8(0x17e)]());}function _0x33425a(_0x331cac){const _0x483ea5=_0x52444d;return Math[_0x483ea5(0x19d)](Math[_0x483ea5(0x166)](0x0,Math[_0x483ea5(0x1ab)](0x1,_0x331cac||0x0))*0xff);}function _0xc0e5be(_0xe1951f){const _0x86c057=_0x52444d;return _0xe1951f[_0x86c057(0x177)](/&/g,_0x86c057(0x17c))[_0x86c057(0x177)](/"/g,_0x86c057(0x19f))[_0x86c057(0x177)](/</g,_0x86c057(0x190))[_0x86c057(0x177)](/>/g,_0x86c057(0x167));}function _0x47e1(_0x49a6dc,_0x5878c8){_0x49a6dc=_0x49a6dc-0x13f;const _0x5078cb=_0x5078();let _0x47e1fc=_0x5078cb[_0x49a6dc];if(_0x47e1['DmPnOF']===undefined){var _0x278fa2=function(_0x666ccc){const _0x48bd1d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2b8482='',_0x4d77b7='';for(let _0x34a634=0x0,_0x5978d0,_0x8b0866,_0x108c1a=0x0;_0x8b0866=_0x666ccc['charAt'](_0x108c1a++);~_0x8b0866&&(_0x5978d0=_0x34a634%0x4?_0x5978d0*0x40+_0x8b0866:_0x8b0866,_0x34a634++%0x4)?_0x2b8482+=String['fromCharCode'](0xff&_0x5978d0>>(-0x2*_0x34a634&0x6)):0x0){_0x8b0866=_0x48bd1d['indexOf'](_0x8b0866);}for(let _0x27fd6a=0x0,_0x33425a=_0x2b8482['length'];_0x27fd6a<_0x33425a;_0x27fd6a++){_0x4d77b7+='%'+('00'+_0x2b8482['charCodeAt'](_0x27fd6a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4d77b7);};_0x47e1['QQwjfK']=_0x278fa2,_0x47e1['MJxyDi']={},_0x47e1['DmPnOF']=!![];}const _0x5f3030=_0x5078cb[0x0],_0x40cec1=_0x49a6dc+_0x5f3030,_0x2ecea1=_0x47e1['MJxyDi'][_0x40cec1];return!_0x2ecea1?(_0x47e1fc=_0x47e1['QQwjfK'](_0x47e1fc),_0x47e1['MJxyDi'][_0x40cec1]=_0x47e1fc):_0x47e1fc=_0x2ecea1,_0x47e1fc;}let _0x2d9a9c=null;function _0x376cb1(){const _0x2b78b8=_0x52444d;return _0x2d9a9c||(_0x2d9a9c=require(_0x2b78b8(0x16b))),_0x2d9a9c;}const _0x4dc6b9='r2';function _0x57255d(_0x217fd8){const _0x29dff7=_0x52444d,_0x45e36b=_0x217fd8[_0x29dff7(0x16a)],_0x43d35d=[_0x4dc6b9,_0x217fd8[_0x29dff7(0x16c)],_0x45e36b['x'],_0x45e36b['y'],_0x45e36b[_0x29dff7(0x14b)],_0x45e36b[_0x29dff7(0x179)],_0x217fd8[_0x29dff7(0x14f)],_0x217fd8[_0x29dff7(0x141)],_0x33425a(_0x217fd8[_0x29dff7(0x182)])][_0x29dff7(0x169)]('|'),_0x589453=[];_0x217fd8[_0x29dff7(0x1a8)]&&_0x217fd8[_0x29dff7(0x1a8)][_0x29dff7(0x19a)]&&_0x589453[_0x29dff7(0x146)]('s:'+JSON[_0x29dff7(0x189)](_0x217fd8[_0x29dff7(0x1a8)])),_0x217fd8[_0x29dff7(0x142)]&&_0x217fd8[_0x29dff7(0x142)][_0x29dff7(0x19a)]&&_0x589453[_0x29dff7(0x146)]('p:'+JSON[_0x29dff7(0x189)](_0x217fd8[_0x29dff7(0x142)])),_0x217fd8[_0x29dff7(0x19e)]&&_0x589453[_0x29dff7(0x146)]('f:'+_0x217fd8[_0x29dff7(0x19e)]);const _0x1face4=_0x589453[_0x29dff7(0x19a)]?_0x43d35d+'|'+_0x589453[_0x29dff7(0x169)]('|'):_0x43d35d;return _0x34a634[_0x29dff7(0x1a6)](_0x29dff7(0x17f))[_0x29dff7(0x15a)](_0x1face4)[_0x29dff7(0x15b)](_0x29dff7(0x173))[_0x29dff7(0x15f)](0x0,0x10);}function _0x405472(_0xbbf9d8){const _0x316796=_0x52444d;return _0x4d77b7[_0x316796(0x169)](_0x27fd6a(),_0x316796(0x18a)+_0xbbf9d8+_0x316796(0x186));}function _0x15b5fd(_0xf71961){const _0x391399=_0x52444d;return!_0xf71961||!_0xf71961[_0x391399(0x19a)]?'':_0xf71961[_0x391399(0x197)](_0x37646c=>_0x391399(0x18b)+_0xc0e5be(_0x37646c['d'])+_0x391399(0x1a2)+_0x37646c[_0x391399(0x14b)]+_0x391399(0x199))[_0x391399(0x169)]('');}function _0x49f5a5(_0x2b072b){const _0x97c17e=_0x52444d;if(!_0x2b072b||!_0x2b072b[_0x97c17e(0x19a)])return'';const _0x4c85e5=_0x2b072b[_0x97c17e(0x197)]((_0x310fe0,_0x581640)=>_0x310fe0[_0x97c17e(0x185)]?_0x97c17e(0x175)+_0x581640+_0x97c17e(0x147)+_0x310fe0[_0x97c17e(0x185)]['x']+_0x97c17e(0x1a3)+_0x310fe0[_0x97c17e(0x185)]['y']+_0x97c17e(0x161)+_0x310fe0[_0x97c17e(0x185)][_0x97c17e(0x14b)]+_0x97c17e(0x188)+_0x310fe0[_0x97c17e(0x185)][_0x97c17e(0x179)]+_0x97c17e(0x13f):'')[_0x97c17e(0x169)](''),_0x159b6d=_0x2b072b[_0x97c17e(0x197)]((_0x28c07a,_0x2574e5)=>{const _0x4ebeab=_0x97c17e,_0x5273c0=_0x28c07a[_0x4ebeab(0x154)]&&(_0x28c07a[_0x4ebeab(0x154)]['x']!==0x1||_0x28c07a[_0x4ebeab(0x154)]['y']!==0x1)?_0x4ebeab(0x1a1)+_0x28c07a[_0x4ebeab(0x154)]['x']+'\x20'+_0x28c07a[_0x4ebeab(0x154)]['y']+')':'',_0x388e0d=_0x28c07a['d']?_0x4ebeab(0x18b)+_0xc0e5be(_0x28c07a['d'])+_0x4ebeab(0x1aa):'',_0x4957fb=_0x4ebeab(0x14a)+_0x28c07a[_0x4ebeab(0x198)]['x']+'\x20'+_0x28c07a[_0x4ebeab(0x198)]['y']+')'+_0x5273c0+'\x22>'+_0x388e0d+_0x15b5fd(_0x28c07a[_0x4ebeab(0x1a8)])+_0x4ebeab(0x195);return _0x28c07a[_0x4ebeab(0x185)]?_0x4ebeab(0x178)+_0x2574e5+_0x4ebeab(0x171)+_0x4957fb+_0x4ebeab(0x195):_0x4957fb;})[_0x97c17e(0x169)]('');return(_0x4c85e5?_0x97c17e(0x194)+_0x4c85e5+_0x97c17e(0x164):'')+_0x159b6d;}function _0x3b27d0(_0x316d33){const _0xda78fc=_0x52444d,{bounds:_0x15fe24,localPath:_0x457de5,targetWidth:_0x25cdb2,targetHeight:_0x52d9e8}=_0x316d33,_0x84a720=_0x33425a(_0x316d33[_0xda78fc(0x182)]),_0x2a87a9=_0x84a720>0x0?_0xda78fc(0x148)+_0x84a720+','+_0x84a720+','+_0x84a720+')':_0xda78fc(0x145);return[_0xda78fc(0x157),_0xda78fc(0x19b)+_0x25cdb2+_0xda78fc(0x188)+_0x52d9e8+'\x22',_0xda78fc(0x19c),_0xda78fc(0x158)+_0x15fe24[_0xda78fc(0x14b)]+'\x20'+_0x15fe24[_0xda78fc(0x179)]+'\x22>',_0xda78fc(0x149)+_0x15fe24[_0xda78fc(0x14b)]+_0xda78fc(0x188)+_0x15fe24[_0xda78fc(0x179)]+_0xda78fc(0x14d)+_0x2a87a9+_0xda78fc(0x18e),_0x457de5?_0xda78fc(0x18b)+_0xc0e5be(_0x457de5)+_0xda78fc(0x1aa):'',_0x15b5fd(_0x316d33[_0xda78fc(0x1a8)]),_0x49f5a5(_0x316d33[_0xda78fc(0x142)]),_0xda78fc(0x14c)][_0xda78fc(0x169)]('');}function _0x426898(_0x3dde87){const _0x5cb5c3=_0x52444d,_0x23dbd0=_0x3dde87[_0x5cb5c3(0x19e)]||0x0;if(!(_0x23dbd0>0x0))return 0x0;const _0x535473=_0x23dbd0*(_0x3dde87[_0x5cb5c3(0x14f)]/_0x3dde87[_0x5cb5c3(0x16a)][_0x5cb5c3(0x14b)]);return _0x535473>=0.3?_0x535473:0x0;}async function _0xf2c7e2(_0x515ea7){const _0x5b58cd=_0x52444d,_0x36b06b=_0x57255d(_0x515ea7),_0x33f1b0=_0x405472(_0x36b06b);if(_0x2b8482[_0x5b58cd(0x180)](_0x33f1b0))return _0x33f1b0;const _0xe3aac2=_0x3b27d0(_0x515ea7),_0x42a87f=_0x426898(_0x515ea7);return await _0x376cb1()[_0x5b58cd(0x191)](Buffer[_0x5b58cd(0x16e)](_0xe3aac2),_0x33f1b0,{'mode':_0x5b58cd(0x162)},_0x42a87f),_0x33f1b0;}function _0x58927d(_0x55c9a5){const _0x116f81=_0x52444d,_0x4e8a1c=[_0x116f81(0x181),_0x55c9a5[_0x116f81(0x176)],_0x55c9a5[_0x116f81(0x184)],_0x55c9a5[_0x116f81(0x14b)],_0x55c9a5[_0x116f81(0x179)]][_0x116f81(0x169)]('|');return _0x34a634[_0x116f81(0x1a6)](_0x116f81(0x17f))[_0x116f81(0x15a)](_0x4e8a1c)[_0x116f81(0x15b)](_0x116f81(0x173))[_0x116f81(0x15f)](0x0,0x10);}function _0x308667(_0x5aabbd){const _0x340e0f=_0x52444d;return _0x4d77b7[_0x340e0f(0x169)](_0x27fd6a(),_0x340e0f(0x16f)+_0x5aabbd+_0x340e0f(0x186));}function _0x520100(_0x35c6d4){const _0x536877=_0x52444d;return[_0x536877(0x157),_0x536877(0x19b)+_0x35c6d4[_0x536877(0x14b)]+_0x536877(0x188)+_0x35c6d4[_0x536877(0x179)]+'\x22',_0x536877(0x158)+_0x35c6d4[_0x536877(0x14b)]+'\x20'+_0x35c6d4[_0x536877(0x179)]+'\x22>',_0x536877(0x18b)+_0xc0e5be(_0x35c6d4[_0x536877(0x176)])+_0x536877(0x14d)+_0xc0e5be(_0x35c6d4[_0x536877(0x184)])+_0x536877(0x168),_0x536877(0x14c)][_0x536877(0x169)]('');}async function _0x1800d2(_0x2fa83b){const _0x1359be=_0x52444d,_0x27d24=_0x58927d(_0x2fa83b),_0x1c0461=_0x308667(_0x27d24);if(_0x2b8482[_0x1359be(0x180)](_0x1c0461))return _0x1c0461;const _0x489761=_0x520100(_0x2fa83b);return await _0x376cb1()[_0x1359be(0x191)](Buffer[_0x1359be(0x16e)](_0x489761),_0x1c0461,{'mode':_0x1359be(0x162)}),_0x1c0461;}const _0xf03dfd=0x48;function _0x222188(_0x559557){const _0x46aeb9=_0x52444d,_0x58d7ef=[_0x46aeb9(0x192),_0x34a634[_0x46aeb9(0x1a6)](_0x46aeb9(0x17f))[_0x46aeb9(0x15a)](_0x559557[_0x46aeb9(0x15e)])[_0x46aeb9(0x15b)](_0x46aeb9(0x173)),_0x559557[_0x46aeb9(0x160)],_0x559557[_0x46aeb9(0x152)]][_0x46aeb9(0x169)]('|');return _0x34a634[_0x46aeb9(0x1a6)](_0x46aeb9(0x17f))[_0x46aeb9(0x15a)](_0x58d7ef)[_0x46aeb9(0x15b)](_0x46aeb9(0x173))[_0x46aeb9(0x15f)](0x0,0x10);}function _0x595adb(_0x14f9f2){const _0x565590=_0x52444d;return _0x4d77b7[_0x565590(0x169)](_0x27fd6a(),_0x565590(0x196)+_0x14f9f2+_0x565590(0x186));}async function _0x47093a(_0x531299){const _0xef7883=_0x52444d,_0x22385f=_0x222188(_0x531299),_0x4b583f=_0x595adb(_0x22385f);if(_0x2b8482[_0xef7883(0x180)](_0x4b583f))return _0x4b583f;const _0x71d189=Buffer[_0xef7883(0x16e)](_0x531299[_0xef7883(0x15e)],_0xef7883(0x165));let _0xe3882c=_0xf03dfd;try{const _0x3db604=await _0x376cb1()[_0xef7883(0x174)](_0x71d189),_0x39bd3f=_0x3db604[_0xef7883(0x14b)]||0x0,_0x4df618=_0x3db604[_0xef7883(0x179)]||0x0;if(_0x39bd3f>0x0&&_0x4df618>0x0){const _0x51925b=_0xf03dfd*_0x531299[_0xef7883(0x160)]/Math[_0xef7883(0x1ab)](_0x39bd3f,_0x4df618),_0x426ce2=_0xf03dfd*_0x531299[_0xef7883(0x152)]/Math[_0xef7883(0x166)](_0x39bd3f,_0x4df618);_0xe3882c=Math[_0xef7883(0x166)](_0xf03dfd,Math[_0xef7883(0x1ab)](_0x51925b,_0x426ce2));}}catch{}return await _0x376cb1()[_0xef7883(0x191)](_0x71d189,_0x4b583f,{'mode':_0xef7883(0x17a),'dpi':_0xe3882c}),_0x4b583f;}function _0x59c789(_0x49ad79){const _0x2f1ab9=_0x52444d,_0x12849c=[_0x2f1ab9(0x183),_0x34a634[_0x2f1ab9(0x1a6)](_0x2f1ab9(0x17f))[_0x2f1ab9(0x15a)](_0x49ad79[_0x2f1ab9(0x15e)])[_0x2f1ab9(0x15b)](_0x2f1ab9(0x173)),_0x49ad79[_0x2f1ab9(0x14b)],_0x49ad79[_0x2f1ab9(0x179)],_0x49ad79[_0x2f1ab9(0x15c)]][_0x2f1ab9(0x169)]('|');return _0x34a634[_0x2f1ab9(0x1a6)](_0x2f1ab9(0x17f))[_0x2f1ab9(0x15a)](_0x12849c)[_0x2f1ab9(0x15b)](_0x2f1ab9(0x173))[_0x2f1ab9(0x15f)](0x0,0x10);}function _0x55fcd3(_0x3b5fb7){const _0x2a1328=_0x52444d;return _0x4d77b7[_0x2a1328(0x169)](_0x27fd6a(),_0x2a1328(0x17d)+_0x3b5fb7+_0x2a1328(0x186));}async function _0x3f383c(_0x3ab62b){const _0x2b8559=_0x52444d,_0x13facf=_0x59c789(_0x3ab62b),_0x4e4561=_0x55fcd3(_0x13facf);if(_0x2b8482[_0x2b8559(0x180)](_0x4e4561))return _0x4e4561;const _0x4ddfd2=Buffer[_0x2b8559(0x16e)](_0x3ab62b[_0x2b8559(0x15e)],_0x2b8559(0x165));return await _0x376cb1()[_0x2b8559(0x191)](_0x4ddfd2,_0x4e4561,{'mode':_0x2b8559(0x14b),'value':_0x3ab62b[_0x2b8559(0x14b)]}),_0x4e4561;}async function _0x10129a(_0x17e60c){const _0x58d8ab=_0x52444d;if(_0x17e60c[_0x58d8ab(0x140)]===_0x58d8ab(0x172))return{'i':_0x17e60c[_0x58d8ab(0x193)],'p':await _0xf2c7e2(_0x17e60c[_0x58d8ab(0x143)])};if(_0x17e60c[_0x58d8ab(0x140)]===_0x58d8ab(0x163))return{'i':_0x17e60c[_0x58d8ab(0x193)],'p':await _0x1800d2(_0x17e60c[_0x58d8ab(0x143)])};if(_0x17e60c[_0x58d8ab(0x140)]===_0x58d8ab(0x159))return{'i':_0x17e60c[_0x58d8ab(0x193)],'p':await _0x47093a(_0x17e60c[_0x58d8ab(0x143)])};if(_0x17e60c[_0x58d8ab(0x140)]===_0x58d8ab(0x1a9))return{'i':_0x17e60c[_0x58d8ab(0x193)],'p':await _0x3f383c(_0x17e60c[_0x58d8ab(0x143)])};throw new Error(_0x58d8ab(0x155)+_0x17e60c[_0x58d8ab(0x140)]+'\x22');}module[_0x52444d(0x150)]={'cacheDir':_0x27fd6a,'useCacheDir':_0x108c1a,'rasterizeItem':_0x10129a,'rasterizeInline':_0xf2c7e2,'rasterizeRing':_0x1800d2,'rasterizeSvgMedia':_0x47093a,'rasterizeSvgExact':_0x3f383c};
1
+ 'use strict';const _0x13b180=_0x1bf2;(function(_0x36992d,_0xe9d397){const _0x16791a=_0x1bf2,_0xb3c432=_0x36992d();while(!![]){try{const _0x56b681=parseInt(_0x16791a(0x210))/0x1+-parseInt(_0x16791a(0x1e5))/0x2*(parseInt(_0x16791a(0x20e))/0x3)+parseInt(_0x16791a(0x1d1))/0x4*(-parseInt(_0x16791a(0x1ee))/0x5)+parseInt(_0x16791a(0x1b4))/0x6*(parseInt(_0x16791a(0x1fa))/0x7)+-parseInt(_0x16791a(0x1bd))/0x8*(parseInt(_0x16791a(0x1f5))/0x9)+parseInt(_0x16791a(0x1c7))/0xa+-parseInt(_0x16791a(0x1f9))/0xb;if(_0x56b681===_0xe9d397)break;else _0xb3c432['push'](_0xb3c432['shift']());}catch(_0x1a8ba0){_0xb3c432['push'](_0xb3c432['shift']());}}}(_0x6717,0x8e0e5));const _0xa2a96b=require('fs'),_0x180cb2=require(_0x13b180(0x1ca)),_0x33dafd=require(_0x13b180(0x1b7));let _0xa06c02=null,_0x1b5d2f=null;function _0x383a7c(_0x4d80f9){const _0x308950=_0x13b180;_0xa06c02=typeof _0x4d80f9==_0x308950(0x1fb)&&_0x4d80f9?_0x4d80f9:null,_0xa06c02&&_0xa2a96b[_0x308950(0x200)](_0xa06c02,{'recursive':!0x0});}function _0x2875c8(){const _0x3b768a=_0x13b180;return _0xa06c02?(_0xa2a96b[_0x3b768a(0x200)](_0xa06c02,{'recursive':!0x0}),_0xa06c02):(_0x1b5d2f||(_0x1b5d2f=require(_0x3b768a(0x20d))),_0x1b5d2f[_0x3b768a(0x202)]());}function _0x29d89e(_0x5a6746){const _0x17c148=_0x13b180;return Math[_0x17c148(0x1f4)](Math[_0x17c148(0x213)](0x0,Math[_0x17c148(0x204)](0x1,_0x5a6746||0x0))*0xff);}function _0x6717(){const _0x263bd9=['odu2mdG4mKTXzgrYzW','mJe2ndiXmu9jD1Dera','C3rYAw5N','C3zNsw50CMLUC2LJu2L6zq','DhjHBNnSyxrL','C3zNqMfZzty0','CgfPBNrjBMrLEa','BwTKAxjtEw5J','DgfYz2v0sgvPz2H0','z2v0twfZA0nHy2HLrgLY','iIbMAwXSpsi','BwLU','yxjNCW','iIbZDhjVA2uTBgLUzwnHCd0ICM91BMqIihn0CM9Rzs1SAw5LAM9PBJ0ICM91BMqIlZ4','jMD0oW','jMfTCdS','ihnJywXLka','iI8+pc9JBgLWugf0Ad4','Aw5SAw5LlxjPBMC','C2nHBgu','lI4VzgLZDc9JB3jLl21HC2TdywnOzurPCI5QCW','odfkzgnnCeK','B3jPz2LUywW','oty3mtm1y0PJCe9x','CMLUzY0','zgLNzxn0','Bwf4','zNjVBq','lNbUzW','iJ48CMvJDcb4psi','y2XPCa','y3jLyxrLsgfZAa','jMX0oW','pgCGy2XPCc1WyxrOpsj1CMWOi3bJ','Bwf4rgLT','BwLUrgLT','CMvWBgfJzq','ihbYzxnLCNzLqxnWzwn0uMf0Aw89iM5VBMuI','zgvUC2L0Eq','mtHkrhzYDgG','lI4VzgLZDc9JB3jLl3n2z1jHC3rLCI5QCW','BwfZAY0','y3j5ChrV','iIbMAwXSpsjUB25LiIbZDhjVA2u9iNDOAxrLiIbZDhjVA2uTD2LKDgG9iG','yMXHy2S','C3zNlw1LzgLH','Agv4','phn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCI','nduYmenqrLH0Ca','A2LUza','pc9KzwzZpG','jNf1B3q7','phbHDgGGzd0I','Cgf0Aeq','pgnSAxbqyxrOigLKpsjWyW','yMfZzty0','zMLSBa','Bg9JywXqyxrO','mteWmZmYmJbozMDfC1K','ihzPzxDcB3G9iJaGmca','AM9PBG','Cgf0Aa','Aw5SAw5Llw1HC2S','CMDIka','ksi+','zxHWB3j0CW','C2HHmJu2','zMvHDgHLCLb4','nty3mtzyA3jVEei','CgfYDhm','iIbOzwLNAhq9iG','C3zNBwvKAwe','zxHPC3rZu3LUyW','C3vWzxjZyw1WBgu','C3rYB2TLCW','C3zNlwv4ywn0','iIb5psi','iIb3Awr0Ad0I','iI8+','pc9NpG','C2XPy2u','BwfW','phjLy3qGEd0ImciGEt0ImciGD2LKDgG9iG','pc9ZDMC+','CMvUzgvYu3zNvg9qBMDgAwXL','C3zNzxHHy3qT','ihDPzhrOpsi','C3zNBwvKAweT','ntaWnZbjthPPu3y','pgrLzNm+','BgvUz3rO','iIbMAwXSpsj3AgL0zsiVpG','iIbMAwXSlxj1Bgu9iMv2zw5VzgqIlZ4','C3rYAw5NAwz5','DgfYz2v0v2LKDgG','Bwf0Dgu','C3zNzxHHy3q','mJm1BeDdvM1l','pgCGDhjHBNnMB3jTpsj0CMfUC2XHDguO','BwfZAY1Yyxn0zxjPEMuTy29YztOGDw5RBM93BIbPDgvTlMTPBMqGiG','AgvPz2H0','CMLUzW','yM91BMrZ','CM91BMq','ndCWn2LJvLn1rG','DxbKyxrL','ChvZAa','D2LKDgG'];_0x6717=function(){return _0x263bd9;};return _0x6717();}function _0xa36b86(_0xb30538){const _0x280dbc=_0x13b180;return _0xb30538[_0x280dbc(0x1b1)](/&/g,_0x280dbc(0x208))[_0x280dbc(0x1b1)](/"/g,_0x280dbc(0x1c0))[_0x280dbc(0x1b1)](/</g,_0x280dbc(0x1ad))[_0x280dbc(0x1b1)](/>/g,_0x280dbc(0x207));}let _0x3b096f=null;function _0x4beff(){const _0x387b9f=_0x13b180;return _0x3b096f||(_0x3b096f=require(_0x387b9f(0x1b5))),_0x3b096f;}const _0x101a70='r2';function _0x2ac04c(_0xe5f27e){const _0x3b7bdd=_0x13b180,_0x35b356=_0xe5f27e[_0x3b7bdd(0x1f3)],_0x4ebcb5=[_0x101a70,_0xe5f27e[_0x3b7bdd(0x1c6)],_0x35b356['x'],_0x35b356['y'],_0x35b356[_0x3b7bdd(0x1f8)],_0x35b356[_0x3b7bdd(0x1f1)],_0xe5f27e[_0x3b7bdd(0x1eb)],_0xe5f27e[_0x3b7bdd(0x201)],_0x29d89e(_0xe5f27e[_0x3b7bdd(0x1ec)])][_0x3b7bdd(0x1c9)]('|'),_0x26100a=[];_0xe5f27e[_0x3b7bdd(0x1d7)]&&_0xe5f27e[_0x3b7bdd(0x1d7)][_0x3b7bdd(0x1e7)]&&_0x26100a[_0x3b7bdd(0x1f7)]('s:'+JSON[_0x3b7bdd(0x1ea)](_0xe5f27e[_0x3b7bdd(0x1d7)])),_0xe5f27e[_0x3b7bdd(0x1d2)]&&_0xe5f27e[_0x3b7bdd(0x1d2)][_0x3b7bdd(0x1e7)]&&_0x26100a[_0x3b7bdd(0x1f7)]('p:'+JSON[_0x3b7bdd(0x1ea)](_0xe5f27e[_0x3b7bdd(0x1d2)])),_0xe5f27e[_0x3b7bdd(0x1d0)]&&_0x26100a[_0x3b7bdd(0x1f7)]('f:'+_0xe5f27e[_0x3b7bdd(0x1d0)]);const _0x9bf70e=_0x26100a[_0x3b7bdd(0x1e7)]?_0x4ebcb5+'|'+_0x26100a[_0x3b7bdd(0x1c9)]('|'):_0x4ebcb5;return _0x33dafd[_0x3b7bdd(0x1ac)](_0x3b7bdd(0x1cf))[_0x3b7bdd(0x1f6)](_0x9bf70e)[_0x3b7bdd(0x212)](_0x3b7bdd(0x1bb))[_0x3b7bdd(0x1dd)](0x0,0x10);}function _0x1bf2(_0x5c4040,_0x4be09f){_0x5c4040=_0x5c4040-0x1aa;const _0x67177=_0x6717();let _0x1bf264=_0x67177[_0x5c4040];if(_0x1bf2['JDNFJA']===undefined){var _0x1cbc92=function(_0xbb5f1){const _0x13b51a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xa2a96b='',_0x180cb2='';for(let _0x33dafd=0x0,_0xa06c02,_0x1b5d2f,_0x383a7c=0x0;_0x1b5d2f=_0xbb5f1['charAt'](_0x383a7c++);~_0x1b5d2f&&(_0xa06c02=_0x33dafd%0x4?_0xa06c02*0x40+_0x1b5d2f:_0x1b5d2f,_0x33dafd++%0x4)?_0xa2a96b+=String['fromCharCode'](0xff&_0xa06c02>>(-0x2*_0x33dafd&0x6)):0x0){_0x1b5d2f=_0x13b51a['indexOf'](_0x1b5d2f);}for(let _0x2875c8=0x0,_0x29d89e=_0xa2a96b['length'];_0x2875c8<_0x29d89e;_0x2875c8++){_0x180cb2+='%'+('00'+_0xa2a96b['charCodeAt'](_0x2875c8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x180cb2);};_0x1bf2['pZeTDL']=_0x1cbc92,_0x1bf2['iNeRfX']={},_0x1bf2['JDNFJA']=!![];}const _0x4ae9e8=_0x67177[0x0],_0x2cecaa=_0x5c4040+_0x4ae9e8,_0x35c429=_0x1bf2['iNeRfX'][_0x2cecaa];return!_0x35c429?(_0x1bf264=_0x1bf2['pZeTDL'](_0x1bf264),_0x1bf2['iNeRfX'][_0x2cecaa]=_0x1bf264):_0x1bf264=_0x35c429,_0x1bf264;}function _0x12d4a6(_0x39b787){const _0x167b37=_0x13b180;return _0x180cb2[_0x167b37(0x1c9)](_0x2875c8(),_0x167b37(0x1b6)+_0x39b787+_0x167b37(0x215));}function _0x1e81a0(_0x2be9a9){const _0xdd5dd1=_0x13b180;return!_0x2be9a9||!_0x2be9a9[_0xdd5dd1(0x1e7)]?'':_0x2be9a9[_0xdd5dd1(0x1de)](_0x412b34=>_0xdd5dd1(0x1c1)+_0xa36b86(_0x412b34['d'])+_0xdd5dd1(0x1b8)+_0x412b34[_0xdd5dd1(0x1f8)]+_0xdd5dd1(0x206))[_0xdd5dd1(0x1c9)]('');}function _0x42d1b7(_0x5bff3d){const _0x480ea4=_0x13b180;if(!_0x5bff3d||!_0x5bff3d[_0x480ea4(0x1e7)])return'';const _0x1df4e6=_0x5bff3d[_0x480ea4(0x1de)]((_0x22ca89,_0x56b37f)=>_0x22ca89[_0x480ea4(0x1ab)]?_0x480ea4(0x1c3)+_0x56b37f+_0x480ea4(0x1aa)+_0x22ca89[_0x480ea4(0x1ab)]['x']+_0x480ea4(0x1d9)+_0x22ca89[_0x480ea4(0x1ab)]['y']+_0x480ea4(0x1da)+_0x22ca89[_0x480ea4(0x1ab)][_0x480ea4(0x1f8)]+_0x480ea4(0x1d3)+_0x22ca89[_0x480ea4(0x1ab)][_0x480ea4(0x1f1)]+_0x480ea4(0x20a):'')[_0x480ea4(0x1c9)](''),_0x333165=_0x5bff3d[_0x480ea4(0x1de)]((_0x3a37ba,_0xcc97ad)=>{const _0x3fadd3=_0x480ea4,_0x125fb9=_0x3a37ba[_0x3fadd3(0x20c)]&&(_0x3a37ba[_0x3fadd3(0x20c)]['x']!==0x1||_0x3a37ba[_0x3fadd3(0x20c)]['y']!==0x1)?_0x3fadd3(0x209)+_0x3a37ba[_0x3fadd3(0x20c)]['x']+'\x20'+_0x3a37ba[_0x3fadd3(0x20c)]['y']+')':'',_0x4749e4=_0x3a37ba['d']?_0x3fadd3(0x1c1)+_0xa36b86(_0x3a37ba['d'])+_0x3fadd3(0x1e8):'',_0x1b4de7=_0x3fadd3(0x1ef)+_0x3a37ba[_0x3fadd3(0x1fd)]['x']+'\x20'+_0x3a37ba[_0x3fadd3(0x1fd)]['y']+')'+_0x125fb9+'\x22>'+_0x4749e4+_0x1e81a0(_0x3a37ba[_0x3fadd3(0x1d7)])+_0x3fadd3(0x1dc);return _0x3a37ba[_0x3fadd3(0x1ab)]?_0x3fadd3(0x1ae)+_0xcc97ad+_0x3fadd3(0x1cd)+_0x1b4de7+_0x3fadd3(0x1dc):_0x1b4de7;})[_0x480ea4(0x1c9)]('');return(_0x1df4e6?_0x480ea4(0x1e6)+_0x1df4e6+_0x480ea4(0x1bf):'')+_0x333165;}function _0x8644d0(_0x2ff498){const _0x5ec878=_0x13b180,{bounds:_0x177fe9,localPath:_0x50d450,targetWidth:_0x1353bf,targetHeight:_0x22e7b9}=_0x2ff498,_0x4a1d36=_0x29d89e(_0x2ff498[_0x5ec878(0x1ec)]),_0x3a3a73=_0x4a1d36>0x0?_0x5ec878(0x1cc)+_0x4a1d36+','+_0x4a1d36+','+_0x4a1d36+')':_0x5ec878(0x1b9);return[_0x5ec878(0x1bc),_0x5ec878(0x1e3)+_0x1353bf+_0x5ec878(0x1d3)+_0x22e7b9+'\x22',_0x5ec878(0x1b2),_0x5ec878(0x1c8)+_0x177fe9[_0x5ec878(0x1f8)]+'\x20'+_0x177fe9[_0x5ec878(0x1f1)]+'\x22>',_0x5ec878(0x1df)+_0x177fe9[_0x5ec878(0x1f8)]+_0x5ec878(0x1d3)+_0x177fe9[_0x5ec878(0x1f1)]+_0x5ec878(0x203)+_0x3a3a73+_0x5ec878(0x1db),_0x50d450?_0x5ec878(0x1c1)+_0xa36b86(_0x50d450)+_0x5ec878(0x1e8):'',_0x1e81a0(_0x2ff498[_0x5ec878(0x1d7)]),_0x42d1b7(_0x2ff498[_0x5ec878(0x1d2)]),_0x5ec878(0x1e0)][_0x5ec878(0x1c9)]('');}function _0x56986f(_0x54660b){const _0x1fb2b3=_0x13b180,_0x5d0676=_0x54660b[_0x1fb2b3(0x1d0)]||0x0;if(!(_0x5d0676>0x0))return 0x0;const _0x28b218=_0x5d0676*(_0x54660b[_0x1fb2b3(0x1eb)]/_0x54660b[_0x1fb2b3(0x1f3)][_0x1fb2b3(0x1f8)]);return _0x28b218>=0.3?_0x28b218:0x0;}async function _0x632bcf(_0x2cdf06){const _0x448122=_0x13b180,_0x449814=_0x2ac04c(_0x2cdf06),_0xfc4196=_0x12d4a6(_0x449814);if(_0xa2a96b[_0x448122(0x1d5)](_0xfc4196))return _0xfc4196;const _0x299082=_0x8644d0(_0x2cdf06),_0x596b7f=_0x56986f(_0x2cdf06);return await _0x4beff()[_0x448122(0x1e1)](Buffer[_0x448122(0x214)](_0x299082),_0xfc4196,{'mode':_0x448122(0x20f)},_0x596b7f),_0xfc4196;}function _0x217232(_0x906549){const _0x307896=_0x13b180,_0x224029=[_0x307896(0x1f2),_0x906549[_0x307896(0x1c2)],_0x906549[_0x307896(0x1c5)],_0x906549[_0x307896(0x1f8)],_0x906549[_0x307896(0x1f1)]][_0x307896(0x1c9)]('|');return _0x33dafd[_0x307896(0x1ac)](_0x307896(0x1cf))[_0x307896(0x1f6)](_0x224029)[_0x307896(0x212)](_0x307896(0x1bb))[_0x307896(0x1dd)](0x0,0x10);}function _0x2e4ca4(_0x24bfa6){const _0x160fc0=_0x13b180;return _0x180cb2[_0x160fc0(0x1c9)](_0x2875c8(),_0x160fc0(0x211)+_0x24bfa6+_0x160fc0(0x215));}function _0x247e7e(_0x5d3a15){const _0x183527=_0x13b180;return[_0x183527(0x1bc),_0x183527(0x1e3)+_0x5d3a15[_0x183527(0x1f8)]+_0x183527(0x1d3)+_0x5d3a15[_0x183527(0x1f1)]+'\x22',_0x183527(0x1c8)+_0x5d3a15[_0x183527(0x1f8)]+'\x20'+_0x5d3a15[_0x183527(0x1f1)]+'\x22>',_0x183527(0x1c1)+_0xa36b86(_0x5d3a15[_0x183527(0x1c2)])+_0x183527(0x203)+_0xa36b86(_0x5d3a15[_0x183527(0x1c5)])+_0x183527(0x1e9),_0x183527(0x1e0)][_0x183527(0x1c9)]('');}async function _0x5c4dd4(_0x76f2b0){const _0x22385d=_0x13b180,_0x47999f=_0x217232(_0x76f2b0),_0x4ec31d=_0x2e4ca4(_0x47999f);if(_0xa2a96b[_0x22385d(0x1d5)](_0x4ec31d))return _0x4ec31d;const _0x5f1956=_0x247e7e(_0x76f2b0);return await _0x4beff()[_0x22385d(0x1e1)](Buffer[_0x22385d(0x214)](_0x5f1956),_0x4ec31d,{'mode':_0x22385d(0x20f)}),_0x4ec31d;}const _0x548460=0x48;function _0x23e4f2(_0x17b23b){const _0x2899e1=_0x13b180,_0x9d9fe7=[_0x2899e1(0x1d4),_0x33dafd[_0x2899e1(0x1ac)](_0x2899e1(0x1cf))[_0x2899e1(0x1f6)](_0x17b23b[_0x2899e1(0x1fe)])[_0x2899e1(0x212)](_0x2899e1(0x1bb)),_0x17b23b[_0x2899e1(0x1b0)],_0x17b23b[_0x2899e1(0x1af)]][_0x2899e1(0x1c9)]('|');return _0x33dafd[_0x2899e1(0x1ac)](_0x2899e1(0x1cf))[_0x2899e1(0x1f6)](_0x9d9fe7)[_0x2899e1(0x212)](_0x2899e1(0x1bb))[_0x2899e1(0x1dd)](0x0,0x10);}function _0x4a311d(_0x29748a){const _0x131321=_0x13b180;return _0x180cb2[_0x131321(0x1c9)](_0x2875c8(),_0x131321(0x1e4)+_0x29748a+_0x131321(0x215));}async function _0x341713(_0x136f0d){const _0x390a6c=_0x13b180,_0x4b5dca=_0x23e4f2(_0x136f0d),_0xdf2364=_0x4a311d(_0x4b5dca);if(_0xa2a96b[_0x390a6c(0x1d5)](_0xdf2364))return _0xdf2364;const _0x5161e2=Buffer[_0x390a6c(0x214)](_0x136f0d[_0x390a6c(0x1fe)],_0x390a6c(0x1c4));let _0x939bf4=_0x548460;try{const _0x4441a2=await _0x4beff()[_0x390a6c(0x1fc)](_0x5161e2),_0x6c7634=_0x4441a2[_0x390a6c(0x1f8)]||0x0,_0x1598f1=_0x4441a2[_0x390a6c(0x1f1)]||0x0;if(_0x6c7634>0x0&&_0x1598f1>0x0){const _0x2b1633=_0x548460*_0x136f0d[_0x390a6c(0x1b0)]/Math[_0x390a6c(0x204)](_0x6c7634,_0x1598f1),_0x41083c=_0x548460*_0x136f0d[_0x390a6c(0x1af)]/Math[_0x390a6c(0x213)](_0x6c7634,_0x1598f1);_0x939bf4=Math[_0x390a6c(0x213)](_0x548460,Math[_0x390a6c(0x204)](_0x2b1633,_0x41083c));}}catch{}return await _0x4beff()[_0x390a6c(0x1e1)](_0x5161e2,_0xdf2364,{'mode':_0x390a6c(0x1b3),'dpi':_0x939bf4}),_0xdf2364;}function _0x208dcf(_0x4fba59){const _0x3c549c=_0x13b180,_0x1e19fd=[_0x3c549c(0x1ed),_0x33dafd[_0x3c549c(0x1ac)](_0x3c549c(0x1cf))[_0x3c549c(0x1f6)](_0x4fba59[_0x3c549c(0x1fe)])[_0x3c549c(0x212)](_0x3c549c(0x1bb)),_0x4fba59[_0x3c549c(0x1f8)],_0x4fba59[_0x3c549c(0x1f1)],_0x4fba59[_0x3c549c(0x1d6)]][_0x3c549c(0x1c9)]('|');return _0x33dafd[_0x3c549c(0x1ac)](_0x3c549c(0x1cf))[_0x3c549c(0x1f6)](_0x1e19fd)[_0x3c549c(0x212)](_0x3c549c(0x1bb))[_0x3c549c(0x1dd)](0x0,0x10);}function _0x1ce489(_0x23d32e){const _0xd4b033=_0x13b180;return _0x180cb2[_0xd4b033(0x1c9)](_0x2875c8(),_0xd4b033(0x1e2)+_0x23d32e+_0xd4b033(0x215));}async function _0x407e2a(_0x155361){const _0x33a279=_0x13b180,_0x364998=_0x208dcf(_0x155361),_0x5300fa=_0x1ce489(_0x364998);if(_0xa2a96b[_0x33a279(0x1d5)](_0x5300fa))return _0x5300fa;const _0x95ca9b=Buffer[_0x33a279(0x214)](_0x155361[_0x33a279(0x1fe)],_0x33a279(0x1c4));return await _0x4beff()[_0x33a279(0x1e1)](_0x95ca9b,_0x5300fa,{'mode':_0x33a279(0x1f8),'value':_0x155361[_0x33a279(0x1f8)]}),_0x5300fa;}async function _0x5b8911(_0x168c21){const _0x2cd438=_0x13b180;if(_0x168c21[_0x2cd438(0x1be)]===_0x2cd438(0x1cb))return{'i':_0x168c21[_0x2cd438(0x1ff)],'p':await _0x632bcf(_0x168c21[_0x2cd438(0x205)])};if(_0x168c21[_0x2cd438(0x1be)]===_0x2cd438(0x20b))return{'i':_0x168c21[_0x2cd438(0x1ff)],'p':await _0x5c4dd4(_0x168c21[_0x2cd438(0x205)])};if(_0x168c21[_0x2cd438(0x1be)]===_0x2cd438(0x1ba))return{'i':_0x168c21[_0x2cd438(0x1ff)],'p':await _0x341713(_0x168c21[_0x2cd438(0x205)])};if(_0x168c21[_0x2cd438(0x1be)]===_0x2cd438(0x1d8))return{'i':_0x168c21[_0x2cd438(0x1ff)],'p':await _0x407e2a(_0x168c21[_0x2cd438(0x205)])};throw new Error(_0x2cd438(0x1f0)+_0x168c21[_0x2cd438(0x1be)]+'\x22');}module[_0x13b180(0x1ce)]={'cacheDir':_0x2875c8,'useCacheDir':_0x383a7c,'rasterizeItem':_0x5b8911,'rasterizeInline':_0x632bcf,'rasterizeRing':_0x5c4dd4,'rasterizeSvgMedia':_0x341713,'rasterizeSvgExact':_0x407e2a};
@@ -1 +1 @@
1
- 'use strict';const _0x495464=_0x260f;(function(_0x3c3ad8,_0x5cf70c){const _0x52a2d5=_0x260f,_0x52cafc=_0x3c3ad8();while(!![]){try{const _0x1d8fa0=-parseInt(_0x52a2d5(0x1e2))/0x1*(parseInt(_0x52a2d5(0x1ce))/0x2)+-parseInt(_0x52a2d5(0x1db))/0x3+-parseInt(_0x52a2d5(0x1dd))/0x4*(-parseInt(_0x52a2d5(0x1d8))/0x5)+-parseInt(_0x52a2d5(0x1d4))/0x6*(-parseInt(_0x52a2d5(0x1d5))/0x7)+-parseInt(_0x52a2d5(0x1e1))/0x8*(-parseInt(_0x52a2d5(0x1cb))/0x9)+-parseInt(_0x52a2d5(0x1c7))/0xa+parseInt(_0x52a2d5(0x1d9))/0xb*(-parseInt(_0x52a2d5(0x1c9))/0xc);if(_0x1d8fa0===_0x5cf70c)break;else _0x52cafc['push'](_0x52cafc['shift']());}catch(_0x573472){_0x52cafc['push'](_0x52cafc['shift']());}}}(_0x5d73,0x6d90e));const _0x1d6010=require('fs'),{rasterizeItem:_0x5c6b45,useCacheDir:_0x207160}=require(_0x495464(0x1de));function _0x288d64(){const _0x5a192f=_0x495464;try{return _0x1d6010[_0x5a192f(0x1c8)](0x0,_0x5a192f(0x1d2));}catch{return'';}}async function _0xe1bd75(){const _0x380d3a=_0x495464,_0x40cf3a=process[_0x380d3a(0x1c6)][0x2]||_0x288d64()[_0x380d3a(0x1d0)]()||'[]',_0x379820=JSON[_0x380d3a(0x1cf)](_0x40cf3a),_0x3a8c54=Array[_0x380d3a(0x1d7)](_0x379820)?_0x379820:_0x379820&&_0x379820[_0x380d3a(0x1e0)];if(!Array[_0x380d3a(0x1d7)](_0x3a8c54))throw new Error(_0x380d3a(0x1d1));_0x207160(Array[_0x380d3a(0x1d7)](_0x379820)?null:_0x379820[_0x380d3a(0x1ca)]);for(const _0x32ad11 of _0x3a8c54){const {i:_0xc05289,p:_0x55acb4}=await _0x5c6b45(_0x32ad11);_0x55acb4&&process[_0x380d3a(0x1df)][_0x380d3a(0x1da)](JSON[_0x380d3a(0x1cd)]({'i':_0xc05289,'p':_0x55acb4})+'\x0a');}}_0xe1bd75()[_0x495464(0x1d6)](_0x5d74af=>{const _0x56a181=_0x495464;process[_0x56a181(0x1d3)][_0x56a181(0x1da)](_0x5d74af&&_0x5d74af[_0x56a181(0x1cc)]||String(_0x5d74af)),process[_0x56a181(0x1dc)](0x1);});function _0x260f(_0x32b17c,_0x26e375){_0x32b17c=_0x32b17c-0x1c6;const _0x5d737d=_0x5d73();let _0x260f72=_0x5d737d[_0x32b17c];if(_0x260f['eQwsic']===undefined){var _0x47cd45=function(_0x226c49){const _0x5f55d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d6010='',_0x5c6b45='';for(let _0x207160=0x0,_0x288d64,_0xe1bd75,_0x40cf3a=0x0;_0xe1bd75=_0x226c49['charAt'](_0x40cf3a++);~_0xe1bd75&&(_0x288d64=_0x207160%0x4?_0x288d64*0x40+_0xe1bd75:_0xe1bd75,_0x207160++%0x4)?_0x1d6010+=String['fromCharCode'](0xff&_0x288d64>>(-0x2*_0x207160&0x6)):0x0){_0xe1bd75=_0x5f55d['indexOf'](_0xe1bd75);}for(let _0x379820=0x0,_0x3a8c54=_0x1d6010['length'];_0x379820<_0x3a8c54;_0x379820++){_0x5c6b45+='%'+('00'+_0x1d6010['charCodeAt'](_0x379820)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5c6b45);};_0x260f['Ztxvma']=_0x47cd45,_0x260f['gJZsEa']={},_0x260f['eQwsic']=!![];}const _0x559b4c=_0x5d737d[0x0],_0x1339ff=_0x32b17c+_0x559b4c,_0x123769=_0x260f['gJZsEa'][_0x1339ff];return!_0x123769?(_0x260f72=_0x260f['Ztxvma'](_0x260f72),_0x260f['gJZsEa'][_0x1339ff]=_0x260f72):_0x260f72=_0x123769,_0x260f72;}function _0x5d73(){const _0x41ea75=['mJaYodCZmg1lzKLLEa','CMvHzezPBgvtEw5J','mJmXnZGWrMndve5d','y2fJAgveAxi','ouvMrK5SsG','BwvZC2fNzq','C3rYAw5NAwz5','otK4t2z6zwD5','CgfYC2u','DhjPBq','BwfZAY1Yyxn0zxjPEMuTD29YA2vYoIbLEhbLy3rLzcbHiePtt04GyxjYyxKGB3iGEYbPDgvTCYWGy2fJAgveAxiGFsbVBIbZDgrPBIaOB3iGyxjNDLSYxsK','DxrMoa','C3rKzxjY','nKv1EeL1vG','ndK0mdaWnu14rwfrCW','y2f0y2G','AxnbCNjHEq','ndbeDe9sALi','mJa5uwf5sMrk','D3jPDgu','mty3mJC4mNfNwgvvvW','zxHPDa','mZu2otKYB0n0BNvS','lI9TyxnRlxjHC3rLCML6zs1JB3jL','C3rKB3v0','AxrLBxm','mtGXote0nhrXu0jwEq','mtqYrwTtA2vY','yxjNDG'];_0x5d73=function(){return _0x41ea75;};return _0x5d73();}
1
+ 'use strict';const _0x3d8c97=_0x2683;(function(_0x356eab,_0x2e2050){const _0x3dabf1=_0x2683,_0x3372de=_0x356eab();while(!![]){try{const _0x62517e=-parseInt(_0x3dabf1(0xf9))/0x1*(-parseInt(_0x3dabf1(0xf4))/0x2)+-parseInt(_0x3dabf1(0xf1))/0x3*(-parseInt(_0x3dabf1(0xe3))/0x4)+parseInt(_0x3dabf1(0xe5))/0x5+parseInt(_0x3dabf1(0xe6))/0x6*(-parseInt(_0x3dabf1(0xeb))/0x7)+parseInt(_0x3dabf1(0xfa))/0x8*(parseInt(_0x3dabf1(0xf3))/0x9)+parseInt(_0x3dabf1(0xe8))/0xa+-parseInt(_0x3dabf1(0xf5))/0xb;if(_0x62517e===_0x2e2050)break;else _0x3372de['push'](_0x3372de['shift']());}catch(_0x35aa5b){_0x3372de['push'](_0x3372de['shift']());}}}(_0x5561,0x6b94f));function _0x5561(){const _0x564821=['mJfvufH0u3a','y2f0y2G','mtq2n3zvufLArq','ngvosNvKCW','mti5otiYmJf4tvPfr24','BwvZC2fNzq','AxnbCNjHEq','yxjNDG','nZG5mtLHCgLSuw0','mtK4mtzQu29dAKW','C3rKB3v0','D3jPDgu','lI9TyxnRlxjHC3rLCML6zs1JB3jL','C3rKzxjY','mtqYmdi4D3jXwMD5','y2fJAgveAxi','mJu3ntaZnwLftw1JuG','nKrIweLNCG','C3rYAw5NAwz5','nJy4oty0me1UyuPqwq','BwfZAY1Yyxn0zxjPEMuTD29YA2vYoIbLEhbLy3rLzcbHiePtt04GyxjYyxKGB3iGEYbPDgvTCYWGy2fJAgveAxiGFsbVBIbZDgrPBIaOB3iGyxjNDLSYxsK','DxrMoa','mJyWnJqWmxL0s2jizG','CgfYC2u','CMvHzezPBgvtEw5J','AxrLBxm','DhjPBq','zxHPDa'];_0x5561=function(){return _0x564821;};return _0x5561();}function _0x2683(_0x486086,_0x187efb){_0x486086=_0x486086-0xe3;const _0x5561cc=_0x5561();let _0x2683fe=_0x5561cc[_0x486086];if(_0x2683['OnEUaZ']===undefined){var _0x360453=function(_0x3cd3a9){const _0x5048e2='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x356730='',_0x40daed='';for(let _0x5875ef=0x0,_0x265b53,_0x2187bf,_0x26c7d5=0x0;_0x2187bf=_0x3cd3a9['charAt'](_0x26c7d5++);~_0x2187bf&&(_0x265b53=_0x5875ef%0x4?_0x265b53*0x40+_0x2187bf:_0x2187bf,_0x5875ef++%0x4)?_0x356730+=String['fromCharCode'](0xff&_0x265b53>>(-0x2*_0x5875ef&0x6)):0x0){_0x2187bf=_0x5048e2['indexOf'](_0x2187bf);}for(let _0x246f28=0x0,_0x33a131=_0x356730['length'];_0x246f28<_0x33a131;_0x246f28++){_0x40daed+='%'+('00'+_0x356730['charCodeAt'](_0x246f28)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x40daed);};_0x2683['NSWGwC']=_0x360453,_0x2683['BtxsNX']={},_0x2683['OnEUaZ']=!![];}const _0x5ca2a0=_0x5561cc[0x0],_0x250054=_0x486086+_0x5ca2a0,_0x1a8085=_0x2683['BtxsNX'][_0x250054];return!_0x1a8085?(_0x2683fe=_0x2683['NSWGwC'](_0x2683fe),_0x2683['BtxsNX'][_0x250054]=_0x2683fe):_0x2683fe=_0x1a8085,_0x2683fe;}const _0x356730=require('fs'),{rasterizeItem:_0x40daed,useCacheDir:_0x5875ef}=require(_0x3d8c97(0xfd));function _0x265b53(){const _0x133b79=_0x3d8c97;try{return _0x356730[_0x133b79(0xed)](0x0,_0x133b79(0xea));}catch{return'';}}async function _0x2187bf(){const _0x862bf=_0x3d8c97,_0x26c7d5=process[_0x862bf(0xf8)][0x2]||_0x265b53()[_0x862bf(0xef)]()||'[]',_0x246f28=JSON[_0x862bf(0xec)](_0x26c7d5),_0x33a131=Array[_0x862bf(0xf7)](_0x246f28)?_0x246f28:_0x246f28&&_0x246f28[_0x862bf(0xee)];if(!Array[_0x862bf(0xf7)](_0x33a131))throw new Error(_0x862bf(0xe9));_0x5875ef(Array[_0x862bf(0xf7)](_0x246f28)?null:_0x246f28[_0x862bf(0xe4)]);for(const _0x1d7f1a of _0x33a131){const {i:_0x2eae26,p:_0x202c46}=await _0x40daed(_0x1d7f1a);_0x202c46&&process[_0x862bf(0xfb)][_0x862bf(0xfc)](JSON[_0x862bf(0xe7)]({'i':_0x2eae26,'p':_0x202c46})+'\x0a');}}_0x2187bf()[_0x3d8c97(0xf2)](_0x564c72=>{const _0xf61007=_0x3d8c97;process[_0xf61007(0xfe)][_0xf61007(0xfc)](_0x564c72&&_0x564c72[_0xf61007(0xf6)]||String(_0x564c72)),process[_0xf61007(0xf0)](0x1);});
@@ -1 +1 @@
1
- 'use strict';const _0x2cfa9d=_0x4995;function _0x4995(_0x17b47e,_0x321caf){_0x17b47e=_0x17b47e-0x64;const _0x5eb3d7=_0x5eb3();let _0x49954b=_0x5eb3d7[_0x17b47e];if(_0x4995['GSqBCC']===undefined){var _0x3007aa=function(_0x5e103a){const _0x520841='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5f37d7='',_0x31bea6='';for(let _0x5791e9=0x0,_0x3cd44a,_0x4dfdf4,_0x207f04=0x0;_0x4dfdf4=_0x5e103a['charAt'](_0x207f04++);~_0x4dfdf4&&(_0x3cd44a=_0x5791e9%0x4?_0x3cd44a*0x40+_0x4dfdf4:_0x4dfdf4,_0x5791e9++%0x4)?_0x5f37d7+=String['fromCharCode'](0xff&_0x3cd44a>>(-0x2*_0x5791e9&0x6)):0x0){_0x4dfdf4=_0x520841['indexOf'](_0x4dfdf4);}for(let _0x58065b=0x0,_0x2fe0e7=_0x5f37d7['length'];_0x58065b<_0x2fe0e7;_0x58065b++){_0x31bea6+='%'+('00'+_0x5f37d7['charCodeAt'](_0x58065b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x31bea6);};_0x4995['DeBHDL']=_0x3007aa,_0x4995['pMemUv']={},_0x4995['GSqBCC']=!![];}const _0x6dd3d3=_0x5eb3d7[0x0],_0x37eb70=_0x17b47e+_0x6dd3d3,_0x47c408=_0x4995['pMemUv'][_0x37eb70];return!_0x47c408?(_0x49954b=_0x4995['DeBHDL'](_0x49954b),_0x4995['pMemUv'][_0x37eb70]=_0x49954b):_0x49954b=_0x47c408,_0x49954b;}(function(_0x599e87,_0x4dab3b){const _0x1ea822=_0x4995,_0xbe05fe=_0x599e87();while(!![]){try{const _0x180f1f=parseInt(_0x1ea822(0x6d))/0x1+parseInt(_0x1ea822(0x71))/0x2*(-parseInt(_0x1ea822(0x77))/0x3)+-parseInt(_0x1ea822(0x6a))/0x4*(parseInt(_0x1ea822(0x6e))/0x5)+-parseInt(_0x1ea822(0x69))/0x6*(-parseInt(_0x1ea822(0x7b))/0x7)+-parseInt(_0x1ea822(0x64))/0x8*(-parseInt(_0x1ea822(0x78))/0x9)+-parseInt(_0x1ea822(0x67))/0xa+-parseInt(_0x1ea822(0x74))/0xb*(parseInt(_0x1ea822(0x70))/0xc);if(_0x180f1f===_0x4dab3b)break;else _0xbe05fe['push'](_0xbe05fe['shift']());}catch(_0x3e6415){_0xbe05fe['push'](_0xbe05fe['shift']());}}}(_0x5eb3,0xb22b9));const {workerData:_0x5f37d7}=require(_0x2cfa9d(0x68)),{rasterizeItem:_0x31bea6,useCacheDir:_0x5791e9}=require(_0x2cfa9d(0x6c)),_0x3cd44a=_0x5f37d7[_0x2cfa9d(0x75)],_0x4dfdf4=new Int32Array(_0x5f37d7[_0x2cfa9d(0x6b)]);function _0x5eb3(){const _0x11afa0=['ChvZAa','ndaWnJy2mfjcwKzTBq','D29YA2vYx3rOCMvHzhm','odCWntiYmfzQEK5csa','nZqYmhHHvKTIqG','C2LNBMfS','lI9TyxnRlxjHC3rLCML6zs1JB3jL','mti3mZC0n3znDe9YvW','mJG1nuXNBMD0tW','Cg9ZDe1LC3nHz2u','mtjprLDRqva','mKjxwgjZEq','AxrLBxm','BwvZC2fNzq','mJy4mdy4ouvpt1f1Da','Cg9YDa','zxjYB3i','mZq2odC3mu9orwXdAW','ouHoD1PkEa','C3rVCMu','CMvZDwX0CW','n0jvq1rpCW','BM90Awz5','nJKXotK2me1YCMz2sa','y2fJAgveAxi'];_0x5eb3=function(){return _0x11afa0;};return _0x5eb3();}_0x3cd44a['on'](_0x2cfa9d(0x73),async _0x207f04=>{const _0x5655f1=_0x2cfa9d,_0x58065b={'id':_0x207f04['id']};try{_0x5791e9(_0x207f04[_0x5655f1(0x65)]);const _0x2fe0e7=[];for(const _0x368bed of _0x207f04[_0x5655f1(0x72)]){const {i:_0x3345b9,p:_0x4ad98c}=await _0x31bea6(_0x368bed);_0x4ad98c&&_0x2fe0e7[_0x5655f1(0x66)]({'i':_0x3345b9,'p':_0x4ad98c});}_0x58065b[_0x5655f1(0x7a)]=_0x2fe0e7;}catch(_0xcaab4){_0x58065b[_0x5655f1(0x76)]=_0xcaab4&&_0xcaab4[_0x5655f1(0x73)]||String(_0xcaab4);}_0x3cd44a[_0x5655f1(0x6f)](_0x58065b),Atomics[_0x5655f1(0x79)](_0x4dfdf4,0x0,0x1),Atomics[_0x5655f1(0x7c)](_0x4dfdf4,0x0);});
1
+ 'use strict';const _0xe3d9f4=_0xb79a;(function(_0x39887e,_0xad6be5){const _0x3a6be3=_0xb79a,_0x2de77f=_0x39887e();while(!![]){try{const _0x30067b=-parseInt(_0x3a6be3(0xd6))/0x1+parseInt(_0x3a6be3(0xeb))/0x2+-parseInt(_0x3a6be3(0xdf))/0x3*(-parseInt(_0x3a6be3(0xe5))/0x4)+parseInt(_0x3a6be3(0xec))/0x5*(-parseInt(_0x3a6be3(0xe4))/0x6)+parseInt(_0x3a6be3(0xe3))/0x7+parseInt(_0x3a6be3(0xe2))/0x8*(parseInt(_0x3a6be3(0xe0))/0x9)+parseInt(_0x3a6be3(0xd7))/0xa*(-parseInt(_0x3a6be3(0xe6))/0xb);if(_0x30067b===_0xad6be5)break;else _0x2de77f['push'](_0x2de77f['shift']());}catch(_0x5e4356){_0x2de77f['push'](_0x2de77f['shift']());}}}(_0xedf6,0x87f24));function _0xedf6(){const _0x41979d=['CMvZDwX0CW','C2LNBMfS','zxjYB3i','mtG3mtu5mMfttfLcEq','mtKWntb5BNnJqNq','Cg9ZDe1LC3nHz2u','mtaWodi1m3bkCg12rW','mtu3mdKZmtbsq0TysNy','D29YA2vYx3rOCMvHzhm','C3rVCMu','BwvZC2fNzq','lI9TyxnRlxjHC3rLCML6zs1JB3jL','y2fJAgveAxi','AxrLBxm','Cg9YDa','mJq4nde5mLrfDKPsvG','oxvksvPWAW','ChvZAa','ndG0oty4ohvkz0zfvq','nJq1nteXm2zPsgjHBG','mJq2v1rYDKzt','ngHlAxP3AW','mtfnEu9wEeS','BM90Awz5'];_0xedf6=function(){return _0x41979d;};return _0xedf6();}const {workerData:_0x3b6a3b}=require(_0xe3d9f4(0xd8)),{rasterizeItem:_0x589e26,useCacheDir:_0x2b7f9c}=require(_0xe3d9f4(0xdb)),_0x5774d7=_0x3b6a3b[_0xe3d9f4(0xde)],_0x283277=new Int32Array(_0x3b6a3b[_0xe3d9f4(0xe9)]);function _0xb79a(_0x26f3cb,_0x116505){_0x26f3cb=_0x26f3cb-0xd5;const _0xedf6c6=_0xedf6();let _0xb79a3d=_0xedf6c6[_0x26f3cb];if(_0xb79a['gBwHGM']===undefined){var _0x88940d=function(_0x43cca5){const _0xcccb26='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3b6a3b='',_0x589e26='';for(let _0x2b7f9c=0x0,_0x5774d7,_0x283277,_0x3b27bb=0x0;_0x283277=_0x43cca5['charAt'](_0x3b27bb++);~_0x283277&&(_0x5774d7=_0x2b7f9c%0x4?_0x5774d7*0x40+_0x283277:_0x283277,_0x2b7f9c++%0x4)?_0x3b6a3b+=String['fromCharCode'](0xff&_0x5774d7>>(-0x2*_0x2b7f9c&0x6)):0x0){_0x283277=_0xcccb26['indexOf'](_0x283277);}for(let _0x1dae9c=0x0,_0x3248ec=_0x3b6a3b['length'];_0x1dae9c<_0x3248ec;_0x1dae9c++){_0x589e26+='%'+('00'+_0x3b6a3b['charCodeAt'](_0x1dae9c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x589e26);};_0xb79a['ihhBIM']=_0x88940d,_0xb79a['jpyjkw']={},_0xb79a['gBwHGM']=!![];}const _0x42e07f=_0xedf6c6[0x0],_0x40e320=_0x26f3cb+_0x42e07f,_0x2ae7b7=_0xb79a['jpyjkw'][_0x40e320];return!_0x2ae7b7?(_0xb79a3d=_0xb79a['ihhBIM'](_0xb79a3d),_0xb79a['jpyjkw'][_0x40e320]=_0xb79a3d):_0xb79a3d=_0x2ae7b7,_0xb79a3d;}_0x5774d7['on'](_0xe3d9f4(0xda),async _0x3b27bb=>{const _0x4657f0=_0xe3d9f4,_0x1dae9c={'id':_0x3b27bb['id']};try{_0x2b7f9c(_0x3b27bb[_0x4657f0(0xdc)]);const _0x3248ec=[];for(const _0x36cb48 of _0x3b27bb[_0x4657f0(0xdd)]){const {i:_0x1e5706,p:_0x4c46d8}=await _0x589e26(_0x36cb48);_0x4c46d8&&_0x3248ec[_0x4657f0(0xe1)]({'i':_0x1e5706,'p':_0x4c46d8});}_0x1dae9c[_0x4657f0(0xe8)]=_0x3248ec;}catch(_0x59a45e){_0x1dae9c[_0x4657f0(0xea)]=_0x59a45e&&_0x59a45e[_0x4657f0(0xda)]||String(_0x59a45e);}_0x5774d7[_0x4657f0(0xd5)](_0x1dae9c),Atomics[_0x4657f0(0xd9)](_0x283277,0x0,0x1),Atomics[_0x4657f0(0xe7)](_0x283277,0x0);});
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m0saic/dictionary",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "MIT"
6
6
  }
@@ -1,2 +1,2 @@
1
- "use strict";var f=Object.defineProperty;var o=(e,r)=>f(e,"name",{value:r,configurable:!0});Object.defineProperty(exports,"__esModule",{value:!0}),exports.serializeM0vFile=serializeM0vFile,exports.parseM0vFile=parseM0vFile;const serializeM0File_1=require("../m0/serializeM0File");function serializeM0vFile(e){const r=e.created??new Date;if(e.outputs!==void 0&&(e.outputs===null||typeof e.outputs!="object"||Array.isArray(e.outputs)))throw new Error("serializeM0vFile: outputs must be an object map when provided");if(e.assets!==void 0&&(e.assets===null||typeof e.assets!="object"||Array.isArray(e.assets)))throw new Error("serializeM0vFile: assets must be an object map when provided");const t=e.app??null,n=e.appVersion??null,s=normalizeMeta(e.meta??null),i={format:"m0v",version:1,created:(0,serializeM0File_1.formatISO)(r),app:t&&t.trim()!==""?t.trim():null,appVersion:n&&n.trim()!==""?n.trim():null,meta:s,custom:e.custom??null};return e.outputs&&Object.keys(e.outputs).length>0&&(i.outputs=e.outputs),e.assets&&Object.keys(e.assets).length>0&&(i.assets=e.assets),JSON.stringify(i,null,2)+`
2
- `}o(serializeM0vFile,"serializeM0vFile");function normalizeMeta(e){if(!e)return null;const r={},t=["title","author","source","note"];for(const n of t){const s=e[n];if(s!=null){const i=s.trim();i!==""&&(r[n]=i)}}return Object.keys(r).length?r:null}o(normalizeMeta,"normalizeMeta");function parseM0vFile(e){if(typeof e!="string")throw new Error("parseM0vFile: input must be a string");let r;try{r=JSON.parse(e)}catch{throw new Error("parseM0vFile: invalid JSON")}if(!isPlainObject(r))throw new Error("parseM0vFile: expected JSON object");const t=r;if(t.format!=="m0v")throw new Error(`parseM0vFile: expected format "m0v", got "${String(t.format)}"`);if(t.version!==1)throw new Error(`parseM0vFile: expected version 1, got ${String(t.version)}`);const n=typeof t.created=="string"?t.created.trim():"";if(!n)throw new Error("parseM0vFile: missing created timestamp");const s=parseOptionalMap(t.outputs,"outputs"),i=parseOptionalMap(t.assets,"assets"),u=parseStringOrNull(t.app),l=parseStringOrNull(t.appVersion),c=parseMetaOrNull(t.meta),a={format:"m0v",version:1,created:n,app:u,appVersion:l,meta:c,custom:t.custom===void 0?null:t.custom};return s!==void 0&&(a.outputs=s),i!==void 0&&(a.assets=i),a}o(parseM0vFile,"parseM0vFile");function parseOptionalMap(e,r){if(e!==void 0){if(e===null)throw new Error(`parseM0vFile: invalid ${r} (expected object map or omit, got null)`);if(!isPlainObject(e))throw new Error(`parseM0vFile: invalid ${r} (expected object map, got `+(Array.isArray(e)?"array":typeof e)+")");return e}}o(parseOptionalMap,"parseOptionalMap");function parseStringOrNull(e){if(e==null||typeof e!="string")return null;const r=e.trim();return r||null}o(parseStringOrNull,"parseStringOrNull");function parseMetaOrNull(e){if(e==null)return null;if(!isPlainObject(e))throw new Error("parseM0vFile: invalid meta (expected object or null)");const r=e,t={};for(const n of["title","author","source","note"]){const s=r[n];if(typeof s=="string"){const i=s.trim();i&&(t[n]=i)}}return Object.keys(t).length?t:null}o(parseMetaOrNull,"parseMetaOrNull");function isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(isPlainObject,"isPlainObject");
1
+ "use strict";var d=Object.defineProperty;var a=(e,t)=>d(e,"name",{value:t,configurable:!0});Object.defineProperty(exports,"__esModule",{value:!0}),exports.serializeM0vFile=serializeM0vFile,exports.parseM0vFile=parseM0vFile;const serializeM0File_1=require("../m0/serializeM0File");function serializeM0vFile(e){const t=e.created??new Date;if(e.outputs!==void 0&&(e.outputs===null||typeof e.outputs!="object"||Array.isArray(e.outputs)))throw new Error("serializeM0vFile: outputs must be an object map when provided");if(e.assets!==void 0&&(e.assets===null||typeof e.assets!="object"||Array.isArray(e.assets)))throw new Error("serializeM0vFile: assets must be an object map when provided");if(e.brand!==void 0&&(e.brand===null||typeof e.brand!="object"||Array.isArray(e.brand)))throw new Error("serializeM0vFile: brand must be an object map when provided");const r=e.app??null,i=e.appVersion??null,s=normalizeMeta(e.meta??null),n={format:"m0v",version:1,created:(0,serializeM0File_1.formatISO)(t),app:r&&r.trim()!==""?r.trim():null,appVersion:i&&i.trim()!==""?i.trim():null,meta:s,custom:e.custom??null};return e.outputs&&Object.keys(e.outputs).length>0&&(n.outputs=e.outputs),e.assets&&Object.keys(e.assets).length>0&&(n.assets=e.assets),e.brand&&Object.keys(e.brand).length>0&&(n.brand=e.brand),JSON.stringify(n,null,2)+`
2
+ `}a(serializeM0vFile,"serializeM0vFile");function normalizeMeta(e){if(!e)return null;const t={},r=["title","author","source","note"];for(const i of r){const s=e[i];if(s!=null){const n=s.trim();n!==""&&(t[i]=n)}}return Object.keys(t).length?t:null}a(normalizeMeta,"normalizeMeta");function parseM0vFile(e){if(typeof e!="string")throw new Error("parseM0vFile: input must be a string");let t;try{t=JSON.parse(e)}catch{throw new Error("parseM0vFile: invalid JSON")}if(!isPlainObject(t))throw new Error("parseM0vFile: expected JSON object");const r=t;if(r.format!=="m0v")throw new Error(`parseM0vFile: expected format "m0v", got "${String(r.format)}"`);if(r.version!==1)throw new Error(`parseM0vFile: expected version 1, got ${String(r.version)}`);const i=typeof r.created=="string"?r.created.trim():"";if(!i)throw new Error("parseM0vFile: missing created timestamp");const s=parseOptionalMap(r.outputs,"outputs"),n=parseOptionalMap(r.assets,"assets"),u=parseOptionalMap(r.brand,"brand"),l=parseStringOrNull(r.app),c=parseStringOrNull(r.appVersion),f=parseMetaOrNull(r.meta),o={format:"m0v",version:1,created:i,app:l,appVersion:c,meta:f,custom:r.custom===void 0?null:r.custom};return s!==void 0&&(o.outputs=s),n!==void 0&&(o.assets=n),u!==void 0&&(o.brand=u),o}a(parseM0vFile,"parseM0vFile");function parseOptionalMap(e,t){if(e!==void 0){if(e===null)throw new Error(`parseM0vFile: invalid ${t} (expected object map or omit, got null)`);if(!isPlainObject(e))throw new Error(`parseM0vFile: invalid ${t} (expected object map, got `+(Array.isArray(e)?"array":typeof e)+")");return e}}a(parseOptionalMap,"parseOptionalMap");function parseStringOrNull(e){if(e==null||typeof e!="string")return null;const t=e.trim();return t||null}a(parseStringOrNull,"parseStringOrNull");function parseMetaOrNull(e){if(e==null)return null;if(!isPlainObject(e))throw new Error("parseM0vFile: invalid meta (expected object or null)");const t=e,r={};for(const i of["title","author","source","note"]){const s=t[i];if(typeof s=="string"){const n=s.trim();n&&(r[i]=n)}}return Object.keys(r).length?r:null}a(parseMetaOrNull,"parseMetaOrNull");function isPlainObject(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(isPlainObject,"isPlainObject");
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m0saic/dsl-file-formats",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "main": "./dist/cjs/index.js",
5
5
  "exports": {
6
6
  ".": {
@@ -45,6 +45,7 @@ disposes).
45
45
  | Overlays, passthroughs, identity | `skills/overlay-semantics.md`, `skills/passthrough-semantics.md`, `skills/identity.md` |
46
46
  | Build a template | `templates/philosophy-and-contract.md` → `templates/construction-strategy.md` → `templates/geometry-recipes.md` |
47
47
  | Template perf | `templates/patterns/perf-authoring-rules.md` |
48
+ | A template that goes to paper (cards, banners, posters) | `templates/patterns/print-authoring.md` |
48
49
  | Data-driven templates | `templates/data-pipeline.md` |
49
50
  | Read/write `.m0` / `.m0c` / `.m0p` / `.m0v` | `file-formats/m0p-and-custom-field.md` |
50
51
  | Render via the CLI | `runtime/cli-usage.md` |
@@ -23,7 +23,7 @@ These features shipped together in April 2026. They are foundational to v2 work
23
23
  | `.m0c` | JSON: DSL + StableKey-keyed labels + derive image + meta | One layout, with labels / overlays / derive thumbnail / `custom.*` |
24
24
  | `.m0g` | `.m0c`-shaped JSON with `format: "m0g"` + the `M0cGold` `gold` block | A **m0saic golden** ("mogging") — a tried-and-true, signed-off layout; `#mogging` comment-line convention (`types.ts`) |
25
25
  | `.m0p` | JSON: pack of `.m0c`-shaped variants under shared identity | Multiple coordinated variants (cross-canvas, brand pack, content set, themed collection) |
26
- | `.m0v` | JSON: `outputs` / `assets` / `custom` (`src/m0v/m0vFile.ts`) | **Mosaic Vocabulary** — user-tier shared brand language: output presets, palette, typography, asset paths. CLI `--m0v <path>`; `m0saic open` accepts it |
26
+ | `.m0v` | JSON: `outputs` / `assets` / `brand` / `custom` (`src/m0v/m0vFile.ts`) | **Mosaic Vocabulary** — user-tier shared brand language: output presets, asset paths, and since 2026-10-19 the `brand` slot (the shop's name, logo, accent, site, … as strings — Mosaic Desktop's "Your brand" profile, `~/m0saic/solutions/<id>/brand.m0v`; see `templates/reference/brand-schema.md`). Every slot optional; palette, typography still ride in `custom`. CLI `--m0v <path>` reads `outputs`; `m0saic open` accepts it |
27
27
 
28
28
  `.m0` and `.m0c` are unchanged by the later formats' arrival — each is purely additive.
29
29
  This doc covers `.m0`/`.m0c`/`.m0p` in depth; `.m0g` and `.m0v` have their own type
@@ -44,7 +44,11 @@ m0saic layout.m0 # .m0 / .m0c paths also accepted (index.ts:~7184-7270
44
44
  ## Command table
45
45
 
46
46
  18 `.command(` registrations in `index.ts` + `telemetry` registered by
47
- `registerTelemetryCommand(program)` (index.ts:~7138 → `utils/telemetry.ts:~372`).
47
+ `registerTelemetryCommand(program)` (index.ts:~7138 → `utils/telemetry.ts:~372`) +
48
+ `community` (`fetch`), `install`, `uninstall` registered by
49
+ `registerTemplateInstallCommands(program, …)` (`utils/templateInstall.ts`, since
50
+ 0.4.0; also listed in `inlineDsl.ts` `KNOWN_SUBCOMMANDS` so they are never read as
51
+ an inline m0 string).
48
52
  Two of the 18 sit inside `if (DEV_MODE) { … }` and are absent from the public
49
53
  help — see the DEV-GATED rows below.
50
54
 
@@ -58,12 +62,15 @@ help — see the DEV-GATED rows below.
58
62
  | Command (index.ts line) | What it does |
59
63
  |---|---|
60
64
  | `make <input>` (~5095) | Primary render: template id / `.mosaic` / `.mosaicx` → video or image. Full flag surface below. |
61
- | `hello-world` | The first render — a thin alias for `make @m0saic/hello-world/v1` (the brand card; output defaults to `hello-world.mp4`). With `--template-repo <path...>` / `--community-repo <path>` it renders the loaded repo's **front door** instead: the first repo (load order) whose `repo.helloWorld` names a template that registered, announced as `Front door: <id> — <repo>'s hello-world`; no repos, or none that name one → the core card with a one-line why. Takes `-o -w -h --fps --durationMs --props --quiet --verbose` (no engine surface). Picker: the CLI source (not published). |
65
+ | `hello-world` | The first render — a thin alias for `make @m0saic/hello-world/v1` (the brand card; output defaults to `hello-world.mp4`). With `--template-repo <path...>` it renders the loaded folder's **front door** instead: the first flagged repo (load order) whose `repo.helloWorld` names a template that registered (installed repos never are the front door; the community one is `m0saic make @m0saic-community/hello-world/v1` after `m0saic community fetch`), announced as `Front door: <id> — <repo>'s hello-world`; no repos, or none that name one → the core card with a one-line why. Takes `-o -w -h --fps --durationMs --props --quiet --verbose` (no engine surface). Picker: the CLI source (not published). |
62
66
  | `make-wireframe` (~5462) | Static wireframe PNG from `--m0 <string>` or `--mfile <path>`. |
63
67
  | `make-wireframe-animated` (~5568) | Animated wireframe MP4 from `--m0`/`--mfile`; extra `--disable-ui`. |
64
68
  | `flatten <input>` (~5680) | Inline all `type:mosaic` children of a `.mosaic`/template into one flat JSON doc — no render. |
65
69
  | `resolve <input>` (~5800) | `.mosaicx` recipe → resolved `.mosaic` provenance doc, no ffmpeg; `--flatten` also inlines children. |
66
- | `list-templates` (~5946) | Print registered template ids (`--json`); annotates primitive/internal/deprecated. |
70
+ | `list-templates` (~6103) | Print registered template ids, grouped by source (since 0.4.0): `Built-in: N templates`, then `Installed <repo id> (<name>): <tag>, signed|unsigned, N templates` (community first), then `Folder <path>, <repo id> (<name>): N templates` for `--template-repo`. A heading is one line that never starts with `@`; ids stay one per line, flush left. `--source <name>` lists one group: `builtin`, `community`, or a repo id with or without `@` (any case); an unknown name exits 1 and lists the sources. `--json` = a flat sorted id array, filtered by `--source`. Annotates primitive/internal/deprecated. Grouping: the CLI source (not published). |
71
+ | `community fetch` | **Since 0.4.0.** Install or update the official community templates from their latest signed GitHub release bundle, or report them current (`--force` reinstalls, `--quiet`). A valid signature is required. See "Installed template repos" below. Impl: the CLI source (not published). |
72
+ | `install [source]` | **Since 0.4.0.** Install a template repo from its release bundle: `owner/repo[@tag]`, a GitHub repo or release page, a `bundle.json` / `.tgz` URL, or a bundle on disk. No source: list what is installed (`--json`). A third-party repo: once `bundle.json` is read, the third-party code notice, then a question (repo, tag, templates, size; default No) before the runtime downloads; `--yes` skips it and is required with no terminal (CI, pipes: exit 1, nothing installed). A repo signed by m0saic (second-party) gets one line instead, no question. Given the official community repo in any GitHub form, it runs `community fetch` instead. A private repo needs its access key: `--key-env <name>`, then `M0SAIC_REPO_KEY`, then the key saved for it; in a terminal it asks once and saves it. `--force`, `--quiet`. |
73
+ | `uninstall <repoId>` | **Since 0.4.0.** Remove an installed template repo (files + entry) and its saved access key, if any; exit 1 with the installed ids when it is not installed. |
67
74
  | `doctor <repoDir>` | **Public since 0.2.0** (dev-gated at 0.1.0; founder ruling 2026-09-16, BURN-DOWN D5 → publish). Run the template conventions over a template repo folder — the same checks its build gate (`tools/check-registry.mjs`) runs, from outside (agents, reviewers, forks, CI on a fork): definition-time + render-time conventions (the 13 throw-posture ones incl. `latticeSmooth`) and, when the repo commits `layout-fingerprints/` or `.layout.m0` sidecars, the fingerprint diff. `--json` (one object: `ok, repo, mode, loadDiagnostics, rendered, skipped, errors, warnings, notes, fingerprints, conventions`), `--sweep` (also render on the standard 1080p canvases → `canvasEnvelope`), `--entry <path>`, `--src <dir>`. Loads through `loadTemplateRepoFromPath` under the external origin scope, so conventions RECORD rather than throw and one bad template never hides the rest. **Runs the repo's template module bodies in-process** — prints a trust warning to stderr (not under `--json`). Exit 1 on any error-severity finding or a fatal load diagnostic. It is the pack-publishing contract for community/starter authors ("the publish requirement for packs"). Impl: the CLI source (not published); locked public by `__tests__/cli.surface.test.js`. |
68
75
  | `browse-templates` (~6033) | **DEV-GATED** (whole command inside `if (DEV_MODE)`, 4792): interactive TTY picker (template → variant → confirm → delegates to `make`). It drives the E2E variant matrix and writes to `test-output/` — a development harness, not a user surface. |
69
76
  | `momo <message…>` (~6282) | **DEV-GATED** (whole command inside `if (DEV_MODE)`, 5040): relay English geometry instruction to Momo in a running Mosaic Desktop over the loopback bridge; exit 0 applied / 2 not-applied / 1 couldn't-run. |
@@ -177,8 +184,9 @@ mosaic; prints `Validation DEGRADED`), `--report` (`.output.json` /
177
184
  `--keep-temp`, `--quiet`, `--verbose`, `--prefer-pretty-m0` /
178
185
  `--prefer-canonical-m0` (printed-m0 form only; note: NOT `--prefer-*-m0saic`),
179
186
  `--background-color <color>`, `--template-repo <path...>` +
180
- `--template-repo-entry <file>` (external template repos), `--community-repo <path>`
181
- (ONE checkout of the official community repo — see the community gate below).
187
+ `--template-repo-entry <file>` (a template repo folder for one run). Installed
188
+ repos load with no flag; `--community-repo` was removed in 0.4.0 — see
189
+ "Installed template repos" and the community gate below.
182
190
 
183
191
  **Encode surface** (index.ts:~4231-4338, mirrors the Make page's Advanced panel;
184
192
  precedence: flags > `.m0v` preset > doc-on-disk > engine default):
@@ -235,34 +243,140 @@ and neither is `doctor` (public since 0.2.0).
235
243
  > `momo` / `browse-templates` finds hits; that is the router table, not the
236
244
  > gated implementation.
237
245
 
238
- ## External template repos and the community gate (2026-09-16)
239
-
240
- **Three reserved identities, exact-match, nothing else is checked:** template
241
- namespaces `@m0saic/` and `@m0saic-dev/`, repo id `@m0saic-community`
242
- (`index.ts:~907-909`; registry compare is case-insensitive, `templateRegistry.ts:~112`).
243
- Every other namespace / repo id is open. `--template-repo` never grants anything.
244
-
245
- **The grant.** `--community-repo <path>` says "this IS the official repo"; the
246
- `@m0saic-dev/` grant comes only from `verifyCommunityRelease()` (`@m0saic/product`
247
- `communityRelease.ts`) passing on the checkout's `release.json` against
248
- `LICENSE_PUBLIC_KEYS` (`publicKeys.ts` — the licence k1 family; rotation = append
249
- `k2`, ship, sign with `M0SAIC_SIGNING_KID=k2`; older CLIs report `unknown-kid`).
250
- The gate runs BEFORE the entry module is imported. All gate/notice lines go to
251
- stderr (survive `--quiet`, keep `--json` stdout clean):
252
-
253
- - ok → `✓ community repo verified: <tag> (signed, <kid>)`
254
- - else → `⚠ <path> is not a verified release of the official community repo
255
- (<reason>). Loaded as an ordinary template repo — its @m0saic-dev/ ids are
256
- refused. Get the official checkout: the link on m0saic.io/community` → the
257
- reserved ids are refused in ONE collapsed line, `⚠ [template-repo]
258
- TEMPLATE_ID_RESERVED_NAMESPACE: refused <N> ids in reserved namespace
259
- (@m0saic-dev/…): <id1>, <id2>, <id3>, …` (other rejection codes stay one line
260
- each) → the existing `❌ Refusing to use template repo` block → **exit 1**.
246
+ ## External template repos and the community gate (2026-09-16; installs 2026-10-13)
247
+
248
+ **Three reserved namespaces and one reserved repo id, exact-match, nothing else
249
+ is checked:** template namespaces `@m0saic/`, `@m0saic-dev/`, `@m0saic-community/`
250
+ and repo id `@m0saic-community` (`RESERVED_TEMPLATE_NAMESPACES` /
251
+ `RESERVED_COMMUNITY_REPO_ID` in `index.ts`; registry compare is case-insensitive,
252
+ `templateRegistry.ts`). Every other namespace / repo id is open. A `--template-repo`
253
+ folder never gets a grant in a shipped build.
254
+
255
+ **Installed template repos (CLI 0.4.0).** `m0saic community fetch` and
256
+ `m0saic install <source>` put release bundles (`bundle.json` + `runtime.tgz`,
257
+ written by https://github.com/m0saic-project/m0saic-community-templates/blob/main/tools/pack-bundle.mjs — the starter's
258
+ `npm run bundle` — and attached to a GitHub release; previews and samples are
259
+ never downloaded) into `~/m0saic/template-repos/` (`M0SAIC_ROOT` moves it):
260
+ `installed.json` + one unpacked runtime per repo at `<slug>/<tag or sha-…>/`.
261
+ The store, download and checks are `@m0saic/product` `templateBundle.ts` (index
262
+ parse, source resolution, download with a 30 s idle timeout + HTTP Range resume +
263
+ size/sha256 checks, an extractor that writes only regular files and folders —
264
+ links, devices, `..`, absolute paths, backslashes, `node_modules`,
265
+ Windows-illegal names and duplicates are refused) and `installedTemplateRepos.ts`
266
+ (lock, staging + swap, the signature and reserved-namespace checks). `community
267
+ fetch` reads `github.com/m0saic-project/m0saic-community-templates/releases/latest/
268
+ download/bundle.json` (`M0SAIC_COMMUNITY_GITHUB_REPO` overrides; the bundle must
269
+ still verify) and installs, updates, or reports current; a signed install that no
270
+ longer verifies is reinstalled. Install refusals: `not-signed` (any
271
+ `@m0saic-community` bundle that does not verify — dev builds also take an
272
+ unsigned one), `reserved-namespace` (manifest ids in a reserved namespace,
273
+ unless the verified community repo), `check-failed` (the CLI loads the staged
274
+ copy once, `checkStagedTemplateRepo`, before it replaces anything),
275
+ `wrong-repo`, size / hash / tree mismatches, `busy` (another install holds
276
+ `.lock`), `declined` (the question below answered no, cancelled, or no terminal
277
+ and no `--yes`).
278
+
279
+ **Asking first (2026-10-13).** `install` reads `bundle.json`, then decides
280
+ (product `installTemplateBundle({ confirm })`: the hook runs after the index and
281
+ the "current" check, before the runtime download, and the store lock is taken
282
+ after it, so an open question never holds `.lock`; false throws `declined`). A
283
+ copy that is already current is reported with no question. A third-party repo
284
+ (a bare `.tgz` too) gets the notice, then `Install @acme (Acme Templates)
285
+ v2026.10.1 (12 templates, 640 KB)?` (`Update @acme v2026.10.0 → v2026.10.1
286
+ (…)?`, `Reinstall …?` for `--force` over the same tag, `Install the template
287
+ repo at <source>?` with no `bundle.json`), default No: no prints `Nothing
288
+ installed.`, exit 1. With no terminal (stdin or stdout not a TTY, or `CI` set)
289
+ and no `--yes`: `✗ Not installed: m0saic asks before it installs a template
290
+ repo, and there is no terminal to ask on.` + `Approve it explicitly: m0saic
291
+ install <source> --yes`, exit 1, the runtime never downloaded (the `setup`
292
+ rule). `--yes` never asks. The notice prints once per install, never at load.
293
+
294
+ **One way in for the community templates.** `community fetch` never asks.
295
+ `install` given the community repo's GitHub releases in any form
296
+ (`owner/repo[@tag]`, the repo or a release page, a release file's URL; product
297
+ `isCommunityBundleSource`) prints `The community templates install with m0saic
298
+ community fetch; running that.` and runs it: the same pins (signed only, repo id
299
+ `@m0saic-community` only), recorded as `community`, a tag kept
300
+ (`fetchCommunityTemplates({ source })`). A `@m0saic-community` bundle from
301
+ anywhere else (one packed on disk, tested before it is published) installs
302
+ through `install` with no notice and no question, printing
303
+ `@m0saic-community is m0saic's official community repo: it installs only if
304
+ m0saic's signature verifies.`: safe on an unverified claim, since a bundle naming
305
+ that repo id installs only if it verifies and an index that disagrees with the
306
+ manifest inside is refused. A community not-found says `No community templates
307
+ release there.` (a third-party one points at m0saic.io/developers/bundles).
308
+
309
+ **Three tiers (2026-10-13).** First-party: the built-in templates and the community
310
+ repo (signed; the only holder of the reserved namespaces). Second-party: a repo
311
+ signed by m0saic in its own namespace (one m0saic built for a customer, signed with
312
+ `scripts/sign-template-repo.mjs` like the starters; the starters land here too).
313
+ Third-party: unsigned. `install` acts on `bundle.json`'s `signed` before the
314
+ download: a second-party bundle prints `<repo id> (<name>) is signed by m0saic: it
315
+ installs only if that signature verifies.`, with no third-party notice, no question
316
+ and no `--yes` needed. The product refuses any bundle whose `bundle.json` says signed
317
+ and whose signature does not verify (`not-signed`: `bundle.json says it is signed by
318
+ m0saic, but the signature does not verify (<reason>)`), before the CLI's load check
319
+ runs any code; it is never installed unsigned. A signature is not a namespace grant:
320
+ a signed repo other than the community repo using reserved ids is still
321
+ `reserved-namespace`.
322
+
323
+ **Private repos (an access key, 2026-10-13).** A private GitHub repo that publishes
324
+ bundles installs like any other, plus an access key: today a fine-grained GitHub
325
+ token its owner hands out (that repo, Contents read-only). The key comes from
326
+ `--key-env <NAME>` (the variable must be set; a source that is not a GitHub release
327
+ exits 1), then `M0SAIC_REPO_KEY`, then the key saved for that owner/repo in
328
+ `~/m0saic/template-repo-keys.json` (mode 0600, by lowercase owner/repo). There is no
329
+ `--key <value>` flag (shell history, process lists). In a terminal, a GitHub source
330
+ that answers not-found with no key, or refuses the key (`auth-failed`, `no-access`),
331
+ prints why and asks `Access key for owner/repo (Enter to stop)` (masked), retries,
332
+ and saves a key that worked (`Saved the access key for owner/repo (<file>); updates
333
+ use it.`); keys from the environment are never saved. With no terminal, a GitHub
334
+ not-found adds `A private repo needs its access key: run this in a terminal to enter
335
+ it, or set M0SAIC_REPO_KEY.` Transport: `GET api.github.com/repos/<o>/<r>/releases/
336
+ latest` (or `/tags/<tag>`) lists the assets, `bundle.json` is the index, and each
337
+ file is `GET …/releases/assets/<id>` with `Accept: application/octet-stream` and
338
+ `redirect: manual`; GitHub's redirect is followed without the key, which is only ever
339
+ sent to `https://api.github.com` (`downloadToFile` refuses any other host). Every
340
+ GitHub release form carries `githubRelease` (owner/repo[@tag], the repo and release
341
+ pages, release file URLs; product `resolveKeyedGitHubSource`). Errors: `auth-failed`
342
+ (401), `no-access` (404/403 with a key; a used-up rate limit is `http-error`).
343
+ Records gain `github` ("owner/repo", lowercase, on any GitHub install) and
344
+ `access: "key"`, never the key; `m0saic install` lists keyed repos `private`;
345
+ `uninstall` deletes the saved key (`✓ removed … and its saved access key`). Access
346
+ ending changes nothing installed (it keeps working offline); updates stop.
347
+
348
+ **Loading.** `make`, `hello-world`, `list-templates` and `mcp` load the installed
349
+ repos with no flag, once per process (the MCP server sees a new install after a
350
+ restart), after any `--template-repo` folders — a folder with the same repo id
351
+ wins (the developer's clone over its installed release) — and quietly (no notice,
352
+ no "Loaded" line). An installed repo that fails to load is skipped with one
353
+ warning instead of stopping the command. Installed repos never become
354
+ `hello-world`'s front door. A not-registered `@m0saic-dev/…` /
355
+ `@m0saic-community/…` id adds the hint `m0saic community fetch` when the
356
+ community templates are not installed.
357
+
358
+ **The grant.** The reserved namespaces go only to the installed
359
+ `@m0saic-community` whose `release.json` passes `verifyCommunityRelease()`
360
+ (`@m0saic/product` `communityRelease.ts`) against `LICENSE_PUBLIC_KEYS`
361
+ (`publicKeys.ts` — the licence k1 family; rotation = append `k2`, ship, sign with
362
+ `M0SAIC_SIGNING_KID=k2`; older CLIs report `unknown-kid`). It is checked at install
363
+ and again on EVERY load (`gateCommunityRepo`, before the entry module is
364
+ imported): pass → silent; fail → the copy is skipped, never imported (not even as
365
+ an ordinary repo), with one stderr line: `⚠ [template-repo] the installed
366
+ community templates (<tag>) no longer verify (<why>); skipped. Reinstall: m0saic
367
+ community fetch --force`. A `--template-repo` folder whose repo id is
368
+ `@m0saic-community` loads under ordinary rules in a shipped build: its reserved
369
+ ids are refused in ONE collapsed line, `⚠ [template-repo]
370
+ TEMPLATE_ID_RESERVED_NAMESPACE: refused <N> ids in reserved namespaces
371
+ (@m0saic-community/…, @m0saic-dev/…): <id1>, <id2>, <id3>, …` (other rejection
372
+ codes stay one line each) → `❌ Refusing to use template repo` with the hint
373
+ `install its signed release instead: m0saic community fetch` → **exit 1**.
261
374
 
262
375
  **`release.json` v1:** `{ schemaVersion: 1, tag, publishedAt, treeSha256,
263
376
  signature: { kid, alg: "ed25519", sig: <base64url> } }` (`--unsigned` omits
264
377
  `signature`; the legacy `{ tag, publishedAt }` reads as `missing-signature`).
265
- Tree = every file under `dist/**` + `template-manifest.json` + `package.json`,
378
+ Tree = every file under `dist/**` + `template-manifest.json` + `package.json` +
379
+ `template-catalog.json` (each root file only when present),
266
380
  sorted POSIX paths, one `"<path>\0<sha256>\n"` line each; `*.json` hashed on
267
381
  `JSON.stringify(JSON.parse(text))` (BOM stripped; CRLF / re-indent survive, a
268
382
  key reorder does not), other files raw bytes; no symlink is ever followed.
@@ -287,7 +401,8 @@ repo root from the HOST's own `node_modules` walk — the CLI's vendored copies,
287
401
  the desktop's bundle, the workspace under dev — never from the checkout. So a
288
402
  clone with nothing installed loads anywhere (0.2.0 is the first CLI that
289
403
  can), and a `node_modules/@m0saic/template-utils` planted beside a tree is
290
- never evaluated, via `--community-repo` or `--template-repo` alike. Every
404
+ never evaluated through a `--template-repo` folder (an installed copy with a
405
+ `node_modules` beside its tree is refused by the gate before any import). Every
291
406
  other specifier (`sharp`, `@twemoji/svg`, relative paths) resolves as before,
292
407
  from the checkout. CommonJS only — an `.mjs` entry's static `import`s use the
293
408
  ESM resolver, which has no hook.
@@ -297,12 +412,33 @@ with `M0SAIC_SIGNING_KEY_FILE` (REQUIRED — no default path; production laptop
297
412
  only) under `M0SAIC_SIGNING_KID` (default `k1`), self-verifies against the
298
413
  embedded keys, writes `.gitattributes` (`* -text`). Unset or missing key =
299
414
  refused, never a silent unsigned release; `--unsigned` = loud banner, a snapshot
300
- no shipped CLI trusts.
415
+ no shipped CLI trusts. After the tag: `node tools/pack-bundle.mjs --tag <tag>` in
416
+ the snapshot, then `gh release create <tag> -R m0saic-project/m0saic-community-templates
417
+ bundle/bundle.json bundle/runtime.tgz bundle/previews.tgz` — what `community fetch`
418
+ installs (the mint's next steps print both lines).
419
+
420
+ **Samples (2026-10-20).** A pack may ship sample pictures and clips for people
421
+ with no assets yet: `template-manifest.json` names the folder in
422
+ `repo.assets.samplesDir` (say `"samples"`), and `pack-bundle.mjs` packs every
423
+ file under it as a third archive, `samples.tgz` (`bundle.json.samples {file,
424
+ sha256, size, files, unpackedSize, dir} | null`; `--no-samples` skips it; the
425
+ folder must sit inside the repo, hold no links, and stay under 128 MB unpacked —
426
+ `samples-outside-repo`, `samples-missing`, `samples-too-large`). A manifest that
427
+ names no folder ships none. Mosaic Desktop installs it beside the previews (best
428
+ effort, `installed.json.samples = installed | none | failed`) and shows the
429
+ folder as the Files dock's first place, "Samples" (a plain `samples/` folder in
430
+ a clone or the dev stand-in counts too); the CLI never fetches it. Add
431
+ `bundle/samples.tgz` to the `gh release create` line when the packer prints it.
301
432
 
302
433
  **DEV seam (workspace builds only, inside `if (DEV_MODE)`):** reasons
303
- `missing-release` / `missing-signature` are still granted — `✓ community repo:
304
- <path> (dev build: unsigned community checkout trusted)` (the in-repo
305
- https://github.com/m0saic-project/m0saic-community-templates/blob/main has no `release.json`) — and
434
+ `missing-release` / `missing-signature` are still granted — for an installed copy
435
+ (and `m0saic install` takes an unsigned community bundle), and for a
436
+ `--template-repo` folder whose repo id is `@m0saic-community`: `✓ community
437
+ templates from <path> (dev build: --template-repo trusted when it verifies or is
438
+ unsigned)` (the in-repo https://github.com/m0saic-project/m0saic-community-templates/blob/main has no `release.json`;
439
+ `scripts/bake-front-door-preview.mjs` and the community render e2e load it this
440
+ way, against the real `~/m0saic` toolchain and license; a FIFO/socket/device tree
441
+ is refused there) — and
306
442
  `M0SAIC_COMMUNITY_TRUST_KEY_PEM` (+ `M0SAIC_COMMUNITY_TRUST_KEY_KID`, default `k1`)
307
443
  adds a public key for tests. Tampered tree, forged release or unknown kid are
308
444
  refused even in dev. The tarball folds `process.env.M0SAIC_DEV` to `"0"` and the
@@ -310,14 +446,15 @@ audit bans the token, so none of this ships.
310
446
 
311
447
  **Lookalikes are a display concern** — one stderr line for UNSIGNED repos, never a
312
448
  refusal: `⚠ [template-repo] <subject> is not an official m0saic namespace — only
313
- @m0saic/ and @m0saic-dev/ are, and they are signed.` Subject: loaded publisher
314
- namespaces starting with `@m0saic` that are not exactly the two reserved ones →
449
+ @m0saic/, @m0saic-dev/, @m0saic-community/ are, and they are signed.` Printed for a
450
+ `--template-repo` folder on every load, for an installed repo once (at install).
451
+ Subject: loaded publisher namespaces starting with `@m0saic` that are not exactly
452
+ the reserved ones →
315
453
  else a repoId matching `/m0saic|mosaic/i` → else `"<displayName>" (<repoId>)`.
316
454
  Never for repoId exactly `@m0saic-community`: via `--template-repo` that gets
317
455
  `⚠ [template-repo] repo id "@m0saic-community" is reserved for the official
318
- community repo and this checkout is unverified — loading it under ordinary
319
- rules.` A `--community-repo` checkout that fails the gate gets ONLY the
320
- not-verified notice.
456
+ community repo; this folder loads under ordinary rules (the signed release
457
+ installs with: m0saic community fetch).`
321
458
 
322
459
  **Desktop:** `installVersion()` runs `validateCommunityTree` → `verifyCommunityTree`
323
460
  (inline-requires `@m0saic/product`) → refuses `tag-mismatch`; failure =
@@ -327,20 +464,23 @@ not-verified notice.
327
464
  seed/installed load path (`loadCommunityRepo`) does not re-verify; consent gate
328
465
  unchanged.
329
466
 
330
- Help wording for `make` / `hello-world` / `list-templates` is ONE string,
331
- test-locked (`__tests__/cli.flags.test.js`): "…Grants the @m0saic-dev/ namespace
332
- when its release signature verifies (unsigned or modified checkouts load as
333
- ordinary repos); the community checkout loads only this way".
467
+ Help (test-locked, `__tests__/cli.surface.test.js`): the root epilog lists
468
+ `m0saic community fetch`, `m0saic install <source>` and `--template-repo`;
469
+ `make` / `hello-world` / `list-templates` carry `--template-repo` and point at
470
+ `m0saic community fetch`; `--community-repo` is an unknown option
471
+ (`cli.flags.test.js`). The gate and every on-disk tampering case are locked by
472
+ `__tests__/community-install.signing.e2e.test.js`, the install flow by
473
+ `__tests__/template-install.e2e.test.js`.
334
474
 
335
475
  ### Hardening (rounds 2 + 3, 2026-09-16)
336
476
 
337
- **Host-first `@m0saic/*` resolution.** https://github.com/m0saic-project/m0saic-packages/blob/main/packages/platform/src/template-repos/hostFirstResolution.ts (wired in `loadTemplateRepoFromPath.ts` via `registerHostFirstRepoRoot(repoRoot)` before the native `import(file://…)` of the entry): ONE wrapper around Node's real `Module._resolveFilename` (found by walking the prototype chain — under Jest `node:module` exports a subclass copy), installed once per process, persistent so render-time lazy requires are covered. A request matching `/^@m0saic\/[^/\\]+(?:\/.*)?$/` whose requesting module lies under a registered root (realpath'd) is resolved from the HOST's own `node_modules` walk — never the checkout's. Everything else (relative paths, non-`@m0saic` deps, host code) is untouched. CJS only. Consequences: a community clone loads from ANY directory with no `node_modules` (before this, `--community-repo` only worked inside the monorepo); a planted `node_modules/@m0saic/*` beside a verified tree is never evaluated, via either flag; a starter's `file:` link to `@m0saic/template-utils` resolves to the same physical package — no drift.
477
+ **Host-first `@m0saic/*` resolution.** https://github.com/m0saic-project/m0saic-packages/blob/main/packages/platform/src/template-repos/hostFirstResolution.ts (wired in `loadTemplateRepoFromPath.ts` via `registerHostFirstRepoRoot(repoRoot)` before the native `import(file://…)` of the entry): ONE wrapper around Node's real `Module._resolveFilename` (found by walking the prototype chain — under Jest `node:module` exports a subclass copy), installed once per process, persistent so render-time lazy requires are covered. A request matching `/^@m0saic\/[^/\\]+(?:\/.*)?$/` whose requesting module lies under a registered root (realpath'd) is resolved from the HOST's own `node_modules` walk — never the checkout's. Everything else (relative paths, non-`@m0saic` deps, host code) is untouched. CJS only. Consequences: a template repo loads from ANY directory with no `node_modules` (an installed bundle never has one); a planted `node_modules/@m0saic/*` beside a tree is never evaluated through a `--template-repo` folder (and an installed copy carrying one is refused by the gate before import); a starter's `file:` link to `@m0saic/template-utils` resolves to the same physical package — no drift.
338
478
 
339
- **Fail-closed tree verification** (`inspectReleaseTree` in `communityRelease.ts`; desktop mirror `inspectCommunityTree` in the Mosaic Desktop / Web app source (not published), run by `installVersion`). A release tree is plain files and directories, nothing else. Refused, in this order after the signature check and before the hash compare: `symlink-in-tree` (ANY symlink — file or dir — under `dist/**`, `dist` itself, a signed root file, or ANY entry at the checkout root); `special-file-in-tree` (FIFO / socket / device anywhere in the same places — a FIFO named `dist/publishers.js` shadows the signed `dist/publishers/` dir and blocks or executes whoever opens it); `foreign-modules` (a `node_modules` dir at the root or under `dist/`, matched case-insensitively). `verifyCommunityRelease` lstats `release.json` before opening it (a FIFO planted there used to hang the verifier). The hasher THROWS `ReleaseTreeError` on a special entry rather than skipping it; `signCommunityRelease` refuses to sign such a tree. The signed payload is `"m0saic-community-release/v1\n<tag>\n<publishedAt>\n<treeSha256>\n"`. The CLI notice carries the detail for these reasons — `(foreign-modules: node_modules)`; for `special-file-in-tree` the CLI does NOT load the folder at all (an ordinary load provably hangs): notice + `❌ Refusing to use template repo` + exit 1.
479
+ **Fail-closed tree verification** (`inspectReleaseTree` in `communityRelease.ts`; desktop mirror `inspectCommunityTree` in the Mosaic Desktop / Web app source (not published), run by `installVersion`). A release tree is plain files and directories, nothing else. Refused, in this order after the signature check and before the hash compare: `symlink-in-tree` (ANY symlink — file or dir — under `dist/**`, `dist` itself, a signed root file, or ANY entry at the checkout root); `special-file-in-tree` (FIFO / socket / device anywhere in the same places — a FIFO named `dist/publishers.js` shadows the signed `dist/publishers/` dir and blocks or executes whoever opens it); `foreign-modules` (a `node_modules` dir at the root or under `dist/`, matched case-insensitively). `verifyCommunityRelease` lstats `release.json` before opening it (a FIFO planted there used to hang the verifier). The hasher THROWS `ReleaseTreeError` on a special entry rather than skipping it; `signCommunityRelease` refuses to sign such a tree. The signed payload is `"m0saic-community-release/v1\n<tag>\n<publishedAt>\n<treeSha256>\n"`. The CLI's skip line carries the detail for these reasons — `(foreign-modules: node_modules)`; an installed copy that fails is never imported, so a `special-file-in-tree` (an ordinary load provably hangs) cannot block the process; a dev `--template-repo` community folder with one is refused (`❌ Refusing to use template repo` + exit 1).
340
480
 
341
481
  **Community deps.** The `@m0saic-dev/community-m` pack (the only `sharp` / `@twemoji/svg` user) was deleted as defunct on 2026-09-16; both left the community `package.json` and BOTH allowlists (`dep-allowlist.json` ↔ `TEMPLATE_REPO_DEP_ALLOWLIST`, lockstep-tested). Community templates may import only what the hosts ship: `@m0saic/{types,template-utils,dsl-stdlib,platform,dsl}` + `node:path`. A native or third-party runtime dep is a founder decision. `sharp` survives only as a root devDependency for core/templates tests.
342
482
 
343
- **Accepted residual.** A third-party `--template-repo` checkout with its own `node_modules` runs its own copies of non-`@m0saic` deps — third-party code, with the notice printed; it cannot obtain a reserved identity that way (adversary-verified). DEV builds (`M0SAIC_DEV=1`, compile-stripped from the tarball) still trust an unsigned checkout for `missing-release` / `missing-signature` only; a tampered or forged tree is refused even in dev.
483
+ **Accepted residual.** A third-party `--template-repo` checkout with its own `node_modules` runs its own copies of non-`@m0saic` deps — third-party code, with the notice printed; it cannot obtain a reserved identity that way (adversary-verified). DEV builds (`M0SAIC_DEV=1`, compile-stripped from the tarball) still trust an unsigned community copy (installed, or a `--template-repo` folder) for `missing-release` / `missing-signature` only; a tampered or forged tree is refused even in dev.
344
484
 
345
485
  ## Wireframe commands
346
486
 
@@ -115,3 +115,10 @@ at t=0 or grind at ~1 fps. That one is neither parse depth nor `geq` eval cost
115
115
  that wall is engine-internal: `.ai/moat/runtime/macos-swscale-thread-cap.md`
116
116
  (absent in the shipped copy; symptom summary: dense still-image canvases freeze
117
117
  at t=0 / grind ~1 fps on macOS — the engine's threadGuard mitigates it).
118
+ Since 0.4.0 the same guard also caps every video decoder in a dense command:
119
+ past six threaded video inputs each `-i` takes `-threads K` (K = 32 / inputs,
120
+ between 1 and 4), because each mp4 decoder otherwise keeps a frame-thread pool of
121
+ one thread per core plus that many frames in flight — 22 inputs on an 8 GB machine
122
+ swapped until the kernel panicked. Stills, lavfi graphs and the engine's own qtrle
123
+ intermediates are not counted. Measured on the panic case (16 videos, 5 s at
124
+ 1080p, 8 GB): 29 s, 1.3 GB peak, no swap.