react-native-mask-segment-canvas 0.1.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 (95) hide show
  1. package/README.md +904 -0
  2. package/dist/components/MaskSegmentCanvas.d.ts +6 -0
  3. package/dist/components/MaskSegmentCanvas.d.ts.map +1 -0
  4. package/dist/components/MaskSegmentCanvas.js +2012 -0
  5. package/dist/components/MaskSegmentCanvas.js.map +1 -0
  6. package/dist/components/MaskSegmentCanvas.types.d.ts +189 -0
  7. package/dist/components/MaskSegmentCanvas.types.d.ts.map +1 -0
  8. package/dist/components/MaskSegmentCanvas.types.js +2 -0
  9. package/dist/components/MaskSegmentCanvas.types.js.map +1 -0
  10. package/dist/index.d.ts +6 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +5 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/shaders/regionPaint.sksl.d.ts +3 -0
  15. package/dist/shaders/regionPaint.sksl.d.ts.map +1 -0
  16. package/dist/shaders/regionPaint.sksl.js +72 -0
  17. package/dist/shaders/regionPaint.sksl.js.map +1 -0
  18. package/dist/utils/compositePaintedImage.d.ts +44 -0
  19. package/dist/utils/compositePaintedImage.d.ts.map +1 -0
  20. package/dist/utils/compositePaintedImage.js +146 -0
  21. package/dist/utils/compositePaintedImage.js.map +1 -0
  22. package/dist/utils/exportUtils.d.ts +20 -0
  23. package/dist/utils/exportUtils.d.ts.map +1 -0
  24. package/dist/utils/exportUtils.js +32 -0
  25. package/dist/utils/exportUtils.js.map +1 -0
  26. package/dist/utils/freqLayerPrep.d.ts +23 -0
  27. package/dist/utils/freqLayerPrep.d.ts.map +1 -0
  28. package/dist/utils/freqLayerPrep.js +168 -0
  29. package/dist/utils/freqLayerPrep.js.map +1 -0
  30. package/dist/utils/maskSegmentRuntime.d.ts +43 -0
  31. package/dist/utils/maskSegmentRuntime.d.ts.map +1 -0
  32. package/dist/utils/maskSegmentRuntime.js +181 -0
  33. package/dist/utils/maskSegmentRuntime.js.map +1 -0
  34. package/dist/utils/maskSegmentation.d.ts +133 -0
  35. package/dist/utils/maskSegmentation.d.ts.map +1 -0
  36. package/dist/utils/maskSegmentation.js +1600 -0
  37. package/dist/utils/maskSegmentation.js.map +1 -0
  38. package/dist/utils/maskSemanticPalette.d.ts +31 -0
  39. package/dist/utils/maskSemanticPalette.d.ts.map +1 -0
  40. package/dist/utils/maskSemanticPalette.js +125 -0
  41. package/dist/utils/maskSemanticPalette.js.map +1 -0
  42. package/dist/utils/opencvAdapter.d.ts +116 -0
  43. package/dist/utils/opencvAdapter.d.ts.map +1 -0
  44. package/dist/utils/opencvAdapter.js +353 -0
  45. package/dist/utils/opencvAdapter.js.map +1 -0
  46. package/dist/utils/paintColorMapTexture.d.ts +5 -0
  47. package/dist/utils/paintColorMapTexture.d.ts.map +1 -0
  48. package/dist/utils/paintColorMapTexture.js +203 -0
  49. package/dist/utils/paintColorMapTexture.js.map +1 -0
  50. package/dist/utils/paintShaderRuntime.d.ts +40 -0
  51. package/dist/utils/paintShaderRuntime.d.ts.map +1 -0
  52. package/dist/utils/paintShaderRuntime.js +76 -0
  53. package/dist/utils/paintShaderRuntime.js.map +1 -0
  54. package/dist/utils/pickMapTexture.d.ts +4 -0
  55. package/dist/utils/pickMapTexture.d.ts.map +1 -0
  56. package/dist/utils/pickMapTexture.js +24 -0
  57. package/dist/utils/pickMapTexture.js.map +1 -0
  58. package/dist/utils/pngImage.d.ts +49 -0
  59. package/dist/utils/pngImage.d.ts.map +1 -0
  60. package/dist/utils/pngImage.js +438 -0
  61. package/dist/utils/pngImage.js.map +1 -0
  62. package/dist/utils/resolveAssetPath.d.ts +3 -0
  63. package/dist/utils/resolveAssetPath.d.ts.map +1 -0
  64. package/dist/utils/resolveAssetPath.js +56 -0
  65. package/dist/utils/resolveAssetPath.js.map +1 -0
  66. package/dist/utils/resolveImageUrl.d.ts +3 -0
  67. package/dist/utils/resolveImageUrl.d.ts.map +1 -0
  68. package/dist/utils/resolveImageUrl.js +51 -0
  69. package/dist/utils/resolveImageUrl.js.map +1 -0
  70. package/dist/utils/skiaImage.d.ts +4 -0
  71. package/dist/utils/skiaImage.d.ts.map +1 -0
  72. package/dist/utils/skiaImage.js +12 -0
  73. package/dist/utils/skiaImage.js.map +1 -0
  74. package/package.json +100 -0
  75. package/patches/react-native-fast-opencv+0.4.8.patch +122 -0
  76. package/src/components/MaskSegmentCanvas.tsx +2832 -0
  77. package/src/components/MaskSegmentCanvas.types.ts +216 -0
  78. package/src/globals.d.ts +19 -0
  79. package/src/index.ts +45 -0
  80. package/src/shaders/regionPaint.sksl.ts +71 -0
  81. package/src/upng-js.d.ts +33 -0
  82. package/src/utils/compositePaintedImage.ts +201 -0
  83. package/src/utils/exportUtils.ts +40 -0
  84. package/src/utils/freqLayerPrep.ts +267 -0
  85. package/src/utils/maskSegmentRuntime.ts +257 -0
  86. package/src/utils/maskSegmentation.ts +2294 -0
  87. package/src/utils/maskSemanticPalette.ts +187 -0
  88. package/src/utils/opencvAdapter.ts +539 -0
  89. package/src/utils/paintColorMapTexture.ts +239 -0
  90. package/src/utils/paintShaderRuntime.tsx +150 -0
  91. package/src/utils/pickMapTexture.ts +37 -0
  92. package/src/utils/pngImage.ts +591 -0
  93. package/src/utils/resolveAssetPath.ts +64 -0
  94. package/src/utils/resolveImageUrl.ts +63 -0
  95. package/src/utils/skiaImage.ts +25 -0
@@ -0,0 +1,181 @@
1
+ import { BASEBOARD_STRIP_QUANT_KEYS, CABINET_QUANT_KEYS, MASK_SEMANTIC_COLORS, WALL_QUANT_KEYS, } from './maskSemanticPalette';
2
+ /** high */
3
+ export const PIPELINE_HIGH = {
4
+ maxImageLongSide: 1440,
5
+ paintFreqMaxLongSide: 960,
6
+ originPreviewMaxLongSide: 720,
7
+ maskPathMaxLongSide: 960,
8
+ minContourArea: 50,
9
+ contourApproxEpsilon: 0.002,
10
+ maxRegions: 800,
11
+ };
12
+ /** middle */
13
+ export const PIPELINE_MEDIUM = {
14
+ maxImageLongSide: 720,
15
+ paintFreqMaxLongSide: 480,
16
+ originPreviewMaxLongSide: 360,
17
+ maskPathMaxLongSide: 480,
18
+ minContourArea: 100,
19
+ contourApproxEpsilon: 0.003,
20
+ maxRegions: 500,
21
+ };
22
+ /** low */
23
+ export const PIPELINE_LOW = {
24
+ maxImageLongSide: 360,
25
+ paintFreqMaxLongSide: 240,
26
+ originPreviewMaxLongSide: 180,
27
+ maskPathMaxLongSide: 240,
28
+ minContourArea: 200,
29
+ contourApproxEpsilon: 0.005,
30
+ maxRegions: 300,
31
+ };
32
+ export const PIPELINE_PRESETS = {
33
+ high: PIPELINE_HIGH,
34
+ medium: PIPELINE_MEDIUM,
35
+ low: PIPELINE_LOW,
36
+ };
37
+ export const DEFAULT_PIPELINE_CONFIG = PIPELINE_HIGH;
38
+ export function resolvePipelineConfig(preset, overrides) {
39
+ const base = preset != null ? PIPELINE_PRESETS[preset] : DEFAULT_PIPELINE_CONFIG;
40
+ return { ...base, ...overrides };
41
+ }
42
+ const DEFAULT_PAINT_PALETTE = [
43
+ { b: 138, g: 126, r: 110 },
44
+ { b: 92, g: 124, r: 86 },
45
+ { b: 70, g: 80, r: 158 },
46
+ { b: 54, g: 134, r: 182 },
47
+ { b: 128, g: 98, r: 142 },
48
+ { b: 76, g: 120, r: 138 },
49
+ ];
50
+ export const DEFAULT_PAINT_CONFIG = {
51
+ palette: DEFAULT_PAINT_PALETTE,
52
+ // Optimized coloring: slightly stronger base color fidelity while preserving natural lighting.
53
+ colorBaseOpacity: 0.88,
54
+ lLightOpacity: 0.50,
55
+ // Strengthened texture retention (high-freq detail overlay) for richer surface appearance after recolor.
56
+ textureOpacity: 0.85,
57
+ // Slightly tighter low-freq lighting kernel for cleaner wall/ceiling shading without over-smoothing.
58
+ lLowBlurKernel: 7,
59
+ lLowContrast: 1.10,
60
+ lLowBrightness: 0.92,
61
+ lHighGain: 1.22,
62
+ // Edge handling: small positive feather produces soft transitions at painted region boundaries.
63
+ // color feather drives the paintColorMap alpha softness (used by shader for blend-to-origin).
64
+ maskFeatherColor: 1.6,
65
+ maskFeatherTexture: 0.9,
66
+ regionOverlayFill: '#FFC14D',
67
+ regionOutlineStrokeWidth: 4,
68
+ };
69
+ export const DEFAULT_INTERACTION_CONFIG = {
70
+ kickMaskPickRadiusPx: 36,
71
+ pickMapSearchRadiusPx: 14,
72
+ thinStripPadding: 0.008,
73
+ regionPadding: 0.003,
74
+ initRegionFlashMs: 1000,
75
+ enableInitRegionFlash: true,
76
+ };
77
+ export const DEFAULT_MASK_CONFIG = {
78
+ semanticColors: MASK_SEMANTIC_COLORS,
79
+ baseboardMaxColorDist: 42,
80
+ blackThreshold: 30,
81
+ quantStep: 64,
82
+ baseboardStripQuantKeys: new Set(BASEBOARD_STRIP_QUANT_KEYS),
83
+ wallQuantKeys: new Set(WALL_QUANT_KEYS),
84
+ cabinetQuantKeys: new Set(CABINET_QUANT_KEYS),
85
+ maxRegionColors: 6,
86
+ secondarySemanticNames: new Set(['garageDoor', 'roof', 'eave']),
87
+ secondaryMinPixelRatio: 0.002,
88
+ junctionHRadiusPx: 24,
89
+ junctionVRadiusPx: 2,
90
+ kickBridgeHalfWPx: 6,
91
+ baseboardJunctionRowMarginPx: 1,
92
+ baseboardJunctionVReachPx: 2,
93
+ baseboardMinRunPx: 2,
94
+ };
95
+ function toStringSet(values) {
96
+ return new Set(values ?? []);
97
+ }
98
+ export function mergeMaskConfig(partial) {
99
+ if (!partial) {
100
+ return { ...DEFAULT_MASK_CONFIG };
101
+ }
102
+ return {
103
+ semanticColors: partial.semanticColors ?? DEFAULT_MASK_CONFIG.semanticColors,
104
+ baseboardMaxColorDist: partial.baseboardMaxColorDist ?? DEFAULT_MASK_CONFIG.baseboardMaxColorDist,
105
+ blackThreshold: partial.blackThreshold ?? DEFAULT_MASK_CONFIG.blackThreshold,
106
+ quantStep: partial.quantStep ?? DEFAULT_MASK_CONFIG.quantStep,
107
+ baseboardStripQuantKeys: partial.baseboardStripQuantKeys
108
+ ? toStringSet(partial.baseboardStripQuantKeys)
109
+ : new Set(DEFAULT_MASK_CONFIG.baseboardStripQuantKeys),
110
+ wallQuantKeys: partial.wallQuantKeys
111
+ ? toStringSet(partial.wallQuantKeys)
112
+ : new Set(DEFAULT_MASK_CONFIG.wallQuantKeys),
113
+ cabinetQuantKeys: partial.cabinetQuantKeys
114
+ ? toStringSet(partial.cabinetQuantKeys)
115
+ : new Set(DEFAULT_MASK_CONFIG.cabinetQuantKeys),
116
+ maxRegionColors: partial.maxRegionColors ?? DEFAULT_MASK_CONFIG.maxRegionColors,
117
+ secondarySemanticNames: partial.secondarySemanticNames
118
+ ? toStringSet(partial.secondarySemanticNames)
119
+ : new Set(DEFAULT_MASK_CONFIG.secondarySemanticNames),
120
+ secondaryMinPixelRatio: partial.secondaryMinPixelRatio ??
121
+ DEFAULT_MASK_CONFIG.secondaryMinPixelRatio,
122
+ junctionHRadiusPx: partial.junctionHRadiusPx ?? DEFAULT_MASK_CONFIG.junctionHRadiusPx,
123
+ junctionVRadiusPx: partial.junctionVRadiusPx ?? DEFAULT_MASK_CONFIG.junctionVRadiusPx,
124
+ kickBridgeHalfWPx: partial.kickBridgeHalfWPx ?? DEFAULT_MASK_CONFIG.kickBridgeHalfWPx,
125
+ baseboardJunctionRowMarginPx: partial.baseboardJunctionRowMarginPx ??
126
+ DEFAULT_MASK_CONFIG.baseboardJunctionRowMarginPx,
127
+ baseboardJunctionVReachPx: partial.baseboardJunctionVReachPx ??
128
+ DEFAULT_MASK_CONFIG.baseboardJunctionVReachPx,
129
+ baseboardMinRunPx: partial.baseboardMinRunPx ?? DEFAULT_MASK_CONFIG.baseboardMinRunPx,
130
+ };
131
+ }
132
+ export function createRuntimeConfig(input) {
133
+ return {
134
+ pipeline: {
135
+ ...DEFAULT_PIPELINE_CONFIG,
136
+ ...input?.pipelineConfig,
137
+ },
138
+ mask: mergeMaskConfig(input?.maskConfig),
139
+ paint: {
140
+ ...DEFAULT_PAINT_CONFIG,
141
+ ...input?.paintConfig,
142
+ palette: input?.paintConfig?.palette ?? DEFAULT_PAINT_CONFIG.palette,
143
+ },
144
+ interaction: {
145
+ ...DEFAULT_INTERACTION_CONFIG,
146
+ ...input?.interactionConfig,
147
+ },
148
+ };
149
+ }
150
+ let activeRuntime = createRuntimeConfig();
151
+ let runtimeRevision = 0;
152
+ export function getMaskRuntimeRevision() {
153
+ return runtimeRevision;
154
+ }
155
+ export function setMaskSegmentRuntimeConfig(input) {
156
+ activeRuntime = {
157
+ pipeline: input?.pipelineConfig
158
+ ? { ...activeRuntime.pipeline, ...input.pipelineConfig }
159
+ : activeRuntime.pipeline,
160
+ mask: input?.maskConfig
161
+ ? mergeMaskConfig(input.maskConfig)
162
+ : activeRuntime.mask,
163
+ paint: input?.paintConfig
164
+ ? { ...activeRuntime.paint, ...input.paintConfig }
165
+ : activeRuntime.paint,
166
+ interaction: input?.interactionConfig
167
+ ? { ...activeRuntime.interaction, ...input.interactionConfig }
168
+ : activeRuntime.interaction,
169
+ };
170
+ runtimeRevision += 1;
171
+ return activeRuntime;
172
+ }
173
+ export function getMaskSegmentRuntimeConfig() {
174
+ return activeRuntime;
175
+ }
176
+ export function resetMaskSegmentRuntimeConfig() {
177
+ activeRuntime = createRuntimeConfig();
178
+ runtimeRevision += 1;
179
+ return activeRuntime;
180
+ }
181
+ //# sourceMappingURL=maskSegmentRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maskSegmentRuntime.js","sourceRoot":"","sources":["../../src/utils/maskSegmentRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import { type WrappedMat } from './opencvAdapter';
2
+ import { type SkPath } from '@shopify/react-native-skia';
3
+ export type RegionPickMap = {
4
+ buffer: Uint8Array;
5
+ cols: number;
6
+ rows: number;
7
+ };
8
+ export type SegmentMaskResult = {
9
+ regions: SegmentRegion[];
10
+ pickMap: RegionPickMap;
11
+ labels: Uint8Array;
12
+ baseboardBinary: Uint8Array;
13
+ segCols: number;
14
+ segRows: number;
15
+ };
16
+ export type SegmentRegion = {
17
+ id: number;
18
+ /** 语义分区名(door / cabinet / baseboard …) */
19
+ name: string;
20
+ /** 参考色 hex */
21
+ hex: string;
22
+ /** 参考色(BGR) */
23
+ color: {
24
+ b: number;
25
+ g: number;
26
+ r: number;
27
+ };
28
+ polygons: {
29
+ x: number;
30
+ y: number;
31
+ }[][];
32
+ /** 上色/高亮蒙版:严格像素条带,不填充黑色空洞 */
33
+ maskPolygons?: {
34
+ x: number;
35
+ y: number;
36
+ }[][];
37
+ hitPolygons?: {
38
+ x: number;
39
+ y: number;
40
+ }[][];
41
+ outlinePolygons?: {
42
+ x: number;
43
+ y: number;
44
+ }[][];
45
+ bbox: {
46
+ x: number;
47
+ y: number;
48
+ w: number;
49
+ h: number;
50
+ };
51
+ area: number;
52
+ /** 踢脚线等细条区域,点击检测需加宽容差 */
53
+ thinStrip?: boolean;
54
+ };
55
+ export declare function buildRegionOutlinePolygons(reg: SegmentRegion): NormPoint[][];
56
+ export declare function buildRegionOutlinePathForRegion(regionId: number, regions: SegmentRegion[], maskData: RegionMaskData, rect: {
57
+ x: number;
58
+ y: number;
59
+ w: number;
60
+ h: number;
61
+ }, normSeed?: {
62
+ x: number;
63
+ y: number;
64
+ }): SkPath;
65
+ export declare function buildAllRegionOutlinePaths(regions: SegmentRegion[], maskData: RegionMaskData, rect: {
66
+ x: number;
67
+ y: number;
68
+ w: number;
69
+ h: number;
70
+ }): Map<number, SkPath>;
71
+ /** 从二值图逐行条带构建蒙版(供 Skia PathBuilder 使用) */
72
+ export declare function appendMaskBinaryToPathBuilder(binary: Uint8Array, cols: number, rows: number, rect: {
73
+ x: number;
74
+ y: number;
75
+ w: number;
76
+ h: number;
77
+ }, builder: {
78
+ moveTo: (x: number, y: number) => unknown;
79
+ lineTo: (x: number, y: number) => unknown;
80
+ close: () => unknown;
81
+ }, minRunPx?: number): void;
82
+ /** 从语义标签逐行条带构建蒙版(避免维护多张二值图) */
83
+ export declare function appendLabelMaskToPathBuilder(labels: Uint8Array, semanticIndex: number, cols: number, rows: number, rect: {
84
+ x: number;
85
+ y: number;
86
+ w: number;
87
+ h: number;
88
+ }, builder: {
89
+ moveTo: (x: number, y: number) => unknown;
90
+ lineTo: (x: number, y: number) => unknown;
91
+ close: () => unknown;
92
+ }, minRunPx?: number): void;
93
+ export type RegionMaskData = {
94
+ labels: Uint8Array;
95
+ baseboardBinary: Uint8Array;
96
+ cols: number;
97
+ rows: number;
98
+ };
99
+ /** 蒙版路径构建降采样(屏幕显示不需要分割分辨率,点击仍用全分辨率 pickMap) */
100
+ export declare function downsampleMaskDataForPaths(maskData: RegionMaskData, maxLongSide: number): RegionMaskData;
101
+ /** 单次扫描构建所有分区 Skia 蒙版路径(单 label pass,避免每像素 × 语义数循环) */
102
+ export declare function buildAllRegionMaskPaths(regions: SegmentRegion[], maskData: RegionMaskData, rect: {
103
+ x: number;
104
+ y: number;
105
+ w: number;
106
+ h: number;
107
+ }): Map<number, SkPath>;
108
+ type NormPoint = {
109
+ x: number;
110
+ y: number;
111
+ };
112
+ export declare function buildBaseboardBinaryFromMask(buffer: Uint8Array, cols: number, rows: number): Uint8Array;
113
+ /** 分割分辨率踢脚线二值图最近邻放大到点击查表分辨率(避免全图 junction 重算) */
114
+ export declare function upscaleBinaryMask(src: Uint8Array, srcCols: number, srcRows: number, dstCols: number, dstRows: number): Uint8Array;
115
+ export declare function isBaseboardMaskPixel(buffer: Uint8Array, cols: number, rows: number, x: number, y: number, baseboardBinary?: Uint8Array | null): boolean;
116
+ export { isStrictBaseboardPixel as isBaseboardPixel } from './maskSemanticPalette';
117
+ export declare function getMaskQuantKey(b: number, g: number, r: number): string;
118
+ /** @deprecated 请使用 isBaseboardMaskPixel */
119
+ export declare function isKickPlatePixel(b: number, g: number, r: number): boolean;
120
+ export declare function extractRegionsFromMaskBuffer(buffer: Uint8Array, cols: number, rows: number, _options: {
121
+ minArea: number;
122
+ approxEpsilon: number;
123
+ }): Promise<SegmentMaskResult>;
124
+ export declare function extractRegionsFromMaskBufferSync(buffer: Uint8Array, cols: number, rows: number, _options: {
125
+ minArea: number;
126
+ approxEpsilon: number;
127
+ }): SegmentMaskResult;
128
+ /** @deprecated 请使用 extractRegionsFromMaskBuffer */
129
+ export declare function extractRegionsFromMask(maskMat: WrappedMat, options: {
130
+ minArea: number;
131
+ approxEpsilon: number;
132
+ }): Promise<SegmentRegion[]>;
133
+ //# sourceMappingURL=maskSegmentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maskSegmentation.d.ts","sourceRoot":"","sources":["../../src/utils/maskSegmentation.ts"],"names":[],"mappings":"AAAA,OAAW,EAAuB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAkB/D,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,UAAU,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe;IACf,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,CAAC;IACvC,6BAA6B;IAC7B,YAAY,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,CAAC;IAC3C,eAAe,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,CAAC;IAC/C,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAgBF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,EAAE,EAAE,CAQ5E;AAqcD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,QAAQ,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC,MAAM,CAUR;AA2CD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBrB;AAkND,0CAA0C;AAC1C,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE;IACP,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC;CACtB,EACD,QAAQ,SAA8B,GACrC,IAAI,CA2BN;AAED,+BAA+B;AAC/B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE;IACP,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC;CACtB,EACD,QAAQ,SAA8B,GACrC,IAAI,CA8BN;AAkCD,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,UAAU,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,+CAA+C;AAC/C,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,MAAM,GAClB,cAAc,CAgChB;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EAAE,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAqFrB;AAwGD,KAAK,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAgQ1C,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,UAAU,CAEZ;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,UAAU,CAYZ;AAcD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,eAAe,CAAC,EAAE,UAAU,GAAG,IAAI,GAClC,OAAO,CAuBT;AAED,OAAO,EAAE,sBAAsB,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzE;AAunBD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,iBAAiB,CAAC,CAE5B;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,iBAAiB,CAiHnB;AAED,mDAAmD;AACnD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,aAAa,EAAE,CAAC,CAI1B"}