skill-calorie 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.
- package/dist/analysis/anomaly/common.d.ts +53 -0
- package/dist/analysis/anomaly/common.d.ts.map +1 -0
- package/dist/analysis/anomaly/common.js +69 -0
- package/dist/analysis/anomaly/common.js.map +1 -0
- package/dist/analysis/anomaly/diet.d.ts +8 -0
- package/dist/analysis/anomaly/diet.d.ts.map +1 -0
- package/dist/analysis/anomaly/diet.js +95 -0
- package/dist/analysis/anomaly/diet.js.map +1 -0
- package/dist/analysis/anomaly/exercise.d.ts +9 -0
- package/dist/analysis/anomaly/exercise.d.ts.map +1 -0
- package/dist/analysis/anomaly/exercise.js +116 -0
- package/dist/analysis/anomaly/exercise.js.map +1 -0
- package/dist/analysis/anomaly/index.d.ts +19 -0
- package/dist/analysis/anomaly/index.d.ts.map +1 -0
- package/dist/analysis/anomaly/index.js +51 -0
- package/dist/analysis/anomaly/index.js.map +1 -0
- package/dist/analysis/anomaly/overall.d.ts +13 -0
- package/dist/analysis/anomaly/overall.d.ts.map +1 -0
- package/dist/analysis/anomaly/overall.js +128 -0
- package/dist/analysis/anomaly/overall.js.map +1 -0
- package/dist/analysis/anomaly/overall2.d.ts +5 -0
- package/dist/analysis/anomaly/overall2.d.ts.map +1 -0
- package/dist/analysis/anomaly/overall2.js +94 -0
- package/dist/analysis/anomaly/overall2.js.map +1 -0
- package/dist/analysis/anomaly/weight.d.ts +8 -0
- package/dist/analysis/anomaly/weight.d.ts.map +1 -0
- package/dist/analysis/anomaly/weight.js +106 -0
- package/dist/analysis/anomaly/weight.js.map +1 -0
- package/dist/analysis/anomaly/weight2.d.ts +4 -0
- package/dist/analysis/anomaly/weight2.d.ts.map +1 -0
- package/dist/analysis/anomaly/weight2.js +59 -0
- package/dist/analysis/anomaly/weight2.js.map +1 -0
- package/dist/analysis/contraindications.d.ts +63 -0
- package/dist/analysis/contraindications.d.ts.map +1 -0
- package/dist/analysis/contraindications.js +121 -0
- package/dist/analysis/contraindications.js.map +1 -0
- package/dist/analysis/cross.d.ts +75 -0
- package/dist/analysis/cross.d.ts.map +1 -0
- package/dist/analysis/cross.js +283 -0
- package/dist/analysis/cross.js.map +1 -0
- package/dist/analysis/dashboard.d.ts +18 -0
- package/dist/analysis/dashboard.d.ts.map +1 -0
- package/dist/analysis/dashboard.js +48 -0
- package/dist/analysis/dashboard.js.map +1 -0
- package/dist/analysis/deficit.d.ts +44 -0
- package/dist/analysis/deficit.d.ts.map +1 -0
- package/dist/analysis/deficit.js +54 -0
- package/dist/analysis/deficit.js.map +1 -0
- package/dist/analysis/diet.d.ts +76 -0
- package/dist/analysis/diet.d.ts.map +1 -0
- package/dist/analysis/diet.js +164 -0
- package/dist/analysis/diet.js.map +1 -0
- package/dist/analysis/exercise.d.ts +98 -0
- package/dist/analysis/exercise.d.ts.map +1 -0
- package/dist/analysis/exercise.js +298 -0
- package/dist/analysis/exercise.js.map +1 -0
- package/dist/analysis/exerciseReview.d.ts +36 -0
- package/dist/analysis/exerciseReview.d.ts.map +1 -0
- package/dist/analysis/exerciseReview.js +50 -0
- package/dist/analysis/exerciseReview.js.map +1 -0
- package/dist/analysis/precision.d.ts +15 -0
- package/dist/analysis/precision.d.ts.map +1 -0
- package/dist/analysis/precision.js +38 -0
- package/dist/analysis/precision.js.map +1 -0
- package/dist/analysis/result.d.ts +15 -0
- package/dist/analysis/result.d.ts.map +1 -0
- package/dist/analysis/result.js +13 -0
- package/dist/analysis/result.js.map +1 -0
- package/dist/analysis/review.d.ts +118 -0
- package/dist/analysis/review.d.ts.map +1 -0
- package/dist/analysis/review.js +195 -0
- package/dist/analysis/review.js.map +1 -0
- package/dist/analysis/series.d.ts +42 -0
- package/dist/analysis/series.d.ts.map +1 -0
- package/dist/analysis/series.js +127 -0
- package/dist/analysis/series.js.map +1 -0
- package/dist/analysis/simulate.d.ts +43 -0
- package/dist/analysis/simulate.d.ts.map +1 -0
- package/dist/analysis/simulate.js +109 -0
- package/dist/analysis/simulate.js.map +1 -0
- package/dist/analysis/simulate2.d.ts +65 -0
- package/dist/analysis/simulate2.d.ts.map +1 -0
- package/dist/analysis/simulate2.js +173 -0
- package/dist/analysis/simulate2.js.map +1 -0
- package/dist/analysis/trend.d.ts +39 -0
- package/dist/analysis/trend.d.ts.map +1 -0
- package/dist/analysis/trend.js +48 -0
- package/dist/analysis/trend.js.map +1 -0
- package/dist/analysis/utils.d.ts +17 -0
- package/dist/analysis/utils.d.ts.map +1 -0
- package/dist/analysis/utils.js +52 -0
- package/dist/analysis/utils.js.map +1 -0
- package/dist/analysis/volatility.d.ts +43 -0
- package/dist/analysis/volatility.d.ts.map +1 -0
- package/dist/analysis/volatility.js +96 -0
- package/dist/analysis/volatility.js.map +1 -0
- package/dist/analysis/weight.d.ts +86 -0
- package/dist/analysis/weight.d.ts.map +1 -0
- package/dist/analysis/weight.js +219 -0
- package/dist/analysis/weight.js.map +1 -0
- package/dist/analysis/weightCompare.d.ts +63 -0
- package/dist/analysis/weightCompare.d.ts.map +1 -0
- package/dist/analysis/weightCompare.js +212 -0
- package/dist/analysis/weightCompare.js.map +1 -0
- package/dist/analysis/weightCompare2.d.ts +63 -0
- package/dist/analysis/weightCompare2.d.ts.map +1 -0
- package/dist/analysis/weightCompare2.js +211 -0
- package/dist/analysis/weightCompare2.js.map +1 -0
- package/dist/analysis/weightCompare3.d.ts +13 -0
- package/dist/analysis/weightCompare3.d.ts.map +1 -0
- package/dist/analysis/weightCompare3.js +199 -0
- package/dist/analysis/weightCompare3.js.map +1 -0
- package/dist/cli/cmd_read.d.ts +8 -0
- package/dist/cli/cmd_read.d.ts.map +1 -0
- package/dist/cli/cmd_read.js +719 -0
- package/dist/cli/cmd_read.js.map +1 -0
- package/dist/cli/keys.d.ts +333 -0
- package/dist/cli/keys.d.ts.map +1 -0
- package/dist/cli/keys.js +103 -0
- package/dist/cli/keys.js.map +1 -0
- package/dist/cli/write.d.ts +24 -0
- package/dist/cli/write.d.ts.map +1 -0
- package/dist/cli/write.js +832 -0
- package/dist/cli/write.js.map +1 -0
- package/dist/fetch/audit.d.ts +25 -0
- package/dist/fetch/audit.d.ts.map +1 -0
- package/dist/fetch/audit.js +46 -0
- package/dist/fetch/audit.js.map +1 -0
- package/dist/fetch/batch.d.ts +68 -0
- package/dist/fetch/batch.d.ts.map +1 -0
- package/dist/fetch/batch.js +183 -0
- package/dist/fetch/batch.js.map +1 -0
- package/dist/fetch/body.d.ts +89 -0
- package/dist/fetch/body.d.ts.map +1 -0
- package/dist/fetch/body.js +217 -0
- package/dist/fetch/body.js.map +1 -0
- package/dist/fetch/cli.d.ts +3 -0
- package/dist/fetch/cli.d.ts.map +1 -0
- package/dist/fetch/cli.js +195 -0
- package/dist/fetch/cli.js.map +1 -0
- package/dist/fetch/cross-skill.d.ts +29 -0
- package/dist/fetch/cross-skill.d.ts.map +1 -0
- package/dist/fetch/cross-skill.js +42 -0
- package/dist/fetch/cross-skill.js.map +1 -0
- package/dist/fetch/db.d.ts +5 -0
- package/dist/fetch/db.d.ts.map +1 -0
- package/dist/fetch/db.js +4 -0
- package/dist/fetch/db.js.map +1 -0
- package/dist/fetch/diet.d.ts +174 -0
- package/dist/fetch/diet.d.ts.map +1 -0
- package/dist/fetch/diet.js +239 -0
- package/dist/fetch/diet.js.map +1 -0
- package/dist/fetch/errors.d.ts +5 -0
- package/dist/fetch/errors.d.ts.map +1 -0
- package/dist/fetch/errors.js +8 -0
- package/dist/fetch/errors.js.map +1 -0
- package/dist/fetch/exercise.d.ts +72 -0
- package/dist/fetch/exercise.d.ts.map +1 -0
- package/dist/fetch/exercise.js +270 -0
- package/dist/fetch/exercise.js.map +1 -0
- package/dist/fetch/goal.d.ts +48 -0
- package/dist/fetch/goal.d.ts.map +1 -0
- package/dist/fetch/goal.js +73 -0
- package/dist/fetch/goal.js.map +1 -0
- package/dist/fetch/goalHistory.d.ts +24 -0
- package/dist/fetch/goalHistory.d.ts.map +1 -0
- package/dist/fetch/goalHistory.js +51 -0
- package/dist/fetch/goalHistory.js.map +1 -0
- package/dist/fetch/history.d.ts +28 -0
- package/dist/fetch/history.d.ts.map +1 -0
- package/dist/fetch/history.js +29 -0
- package/dist/fetch/history.js.map +1 -0
- package/dist/fetch/index.d.ts +23 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/index.js +16 -0
- package/dist/fetch/index.js.map +1 -0
- package/dist/fetch/nutritionGoal.d.ts +115 -0
- package/dist/fetch/nutritionGoal.d.ts.map +1 -0
- package/dist/fetch/nutritionGoal.js +154 -0
- package/dist/fetch/nutritionGoal.js.map +1 -0
- package/dist/fetch/photos.d.ts +76 -0
- package/dist/fetch/photos.d.ts.map +1 -0
- package/dist/fetch/photos.js +193 -0
- package/dist/fetch/photos.js.map +1 -0
- package/dist/fetch/plan.d.ts +145 -0
- package/dist/fetch/plan.d.ts.map +1 -0
- package/dist/fetch/plan.js +258 -0
- package/dist/fetch/plan.js.map +1 -0
- package/dist/fetch/products.d.ts +62 -0
- package/dist/fetch/products.d.ts.map +1 -0
- package/dist/fetch/products.js +73 -0
- package/dist/fetch/products.js.map +1 -0
- package/dist/fetch/profile.d.ts +46 -0
- package/dist/fetch/profile.d.ts.map +1 -0
- package/dist/fetch/profile.js +105 -0
- package/dist/fetch/profile.js.map +1 -0
- package/dist/fetch/shapes.d.ts +41 -0
- package/dist/fetch/shapes.d.ts.map +1 -0
- package/dist/fetch/shapes.js +38 -0
- package/dist/fetch/shapes.js.map +1 -0
- package/dist/fetch/validate.d.ts +11 -0
- package/dist/fetch/validate.d.ts.map +1 -0
- package/dist/fetch/validate.js +64 -0
- package/dist/fetch/validate.js.map +1 -0
- package/dist/fetch/weight.d.ts +109 -0
- package/dist/fetch/weight.d.ts.map +1 -0
- package/dist/fetch/weight.js +210 -0
- package/dist/fetch/weight.js.map +1 -0
- package/dist/fetch/xunji-catalog.d.ts +17 -0
- package/dist/fetch/xunji-catalog.d.ts.map +1 -0
- package/dist/fetch/xunji-catalog.js +57 -0
- package/dist/fetch/xunji-catalog.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/kcal.d.ts +21 -0
- package/dist/kcal.d.ts.map +1 -0
- package/dist/kcal.js +27 -0
- package/dist/kcal.js.map +1 -0
- package/dist/migrate/migrate.d.ts +71 -0
- package/dist/migrate/migrate.d.ts.map +1 -0
- package/dist/migrate/migrate.js +450 -0
- package/dist/migrate/migrate.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +34 -0
- package/dist/paths.js.map +1 -0
- package/dist/render/analysisPlate.d.ts +49 -0
- package/dist/render/analysisPlate.d.ts.map +1 -0
- package/dist/render/analysisPlate.js +149 -0
- package/dist/render/analysisPlate.js.map +1 -0
- package/dist/render/bodyPlate.d.ts +55 -0
- package/dist/render/bodyPlate.d.ts.map +1 -0
- package/dist/render/bodyPlate.js +97 -0
- package/dist/render/bodyPlate.js.map +1 -0
- package/dist/render/diet.d.ts +47 -0
- package/dist/render/diet.d.ts.map +1 -0
- package/dist/render/diet.js +94 -0
- package/dist/render/diet.js.map +1 -0
- package/dist/render/envelope.d.ts +60 -0
- package/dist/render/envelope.d.ts.map +1 -0
- package/dist/render/envelope.js +111 -0
- package/dist/render/envelope.js.map +1 -0
- package/dist/render/errors.d.ts +10 -0
- package/dist/render/errors.d.ts.map +1 -0
- package/dist/render/errors.js +9 -0
- package/dist/render/errors.js.map +1 -0
- package/dist/render/exercise.d.ts +20 -0
- package/dist/render/exercise.d.ts.map +1 -0
- package/dist/render/exercise.js +32 -0
- package/dist/render/exercise.js.map +1 -0
- package/dist/render/goal.d.ts +24 -0
- package/dist/render/goal.d.ts.map +1 -0
- package/dist/render/goal.js +23 -0
- package/dist/render/goal.js.map +1 -0
- package/dist/render/goalExtra.d.ts +45 -0
- package/dist/render/goalExtra.d.ts.map +1 -0
- package/dist/render/goalExtra.js +94 -0
- package/dist/render/goalExtra.js.map +1 -0
- package/dist/render/goalPlate.d.ts +66 -0
- package/dist/render/goalPlate.d.ts.map +1 -0
- package/dist/render/goalPlate.js +110 -0
- package/dist/render/goalPlate.js.map +1 -0
- package/dist/render/health.d.ts +21 -0
- package/dist/render/health.d.ts.map +1 -0
- package/dist/render/health.js +41 -0
- package/dist/render/health.js.map +1 -0
- package/dist/render/help.d.ts +18 -0
- package/dist/render/help.d.ts.map +1 -0
- package/dist/render/help.js +58 -0
- package/dist/render/help.js.map +1 -0
- package/dist/render/home.d.ts +30 -0
- package/dist/render/home.d.ts.map +1 -0
- package/dist/render/home.js +73 -0
- package/dist/render/home.js.map +1 -0
- package/dist/render/html.d.ts +66 -0
- package/dist/render/html.d.ts.map +1 -0
- package/dist/render/html.js +510 -0
- package/dist/render/html.js.map +1 -0
- package/dist/render/index.d.ts +47 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +26 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/insightPlate.d.ts +55 -0
- package/dist/render/insightPlate.d.ts.map +1 -0
- package/dist/render/insightPlate.js +97 -0
- package/dist/render/insightPlate.js.map +1 -0
- package/dist/render/library.d.ts +32 -0
- package/dist/render/library.d.ts.map +1 -0
- package/dist/render/library.js +54 -0
- package/dist/render/library.js.map +1 -0
- package/dist/render/photo.d.ts +101 -0
- package/dist/render/photo.d.ts.map +1 -0
- package/dist/render/photo.js +241 -0
- package/dist/render/photo.js.map +1 -0
- package/dist/render/planPlate.d.ts +40 -0
- package/dist/render/planPlate.d.ts.map +1 -0
- package/dist/render/planPlate.js +72 -0
- package/dist/render/planPlate.js.map +1 -0
- package/dist/render/profilePlate.d.ts +17 -0
- package/dist/render/profilePlate.d.ts.map +1 -0
- package/dist/render/profilePlate.js +18 -0
- package/dist/render/profilePlate.js.map +1 -0
- package/dist/render/ranking.d.ts +22 -0
- package/dist/render/ranking.d.ts.map +1 -0
- package/dist/render/ranking.js +63 -0
- package/dist/render/ranking.js.map +1 -0
- package/dist/render/receipt.d.ts +71 -0
- package/dist/render/receipt.d.ts.map +1 -0
- package/dist/render/receipt.js +65 -0
- package/dist/render/receipt.js.map +1 -0
- package/dist/render/weightPlate.d.ts +54 -0
- package/dist/render/weightPlate.d.ts.map +1 -0
- package/dist/render/weightPlate.js +110 -0
- package/dist/render/weightPlate.js.map +1 -0
- package/dist/schema.d.ts +25 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +281 -0
- package/dist/schema.js.map +1 -0
- package/dist/triggers/help-lookup.d.ts +28 -0
- package/dist/triggers/help-lookup.d.ts.map +1 -0
- package/dist/triggers/help-lookup.js +163 -0
- package/dist/triggers/help-lookup.js.map +1 -0
- package/dist/triggers/index.d.ts +24 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +78 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/scene-01-home.d.ts +4 -0
- package/dist/triggers/scene-01-home.d.ts.map +1 -0
- package/dist/triggers/scene-01-home.js +13 -0
- package/dist/triggers/scene-01-home.js.map +1 -0
- package/dist/triggers/scene-02-diet.d.ts +4 -0
- package/dist/triggers/scene-02-diet.d.ts.map +1 -0
- package/dist/triggers/scene-02-diet.js +74 -0
- package/dist/triggers/scene-02-diet.js.map +1 -0
- package/dist/triggers/scene-03-weight.d.ts +4 -0
- package/dist/triggers/scene-03-weight.d.ts.map +1 -0
- package/dist/triggers/scene-03-weight.js +62 -0
- package/dist/triggers/scene-03-weight.js.map +1 -0
- package/dist/triggers/scene-04-exercise.d.ts +4 -0
- package/dist/triggers/scene-04-exercise.d.ts.map +1 -0
- package/dist/triggers/scene-04-exercise.js +43 -0
- package/dist/triggers/scene-04-exercise.js.map +1 -0
- package/dist/triggers/scene-05-workout.d.ts +4 -0
- package/dist/triggers/scene-05-workout.d.ts.map +1 -0
- package/dist/triggers/scene-05-workout.js +36 -0
- package/dist/triggers/scene-05-workout.js.map +1 -0
- package/dist/triggers/scene-06-goal.d.ts +4 -0
- package/dist/triggers/scene-06-goal.d.ts.map +1 -0
- package/dist/triggers/scene-06-goal.js +29 -0
- package/dist/triggers/scene-06-goal.js.map +1 -0
- package/dist/triggers/scene-07-profile.d.ts +4 -0
- package/dist/triggers/scene-07-profile.d.ts.map +1 -0
- package/dist/triggers/scene-07-profile.js +8 -0
- package/dist/triggers/scene-07-profile.js.map +1 -0
- package/dist/triggers/scene-08-body.d.ts +4 -0
- package/dist/triggers/scene-08-body.d.ts.map +1 -0
- package/dist/triggers/scene-08-body.js +17 -0
- package/dist/triggers/scene-08-body.js.map +1 -0
- package/dist/triggers/scene-09-photo.d.ts +4 -0
- package/dist/triggers/scene-09-photo.d.ts.map +1 -0
- package/dist/triggers/scene-09-photo.js +14 -0
- package/dist/triggers/scene-09-photo.js.map +1 -0
- package/dist/triggers/scene-10-analysis.d.ts +4 -0
- package/dist/triggers/scene-10-analysis.d.ts.map +1 -0
- package/dist/triggers/scene-10-analysis.js +180 -0
- package/dist/triggers/scene-10-analysis.js.map +1 -0
- package/dist/triggers/types.d.ts +66 -0
- package/dist/triggers/types.d.ts.map +1 -0
- package/dist/triggers/types.js +3 -0
- package/dist/triggers/types.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** T5 #24 · 体重对比续(b8 平台期/e/c5/d4/分发,对照老家 weight_compare.py)。 */
|
|
2
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
3
|
+
export type Row = [string, number];
|
|
4
|
+
export interface Seg {
|
|
5
|
+
label: string;
|
|
6
|
+
range: string;
|
|
7
|
+
count: number;
|
|
8
|
+
avg: number | null;
|
|
9
|
+
startKg: number | null;
|
|
10
|
+
endKg: number | null;
|
|
11
|
+
netChange: number | null;
|
|
12
|
+
volatility: number | null;
|
|
13
|
+
}
|
|
14
|
+
export interface Compare {
|
|
15
|
+
deltaKg: number | null;
|
|
16
|
+
direction: string;
|
|
17
|
+
rateDiffG: number | null;
|
|
18
|
+
speed: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ExtraRow {
|
|
21
|
+
label: string;
|
|
22
|
+
value: string;
|
|
23
|
+
spark?: Array<{
|
|
24
|
+
d: string;
|
|
25
|
+
kg: number;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export interface ScenarioResult {
|
|
29
|
+
segA: Seg;
|
|
30
|
+
segB: Seg;
|
|
31
|
+
compare: Compare;
|
|
32
|
+
extraRows?: ExtraRow[];
|
|
33
|
+
tolerance?: {
|
|
34
|
+
hit: boolean;
|
|
35
|
+
target: string;
|
|
36
|
+
hitDate?: string;
|
|
37
|
+
offsetDays?: number;
|
|
38
|
+
note?: string;
|
|
39
|
+
};
|
|
40
|
+
sampleWarning?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ScenarioOpts {
|
|
43
|
+
startA?: string;
|
|
44
|
+
endA?: string;
|
|
45
|
+
startB?: string;
|
|
46
|
+
endB?: string;
|
|
47
|
+
n?: number;
|
|
48
|
+
delta?: number;
|
|
49
|
+
scheduleDbPath?: string | null;
|
|
50
|
+
}
|
|
51
|
+
/** 平台期识别:日期跨度 ≥14 天且 max-min ≤0.5kg(允许 1-2 天缺口),取最近一个。 */
|
|
52
|
+
export declare function findPlateau(rows: Row[]): {
|
|
53
|
+
start: Row;
|
|
54
|
+
end: Row;
|
|
55
|
+
span: number;
|
|
56
|
+
} | null;
|
|
57
|
+
export declare function scenarioB8(db: DatabaseSync): ScenarioResult;
|
|
58
|
+
export declare function scenarioE1(db: DatabaseSync, today: string): ScenarioResult;
|
|
59
|
+
export declare function scenarioE2(db: DatabaseSync): ScenarioResult;
|
|
60
|
+
export declare function scenarioE3(db: DatabaseSync, deltaKg: number): ScenarioResult;
|
|
61
|
+
export declare function scenarioE5(db: DatabaseSync, today: string): ScenarioResult;
|
|
62
|
+
export declare function scenarioE6(db: DatabaseSync, today: string): ScenarioResult;
|
|
63
|
+
//# sourceMappingURL=weightCompare2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weightCompare2.d.ts","sourceRoot":"","sources":["../../src/analysis/weightCompare2.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnC,MAAM,WAAW,GAAG;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAC3L,MAAM,WAAW,OAAO;IAAG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC/G,MAAM,WAAW,QAAQ;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AACpG,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE;AAC9N,MAAM,WAAW,YAAY;IAAG,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAyB5J,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBtF;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,cAAc,CAiC3D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAY1E;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,GAAG,cAAc,CAgB3D;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAiC5E;AAgBD,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAa1E;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAa1E"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { FetchError } from '../fetch/errors.js';
|
|
2
|
+
const round = (n) => Math.round(n);
|
|
3
|
+
const round1 = (n) => Math.round(n * 10) / 10;
|
|
4
|
+
const round2 = (n) => Math.round(n * 100) / 100;
|
|
5
|
+
const round3 = (n) => Math.round(n * 1000) / 1000;
|
|
6
|
+
const mean = (xs) => xs.reduce((a, b) => a + b, 0) / xs.length;
|
|
7
|
+
const stdev = (xs) => {
|
|
8
|
+
if (xs.length < 2)
|
|
9
|
+
return 0;
|
|
10
|
+
const m = mean(xs);
|
|
11
|
+
return Math.sqrt(xs.reduce((a, b) => a + (b - m) * (b - m), 0) / (xs.length - 1));
|
|
12
|
+
};
|
|
13
|
+
function fetchRows(db, start, end) {
|
|
14
|
+
const raw = db.prepare('SELECT date AS d, weight_kg AS w FROM weight_log WHERE date BETWEEN ? AND ? ORDER BY date').all(start, end);
|
|
15
|
+
return raw.map((r) => [r.d, r.w]);
|
|
16
|
+
}
|
|
17
|
+
function fetchAll(db) {
|
|
18
|
+
const raw = db.prepare('SELECT date AS d, weight_kg AS w FROM weight_log ORDER BY date').all();
|
|
19
|
+
return raw.map((r) => [r.d, r.w]);
|
|
20
|
+
}
|
|
21
|
+
function dayDiff(a, b) {
|
|
22
|
+
return Math.round((Date.parse(b + 'T12:00:00Z') - Date.parse(a + 'T12:00:00Z')) / 86400000);
|
|
23
|
+
}
|
|
24
|
+
const singleSeg = (label, range, kg) => ({ label, range, count: 1, avg: kg, startKg: kg, endKg: kg, netChange: 0, volatility: 0 });
|
|
25
|
+
/** 平台期识别:日期跨度 ≥14 天且 max-min ≤0.5kg(允许 1-2 天缺口),取最近一个。 */
|
|
26
|
+
export function findPlateau(rows) {
|
|
27
|
+
const segs = [];
|
|
28
|
+
const n = rows.length;
|
|
29
|
+
for (let i = 0; i < n; i++) {
|
|
30
|
+
let j = i;
|
|
31
|
+
let lo = rows[i][1];
|
|
32
|
+
let hi = lo;
|
|
33
|
+
while (j + 1 < n) {
|
|
34
|
+
const nd = dayDiff(rows[j][0], rows[j + 1][0]);
|
|
35
|
+
if (nd > 2)
|
|
36
|
+
break;
|
|
37
|
+
j += 1;
|
|
38
|
+
lo = Math.min(lo, rows[j][1]);
|
|
39
|
+
hi = Math.max(hi, rows[j][1]);
|
|
40
|
+
if (hi - lo > 0.5)
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
const span = dayDiff(rows[i][0], rows[j][0]) + 1;
|
|
44
|
+
if (span >= 14 && hi - lo <= 0.5)
|
|
45
|
+
segs.push({ start: rows[i], end: rows[j], span });
|
|
46
|
+
}
|
|
47
|
+
if (segs.length === 0)
|
|
48
|
+
return null;
|
|
49
|
+
segs.sort((a, b) => (a.end[0] < b.end[0] ? -1 : 1));
|
|
50
|
+
return segs[segs.length - 1];
|
|
51
|
+
}
|
|
52
|
+
export function scenarioB8(db) {
|
|
53
|
+
const rows = fetchAll(db);
|
|
54
|
+
if (rows.length < 14)
|
|
55
|
+
throw new FetchError('数据不足(需至少 14 天记录)');
|
|
56
|
+
const p = findPlateau(rows);
|
|
57
|
+
const current = rows[rows.length - 1][1];
|
|
58
|
+
if (!p)
|
|
59
|
+
throw new FetchError('未识别到平台期(需至少连续 14 天波动 ≤ ±0.5kg)');
|
|
60
|
+
const after = rows.filter((r) => r[0] > p.end[0]);
|
|
61
|
+
const inSeg = rows.filter((r) => r[0] >= p.start[0] && r[0] <= p.end[0]).map((r) => r[1]);
|
|
62
|
+
const plateauAvg = mean(inSeg);
|
|
63
|
+
const deltaAfter = round2(current - plateauAvg);
|
|
64
|
+
let plateauCount = 1;
|
|
65
|
+
const breakDays = [];
|
|
66
|
+
let remaining = [...rows];
|
|
67
|
+
while (remaining.length >= 14) {
|
|
68
|
+
const q = findPlateau(remaining);
|
|
69
|
+
if (!q)
|
|
70
|
+
break;
|
|
71
|
+
plateauCount += 1;
|
|
72
|
+
const nxt = remaining.filter((r) => r[0] > q.end[0]);
|
|
73
|
+
if (nxt.length > 0)
|
|
74
|
+
breakDays.push(dayDiff(q.end[0], nxt[0][0]));
|
|
75
|
+
remaining = remaining.filter((r) => r[0] < q.start[0]);
|
|
76
|
+
}
|
|
77
|
+
const avgBreak = breakDays.length > 0 ? round(mean(breakDays)) : null;
|
|
78
|
+
return {
|
|
79
|
+
segA: { label: '平台期首日', range: p.start[0] + '(持续 ' + p.span + ' 天)', count: p.span, avg: round2(plateauAvg), startKg: p.start[1], endKg: p.end[1], netChange: round2(p.end[1] - p.start[1]), volatility: round2(Math.abs(p.end[1] - p.start[1])) },
|
|
80
|
+
segB: singleSeg('当前', rows[rows.length - 1][0], current),
|
|
81
|
+
compare: { deltaKg: round2(current - plateauAvg), direction: current < plateauAvg ? '下降' : current > plateauAvg ? '上升' : '持平', rateDiffG: null, speed: '—' },
|
|
82
|
+
extraRows: [
|
|
83
|
+
{ label: '平台期持续', value: p.span + ' 天' },
|
|
84
|
+
{ label: '突破后变化', value: (deltaAfter >= 0 ? '+' : '') + deltaAfter.toFixed(1) + ' kg' },
|
|
85
|
+
{ label: '第几次平台期', value: '第 ' + plateauCount + ' 次' },
|
|
86
|
+
{ label: '历史平均突破耗时', value: avgBreak !== null ? avgBreak + ' 天' : '—' },
|
|
87
|
+
],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function scenarioE1(db, today) {
|
|
91
|
+
const rows = fetchAll(db);
|
|
92
|
+
if (rows.length === 0)
|
|
93
|
+
throw new FetchError('无体重记录');
|
|
94
|
+
const current = rows[rows.length - 1][1];
|
|
95
|
+
const minRow = rows.reduce((a, b) => (b[1] < a[1] ? b : a));
|
|
96
|
+
const daysSince = dayDiff(minRow[0], today);
|
|
97
|
+
return {
|
|
98
|
+
segA: singleSeg('历史最低', minRow[0], minRow[1]),
|
|
99
|
+
segB: singleSeg('当前', rows[rows.length - 1][0], current),
|
|
100
|
+
compare: { deltaKg: round2(current - minRow[1]), direction: current > minRow[1] ? '上升' : '持平', rateDiffG: null, speed: '—' },
|
|
101
|
+
extraRows: [{ label: '距历史最低', value: daysSince + ' 天' }],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export function scenarioE2(db) {
|
|
105
|
+
const rows = fetchAll(db);
|
|
106
|
+
if (rows.length === 0)
|
|
107
|
+
throw new FetchError('无体重记录');
|
|
108
|
+
const current = rows[rows.length - 1][1];
|
|
109
|
+
const maxRow = rows.reduce((a, b) => (b[1] > a[1] ? b : a));
|
|
110
|
+
const dropped = round2(maxRow[1] - current);
|
|
111
|
+
const days = Math.max(1, dayDiff(maxRow[0], rows[rows.length - 1][0]));
|
|
112
|
+
return {
|
|
113
|
+
segA: singleSeg('历史最高', maxRow[0], maxRow[1]),
|
|
114
|
+
segB: singleSeg('当前', rows[rows.length - 1][0], current),
|
|
115
|
+
compare: { deltaKg: round2(current - maxRow[1]), direction: current < maxRow[1] ? '下降' : '持平', rateDiffG: null, speed: '—' },
|
|
116
|
+
extraRows: [
|
|
117
|
+
{ label: '已下降', value: dropped.toFixed(1) + ' kg' },
|
|
118
|
+
{ label: '下降速率', value: round3(dropped / days).toFixed(3) + ' kg/天' },
|
|
119
|
+
],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export function scenarioE3(db, deltaKg) {
|
|
123
|
+
const rows = fetchAll(db);
|
|
124
|
+
if (rows.length === 0)
|
|
125
|
+
throw new FetchError('无体重记录');
|
|
126
|
+
const current = rows[rows.length - 1][1];
|
|
127
|
+
const maxKg = Math.max(...rows.map((r) => r[1]));
|
|
128
|
+
const th = maxKg - deltaKg;
|
|
129
|
+
const hit = rows.find((r) => r[1] <= th);
|
|
130
|
+
if (!hit) {
|
|
131
|
+
const diff = round1(maxKg - current);
|
|
132
|
+
throw new FetchError('未达成减重 ' + deltaKg + 'kg 里程碑(当前距历史最高已减 ' + diff + 'kg)');
|
|
133
|
+
}
|
|
134
|
+
const elapsed = Math.max(1, dayDiff(hit[0], rows[rows.length - 1][0]));
|
|
135
|
+
const rate = round3((current - hit[1]) / elapsed);
|
|
136
|
+
let pts = rows.filter((r) => r[0] >= hit[0]);
|
|
137
|
+
const crossYear = pts.length > 1 && pts[0][0].slice(0, 4) !== pts[pts.length - 1][0].slice(0, 4);
|
|
138
|
+
const fmt = (d) => crossYear ? d.slice(2) : d.slice(5);
|
|
139
|
+
if (pts.length > 10) {
|
|
140
|
+
const step = (pts.length - 1) / 9;
|
|
141
|
+
const idxs = [...new Set([...Array.from({ length: 10 }, (_, i) => Math.trunc(i * step)), pts.length - 1])];
|
|
142
|
+
pts = idxs.map((i) => pts[i]);
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
segA: singleSeg('减重 ' + deltaKg + 'kg 那天', hit[0], hit[1]),
|
|
146
|
+
segB: singleSeg('今天', rows[rows.length - 1][0], current),
|
|
147
|
+
compare: { deltaKg: round2(current - hit[1]), direction: current < hit[1] ? '下降' : current > hit[1] ? '上升' : '持平', rateDiffG: null, speed: '—' },
|
|
148
|
+
extraRows: [
|
|
149
|
+
{ label: '用时', value: elapsed + ' 天' },
|
|
150
|
+
{ label: '期间速率', value: rate.toFixed(3) + ' kg/天' },
|
|
151
|
+
{ label: '体重轨迹', value: hit[1] + ' → ' + current + ' kg · ' + elapsed + ' 天', spark: pts.map((r) => ({ d: fmt(r[0]), kg: r[1] })) },
|
|
152
|
+
],
|
|
153
|
+
};
|
|
154
|
+
function round1(n) { return Math.round(n * 10) / 10; }
|
|
155
|
+
}
|
|
156
|
+
function seasonMin(rows, today, season) {
|
|
157
|
+
const y = Number(today.slice(0, 4));
|
|
158
|
+
const m = Number(today.slice(5, 7));
|
|
159
|
+
let s;
|
|
160
|
+
let e;
|
|
161
|
+
if (season === 'summer') {
|
|
162
|
+
s = y + '-06-01';
|
|
163
|
+
e = y + '-08-31';
|
|
164
|
+
}
|
|
165
|
+
else if (m >= 12) {
|
|
166
|
+
s = y + '-12-01';
|
|
167
|
+
e = (y + 1) + '-02-28';
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
s = (y - 1) + '-12-01';
|
|
171
|
+
e = y + '-02-28';
|
|
172
|
+
}
|
|
173
|
+
void m;
|
|
174
|
+
const inSeason = rows.filter((r) => r[0] >= s && r[0] <= e);
|
|
175
|
+
if (inSeason.length === 0)
|
|
176
|
+
return null;
|
|
177
|
+
return inSeason.reduce((a, b) => (b[1] < a[1] ? b : a));
|
|
178
|
+
}
|
|
179
|
+
export function scenarioE5(db, today) {
|
|
180
|
+
const rows = fetchAll(db);
|
|
181
|
+
if (rows.length === 0)
|
|
182
|
+
throw new FetchError('无体重记录');
|
|
183
|
+
const current = rows[rows.length - 1][1];
|
|
184
|
+
const m = seasonMin(rows, today, 'summer');
|
|
185
|
+
if (!m)
|
|
186
|
+
throw new FetchError('今年夏天(6-8 月)无体重记录');
|
|
187
|
+
const daysSince = Math.max(0, dayDiff(m[0], today));
|
|
188
|
+
return {
|
|
189
|
+
segA: singleSeg('入夏最低', m[0], m[1]),
|
|
190
|
+
segB: singleSeg('当前', rows[rows.length - 1][0], current),
|
|
191
|
+
compare: { deltaKg: round2(current - m[1]), direction: current > m[1] ? '上升' : current < m[1] ? '下降' : '持平', rateDiffG: null, speed: '—' },
|
|
192
|
+
extraRows: [{ label: '距入夏最低', value: daysSince + ' 天' }],
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
export function scenarioE6(db, today) {
|
|
196
|
+
const rows = fetchAll(db);
|
|
197
|
+
if (rows.length === 0)
|
|
198
|
+
throw new FetchError('无体重记录');
|
|
199
|
+
const current = rows[rows.length - 1][1];
|
|
200
|
+
const m = seasonMin(rows, today, 'winter');
|
|
201
|
+
if (!m)
|
|
202
|
+
throw new FetchError('最近一个冬天(12-2 月)无体重记录');
|
|
203
|
+
const daysSince = Math.max(0, dayDiff(m[0], today));
|
|
204
|
+
return {
|
|
205
|
+
segA: singleSeg('入冬最低', m[0], m[1]),
|
|
206
|
+
segB: singleSeg('当前', rows[rows.length - 1][0], current),
|
|
207
|
+
compare: { deltaKg: round2(current - m[1]), direction: current > m[1] ? '上升' : current < m[1] ? '下降' : '持平', rateDiffG: null, speed: '—' },
|
|
208
|
+
extraRows: [{ label: '距入冬最低', value: daysSince + ' 天' }],
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=weightCompare2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weightCompare2.js","sourceRoot":"","sources":["../../src/analysis/weightCompare2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAC9D,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAChE,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AASlE,MAAM,IAAI,GAAG,CAAC,EAAY,EAAU,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;AACjF,MAAM,KAAK,GAAG,CAAC,EAAY,EAAU,EAAE;IACrC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF,SAAS,SAAS,CAAC,EAAgB,EAAE,KAAa,EAAE,GAAW;IAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,2FAA2F,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAA+C,CAAC;IAClL,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,EAAgB;IAChC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,EAAgD,CAAC;IAC7I,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAU,EAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;AAEhK,0DAA0D;AAC1D,MAAM,UAAU,WAAW,CAAC,IAAW;IACrC,MAAM,IAAI,GAAkD,EAAE,CAAC;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,EAAE,GAAI,IAAI,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,EAAE,GAAG,OAAO,CAAE,IAAI,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,EAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,EAAE,GAAG,CAAC;gBAAE,MAAM;YAClB,CAAC,IAAI,CAAC,CAAC;YACP,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAG,IAAI,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAG,IAAI,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG;gBAAE,MAAM;QAC3B,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAE,IAAI,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,EAAG,IAAI,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAA2C,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAgB;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;IAChD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,OAAO,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC;YAAE,MAAM;QACd,YAAY,IAAI,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,GAAG,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,OAAO;QACL,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAClP,IAAI,EAAE,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAC5J,SAAS,EAAE;YACT,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE;YACxC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE;YACvF,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,GAAG,YAAY,GAAG,IAAI,EAAE;YACtD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE;SACxE;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAgB,EAAE,KAAa;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,EAAE,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAC5H,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAgB;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,EAAE,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAC5H,SAAS,EAAE;YACT,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE;YACnD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE;SACtE;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAgB,EAAE,OAAe;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,KAAK,GAAG,OAAO,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,UAAU,CAAC,QAAQ,GAAG,OAAO,GAAG,mBAAmB,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IAClD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAK,GAAG,CAAC,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAQ,CAAC,CAAC;IACvC,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,KAAK,GAAG,OAAO,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,EAAE,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAChJ,SAAS,EAAE;YACT,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE;YACtC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE;YACnD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;SACpI;KACF,CAAC;IAEF,SAAS,MAAM,CAAC,CAAS,IAAY,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,SAAS,CAAC,IAAW,EAAE,KAAa,EAAE,MAA2B;IACxE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAS,CAAC;IACd,IAAI,CAAS,CAAC;IACd,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAAC,CAAC;SAC3D,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAAC,CAAC;SAC1D,CAAC;QAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAAC,CAAC;IAClD,KAAK,CAAC,CAAC;IACP,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAgB,EAAE,KAAa;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAC1I,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAgB,EAAE,KAAa;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACpD,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACjE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAC1I,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** T5 #24 · 体重对比续(c5 极端月/d4 工作周末/分发,对照老家 weight_compare.py)。
|
|
2
|
+
*
|
|
3
|
+
* c5 睡眠读外部技能库:默认不碰(标注缺失);仅显式 scheduleDbPath 才读
|
|
4
|
+
* (铁律:仓外目录与他人 worktree 不碰,路径由调用方显式给)。
|
|
5
|
+
*/
|
|
6
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
7
|
+
import type { ScenarioOpts, ScenarioResult } from './weightCompare.js';
|
|
8
|
+
export declare function scenarioC5(db: DatabaseSync, scheduleDbPath?: string | null): ScenarioResult;
|
|
9
|
+
export declare function scenarioD4(db: DatabaseSync, today?: string): ScenarioResult;
|
|
10
|
+
export declare const SCENARIO_LABELS: Record<string, string>;
|
|
11
|
+
export type ScenarioName = keyof typeof SCENARIO_LABELS;
|
|
12
|
+
export declare function runScenario(db: DatabaseSync, name: string, opts?: ScenarioOpts, today?: string): ScenarioResult;
|
|
13
|
+
//# sourceMappingURL=weightCompare3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weightCompare3.d.ts","sourceRoot":"","sources":["../../src/analysis/weightCompare3.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAwDvE,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAiD3F;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,GAAE,MAAmB,GAAG,cAAc,CA8BvF;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBlD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,eAAe,CAAC;AAExD,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,EAAE,KAAK,GAAE,MAAmB,GAAG,cAAc,CAqB/H"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/** T5 #24 · 体重对比续(c5 极端月/d4 工作周末/分发,对照老家 weight_compare.py)。
|
|
2
|
+
*
|
|
3
|
+
* c5 睡眠读外部技能库:默认不碰(标注缺失);仅显式 scheduleDbPath 才读
|
|
4
|
+
* (铁律:仓外目录与他人 worktree 不碰,路径由调用方显式给)。
|
|
5
|
+
*/
|
|
6
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
7
|
+
import { FetchError } from '../fetch/errors.js';
|
|
8
|
+
import { todayISO } from './utils.js';
|
|
9
|
+
import { sameDayCompare, scenarioA1, scenarioA2, scenarioA3, scenarioA4, scenarioA5, scenarioB1 } from './weightCompare.js';
|
|
10
|
+
import { scenarioB8, scenarioE1, scenarioE2, scenarioE3, scenarioE5, scenarioE6 } from './weightCompare2.js';
|
|
11
|
+
const round = (n) => Math.round(n);
|
|
12
|
+
const round2 = (n) => Math.round(n * 100) / 100;
|
|
13
|
+
function fetchRows(db, start, end) {
|
|
14
|
+
const raw = db.prepare('SELECT date AS d, weight_kg AS w FROM weight_log WHERE date BETWEEN ? AND ? ORDER BY date').all(start, end);
|
|
15
|
+
return raw.map((r) => [r.d, r.w]);
|
|
16
|
+
}
|
|
17
|
+
function dayDiff(a, b) {
|
|
18
|
+
return Math.round((Date.parse(b + 'T12:00:00Z') - Date.parse(a + 'T12:00:00Z')) / 86400000);
|
|
19
|
+
}
|
|
20
|
+
function mean(xs) {
|
|
21
|
+
return xs.reduce((a, b) => a + b, 0) / xs.length;
|
|
22
|
+
}
|
|
23
|
+
function stdev(xs) {
|
|
24
|
+
if (xs.length < 2)
|
|
25
|
+
return 0;
|
|
26
|
+
const m = mean(xs);
|
|
27
|
+
return Math.sqrt(xs.reduce((a, b) => a + (b - m) * (b - m), 0) / (xs.length - 1));
|
|
28
|
+
}
|
|
29
|
+
function monthTotal(db, mStart, mEnd, table, col) {
|
|
30
|
+
try {
|
|
31
|
+
const row = db.prepare('SELECT COUNT(*) AS n, COALESCE(SUM(' + col + '), 0) AS v FROM ' + table + ' WHERE date BETWEEN ? AND ?').get(mStart, mEnd);
|
|
32
|
+
if (!row || row.n === 0)
|
|
33
|
+
return null;
|
|
34
|
+
return round(row.v);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function sleepHours(scheduleDbPath, mStart, mEnd) {
|
|
41
|
+
if (!scheduleDbPath)
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
const sdb = new DatabaseSync(scheduleDbPath, { readOnly: true });
|
|
45
|
+
try {
|
|
46
|
+
const row = sdb.prepare("SELECT COUNT(*) AS n, COALESCE(SUM(duration_minutes), 0) AS v FROM schedule_records WHERE date BETWEEN ? AND ? AND (category LIKE '%睡眠%' OR activity LIKE '%睡眠%')").get(mStart, mEnd);
|
|
47
|
+
if (!row || row.n === 0)
|
|
48
|
+
return null;
|
|
49
|
+
return Math.round((row.v / 60) * 10) / 10;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
sdb.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function monthRange(m) {
|
|
60
|
+
const y = Number(m.slice(0, 4));
|
|
61
|
+
const mo = Number(m.slice(5, 7));
|
|
62
|
+
const dim = [31, (y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][mo - 1];
|
|
63
|
+
return [m + '-01', m + '-' + String(dim).padStart(2, '0')];
|
|
64
|
+
}
|
|
65
|
+
export function scenarioC5(db, scheduleDbPath) {
|
|
66
|
+
const monthsRaw = db.prepare("SELECT strftime('%Y-%m', date) AS m, COALESCE(SUM(calories_burned), 0) AS v FROM exercise_log WHERE date IS NOT NULL GROUP BY m ORDER BY m").all();
|
|
67
|
+
const months = monthsRaw.map((r) => [r.m, r.v]);
|
|
68
|
+
if (months.length < 2)
|
|
69
|
+
throw new FetchError('数据不足(需至少 2 个月有运动记录)');
|
|
70
|
+
let lowM = months[0][0];
|
|
71
|
+
let highM = lowM;
|
|
72
|
+
let lowT = 0;
|
|
73
|
+
let highT = 0;
|
|
74
|
+
for (const [m, total] of months) {
|
|
75
|
+
if (total > highT) {
|
|
76
|
+
highT = total;
|
|
77
|
+
highM = m;
|
|
78
|
+
}
|
|
79
|
+
if (lowT === 0 || total < lowT) {
|
|
80
|
+
lowT = total;
|
|
81
|
+
lowM = m;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (lowM === highM)
|
|
85
|
+
throw new FetchError('数据不足(各月运动量相同)');
|
|
86
|
+
const [lowS, lowE] = monthRange(lowM);
|
|
87
|
+
const [highS, highE] = monthRange(highM);
|
|
88
|
+
const segOf = (s, e, label) => {
|
|
89
|
+
const rows = fetchRows(db, s, e);
|
|
90
|
+
if (rows.length === 0)
|
|
91
|
+
return null;
|
|
92
|
+
const kgs = rows.map((r) => r[1]);
|
|
93
|
+
const first = rows[0];
|
|
94
|
+
const last = rows[rows.length - 1];
|
|
95
|
+
return { label, range: first[0] + ' ~ ' + last[0], count: rows.length, avg: round2(mean(kgs)), startKg: first[1], endKg: last[1], netChange: round2(last[1] - first[1]), volatility: round2(Math.max(...kgs) - Math.min(...kgs)) };
|
|
96
|
+
};
|
|
97
|
+
const a = segOf(lowS, lowE, lowM + '(运动最少)');
|
|
98
|
+
const b = segOf(highS, highE, highM + '(运动最多)');
|
|
99
|
+
if (!a || !b)
|
|
100
|
+
throw new FetchError('数据不足(极端月无体重记录)');
|
|
101
|
+
const calLow = monthTotal(db, lowS, lowE, 'food_log', 'calories');
|
|
102
|
+
const calHigh = monthTotal(db, highS, highE, 'food_log', 'calories');
|
|
103
|
+
const sleepLow = sleepHours(scheduleDbPath, lowS, lowE);
|
|
104
|
+
const sleepHigh = sleepHours(scheduleDbPath, highS, highE);
|
|
105
|
+
const delta = round2(b.avg - a.avg);
|
|
106
|
+
const extra = [
|
|
107
|
+
{ label: lowM + ' 运动总量', value: round(lowT) + ' 卡' },
|
|
108
|
+
{ label: highM + ' 运动总量', value: round(highT) + ' 卡' },
|
|
109
|
+
calLow !== null ? { label: lowM + ' 摄入', value: calLow + ' 卡' } : { label: lowM + ' 摄入', value: '缺失(无记录)' },
|
|
110
|
+
calHigh !== null ? { label: highM + ' 摄入', value: calHigh + ' 卡' } : { label: highM + ' 摄入', value: '缺失(无记录)' },
|
|
111
|
+
];
|
|
112
|
+
if (sleepLow !== null && sleepHigh !== null) {
|
|
113
|
+
extra.push({ label: lowM + ' 睡眠', value: sleepLow + ' 小时' });
|
|
114
|
+
extra.push({ label: highM + ' 睡眠', value: sleepHigh + ' 小时' });
|
|
115
|
+
}
|
|
116
|
+
else
|
|
117
|
+
extra.push({ label: '睡眠数据', value: '缺失(外部技能未记录)' });
|
|
118
|
+
return {
|
|
119
|
+
segA: a,
|
|
120
|
+
segB: b,
|
|
121
|
+
compare: { deltaKg: delta, direction: delta < -0.05 ? '下降' : delta > 0.05 ? '上升' : '持平', rateDiffG: null, speed: '—' },
|
|
122
|
+
extraRows: extra,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export function scenarioD4(db, today = todayISO()) {
|
|
126
|
+
const start = (() => {
|
|
127
|
+
const t = Date.parse(today + 'T12:00:00Z');
|
|
128
|
+
return new Date(t - 6 * 86400000).toISOString().slice(0, 10);
|
|
129
|
+
})();
|
|
130
|
+
const rows = fetchRows(db, start, today);
|
|
131
|
+
if (rows.length === 0)
|
|
132
|
+
throw new FetchError('最近 7 天无记录');
|
|
133
|
+
const wd = rows.filter((r) => { const d = (new Date(r[0] + 'T12:00:00Z').getUTCDay() + 6) % 7; return d < 5; });
|
|
134
|
+
const we = rows.filter((r) => { const d = (new Date(r[0] + 'T12:00:00Z').getUTCDay() + 6) % 7; return d >= 5; });
|
|
135
|
+
if (wd.length === 0 || we.length === 0)
|
|
136
|
+
throw new FetchError('样本不足(工作日/周末需各有记录)');
|
|
137
|
+
const stats = (rr) => {
|
|
138
|
+
const kgs = rr.map((r) => r[1]);
|
|
139
|
+
return [round2(mean(kgs)), round2(stdev(kgs))];
|
|
140
|
+
};
|
|
141
|
+
const [wdAvg, wdVol] = stats(wd);
|
|
142
|
+
const [weAvg, weVol] = stats(we);
|
|
143
|
+
const delta = round2(weAvg - wdAvg);
|
|
144
|
+
const agreement = round(Math.max(0, 1 - Math.min(1, Math.abs(delta))) * 100);
|
|
145
|
+
const first = (rr) => rr[0];
|
|
146
|
+
const last = (rr) => rr[rr.length - 1];
|
|
147
|
+
return {
|
|
148
|
+
segA: { label: '工作日', range: first(wd)[0] + ' ~ ' + last(wd)[0], count: wd.length, avg: wdAvg, startKg: first(wd)[1], endKg: last(wd)[1], netChange: round2(last(wd)[1] - first(wd)[1]), volatility: wdVol },
|
|
149
|
+
segB: { label: '周末', range: first(we)[0] + ' ~ ' + last(we)[0], count: we.length, avg: weAvg, startKg: first(we)[1], endKg: last(we)[1], netChange: round2(last(we)[1] - first(we)[1]), volatility: weVol },
|
|
150
|
+
compare: { deltaKg: delta, direction: delta > 0.05 ? '周末更高' : delta < -0.05 ? '周末更低' : '持平', rateDiffG: null, speed: '—' },
|
|
151
|
+
extraRows: [
|
|
152
|
+
{ label: '工作日波动', value: '±' + wdVol + ' kg' },
|
|
153
|
+
{ label: '周末波动', value: '±' + weVol + ' kg' },
|
|
154
|
+
{ label: '一致率', value: agreement + '%' },
|
|
155
|
+
],
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
export const SCENARIO_LABELS = {
|
|
159
|
+
a1: '对比体重:最近 30 天 vs 之前 30 天',
|
|
160
|
+
a2: '对比体重:自定义两段时间',
|
|
161
|
+
a3: '对比体重:本周 vs 上周',
|
|
162
|
+
a4: '对比体重:本月 vs 上月',
|
|
163
|
+
a5: '对比体重:近 N 天 vs 上一个 N 天',
|
|
164
|
+
a6: '对比体重:今天 vs 一年前今天',
|
|
165
|
+
a7: '对比体重:今天 vs 半年前今天',
|
|
166
|
+
a8: '对比体重:今天 vs 三月前今天',
|
|
167
|
+
b1: '对比体重:当前 vs 目标体重',
|
|
168
|
+
b8: '对比体重:当前 vs 平台期首日',
|
|
169
|
+
e1: '对比体重:当前 vs 历史最低',
|
|
170
|
+
e2: '对比体重:当前 vs 历史最高',
|
|
171
|
+
e3: '对比体重:减重 N kg 那天 vs 今天',
|
|
172
|
+
e5: '对比体重:当前 vs 入夏最低',
|
|
173
|
+
e6: '对比体重:当前 vs 入冬最低',
|
|
174
|
+
c5: '对比体重:运动多 vs 运动少的两个月',
|
|
175
|
+
d4: '对比体重:工作日 vs 周末',
|
|
176
|
+
};
|
|
177
|
+
export function runScenario(db, name, opts = {}, today = todayISO()) {
|
|
178
|
+
switch (name) {
|
|
179
|
+
case 'a1': return scenarioA1(db, today);
|
|
180
|
+
case 'a2': return scenarioA2(db, opts);
|
|
181
|
+
case 'a3': return scenarioA3(db, today);
|
|
182
|
+
case 'a4': return scenarioA4(db, today);
|
|
183
|
+
case 'a5': return scenarioA5(db, today, opts.n ?? 30);
|
|
184
|
+
case 'a6': return sameDayCompare(db, today, 12, '一年前');
|
|
185
|
+
case 'a7': return sameDayCompare(db, today, 6, '半年前');
|
|
186
|
+
case 'a8': return sameDayCompare(db, today, 3, '三月前');
|
|
187
|
+
case 'b1': return scenarioB1(db, today);
|
|
188
|
+
case 'b8': return scenarioB8(db);
|
|
189
|
+
case 'e1': return scenarioE1(db, today);
|
|
190
|
+
case 'e2': return scenarioE2(db);
|
|
191
|
+
case 'e3': return scenarioE3(db, opts.delta ?? 5);
|
|
192
|
+
case 'e5': return scenarioE5(db, today);
|
|
193
|
+
case 'e6': return scenarioE6(db, today);
|
|
194
|
+
case 'c5': return scenarioC5(db, opts.scheduleDbPath);
|
|
195
|
+
case 'd4': return scenarioD4(db, today);
|
|
196
|
+
default: throw new FetchError('未知场景 ' + name);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=weightCompare3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weightCompare3.js","sourceRoot":"","sources":["../../src/analysis/weightCompare3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
3
|
+
/** #41 · 测试直调出口(纯 CLI 同逻辑,不经过 argv/spawn;CLI 唯一出口仍为 main)。 */
|
|
4
|
+
export declare function dispatch(key: string, params: Record<string, unknown>, db: DatabaseSync): {
|
|
5
|
+
data: Record<string, unknown>;
|
|
6
|
+
html: string;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=cmd_read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmd_read.d.ts","sourceRoot":"","sources":["../../src/cli/cmd_read.ts"],"names":[],"mappings":";AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA+LhD,8DAA8D;AAC9D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuaxI"}
|