ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbCgnSGVsbG8sTWl4bHkhJykK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/01-2-快速入门-你好世界2.mix b/boards/default/micropython_esp32/examples/MixGo/01-2-快速入门-你好世界2.mix
new file mode 100644
index 00000000..7687a27c
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/01-2-快速入门-你好世界2.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5tYXBfaW52ZXJ0KG9uYm9hcmRfbWF0cml4LkhFQVJUKSkKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbCgnSGVsbG8sTWl4bHkhJyxzcGVlZCA9NTAsc3BhY2UgPSAwKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/02-1-快速入门-跳动的心.mix b/boards/default/micropython_esp32/examples/MixGo/02-1-快速入门-跳动的心.mix
new file mode 100644
index 00000000..adea8428
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/02-1-快速入门-跳动的心.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICB0aW1lLnNsZWVwKDAuMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/02-2-快速入门-为你心动.mix b/boards/default/micropython_esp32/examples/MixGo/02-2-快速入门-为你心动.mix
new file mode 100644
index 00000000..76b8ec22
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/02-2-快速入门-为你心动.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCm9uYm9hcmRfbWF0cml4LnNjcm9sbCgnTWl4bHknKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgdGltZS5zbGVlcCgwLjEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/03-1-快速入门-心随我动.mix b/boards/default/micropython_esp32/examples/MixGo/03-1-快速入门-心随我动.mix
new file mode 100644
index 00000000..71a380ff
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/03-1-快速入门-心随我动.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIGVsc2U6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/03-2-快速入门-心随我动2.mix b/boards/default/micropython_esp32/examples/MixGo/03-2-快速入门-心随我动2.mix
new file mode 100644
index 00000000..a6343fba
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/03-2-快速入门-心随我动2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSBhbmQgbWl4Z29fbWluaS5CMmtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguU0FEKQogICAgZWxpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIGVsaWYgbWl4Z29fbWluaS5CMmtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LlNNSUxFKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/04-1-快速入门-流动的灯.mix b/boards/default/micropython_esp32/examples/MixGo/04-1-快速入门-流动的灯.mix
new file mode 100644
index 00000000..5a344e8b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/04-1-快速入门-流动的灯.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCAyLCAxKToKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯2.mix b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯2.mix
new file mode 100644
index 00000000..db8903f0
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯2.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCAyLCAxKToKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯3.mix b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯3.mix
new file mode 100644
index 00000000..45aeb583
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯3.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCmZvciBZIGluIHJhbmdlKDAsIDgsIDEpOgogICAgZm9yIFggaW4gcmFuZ2UoMCwgMTIsIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludChYKSwgaW50KFkpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯4.mix b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯4.mix
new file mode 100644
index 00000000..6867a995
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯4.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCmZvciBZIGluIHJhbmdlKDAsIDgsIDIpOgogICAgZm9yIFggaW4gcmFuZ2UoMCwgMTIsIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludChYKSwgaW50KFkpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgZm9yIFggaW4gcmFuZ2UoMTEsIC0xLCAtMSk6CiAgICAgICAgb25ib2FyZF9tYXRyaXgucGl4ZWwoaW50KFgpLCBpbnQoWSArIDEpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯5.mix b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯5.mix
new file mode 100644
index 00000000..6bac4551
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/04-2-快速入门-流动的灯5.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCmZvciBYIGluIHJhbmdlKDAsIDEyLCAyKToKICAgIGZvciBZIGluIHJhbmdlKDAsIDgsIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludChYKSwgaW50KFkpLCAxKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgZm9yIFkgaW4gcmFuZ2UoNywgLTEsIC0xKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5waXhlbChpbnQoWCArIDEpLCBpbnQoWSksIDEpCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCiAgICAgICAgdGltZS5zbGVlcCgwLjEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/05-1-过程控制-双键开关.mix b/boards/default/micropython_esp32/examples/MixGo/05-1-过程控制-双键开关.mix
new file mode 100644
index 00000000..e85c3f5b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/05-1-过程控制-双键开关.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICBpZiBtaXhnb19taW5pLkIya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/05-2-快速入门-单键开关2.mix b/boards/default/micropython_esp32/examples/MixGo/05-2-快速入门-单键开关2.mix
new file mode 100644
index 00000000..f28225a4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/05-2-快速入门-单键开关2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2xlZAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwtMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/05-2-过程控制-单键开关.mix b/boards/default/micropython_esp32/examples/MixGo/05-2-过程控制-单键开关.mix
new file mode 100644
index 00000000..d1efda41
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/05-2-过程控制-单键开关.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICAgICAgICAgIGlmIChtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCkpOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBvbmJvYXJkX21hdHJpeC5maWxsKDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/05-3-过程控制-IPO概念.mix b/boards/default/micropython_esp32/examples/MixGo/05-3-过程控制-IPO概念.mix
new file mode 100644
index 00000000..993b31af
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/05-3-过程控制-IPO概念.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCl9FNl85OF9CRV9FN19BNF9CQSA9IEZhbHNlCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U2Xzk4X0JFX0U3X0E0X0JBID0gbm90IF9FNl85OF9CRV9FN19BNF9CQQogICAgaWYgX0U2Xzk4X0JFX0U3X0E0X0JBOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5maWxsKDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/06-1-过程控制-声音采集.mix b/boards/default/micropython_esp32/examples/MixGo/06-1-过程控制-声音采集.mix
new file mode 100644
index 00000000..94350652
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/06-1-过程控制-声音采集.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2JvdAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCkpCiAgICB0aW1lLnNsZWVwKDAuMDEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/06-2-过程控制-看见声音.mix b/boards/default/micropython_esp32/examples/MixGo/06-2-过程控制-看见声音.mix
new file mode 100644
index 00000000..3b95e54a
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/06-2-过程控制-看见声音.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2JvdApmcm9tIG1peHB5IGltcG9ydCBtYXRoX21hcApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfYm90LnNvdW5kbGV2ZWwoKSkKICAgIGZvciB5IGluIHJhbmdlKDAsIGludCgobWF0aF9tYXAob25ib2FyZF9ib3Quc291bmRsZXZlbCgpLCAwLCAxMDAsIDAsIDcpKSksIDEpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludCgxMSksIGludCg3IC0geSksIDEpCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCiAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9sZWZ0KDEpCiAgICB0aW1lLnNsZWVwKDAuMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/07-1-过程控制-光强采集.mix b/boards/default/micropython_esp32/examples/MixGo/07-1-过程控制-光强采集.mix
new file mode 100644
index 00000000..12686eb2
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/07-1-过程控制-光强采集.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2Fscwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfYWxzLmFsc192aXMoKSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKHN0cihpbnQob25ib2FyZF9hbHMuYWxzX3ZpcygpKSksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgdGltZS5zbGVlcCgwLjEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/07-2-过程控制-自动补光.mix b/boards/default/micropython_esp32/examples/MixGo/07-2-过程控制-自动补光.mix
new file mode 100644
index 00000000..2e8faa2e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/07-2-过程控制-自动补光.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9yZ2IKCgpfRTVfQkRfOTNfRTVfODlfOERfRTVfODVfODlfRTVfQkNfQkEgPSAwCl9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiA9IDAKd2hpbGUgVHJ1ZToKICAgIF9FNV9CRF85M19FNV84OV84RF9FNV84NV84OV9FNV9CQ19CQSA9IGludChvbmJvYXJkX2Fscy5hbHNfdmlzKCkpCiAgICBwcmludChfRTVfQkRfOTNfRTVfODlfOERfRTVfODVfODlfRTVfQkNfQkEpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhzdHIoX0U1X0JEXzkzX0U1Xzg5XzhEX0U1Xzg1Xzg5X0U1X0JDX0JBKSxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICBfRThfQTFfQTVfRTVfODVfODlfRTVfQTRfQTdfRTVfQjBfOEYgPSBtaW4obWF4KDI1IC0gX0U1X0JEXzkzX0U1Xzg5XzhEX0U1Xzg1Xzg5X0U1X0JDX0JBLCAwKSwgMjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKChfRThfQTFfQTVfRTVfODVfODlfRTVfQTRfQTdfRTVfQjBfOEYsIF9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiwgX0U4X0ExX0E1X0U1Xzg1Xzg5X0U1X0E0X0E3X0U1X0IwXzhGKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/08-1-过程控制-接近检测.mix b/boards/default/micropython_esp32/examples/MixGo/08-1-过程控制-接近检测.mix
new file mode 100644
index 00000000..306e8683
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/08-1-过程控制-接近检测.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CgoKX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCID0gMAp3aGlsZSBUcnVlOgogICAgX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCID0gaW50KG9uYm9hcmRfYWxzLnBzX25sKCkpCiAgICBwcmludChfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIpCiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoc3RyKF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQikpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/08-2-过程控制-入侵报警.mix b/boards/default/micropython_esp32/examples/MixGo/08-2-过程控制-入侵报警.mix
new file mode 100644
index 00000000..ff84d40a
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/08-2-过程控制-入侵报警.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwoKCl9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiA9IDAKX0U2Xzk4X0FGX0U1XzkwX0E2X0U2XzhBX0E1X0U4X0FEX0E2ID0gRmFsc2UKd2hpbGUgVHJ1ZToKICAgIF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiA9IGludChvbmJvYXJkX2Fscy5wc19ubCgpKQogICAgcHJpbnQoX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKChfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgLy8gMTAwKSksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgX0U2Xzk4X0FGX0U1XzkwX0E2X0U2XzhBX0E1X0U4X0FEX0E2ID0gX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCID4gMTAwMAogICAgaWYgX0U2Xzk4X0FGX0U1XzkwX0E2X0U2XzhBX0E1X0U4X0FEX0E2OgogICAgICAgIG9uYm9hcmRfbXVzaWMucGxheShvbmJvYXJkX211c2ljLkRBREFEQURVTSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/09-1-输入输出-加速度.mix b/boards/default/micropython_esp32/examples/MixGo/09-1-输入输出-加速度.mix
new file mode 100644
index 00000000..05a0e9b3
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/09-1-输入输出-加速度.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKSkKICAgIHRpbWUuc2xlZXAoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/09-2-输入输出-平衡仪.mix b/boards/default/micropython_esp32/examples/MixGo/09-2-输入输出-平衡仪.mix
new file mode 100644
index 00000000..7e7c1c2d
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/09-2-输入输出-平衡仪.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCB0aW1lCgoKeCA9IDYKeSA9IDQKd2hpbGUgVHJ1ZToKICAgIGlmIG9uYm9hcmRfYWNjLmFjY2VsZXJhdGlvbigpWzBdIDwgLTAuMToKICAgICAgICB4IC09IDEKICAgIGlmIG9uYm9hcmRfYWNjLmFjY2VsZXJhdGlvbigpWzBdID4gMC4xOgogICAgICAgIHggKz0gMQogICAgaWYgb25ib2FyZF9hY2MuYWNjZWxlcmF0aW9uKClbMV0gPCAtMC4xOgogICAgICAgIHkgLT0gMQogICAgaWYgb25ib2FyZF9hY2MuYWNjZWxlcmF0aW9uKClbMV0gPiAwLjE6CiAgICAgICAgeSArPSAxCiAgICB4ID0gbWluKG1heCh4LCAwKSwgMTEpCiAgICB5ID0gbWluKG1heCh5LCAwKSwgNykKICAgIG9uYm9hcmRfbWF0cml4LmZpbGwoMCkKICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgb25ib2FyZF9tYXRyaXgucGl4ZWwoaW50KHgpLCBpbnQoeSksIDEpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/10-1-输入输出-地磁强度.mix b/boards/default/micropython_esp32/examples/MixGo/10-1-输入输出-地磁强度.mix
new file mode 100644
index 00000000..23bfecfe
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/10-1-输入输出-地磁强度.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21ncwppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX21ncy5nZXRzdHJlbmd0aCgpKQogICAgdGltZS5zbGVlcCgxKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/10-2-输入输出-金属探测.mix b/boards/default/micropython_esp32/examples/MixGo/10-2-输入输出-金属探测.mix
new file mode 100644
index 00000000..07d16a1f
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/10-2-输入输出-金属探测.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21ncwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQppbXBvcnQgbWl4Z29fbWluaQoKCndoaWxlIFRydWU6CiAgICBpZiBvbmJvYXJkX21ncy5nZXRzdHJlbmd0aCgpID4gMjAwMDoKICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNDQwLCAxMDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ0dPJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICB0aW1lLnNsZWVwKDEpCiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/11-1-输入输出-点阵控制.mix b/boards/default/micropython_esp32/examples/MixGo/11-1-输入输出-点阵控制.mix
new file mode 100644
index 00000000..3ba14ebd
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/11-1-输入输出-点阵控制.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgeCBpbiByYW5nZSgwLCAxMiwgMSk6CiAgICAgICAgZm9yIHkgaW4gcmFuZ2UoMCwgOCwgMSk6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludCh4KSwgaW50KHkpLCAxKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgICAgICAgICAgdGltZS5zbGVlcF9tcygxMCkKICAgIG9uYm9hcmRfbWF0cml4LmZpbGwoMCkKICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgZm9yIHggaW4gcmFuZ2UoMCwgMTIsIDEpOgogICAgICAgIGZvciB5IGluIHJhbmdlKDAsIDgsIDEpOgogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5maWxsKDApCiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5waXhlbChpbnQoeCksIGludCh5KSwgMSkKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCiAgICAgICAgICAgIHRpbWUuc2xlZXBfbXMoMTApCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/11-2-输入输出-光标控制.mix b/boards/default/micropython_esp32/examples/MixGo/11-2-输入输出-光标控制.mix
new file mode 100644
index 00000000..74630e65
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/11-2-输入输出-光标控制.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWl4Z29fbWluaQoKCm9uYm9hcmRfbWF0cml4LnBpeGVsKGludCg2KSwgaW50KDQpLCAxKQpvbmJvYXJkX21hdHJpeC5zaG93KCkKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQTFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9kb3duKDEpCiAgICBpZiBtaXhnb19taW5pLkEya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hpZnRfbGVmdCgxKQogICAgaWYgbWl4Z29fbWluaS5BM2tleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNoaWZ0X3VwKDEpCiAgICBpZiBtaXhnb19taW5pLkE0a2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hpZnRfcmlnaHQoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/12-1-输入输出-实时时钟.mix b/boards/default/micropython_esp32/examples/MixGo/12-1-输入输出-实时时钟.mix
new file mode 100644
index 00000000..dc6376ab
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/12-1-输入输出-实时时钟.mix
@@ -0,0 +1 @@
+aW1wb3J0IG50cHRpbWUKaW1wb3J0IG1hY2hpbmUKaW1wb3J0IHRpbWUKCgpudHB0aW1lLnNldHRpbWUoKDIwMjQsNCwyLDIxLDA0LDQ1LDAsMCkpCndoaWxlIFRydWU6CiAgICBwcmludCh0aW1lLmxvY2FsdGltZSgpKQogICAgdGltZS5zbGVlcCgxKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/12-2-输入输出-实时时钟2.mix b/boards/default/micropython_esp32/examples/MixGo/12-2-输入输出-实时时钟2.mix
new file mode 100644
index 00000000..00ddaa1c
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/12-2-输入输出-实时时钟2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG50cHRpbWUKaW1wb3J0IHRpbWUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCm50cHRpbWUuc2V0dGltZSgoMjAyNCw0LDIsMjEsMDQsNDUsMCwwKSkKd2hpbGUgVHJ1ZToKICAgIG15dHVwID0gdGltZS5sb2NhbHRpbWUoKQogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKCd7fTp7fTp7fScuZm9ybWF0KHN0cihteXR1cFszXSksIHN0cihteXR1cFs0XSksIHN0cihteXR1cFs1XSkpKQogICAgdGltZS5zbGVlcCgwLjUpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/13-1-逻辑计算-手速测试.mix b/boards/default/micropython_esp32/examples/MixGo/13-1-逻辑计算-手速测试.mix
new file mode 100644
index 00000000..b8ea46bc
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/13-1-逻辑计算-手速测试.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IHRpbWUKaW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCl9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IDAKX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCID0gMAp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbWluaS5CMWtleS5pc19wcmVzc2VkKCk6CiAgICAgICAgX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgaWYgKG5vdCBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSk6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIF9FNl84QV9BQ19FOF9CNV9CN19FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIHByaW50KChfRTZfOEFfQUNfRThfQjVfQjdfRTZfOTdfQjZfRTVfODhfQkIgLSBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIpKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbChzdHIoKF9FNl84QV9BQ19FOF9CNV9CN19FNl85N19CNl9FNV84OF9CQiAtIF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQikpKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/13-2-逻辑计算-手速测试2.mix b/boards/default/micropython_esp32/examples/MixGo/13-2-逻辑计算-手速测试2.mix
new file mode 100644
index 00000000..fde82a4c
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/13-2-逻辑计算-手速测试2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IHRpbWUKaW1wb3J0IG1hY2hpbmUKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgX0U2Xzk4X0JFX0U3X0E0X0JBUkdCKF9FN184MV9BRl9FNl85NV9CMCk6CiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIGZvciBpIGluIHJhbmdlKDAsIF9FN184MV9BRl9FNl85NV9CMCwgMSk6CiAgICAgICAgb25ib2FyZF9yZ2JbaV0gPSAoMCwgMCwgMjApCiAgICBvbmJvYXJkX3JnYi53cml0ZSgpCgoKCl9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IDAKX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCID0gMApfRTlfOTdfQjRfRTlfOUFfOTRfRTZfOTdfQjZfRTlfOTdfQjQgPSAwCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKToKICAgICAgICBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgPSB0aW1lLnRpY2tzX21zKCkKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBpZiAobm90IG1peGdvX21pbmkuQjFrZXkuaXNfcHJlc3NlZCgpKToKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICAgICAgX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0ID0gX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCIC0gX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCCiAgICAgICAgcHJpbnQoX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0KQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKHN0cigoX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0ICUgMTAwKSksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgICAgIF9FNl85OF9CRV9FN19BNF9CQVJHQihtaW4oX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0IC8vIDEwMCwgMikpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/14-1-逻辑计算-反应测试.mix b/boards/default/micropython_esp32/examples/MixGo/14-1-逻辑计算-反应测试.mix
new file mode 100644
index 00000000..a068c948
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/14-1-逻辑计算-反应测试.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19taW5pCmltcG9ydCBtYWNoaW5lCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9yZ2IKCmRlZiBfRTZfOThfQkVfRTdfQTRfQkFSR0IoX0U3XzgxX0FGX0U2Xzk1X0IwKToKICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgZm9yIGkgaW4gcmFuZ2UoMCwgX0U3XzgxX0FGX0U2Xzk1X0IwLCAxKToKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyMCkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCgoKX0U0X0JBX0FFX0U1X0IxXzhGX0U2Xzk3X0I2X0U1Xzg4X0JCID0gMApfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgPSAwCl9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCA9IDAKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoKHJhbmRvbS51bmlmb3JtKDEsIDIpKSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgX0U0X0JBX0FFX0U1X0IxXzhGX0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIChtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSk6CiAgICAgICAgICAgIGJyZWFrCiAgICBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgPSB0aW1lLnRpY2tzX21zKCkKICAgIG9uYm9hcmRfbWF0cml4LmZpbGwoMCkKICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0ID0gX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCIC0gX0U0X0JBX0FFX0U1X0IxXzhGX0U2Xzk3X0I2X0U1Xzg4X0JCCiAgICBwcmludChfRTlfOTdfQjRfRTlfOUFfOTRfRTZfOTdfQjZfRTlfOTdfQjQpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhzdHIoX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0KSxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICBfRTZfOThfQkVfRTdfQTRfQkFSR0IobWluKF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCAvLyAxMDAsIDIpKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/14-2-逻辑计算-反应测试2.mix b/boards/default/micropython_esp32/examples/MixGo/14-2-逻辑计算-反应测试2.mix
new file mode 100644
index 00000000..1a718ab3
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/14-2-逻辑计算-反应测试2.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19taW5pCmltcG9ydCBtYWNoaW5lCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9yZ2IKCmRlZiBfRTZfOThfQkVfRTdfQTRfQkFSR0IoX0U3XzgxX0FGX0U2Xzk1X0IwKToKICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgZm9yIGkgaW4gcmFuZ2UoMCwgX0U3XzgxX0FGX0U2Xzk1X0IwLCAxKToKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyMCkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCgoKX0U0X0JBX0FFX0U1X0IxXzhGX0U2Xzk3X0I2X0U1Xzg4X0JCID0gMApfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgPSAwCl9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCA9IDAKX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gMAp3aGlsZSBUcnVlOgogICAgdGltZS5zbGVlcCgocmFuZG9tLnVuaWZvcm0oMSwgMikpKQogICAgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gcmFuZG9tLnJhbmRpbnQoMCwgMSkKICAgIGlmIF9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9PSAwOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiAobWl4Z29fbWluaS5CMWtleS5pc19wcmVzc2VkKCkgb3IgbWl4Z29fbWluaS5BMWtleS5pc19wcmVzc2VkKCkpOgogICAgICAgICAgICBicmVhawogICAgaWYgKG1peGdvX21pbmkuQjFrZXkuaXNfcHJlc3NlZCgpIGFuZCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMSkgb3IgKG1peGdvX21pbmkuQTFrZXkuaXNfcHJlc3NlZCgpIGFuZCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMCk6CiAgICAgICAgX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCA9IF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiAtIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQgogICAgICAgIHByaW50KF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCkKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhzdHIoX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0KSxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICAgICAgX0U2Xzk4X0JFX0U3X0E0X0JBUkdCKG1pbihfRTlfOTdfQjRfRTlfOUFfOTRfRTZfOTdfQjZfRTlfOTdfQjQgLy8gMTAwLCAyKSkKICAgIGVsc2U6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguTk8pCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/15-1-逻辑计算-简单打地鼠.mix b/boards/default/micropython_esp32/examples/MixGo/15-1-逻辑计算-简单打地鼠.mix
new file mode 100644
index 00000000..86c4a2ac
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/15-1-逻辑计算-简单打地鼠.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19taW5pCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwoKCl9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9IDAKX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JFXzk3X0U1Xzg4Xzg2ID0gMAp3aGlsZSBUcnVlOgogICAgdGltZS5zbGVlcCgocmFuZG9tLnVuaWZvcm0oMSwgMikpKQogICAgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gcmFuZG9tLnJhbmRpbnQoMCwgMSkKICAgIGlmIF9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9PSAwOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVF9TTUFMTCkKICAgIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiAobWl4Z29fbWluaS5CMWtleS5pc19wcmVzc2VkKCkgb3IgbWl4Z29fbWluaS5BMWtleS5pc19wcmVzc2VkKCkpOgogICAgICAgICAgICBicmVhawogICAgaWYgKG1peGdvX21pbmkuQTFrZXkuaXNfcHJlc3NlZCgpIGFuZCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMCkgb3IgKG1peGdvX21pbmkuQjFrZXkuaXNfcHJlc3NlZCgpIGFuZCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMSk6CiAgICAgICAgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JFXzk3X0U1Xzg4Xzg2ICs9IDEKICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoOTg4LCAxMDApCiAgICBlbHNlOgogICAgICAgIF9FNl9COF9COF9FNl84OF84Rl9FNV9CRV85N19FNV84OF84NiAtPSAxCiAgICAgICAgb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDEzMSwgMTAwKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKF9FNl9COF9COF9FNl84OF84Rl9FNV9CRV85N19FNV84OF84Niksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/15-2-逻辑计算-计时打地鼠.mix b/boards/default/micropython_esp32/examples/MixGo/15-2-逻辑计算-计时打地鼠.mix
new file mode 100644
index 00000000..bfbfeec4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/15-2-逻辑计算-计时打地鼠.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19taW5pCmltcG9ydCBtYWNoaW5lCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwoKCl9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IDAKX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gMApfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPSAwCl9FNl9COF9COF9FNl84OF84Rl9FNV9CRV85N19FNV84OF84NiA9IDAKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoKHJhbmRvbS51bmlmb3JtKDEsIDIpKSkKICAgIF9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9IHJhbmRvbS5yYW5kaW50KDAsIDEpCiAgICBpZiBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMDoKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIGVsc2U6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICBfRTRfQkFfQUVfRTVfQjFfOEZfRTZfOTdfQjZfRTVfODhfQkIgPSB0aW1lLnRpY2tzX21zKCkKICAgIHdoaWxlIFRydWU6CiAgICAgICAgaWYgKG1peGdvX21pbmkuQjFrZXkuaXNfcHJlc3NlZCgpIG9yIG1peGdvX21pbmkuQTFrZXkuaXNfcHJlc3NlZCgpKToKICAgICAgICAgICAgYnJlYWsKICAgIF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgcHJpbnQoKF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiAtIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQikpCiAgICBpZiAoKG1peGdvX21pbmkuQTFrZXkuaXNfcHJlc3NlZCgpIGFuZCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMCkgb3IgKG1peGdvX21pbmkuQjFrZXkuaXNfcHJlc3NlZCgpIGFuZCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfOUJfQkVfRTVfODNfOEYgPT0gMSkpIGFuZCBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgLSBfRTRfQkFfQUVfRTVfQjFfOEZfRTZfOTdfQjZfRTVfODhfQkIgPCA1MDA6CiAgICAgICAgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JFXzk3X0U1Xzg4Xzg2ICs9IDEKICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoOTg4LCAxMDApCiAgICBlbHNlOgogICAgICAgIF9FNl9COF9COF9FNl84OF84Rl9FNV9CRV85N19FNV84OF84NiAtPSAxCiAgICAgICAgb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDEzMSwgMTAwKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKF9FNl9COF9COF9FNl84OF84Rl9FNV9CRV85N19FNV84OF84Niksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/16-1-逻辑计算-开始打地鼠.mix b/boards/default/micropython_esp32/examples/MixGo/16-1-逻辑计算-开始打地鼠.mix
new file mode 100644
index 00000000..90ef1e24
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/16-1-逻辑计算-开始打地鼠.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19taW5pCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgoKX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gMApfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgPSAwCl9FNl9COF9COF9FNl84OF84Rl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCndoaWxlIFRydWU6CiAgICBpZiBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkNfODBfRTVfQTdfOEI6CiAgICAgICAgdGltZS5zbGVlcCgocmFuZG9tLnVuaWZvcm0oMSwgMikpKQogICAgICAgIF9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9IHJhbmRvbS5yYW5kaW50KDAsIDEpCiAgICAgICAgaWYgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDA6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgICAgIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlmIChtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSBvciBtaXhnb19taW5pLkExa2V5LmlzX3ByZXNzZWQoKSk6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIGlmIChtaXhnb19taW5pLkExa2V5LmlzX3ByZXNzZWQoKSBhbmQgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDApIG9yIChtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSBhbmQgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDEpOgogICAgICAgICAgICBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgKz0gMQogICAgICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoOTg4LCAxMDApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JFXzk3X0U1Xzg4Xzg2IC09IDEKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDEzMSwgMTAwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKHN0cihfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYpLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKICAgIGVsc2U6CiAgICAgICAgaWYgbWl4Z29fbWluaS5CMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkNfODBfRTVfQTdfOEIgPSBUcnVlCiAgICAgICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDEwLCAwKSkKICAgICAgICAgICAgb25ib2FyZF9yZ2Iud3JpdGUoKQogICAgICAgICAgICBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgPSAwCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/16-2-逻辑计算-循环打地鼠.mix b/boards/default/micropython_esp32/examples/MixGo/16-2-逻辑计算-循环打地鼠.mix
new file mode 100644
index 00000000..7f3745d0
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/16-2-逻辑计算-循环打地鼠.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19taW5pCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgX0U4X0FFX0JFX0U3X0JEX0FFX0U2X0I4X0I4X0U2Xzg4XzhGX0U3XzhBX0I2X0U2XzgwXzgxKCk6CiAgICBnbG9iYWwgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JFXzk3X0U1Xzg4Xzg2CiAgICBnbG9iYWwgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JDXzgwX0U1X0E3XzhCCiAgICBpZiBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkNfODBfRTVfQTdfOEI6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMCwgMjAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgICAgICBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgPSAwCiAgICBlbHNlOgogICAgICAgIF9FNl9COF9COF9FNl84OF84Rl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ+i1oicsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCgoKX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gMApfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgPSAwCl9FNl9COF9COF9FNl84OF84Rl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCndoaWxlIFRydWU6CiAgICBpZiBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkNfODBfRTVfQTdfOEI6CiAgICAgICAgdGltZS5zbGVlcCgocmFuZG9tLnVuaWZvcm0oMSwgMikpKQogICAgICAgIF9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9IHJhbmRvbS5yYW5kaW50KDAsIDEpCiAgICAgICAgaWYgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDA6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgICAgIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlmIChtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSBvciBtaXhnb19taW5pLkExa2V5LmlzX3ByZXNzZWQoKSk6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIGlmIChtaXhnb19taW5pLkExa2V5LmlzX3ByZXNzZWQoKSBhbmQgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDApIG9yIChtaXhnb19taW5pLkIxa2V5LmlzX3ByZXNzZWQoKSBhbmQgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDEpOgogICAgICAgICAgICBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgKz0gMQogICAgICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoOTg4LCAxMDApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JFXzk3X0U1Xzg4Xzg2IC09IDEKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDEzMSwgMTAwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKHN0cihfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYpLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKICAgICAgICBpZiBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkVfOTdfRTVfODhfODYgPiAxMDoKICAgICAgICAgICAgX0U2X0I4X0I4X0U2Xzg4XzhGX0U1X0JDXzgwX0U1X0E3XzhCID0gRmFsc2UKICAgICAgICAgICAgX0U4X0FFX0JFX0U3X0JEX0FFX0U2X0I4X0I4X0U2Xzg4XzhGX0U3XzhBX0I2X0U2XzgwXzgxKCkKICAgIGVsc2U6CiAgICAgICAgaWYgbWl4Z29fbWluaS5CMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBfRTZfQjhfQjhfRTZfODhfOEZfRTVfQkNfODBfRTVfQTdfOEIgPSBUcnVlCiAgICAgICAgICAgIF9FOF9BRV9CRV9FN19CRF9BRV9FNl9COF9COF9FNl84OF84Rl9FN184QV9CNl9FNl84MF84MSgpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/17-0-复杂控制-非中断效果.mix b/boards/default/micropython_esp32/examples/MixGo/17-0-复杂控制-非中断效果.mix
new file mode 100644
index 00000000..4ebb7b5d
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/17-0-复杂控制-非中断效果.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQppbXBvcnQgbWl4Z29fbWluaQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVF9TTUFMTCkKICAgIHRpbWUuc2xlZXAoMC41KQogICAgaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDIwLCAyMCwgMjApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIGlmIG1peGdvX21pbmkuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/17-2-复杂控制-单键中断.mix b/boards/default/micropython_esp32/examples/MixGo/17-2-复杂控制-单键中断.mix
new file mode 100644
index 00000000..3338bad1
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/17-2-复杂控制-单键中断.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgYXR0YWNoSW50ZXJydXB0X2Z1bmMoeCk6CiAgICBnbG9iYWwgX0U2Xzk4X0FGX0U1XzkwX0E2X0U0X0JBX0FFX0U3XzgxX0FGCiAgICBfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUYgPSBub3QgX0U2Xzk4X0FGX0U1XzkwX0E2X0U0X0JBX0FFX0U3XzgxX0FGCiAgICBpZiBfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUY6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMTAsIDEwLCAxMCkpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgb25ib2FyZF9yZ2Iud3JpdGUoKQoKCgpfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUYgPSBGYWxzZQptaXhnb19taW5pLkIya2V5LmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICB0aW1lLnNsZWVwKDAuNSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgdGltZS5zbGVlcCgwLjUpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/18-1-复杂控制-定时计时.mix b/boards/default/micropython_esp32/examples/MixGo/18-1-复杂控制-定时计时.mix
new file mode 100644
index 00000000..9e981601
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/18-1-复杂控制-定时计时.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKZGVmIHRpbV9jYWxsYmFjayh0aW0pOgogICAgZ2xvYmFsIF9FOF9BRV9BMV9FNl85N19CNgogICAgZ2xvYmFsIF9FNV9CQ184MF9FNV9BN184QgogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCOgogICAgICAgIF9FOF9BRV9BMV9FNl85N19CNiArPSAxCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhzdHIoX0U4X0FFX0ExX0U2Xzk3X0I2KSxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCgoKCl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCl9FOF9BRV9BMV9FNl85N19CNiA9IDAKdGltID0gbWFjaGluZS5UaW1lcigwKQp0aW0uaW5pdChwZXJpb2QgPSAxMDAsIG1vZGUgPSBtYWNoaW5lLlRpbWVyLlBFUklPRElDLCBjYWxsYmFjayA9IHRpbV9jYWxsYmFjaykKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEIgPSBub3QgX0U1X0JDXzgwX0U1X0E3XzhCCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/18-2-复杂控制-循环计时.mix b/boards/default/micropython_esp32/examples/MixGo/18-2-复杂控制-循环计时.mix
new file mode 100644
index 00000000..794124db
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/18-2-复杂控制-循环计时.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKZGVmIHRpbV9jYWxsYmFjayh0aW0pOgogICAgZ2xvYmFsIF9FOF9BRV9BMV9FNl85N19CNgogICAgZ2xvYmFsIF9FNV9CQ184MF9FNV9BN184QgogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCOgogICAgICAgIF9FOF9BRV9BMV9FNl85N19CNiArPSAxCgoKCl9FNV9CQ184MF9FNV9BN184QiA9IEZhbHNlCl9FOF9BRV9BMV9FNl85N19CNiA9IDAKdGltID0gbWFjaGluZS5UaW1lcigwKQp0aW0uaW5pdChwZXJpb2QgPSAxMDAsIG1vZGUgPSBtYWNoaW5lLlRpbWVyLlBFUklPRElDLCBjYWxsYmFjayA9IHRpbV9jYWxsYmFjaykKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEIgPSBub3QgX0U1X0JDXzgwX0U1X0E3XzhCCiAgICBpZiBtaXhnb19taW5pLkIya2V5Lndhc19wcmVzc2VkKCkgYW5kIG5vdCBfRTVfQkNfODBfRTVfQTdfOEI6CiAgICAgICAgX0U4X0FFX0ExX0U2Xzk3X0I2ID0gMAogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKF9FOF9BRV9BMV9FNl85N19CNiksc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/19-1-复杂控制-多线程.mix b/boards/default/micropython_esp32/examples/MixGo/19-1-复杂控制-多线程.mix
new file mode 100644
index 00000000..120c84e7
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/19-1-复杂控制-多线程.mix
@@ -0,0 +1 @@
+aW1wb3J0IF90aHJlYWQKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U5XzlGX0IzX0U0X0I5XzkwID0gbm90IF9FOV85Rl9CM19FNF9COV85MAogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUX1NNQUxMKQogICAgdGltZS5zbGVlcCgwLjEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/19-2-复杂控制-多线程与中断.mix b/boards/default/micropython_esp32/examples/MixGo/19-2-复杂控制-多线程与中断.mix
new file mode 100644
index 00000000..9c73c984
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/19-2-复杂控制-多线程与中断.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IF90aHJlYWQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKZGVmIGF0dGFjaEludGVycnVwdF9mdW5jKHgpOgogICAgZ2xvYmFsIF9FOV85Rl9CM19FNF9COV85MAogICAgX0U5XzlGX0IzX0U0X0I5XzkwID0gbm90IF9FOV85Rl9CM19FNF9COV85MAoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQptaXhnb19taW5pLkIxa2V5LmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICB0aW1lLnNsZWVwKDAuMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/20-1-复杂控制-异常.mix b/boards/default/micropython_esp32/examples/MixGo/20-1-复杂控制-异常.mix
new file mode 100644
index 00000000..ee6f5756
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/20-1-复杂控制-异常.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IF90aHJlYWQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBhdHRhY2hJbnRlcnJ1cHRfZnVuYyh4KToKICAgIGdsb2JhbCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIF9FOV85Rl9CM19FNF9COV85MCA9IG5vdCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIGlmIG5vdCBfRTlfOUZfQjNfRTRfQjlfOTA6CiAgICAgICAgb25ib2FyZF9tdXNpYy5zdG9wKCkKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQptaXhnb19taW5pLkIxa2V5LmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIF9FOV85NF85OV9FOF9BRl9BRl9FNV84Rl85OF9FOV84N184RiA9IG5vdCBfRTlfOTRfOTlfRThfQUZfQUZfRTVfOEZfOThfRTlfODdfOEYK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/20-2-复杂控制-异常处理.mix b/boards/default/micropython_esp32/examples/MixGo/20-2-复杂控制-异常处理.mix
new file mode 100644
index 00000000..e93326dc
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/20-2-复杂控制-异常处理.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IF90aHJlYWQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBhdHRhY2hJbnRlcnJ1cHRfZnVuYyh4KToKICAgIGdsb2JhbCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIF9FOV85Rl9CM19FNF9COV85MCA9IG5vdCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIGlmIG5vdCBfRTlfOUZfQjNfRTRfQjlfOTA6CiAgICAgICAgb25ib2FyZF9tdXNpYy5zdG9wKCkKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQptaXhnb19taW5pLkIxa2V5LmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIHRyeToKICAgICAgICBfRTlfOTRfOTlfRThfQUZfQUZfRTVfOEZfOThfRTlfODdfOEYgPSBub3QgX0U5Xzk0Xzk5X0U4X0FGX0FGX0U1XzhGXzk4X0U5Xzg3XzhGCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcGFzcwo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/23-1-蓝牙通讯-主机模式.mix b/boards/default/micropython_esp32/examples/MixGo/23-1-蓝牙通讯-主机模式.mix
new file mode 100644
index 00000000..35970f07
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/23-1-蓝牙通讯-主机模式.mix
@@ -0,0 +1 @@
+aW1wb3J0IGJsZV9jZW50cmFsCmltcG9ydCBtaXhnb19tZQpmcm9tIG1peGdvX21lIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWFjaGluZQoKZGVmIGJsZV9tZXRob2QoZGF0YSk6CiAgICBwcmludChkYXRhKQoKCgpibGVfYyA9IGJsZV9jZW50cmFsLkJMRVNpbXBsZUNlbnRyYWwoKQpibGVfYy5yZWN2KGJsZV9tZXRob2QpCndoaWxlIFRydWU6CiAgICBpZiBibGVfYy5pc19jb25uZWN0ZWQoKToKICAgICAgICBpZiBtaXhnb19tZS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBibGVfYy5zZW5kKCd0ZXN0JykKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnT0snLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPT0nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgICAgIHRyeToKICAgICAgICAgICAgYmxlX2MuY29ubmVjdChuYW1lPSdNaXhseV9TbGF2ZScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwYXNzCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/23-1-蓝牙通讯-从机模式.mix b/boards/default/micropython_esp32/examples/MixGo/23-1-蓝牙通讯-从机模式.mix
new file mode 100644
index 00000000..c145f0c6
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/23-1-蓝牙通讯-从机模式.mix
@@ -0,0 +1 @@
+aW1wb3J0IGJsZV9wZXJpcGhlcmFsCmZyb20gbWl4Z29fbWUgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtaXhnb19tZQppbXBvcnQgbWFjaGluZQoKZGVmIGJsZV9tZXRob2QoZGF0YSk6CiAgICBwcmludChkYXRhKQoKCgpibGVfeCA9IGJsZV9wZXJpcGhlcmFsLkJMRVNpbXBsZVBlcmlwaGVyYWwoJ01peGx5X1NsYXZlJykKYmxlX3gucmVjdihibGVfbWV0aG9kKQp3aGlsZSBUcnVlOgogICAgaWYgYmxlX3guaXNfY29ubmVjdGVkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ09LJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICBpZiBtaXhnb19tZS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBibGVfeC5zZW5kKCdCMeaMiemUruaMieS4iycpCiAgICAgICAgaWYgbWl4Z29fbWUuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgYmxlX3guc2VuZCgnQjLmjInplK7mjInkuIsnKQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPT0nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/23-2 蓝牙键鼠-蓝牙翻页.mix b/boards/default/micropython_esp32/examples/MixGo/23-2 蓝牙键鼠-蓝牙翻页.mix
new file mode 100644
index 00000000..b3582fdd
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/23-2 蓝牙键鼠-蓝牙翻页.mix
@@ -0,0 +1 @@
+ZnJvbSBibGVfaGlkIGltcG9ydCBISUQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKaW1wb3J0IG1peGdvX21pbmkKaW1wb3J0IHRpbWUKCgpibGVfaGlkID0gSElEKCdibGVfa2V5Ym9hcmRfbW91c2UnKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKCd3YWl0dGluZycpCiAgICBpZiAoYmxlX2hpZC5pc19jb25uZWN0ZWQoKSk6CiAgICAgICAgYnJlYWsKb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDc4NCwgMTUwKQpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxNTApCndoaWxlIFRydWU6CiAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgYmxlX2hpZC5rZXlib2FyZF9ub3RpZnkoMHgwMCwweDUyLFRydWUpCiAgICBlbGlmIG1peGdvX21pbmkuQTNrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBibGVfaGlkLmtleWJvYXJkX25vdGlmeSgweDAwLDB4NEUsVHJ1ZSkKICAgIHRpbWUuc2xlZXBfbXMoMTApCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/23-2-蓝牙键鼠-无线蓝牙鼠标.mix b/boards/default/micropython_esp32/examples/MixGo/23-2-蓝牙键鼠-无线蓝牙鼠标.mix
new file mode 100644
index 00000000..e351f0d9
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/23-2-蓝牙键鼠-无线蓝牙鼠标.mix
@@ -0,0 +1 @@
+ZnJvbSBibGVfaGlkX21vdXNlIGltcG9ydCBNb3VzZQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWNjCmltcG9ydCBtYXRoCmltcG9ydCBtaXhnb19taW5pCmltcG9ydCB0aW1lCgoKYmxlX21vdXNlPU1vdXNlKCdibGVfTW91c2UnKQojIOeBteaVj+W6pgpTRU5TSVRJVklUWSA9IDMwCiMg56e75Yqo6ZiI5YC8Ck1PVkVfVEhSRVNIT0xEID0gMC4wNQojIOW5s+a7keWkhOeQhueahOWOhuWPsuaVsOaNrgpzbW9vdGhfeCA9IDAKIyDlubPmu5HlpITnkIbnmoTljoblj7LmlbDmja4Kc21vb3RoX3kgPSAwCiMg5oyH5pWw5bmz5ruR5Zug5a2Q77yIMCA8IEFMUEhBIDwgMe+8iQpBTFBIQSA9IDAuOAp3aGlsZSBUcnVlOgogICAgcmF3X3ggPSBvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKVswXQogICAgcmF3X3kgPSBvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKVsxXQogICAgIyDlv73nlaXlsI/luYXnp7vliqgKICAgIGlmIG1hdGguZmFicyhyYXdfeCkgPCBNT1ZFX1RIUkVTSE9MRDoKICAgICAgICByYXdfeCA9IDAKICAgICMg5b+955Wl5bCP5bmF56e75YqoCiAgICBpZiBtYXRoLmZhYnMocmF3X3kpIDwgTU9WRV9USFJFU0hPTEQ6CiAgICAgICAgcmF3X3kgPSAwCiAgICB4ID0gaW50KChyYXdfeCAqIFNFTlNJVElWSVRZKSkKICAgIHkgPSBpbnQoKHJhd195ICogU0VOU0lUSVZJVFkpKQogICAgIyDlubPmu5HlpITnkIYKICAgIHNtb290aF94ID0gQUxQSEEgKiBzbW9vdGhfeCArICgxIC0gQUxQSEEpICogeAogICAgIyDlubPmu5HlpITnkIYKICAgIHNtb290aF95ID0gQUxQSEEgKiBzbW9vdGhfeSArICgxIC0gQUxQSEEpICogeQogICAgaWYgbWl4Z29fbWluaS5CMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIGJsZV9tb3VzZS5ub3RpZnlfaGlkKDB4MDEsKDAsMCksMCxGYWxzZSkKICAgIGVsaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIGJsZV9tb3VzZS5ub3RpZnlfaGlkKDB4MDIsKDAsMCksMCxUcnVlKQogICAgYmxlX21vdXNlLm5vdGlmeV9oaWQoMHgwMCwoaW50KHNtb290aF95KSxpbnQoKHNtb290aF94ICogLTEpKSksMCxUcnVlKQogICAgdGltZS5zbGVlcF9tcygxMCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/23-2-蓝牙键鼠-无线键盘.mix b/boards/default/micropython_esp32/examples/MixGo/23-2-蓝牙键鼠-无线键盘.mix
new file mode 100644
index 00000000..b961aa2c
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/23-2-蓝牙键鼠-无线键盘.mix
@@ -0,0 +1 @@
+ZnJvbSBibGVfaGlkIGltcG9ydCBISUQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgdGltZQoKCmJsZV9oaWQgPSBISUQoJ2JsZV9rZXlib2FyZF9tb3VzZScpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoJ3dhaXR0aW5nJykKICAgIGlmIChibGVfaGlkLmlzX2Nvbm5lY3RlZCgpKToKICAgICAgICBicmVhawpvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjk4LCAxNTApCm9uYm9hcmRfbXVzaWMucGl0Y2hfdGltZSg1MjMsIDE1MCkKd2hpbGUgVHJ1ZToKICAgIGlmIG9uYm9hcmRfYWxzLnBzX25sKCkgPiAxMDA6CiAgICAgICAgYmxlX2hpZC5rZXlib2FyZF9ub3RpZnkoMHgwOCwweDA3LFRydWUpCiAgICAgICAgdGltZS5zbGVlcF9tcygzMDApCiAgICB0aW1lLnNsZWVwX21zKDEwMCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/24-1-无线广播-通讯测试.mix b/boards/default/micropython_esp32/examples/MixGo/24-1-无线广播-通讯测试.mix
new file mode 100644
index 00000000..a472e4af
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/24-1-无线广播-通讯测试.mix
@@ -0,0 +1 @@
+aW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQppbXBvcnQgbWl4Z29fbWluaQpoYW5kbGVfbGlzdD1bXQppbXBvcnQgbWFjaGluZQpkZWYgRVNQTm93X3JhZGlvX3JlY3YobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgcHJpbnQoRVNQTm93X3JhZGlvX21zZykKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdiBpbiBoYW5kbGVfbGlzdDoKICAgIGhhbmRsZV9saXN0LmFwcGVuZChFU1BOb3dfcmFkaW9fcmVjdikKRVNQTm93X3JhZGlvLnJlY3ZfY2IoaGFuZGxlX2xpc3QpCgpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmRlZiBFU1BOb3dfcmFkaW9fcmVjdl9fTEVGVChtYWMsRVNQTm93X3JhZGlvX21zZyk6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPC0nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2X19MRUZUIGluIGhhbmRsZV9saXN0OgogICAgaGFuZGxlX2xpc3QuYXBwZW5kKEVTUE5vd19yYWRpb19yZWN2X19MRUZUKQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCmRlZiBFU1BOb3dfcmFkaW9fcmVjdl9fUklHSFQobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJy0+JyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdl9fUklHSFQgaW4gaGFuZGxlX2xpc3Q6CiAgICBoYW5kbGVfbGlzdC5hcHBlbmQoRVNQTm93X3JhZGlvX3JlY3ZfX1JJR0hUKQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBFU1BOb3dfcmFkaW8uc2VuZCgiZmZmZmZmZmZmZmZmIiwnTEVGVCcpCiAgICBpZiBtaXhnb19taW5pLkIya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgRVNQTm93X3JhZGlvLnNlbmQoImZmZmZmZmZmZmZmZiIsJ1JJR0hUJykK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/24-2-无线广播-防丢检测.mix b/boards/default/micropython_esp32/examples/MixGo/24-2-无线广播-防丢检测.mix
new file mode 100644
index 00000000..f13c4dea
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/24-2-无线广播-防丢检测.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tdXNpYwpoYW5kbGVfbGlzdD1bXQpkZWYgRVNQTm93X3JhZGlvX3JlY3YobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgZ2xvYmFsIGxhc3Rtc2d0aW1lCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5ZRVMpCiAgICBsYXN0bXNndGltZSA9IHRpbWUudGlja3NfbXMoKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2IGluIGhhbmRsZV9saXN0OgogICAgaGFuZGxlX2xpc3QuYXBwZW5kKEVTUE5vd19yYWRpb19yZWN2KQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKbGFzdG1zZ3RpbWUgPSB0aW1lLnRpY2tzX21zKCkKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoMikKICAgIEVTUE5vd19yYWRpby5zZW5kKCJmZmZmZmZmZmZmZmYiLHN0cih0aW1lLnRpY2tzX21zKCkpKQogICAgaWYgdGltZS50aWNrc19tcygpIC0gbGFzdG1zZ3RpbWUgPiAxMDAwMDoKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5OTykKICAgICAgICBvbmJvYXJkX211c2ljLnBsYXkob25ib2FyZF9tdXNpYy5EQURBREFEVU0pCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/29-1-物联网-简单数据定时上报.mix b/boards/default/micropython_esp32/examples/MixGo/29-1-物联网-简单数据定时上报.mix
new file mode 100644
index 00000000..bd1d9e06
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/29-1-物联网-简单数据定时上报.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCB0aW1lCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9hbHMKCgptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKb25ib2FyZF9tYXRyaXguc2hvd3MoJ1dPJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKTVFUVF9VU1JfUFJKID0gIk1peElPLzRPRzc4MTFPL2RlZmF1bHQvIgptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsICJNaXhJT19wdWJsaWMiLCAiTWl4SU9fcHVibGljIiwgTVFUVF9VU1JfUFJKKQpvbmJvYXJkX21hdHJpeC5zaG93cygnTU8nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQp3aGlsZSBUcnVlOgogICAgdGltZS5zbGVlcCg1KQogICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn5YWJ54WnJywgb25ib2FyZF9hbHMuYWxzX3ZpcygpKQogICAgb25ib2FyZF9tYXRyaXguc2Nyb2xsKHN0cihvbmJvYXJkX2Fscy5hbHNfdmlzKCkpKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/29-2-物联网-复杂数据定时上报.mix b/boards/default/micropython_esp32/examples/MixGo/29-2-物联网-复杂数据定时上报.mix
new file mode 100644
index 00000000..31a92a25
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/29-2-物联网-复杂数据定时上报.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCB0aW1lCmltcG9ydCBtaXhweQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9ib3QKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwoKCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX21hdHJpeC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfbWF0cml4LnNob3dzKCdNTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCndoaWxlIFRydWU6CiAgICB0aW1lLnNsZWVwKDUpCiAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICfnjq/looMnLCBtaXhweS5mb3JtYXRfc3RyKHsi5YWJ54WnIjpvbmJvYXJkX2Fscy5hbHNfdmlzKCksICLlo7Dpn7MiOm9uYm9hcmRfYm90LnNvdW5kbGV2ZWwoKSwgIumch+WKqCI6b25ib2FyZF9hY2Muc3RyZW5ndGgoKX0pKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/30-1-物联网-简单数据按需上报.mix b/boards/default/micropython_esp32/examples/MixGo/30-1-物联网-简单数据按需上报.mix
new file mode 100644
index 00000000..981da780
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/30-1-物联网-简单数据按需上报.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9hY2MKaW1wb3J0IHRpbWUKaW1wb3J0IG1peHB5CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9hbHMKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2JvdAoKZGVmIHRpbV9jYWxsYmFjayh0aW0pOgogICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn546v5aKDJywgbWl4cHkuZm9ybWF0X3N0cih7IuWFieeFpyI6b25ib2FyZF9hbHMuYWxzX3ZpcygpLCAi5aOw6Z+zIjpvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCksICLpnIfliqgiOm9uYm9hcmRfYWNjLnN0cmVuZ3RoKCl9KSkKCgoKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCm9uYm9hcmRfbWF0cml4LnNob3dzKCdXTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKb25ib2FyZF9tYXRyaXguc2hvd3MoJ01PJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKdGltID0gbWFjaGluZS5UaW1lcigwKQp0aW0uaW5pdChwZXJpb2QgPSA1MDAwLCBtb2RlID0gbWFjaGluZS5UaW1lci5QRVJJT0RJQywgY2FsbGJhY2sgPSB0aW1fY2FsbGJhY2spCndoaWxlIFRydWU6CiAgICBpZiBvbmJvYXJkX2FjYy5zdHJlbmd0aCgpID4gNToKICAgICAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICfljbHpmaknLCAn5aSn6ZyH5YqoJykKICAgICAgICB0aW1lLnNsZWVwKDEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/30-2-物联网-高级数据按需上报.mix b/boards/default/micropython_esp32/examples/MixGo/30-2-物联网-高级数据按需上报.mix
new file mode 100644
index 00000000..97fb138e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/30-2-物联网-高级数据按需上报.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWxzCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9ib3QKaW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCB0aW1lCmltcG9ydCBtaXhweQoKZGVmIHRpbV9jYWxsYmFjayh0aW0pOgogICAgZ2xvYmFsIF9FOV85Q184N19FNV84QV9BOAogICAgZ2xvYmFsIF9FNV84NV84OV9FN184NV9BNwogICAgZ2xvYmFsIF9FNV9BM19CMF9FOV85Rl9CMwogICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn546v5aKDJywgbWl4cHkuZm9ybWF0X3N0cih7IuWFieeFpyI6X0U1Xzg1Xzg5X0U3Xzg1X0E3LCAi5aOw6Z+zIjpfRTVfQTNfQjBfRTlfOUZfQjMsICLpnIfliqgiOl9FOV85Q184N19FNV84QV9BOH0pKQoKCgpfRTlfOUNfODdfRTVfOEFfQTggPSBvbmJvYXJkX2FjYy5zdHJlbmd0aCgpCl9FNV84NV84OV9FN184NV9BNyA9IG9uYm9hcmRfYWxzLmFsc192aXMoKQpfRTVfQTNfQjBfRTlfOUZfQjMgPSBvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCkKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCm9uYm9hcmRfbWF0cml4LnNob3dzKCdXTycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfbWF0cml4LnNob3dzKCdNTycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQp0aW0gPSBtYWNoaW5lLlRpbWVyKDApCnRpbS5pbml0KHBlcmlvZCA9IDUwMDAsIG1vZGUgPSBtYWNoaW5lLlRpbWVyLlBFUklPRElDLCBjYWxsYmFjayA9IHRpbV9jYWxsYmFjaykKX0U5XzlDXzg3X0U1XzhBX0E4ID0gb25ib2FyZF9hY2Muc3RyZW5ndGgoKQp3aGlsZSBUcnVlOgogICAgX0U5XzlDXzg3X0U1XzhBX0E4ID0gb25ib2FyZF9hY2Muc3RyZW5ndGgoKQogICAgX0U1Xzg1Xzg5X0U3Xzg1X0E3ID0gb25ib2FyZF9hbHMuYWxzX3ZpcygpCiAgICBfRTVfQTNfQjBfRTlfOUZfQjMgPSBvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgaWYgX0U5XzlDXzg3X0U1XzhBX0E4ID4gNToKICAgICAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICfljbHpmaknLCAn5aSn6ZyH5YqoJykKICAgICAgICB0aW1lLnNsZWVwKDEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/31-1-物联网-单主题数据订阅.mix b/boards/default/micropython_esp32/examples/MixGo/31-1-物联网-单主题数据订阅.mix
new file mode 100644
index 00000000..87ca7b06
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/31-1-物联网-单主题数据订阅.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CgpkZWYgbWV0aG9kKGNsaWVudCwgdG9waWMsIG1zZyk6CiAgICBpZiBtc2cgPT0gJzEnOgogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKG9uYm9hcmRfbWF0cml4LkhFQVJUKQogICAgaWYgbXNnID09ICcwJzoKICAgICAgICBvbmJvYXJkX21hdHJpeC5maWxsKDApCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCgoKCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX21hdHJpeC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKTVFUVF9VU1JfUFJKID0gIk1peElPLzRPRzc4MTFPL2RlZmF1bHQvIgptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsICJNaXhJT19wdWJsaWMiLCAiTWl4SU9fcHVibGljIiwgTVFUVF9VU1JfUFJKKQpvbmJvYXJkX21hdHJpeC5zaG93cygnTU8nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCfkuq7lsY8nLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+S6ruWxjycpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/31-1-物联网-单主题数据订阅2.mix b/boards/default/micropython_esp32/examples/MixGo/31-1-物联网-单主题数据订阅2.mix
new file mode 100644
index 00000000..7616b05e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/31-1-物联网-单主题数据订阅2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CgpkZWYgdGltX2NhbGxiYWNrKHRpbSk6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQoKZGVmIG1ldGhvZChjbGllbnQsIHRvcGljLCBtc2cpOgogICAgZ2xvYmFsIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COQogICAgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5ID0gbXNnCgoKCl9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSA9ICdNaXhseScKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCm9uYm9hcmRfbWF0cml4LnNob3dzKCdXTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKb25ib2FyZF9tYXRyaXguc2hvd3MoJ01PJyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCfmmL7npLrlhoXlrrknLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+aYvuekuuWGheWuuScpCnRpbSA9IG1hY2hpbmUuVGltZXIoMCkKdGltLmluaXQocGVyaW9kID0gNTAwLCBtb2RlID0gbWFjaGluZS5UaW1lci5QRVJJT0RJQywgY2FsbGJhY2sgPSB0aW1fY2FsbGJhY2spCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5KQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/32-1-物联网-多主题数据订.mix b/boards/default/micropython_esp32/examples/MixGo/32-1-物联网-多主题数据订.mix
new file mode 100644
index 00000000..9d7a24be
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/32-1-物联网-多主题数据订.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9yZ2IKCmRlZiB0aW1fY2FsbGJhY2sodGltKToKICAgIG1xdHRfY2xpZW50LmNoZWNrX21zZygpCgpkZWYgbWV0aG9kMihjbGllbnQsIHRvcGljLCBtc2cpOgogICAgaWYgbXNnID09ICcxJzoKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgyNSwgMjUsIDI1KSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICBpZiBtc2cgPT0gJzAnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTZfOThfQkVfRTdfQTRfQkFfRTVfODZfODVfRTVfQUVfQjkKICAgIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSA9IG1zZwoKCgpfRTZfOThfQkVfRTdfQTRfQkFfRTVfODZfODVfRTVfQUVfQjkgPSAnTWl4bHknCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX21hdHJpeC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfbWF0cml4LnNob3dzKCdNTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygn5pi+56S65YaF5a65JyxtZXRob2QsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc3Vic2NyaWJlKE1RVFRfVVNSX1BSSiArICfmmL7npLrlhoXlrrknKQptcXR0X2NsaWVudC5zZXRfY2FsbGJhY2soJ+S6rueBrycsbWV0aG9kMiwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+S6rueBrycpCnRpbSA9IG1hY2hpbmUuVGltZXIoMCkKdGltLmluaXQocGVyaW9kID0gNTAwLCBtb2RlID0gbWFjaGluZS5UaW1lci5QRVJJT0RJQywgY2FsbGJhY2sgPSB0aW1fY2FsbGJhY2spCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5KQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/32-2-物联网-多主题数据订2.mix b/boards/default/micropython_esp32/examples/MixGo/32-2-物联网-多主题数据订2.mix
new file mode 100644
index 00000000..889aa76a
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/32-2-物联网-多主题数据订2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmltcG9ydCBqc29uCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9yZ2IKCmRlZiB0aW1fY2FsbGJhY2sodGltKToKICAgIG1xdHRfY2xpZW50LmNoZWNrX21zZygpCgpkZWYgbWV0aG9kKGNsaWVudCwgdG9waWMsIG1zZyk6CiAgICBnbG9iYWwgbXlkaWN0CiAgICBnbG9iYWwgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5CiAgICBteWRpY3QgPSBkaWN0KGpzb24ubG9hZHMobXNnKSkKICAgIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSA9IG15ZGljdFsn5pi+56S65YaF5a65J10KICAgIGlmIG15ZGljdFsn5Lqu54GvJ10gPT0gJzEnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDI1LCAyNSwgMjUpKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIGlmIG15ZGljdFsn5Lqu54GvJ10gPT0gJzAnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCgoKbXlkaWN0PSB7fQpfRTZfOThfQkVfRTdfQTRfQkFfRTVfODZfODVfRTVfQUVfQjkgPSAnTWl4bHknCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpvbmJvYXJkX21hdHJpeC5zaG93cygnV08nLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfbWF0cml4LnNob3dzKCdNTycsc3BhY2UgPSAwLGNlbnRlciA9IFRydWUpCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygnanNvbua2iOaBrycsbWV0aG9kLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnN1YnNjcmliZShNUVRUX1VTUl9QUkogKyAnanNvbua2iOaBrycpCnRpbSA9IG1hY2hpbmUuVGltZXIoMCkKdGltLmluaXQocGVyaW9kID0gNTAwLCBtb2RlID0gbWFjaGluZS5UaW1lci5QRVJJT0RJQywgY2FsbGJhY2sgPSB0aW1fY2FsbGJhY2spCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5KQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/33-1-课堂互动-自由签到.mix b/boards/default/micropython_esp32/examples/MixGo/33-1-课堂互动-自由签到.mix
new file mode 100644
index 00000000..08d132c4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/33-1-课堂互动-自由签到.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWl4Z29fbWluaQppbXBvcnQgdGltZQoKCl9FNl85Q19BQ19FNl85Q19CQV9FN185NF9BOF9FNl84OF9CNyA9ICdtaXhseScKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCnNrID0gYW5hbHlzZV9zaGFyZWtleSgnaHR0cDovL21peGlvLm1peGx5LmNuL21peGlvLXBocC9zaGFyZWtleS5waHA/c2s9N2I2NDQzJykKTVFUVF9VU1JfUFJKID0gc2tbMF0rJy8nK3NrWzFdKycvJwptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsIHNrWzBdLCBza1syXSwgTVFUVF9VU1JfUFJKKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ0dPJyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgIG1xdHRfY2xpZW50LnB1Ymxpc2goTVFUVF9VU1JfUFJKICsgJ+Wnk+WQjScsIF9FNl85Q19BQ19FNl85Q19CQV9FN185NF9BOF9FNl84OF9CNykKICAgICAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoX0U2XzlDX0FDX0U2XzlDX0JBX0U3Xzk0X0E4X0U2Xzg4X0I3KQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKCdPSycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgICAgIHRpbWUuc2xlZXAoMSkKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnR08nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/33-2-课堂互动-按需签到.mix b/boards/default/micropython_esp32/examples/MixGo/33-2-课堂互动-按需签到.mix
new file mode 100644
index 00000000..114c28df
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/33-2-课堂互动-按需签到.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWl4Z29fbWluaQppbXBvcnQgdGltZQoKZGVmIG1ldGhvZChjbGllbnQsIHRvcGljLCBtc2cpOgogICAgZ2xvYmFsIF9FNV9CQ184MF9FNV9BN184Ql9FN19BRF9CRV9FNV84OF9CMAogICAgaWYgbXNnID09ICcxJzoKICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfQkVfRTVfODhfQjAgPSBUcnVlCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ0dPJyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCgoKCl9FNl85Q19BQ19FNl85Q19CQV9FN185NF9BOF9FNl84OF9CNyA9ICdtaXhseScKX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEX0JFX0U1Xzg4X0IwID0gRmFsc2UKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCnNrID0gYW5hbHlzZV9zaGFyZWtleSgnaHR0cDovL21peGlvLm1peGx5LmNuL21peGlvLXBocC9zaGFyZWtleS5waHA/c2s9N2I2NDQzJykKTVFUVF9VU1JfUFJKID0gc2tbMF0rJy8nK3NrWzFdKycvJwptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsIHNrWzBdLCBza1syXSwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zZXRfY2FsbGJhY2soJ+W8gOWni+etvuWIsCcsbWV0aG9kLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnN1YnNjcmliZShNUVRUX1VTUl9QUkogKyAn5byA5aeL562+5YiwJykKb25ib2FyZF9tYXRyaXguc2hvd3MoJz09JyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEX0JFX0U1Xzg4X0IwOgogICAgICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgICAgICAgICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn5aeT5ZCNJywgX0U2XzlDX0FDX0U2XzlDX0JBX0U3Xzk0X0E4X0U2Xzg4X0I3KQogICAgICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfQkVfRTVfODhfQjAgPSBGYWxzZQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoX0U2XzlDX0FDX0U2XzlDX0JBX0U3Xzk0X0E4X0U2Xzg4X0I3KQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnT0snLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPT0nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/34-1-课堂互动-一人抢答.mix b/boards/default/micropython_esp32/examples/MixGo/34-1-课堂互动-一人抢答.mix
new file mode 100644
index 00000000..a0933d81
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/34-1-课堂互动-一人抢答.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWl4Z29fbWluaQppbXBvcnQgdGltZQoKZGVmIG1ldGhvZDIoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTZfOEFfQTJfRTdfQURfOTRfRThfODBfODUKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTZfOEFfQTJfRTdfQURfOTQKICAgIF9FNl84QV9BMl9FN19BRF85NF9FOF84MF84NSA9IG1zZwogICAgX0U1X0JDXzgwX0U1X0E3XzhCX0U2XzhBX0EyX0U3X0FEXzk0ID0gRmFsc2UKICAgIG9uYm9hcmRfbWF0cml4LnNjcm9sbChfRTZfOEFfQTJfRTdfQURfOTRfRThfODBfODUpCiAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnPT0nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTZfOEFfQTJfRTdfQURfOTQKICAgIGlmIG1zZyA9PSAnMSc6CiAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCX0U2XzhBX0EyX0U3X0FEXzk0ID0gVHJ1ZQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKCdHTycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQoKCgpfRTZfOUNfQUNfRTZfOUNfQkFfRTdfOTRfQThfRTZfODhfQjcgPSAnbWl4bHknCl9FNl84QV9BMl9FN19BRF85NF9FOF84MF84NSA9ICcnCl9FNV9CQ184MF9FNV9BN184Ql9FNl84QV9BMl9FN19BRF85NCA9IEZhbHNlCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpzayA9IGFuYWx5c2Vfc2hhcmVrZXkoJ2h0dHA6Ly9taXhpby5taXhseS5jbi9taXhpby1waHAvc2hhcmVrZXkucGhwP3NrPTdiNjQ0MycpCk1RVFRfVVNSX1BSSiA9IHNrWzBdKycvJytza1sxXSsnLycKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCBza1swXSwgc2tbMl0sIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCflvIDlp4vmiqLnrZQnLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+W8gOWni+aKouetlCcpCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygn5oqi562U6ICFJyxtZXRob2QyLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnN1YnNjcmliZShNUVRUX1VTUl9QUkogKyAn5oqi562U6ICFJykKb25ib2FyZF9tYXRyaXguc2hvd3MoJz09JyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCX0U2XzhBX0EyX0U3X0FEXzk0OgogICAgICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguZmlsbCgwKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgICAgICAgICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn5oqi562U6ICFJywgX0U2XzlDX0FDX0U2XzlDX0JBX0U3Xzk0X0E4X0U2Xzg4X0I3KQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnT0snLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTZfOEFfQTJfRTdfQURfOTQgPSBGYWxzZQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/34-2-课堂互动-多人抢答.mix b/boards/default/micropython_esp32/examples/MixGo/34-2-课堂互动-多人抢答.mix
new file mode 100644
index 00000000..0f37d0ba
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/34-2-课堂互动-多人抢答.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgbWl4Z29fbWluaQppbXBvcnQgdGltZQoKZGVmIG1ldGhvZDIoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTZfOEFfQTJfRTdfQURfOTRfRThfODBfODVfRTlfOUJfODZfRTVfOTBfODgKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTZfOEFfQTJfRTdfQURfOTQKICAgIF9FNl84QV9BMl9FN19BRF85NF9FOF84MF84NV9FOV85Ql84Nl9FNV85MF84OC5hZGQobXNnKQogICAgaWYgbGVuKF9FNl84QV9BMl9FN19BRF85NF9FOF84MF84NV9FOV85Ql84Nl9FNV85MF84OCkgPj0gMjoKICAgICAgICBfRTZfOEFfQTJfRTdfQURfOTRfRThfODBfODVfRTlfOUJfODZfRTVfOTBfODggPSBzZXQoKQogICAgICAgIF9FNV9CQ184MF9FNV9BN184Ql9FNl84QV9BMl9FN19BRF85NCA9IEZhbHNlCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJz09JyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCgpkZWYgbWV0aG9kKGNsaWVudCwgdG9waWMsIG1zZyk6CiAgICBnbG9iYWwgX0U1X0JDXzgwX0U1X0E3XzhCX0U2XzhBX0EyX0U3X0FEXzk0CiAgICBpZiBtc2cgPT0gJzEnOgogICAgICAgIF9FNV9CQ184MF9FNV9BN184Ql9FNl84QV9BMl9FN19BRF85NCA9IFRydWUKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cygnR08nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKCgoKX0U2XzlDX0FDX0U2XzlDX0JBX0U3Xzk0X0E4X0U2Xzg4X0I3ID0gJ21peGx5JwpfRTZfOEFfQTJfRTdfQURfOTRfRThfODBfODVfRTlfOUJfODZfRTVfOTBfODggPSBzZXQoKQpfRTVfQkNfODBfRTVfQTdfOEJfRTZfOEFfQTJfRTdfQURfOTQgPSBGYWxzZQptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKc2sgPSBhbmFseXNlX3NoYXJla2V5KCdodHRwOi8vbWl4aW8ubWl4bHkuY24vbWl4aW8tcGhwL3NoYXJla2V5LnBocD9zaz03YjY0NDMnKQpNUVRUX1VTUl9QUkogPSBza1swXSsnLycrc2tbMV0rJy8nCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgc2tbMF0sIHNrWzJdLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygn5byA5aeL5oqi562UJyxtZXRob2QsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc3Vic2NyaWJlKE1RVFRfVVNSX1BSSiArICflvIDlp4vmiqLnrZQnKQptcXR0X2NsaWVudC5zZXRfY2FsbGJhY2soJ+aKouetlOiAhScsbWV0aG9kMiwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+aKouetlOiAhScpCm9uYm9hcmRfbWF0cml4LnNob3dzKCc9PScsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQp3aGlsZSBUcnVlOgogICAgbXF0dF9jbGllbnQuY2hlY2tfbXNnKCkKICAgIGlmIF9FNV9CQ184MF9FNV9BN184Ql9FNl84QV9BMl9FN19BRF85NDoKICAgICAgICBpZiBtaXhnb19taW5pLkIxa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LmZpbGwoMCkKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvdygpCiAgICAgICAgICAgIG1xdHRfY2xpZW50LnB1Ymxpc2goTVFUVF9VU1JfUFJKICsgJ+aKouetlOiAhScsIF9FNl85Q19BQ19FNl85Q19CQV9FN185NF9BOF9FNl84OF9CNykKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ09LJyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKICAgICAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCX0U2XzhBX0EyX0U3X0FEXzk0ID0gRmFsc2UKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJz09JyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/35-1-课堂互动-单选答题.mix b/boards/default/micropython_esp32/examples/MixGo/35-1-课堂互动-单选答题.mix
new file mode 100644
index 00000000..4502403e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/35-1-课堂互动-单选答题.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTgKICAgIGdsb2JhbCBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMKICAgIGlmIG1zZyA9PSAnMSc6CiAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEXzk0X0U5X0EyXzk4ID0gVHJ1ZQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKCdHTycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICc9JwoKCgpfRTZfOUNfQUNfRTZfOUNfQkFfRTdfOTRfQThfRTZfODhfQjcgPSAnbWl4bHknCl9FN19BRF85NF9FOV9BMl85OF9FN19CQl85M19FNl85RV85QyA9ICc9JwpfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBGYWxzZQptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKc2sgPSBhbmFseXNlX3NoYXJla2V5KCdodHRwOi8vbWl4aW8ubWl4bHkuY24vbWl4aW8tcGhwL3NoYXJla2V5LnBocD9zaz03YjY0NDMnKQpNUVRUX1VTUl9QUkogPSBza1swXSsnLycrc2tbMV0rJy8nCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgc2tbMF0sIHNrWzJdLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygn5byA5aeL562U6aKYJyxtZXRob2QsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc3Vic2NyaWJlKE1RVFRfVVNSX1BSSiArICflvIDlp4vnrZTpopgnKQp3aGlsZSBUcnVlOgogICAgbXF0dF9jbGllbnQuY2hlY2tfbXNnKCkKICAgIGlmIF9FNV9CQ184MF9FNV9BN184Ql9FN19BRF85NF9FOV9BMl85ODoKICAgICAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICdBJwogICAgICAgIGVsaWYgbWl4Z29fbWluaS5BMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMgPSAnQicKICAgICAgICBlbGlmIG1peGdvX21pbmkuQTNrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJ0MnCiAgICAgICAgZWxpZiBtaXhnb19taW5pLkE0a2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICdEJwogICAgICAgIGlmIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyAhPSAnPSc6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICAgICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn6YCJ6aG5JywgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDKQogICAgICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBGYWxzZQogICAgICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxMDApCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/35-2-课堂互动-多选答题.mix b/boards/default/micropython_esp32/examples/MixGo/35-2-课堂互动-多选答题.mix
new file mode 100644
index 00000000..918454ad
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/35-2-课堂互动-多选答题.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCBtYWNoaW5lCmltcG9ydCB1cmVxdWVzdHMKZnJvbSB1YmluYXNjaWkgaW1wb3J0IGhleGxpZnkKZnJvbSBtaXhweSBpbXBvcnQgYW5hbHlzZV9zaGFyZWtleQppbXBvcnQgbWl4Z29fbWluaQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTgKICAgIGlmIG1zZyA9PSAnMSc6CiAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEXzk0X0U5X0EyXzk4ID0gVHJ1ZQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKCdHTycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQoKCgpfRTdfQURfOTRfRTlfQTJfOThfRTlfOUJfODZfRTVfOTBfODggPSBzZXQoKQpfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBGYWxzZQpfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMgPSAnJwptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKb25ib2FyZF9tYXRyaXguc2hvd3MoJ1dPJyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCnNrID0gYW5hbHlzZV9zaGFyZWtleSgnaHR0cDovL21peGlvLm1peGx5LmNuL21peGlvLXBocC9zaGFyZWtleS5waHA/c2s9N2I2NDQzJykKTVFUVF9VU1JfUFJKID0gc2tbMF0rJy8nK3NrWzFdKycvJwptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsIHNrWzBdLCBza1syXSwgTVFUVF9VU1JfUFJKKQpvbmJvYXJkX21hdHJpeC5zaG93cygnTU8nLHNwYWNlID0gMCxjZW50ZXIgPSBGYWxzZSkKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCflvIDlp4vnrZTpopgnLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+W8gOWni+etlOmimCcpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEXzk0X0U5X0EyXzk4OgogICAgICAgIGlmIG1peGdvX21pbmkuQTFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJ0EnCiAgICAgICAgZWxpZiBtaXhnb19taW5pLkEya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICdCJwogICAgICAgIGVsaWYgbWl4Z29fbWluaS5BM2tleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMgPSAnQycKICAgICAgICBlbGlmIG1peGdvX21pbmkuQTRrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJ0QnCiAgICAgICAgaWYgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDICE9ICcnOgogICAgICAgICAgICBfRTdfQURfOTRfRTlfQTJfOThfRTlfOUJfODZfRTVfOTBfODguYWRkKF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QykKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJycKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJycuam9pbihsaXN0KF9FN19BRF85NF9FOV9BMl85OF9FOV85Ql84Nl9FNV85MF84OCkpKQogICAgICAgIGlmIG1peGdvX21pbmkuQjFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn6YCJ6aG5JywgJycuam9pbihsaXN0KF9FN19BRF85NF9FOV9BMl85OF9FOV85Ql84Nl9FNV85MF84OCkpKQogICAgICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBGYWxzZQogICAgICAgICAgICBfRTdfQURfOTRfRTlfQTJfOThfRTlfOUJfODZfRTVfOTBfODggPSBzZXQoKQogICAgICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxMDApCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/36-1-课堂互动-点名答题.mix b/boards/default/micropython_esp32/examples/MixGo/36-1-课堂互动-点名答题.mix
new file mode 100644
index 00000000..fd0ddd5d
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/36-1-课堂互动-点名答题.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTgKICAgIGdsb2JhbCBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMKICAgIGlmIG1zZyA9PSBfRTZfOUNfQUNfRTZfOUNfQkFfRTdfOTRfQThfRTZfODhfQjc6CiAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEXzk0X0U5X0EyXzk4ID0gVHJ1ZQogICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKCdHTycsc3BhY2UgPSAwLGNlbnRlciA9IEZhbHNlKQogICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICc9JwoKCgpfRTZfOUNfQUNfRTZfOUNfQkFfRTdfOTRfQThfRTZfODhfQjcgPSAnbWl4bHknCl9FN19BRF85NF9FOV9BMl85OF9FN19CQl85M19FNl85RV85QyA9ICc9JwpfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBGYWxzZQptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKc2sgPSBhbmFseXNlX3NoYXJla2V5KCdodHRwOi8vbWl4aW8ubWl4bHkuY24vbWl4aW8tcGhwL3NoYXJla2V5LnBocD9zaz03YjY0NDMnKQpNUVRUX1VTUl9QUkogPSBza1swXSsnLycrc2tbMV0rJy8nCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgc2tbMF0sIHNrWzJdLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygn562U6aKY55So5oi3JyxtZXRob2QsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc3Vic2NyaWJlKE1RVFRfVVNSX1BSSiArICfnrZTpopjnlKjmiLcnKQp3aGlsZSBUcnVlOgogICAgbXF0dF9jbGllbnQuY2hlY2tfbXNnKCkKICAgIGlmIF9FNV9CQ184MF9FNV9BN184Ql9FN19BRF85NF9FOV9BMl85ODoKICAgICAgICBpZiBtaXhnb19taW5pLkExa2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICdBJwogICAgICAgIGVsaWYgbWl4Z29fbWluaS5BMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMgPSAnQicKICAgICAgICBlbGlmIG1peGdvX21pbmkuQTNrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJ0MnCiAgICAgICAgZWxpZiBtaXhnb19taW5pLkE0a2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICdEJwogICAgICAgIGlmIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyAhPSAnPSc6CiAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkKICAgICAgICAgICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn6YCJ6aG5JywgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDKQogICAgICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBGYWxzZQogICAgICAgICAgICBvbmJvYXJkX211c2ljLnBpdGNoX3RpbWUoNjU5LCAxMDApCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/36-2-课堂互动-多人点答.mix b/boards/default/micropython_esp32/examples/MixGo/36-2-课堂互动-多人点答.mix
new file mode 100644
index 00000000..e0c7575e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/36-2-课堂互动-多人点答.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQppbXBvcnQgdXJlcXVlc3RzCmZyb20gdWJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CmZyb20gbWl4cHkgaW1wb3J0IGFuYWx5c2Vfc2hhcmVrZXkKaW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTgKICAgIGdsb2JhbCBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMKICAgIGlmIG1zZy5maW5kKF9FNl85Q19BQ19FNl85Q19CQV9FN185NF9BOF9FNl84OF9CNykgPiAtMToKICAgICAgICBfRTVfQkNfODBfRTVfQTdfOEJfRTdfQURfOTRfRTlfQTJfOTggPSBUcnVlCiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoJ0dPJyxzcGFjZSA9IDAsY2VudGVyID0gRmFsc2UpCiAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJz0nCgoKCl9FNl85Q19BQ19FNl85Q19CQV9FN185NF9BOF9FNl84OF9CNyA9ICdtaXhseScKX0U3X0FEXzk0X0U5X0EyXzk4X0U3X0JCXzkzX0U2XzlFXzlDID0gJz0nCl9FNV9CQ184MF9FNV9BN184Ql9FN19BRF85NF9FOV9BMl85OCA9IEZhbHNlCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpzayA9IGFuYWx5c2Vfc2hhcmVrZXkoJ2h0dHA6Ly9taXhpby5taXhseS5jbi9taXhpby1waHAvc2hhcmVrZXkucGhwP3NrPTdiNjQ0MycpCk1RVFRfVVNSX1BSSiA9IHNrWzBdKycvJytza1sxXSsnLycKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCBza1swXSwgc2tbMl0sIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCfnrZTpopjnlKjmiLcnLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+etlOmimOeUqOaItycpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQogICAgaWYgX0U1X0JDXzgwX0U1X0E3XzhCX0U3X0FEXzk0X0U5X0EyXzk4OgogICAgICAgIGlmIG1peGdvX21pbmkuQTFrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJ0EnCiAgICAgICAgZWxpZiBtaXhnb19taW5pLkEya2V5Lndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIF9FOV84MF84OV9FNl84Ql9BOV9FN19CQl85M19FNl85RV85QyA9ICdCJwogICAgICAgIGVsaWYgbWl4Z29fbWluaS5BM2tleS53YXNfcHJlc3NlZCgpOgogICAgICAgICAgICBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMgPSAnQycKICAgICAgICBlbGlmIG1peGdvX21pbmkuQTRrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDID0gJ0QnCiAgICAgICAgaWYgX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDICE9ICc9JzoKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3MoX0U5XzgwXzg5X0U2XzhCX0E5X0U3X0JCXzkzX0U2XzlFXzlDLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgICAgICAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICfpgInpobknLCBfRTlfODBfODlfRTZfOEJfQTlfRTdfQkJfOTNfRTZfOUVfOUMpCiAgICAgICAgICAgIF9FNV9CQ184MF9FNV9BN184Ql9FN19BRF85NF9FOV9BMl85OCA9IEZhbHNlCiAgICAgICAgICAgIG9uYm9hcmRfbXVzaWMucGl0Y2hfdGltZSg2NTksIDEwMCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/37-1-文件操作-列出文件.mix b/boards/default/micropython_esp32/examples/MixGo/37-1-文件操作-列出文件.mix
new file mode 100644
index 00000000..4804465b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/37-1-文件操作-列出文件.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtYXRoCgoKcHJpbnQob3MubGlzdGRpcigpKQpwcmludChvcy5nZXRjd2QoKSkKcyA9IG9zLmxpc3RkaXIoKQpmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDEpOgogICAgcHJpbnQoc1tpXSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/37-2-文件操作-列出文件2.mix b/boards/default/micropython_esp32/examples/MixGo/37-2-文件操作-列出文件2.mix
new file mode 100644
index 00000000..6edf77a7
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/37-2-文件操作-列出文件2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtYXRoCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tYXRyaXgKCgpwcmludChvcy5saXN0ZGlyKCkpCnByaW50KG9zLmdldGN3ZCgpKQpzID0gb3MubGlzdGRpcigpCmZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgMSk6CiAgICBvbmJvYXJkX21hdHJpeC5zY3JvbGwoc1tpXSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/38-1-文件操作-文件读写.mix b/boards/default/micropython_esp32/examples/MixGo/38-1-文件操作-文件读写.mix
new file mode 100644
index 00000000..d20fce91
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/38-1-文件操作-文件读写.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKCgpmID0gb3BlbigndGVzdC50eHQnLCAndycpCmZvciBpIGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICBmLndyaXRlKHN0cihpKSkKICAgIGYud3JpdGUoY2hyKDEzKSkKZi5jbG9zZSgpCmYgPSBvcGVuKCd0ZXN0LnR4dCcsICdyJykKcyA9IGYucmVhZGxpbmUoKQp3aGlsZSBzOgogICAgcHJpbnQocyxlbmQgPSIiKQogICAgcyA9IGYucmVhZGxpbmUoKQpmLmNsb3NlKCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/38-2-文件操作-文件读写2.mix b/boards/default/micropython_esp32/examples/MixGo/38-2-文件操作-文件读写2.mix
new file mode 100644
index 00000000..4855030b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/38-2-文件操作-文件读写2.mix
@@ -0,0 +1 @@
+ZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2JvdAppbXBvcnQgdGltZQppbXBvcnQgbWFjaGluZQoKCmYgPSBvcGVuKCd0ZXN0LmJpbicsICd3JykKZm9yIGkgaW4gcmFuZ2UoMCwgMTAwLCAxKToKICAgIGYud3JpdGUoc3RyKG9uYm9hcmRfYm90LnNvdW5kbGV2ZWwoKSkpCiAgICBmLndyaXRlKGNocigxMykpCiAgICB0aW1lLnNsZWVwX21zKDEwKQpmLmNsb3NlKCkKZiA9IG9wZW4oJ3Rlc3QuYmluJywgJ3InKQpzID0gZi5yZWFkbGluZSgpCndoaWxlIHM6CiAgICBwcmludChzLGVuZCA9IiIpCiAgICBzID0gZi5yZWFkbGluZSgpCmYuY2xvc2UoKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/39-1-文件操作-录音采集.mix b/boards/default/micropython_esp32/examples/MixGo/39-1-文件操作-录音采集.mix
new file mode 100644
index 00000000..d9730868
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/39-1-文件操作-录音采集.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2xlZApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYm90CmZyb20gbWl4cHkgaW1wb3J0IG1hdGhfbWFwCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tYXRyaXgKCgp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDEsMSkKICAgICAgICBmID0gb3BlbignL3Rlc3QudHh0JywgJ3cnKQogICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICAgICAgICAgIGQgPSBvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCkKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNywgaW50KChtYXRoX21hcChkLCAwLCAzMDAwLCA3LCAwKSkpLCAtMSk6CiAgICAgICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5waXhlbChpbnQoMTEpLCBpbnQoaSksIDEpCiAgICAgICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hpZnRfbGVmdCgxKQogICAgICAgICAgICBmLndyaXRlKHN0cihpbnQoZCkpKQogICAgICAgICAgICBmLndyaXRlKGNocigxMCkpCiAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwwKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/39-2-文件操作-录音重现.mix b/boards/default/micropython_esp32/examples/MixGo/39-2-文件操作-录音重现.mix
new file mode 100644
index 00000000..c07f01eb
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/39-2-文件操作-录音重现.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGdvX21pbmkKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2xlZApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYm90CmZyb20gbWl4cHkgaW1wb3J0IG1hdGhfbWFwCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tYXRyaXgKaW1wb3J0IHRpbWUKaW1wb3J0IG1hY2hpbmUKCgp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDEsMSkKICAgICAgICBmID0gb3BlbignL3Rlc3QudHh0JywgJ3cnKQogICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICAgICAgICAgIGQgPSBvbmJvYXJkX2JvdC5zb3VuZGxldmVsKCkKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNywgaW50KChtYXRoX21hcChkLCAwLCAzMDAwLCA3LCAwKSkpLCAtMSk6CiAgICAgICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5waXhlbChpbnQoMTEpLCBpbnQoaSksIDEpCiAgICAgICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgICAgICAgICAgb25ib2FyZF9tYXRyaXguc2hpZnRfbGVmdCgxKQogICAgICAgICAgICBmLndyaXRlKHN0cihpbnQoZCkpKQogICAgICAgICAgICBmLndyaXRlKGNocigxMCkpCiAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMSwwKQogICAgaWYgbWl4Z29fbWluaS5CMmtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDIsMSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGYgPSBvcGVuKCcvdGVzdC50eHQnLCAncicpCiAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICAgICAgICAgICAgICBzID0gZi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICBpZiBzOgogICAgICAgICAgICAgICAgICAgIGQgPSBpbnQocykKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg3LCBpbnQoKG1hdGhfbWFwKGQsIDAsIDMwMDAsIDcsIDApKSksIC0xKToKICAgICAgICAgICAgICAgICAgICAgICAgb25ib2FyZF9tYXRyaXgucGl4ZWwoaW50KDExKSwgaW50KGkpLCAxKQogICAgICAgICAgICAgICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93KCkKICAgICAgICAgICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9sZWZ0KDEpCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCiAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgcHJpbnQoZSkKICAgICAgICBvbmJvYXJkX2xlZC5zZXRvbm9mZigyLDApCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/40-1-文件操作-震动采集.mix b/boards/default/micropython_esp32/examples/MixGo/40-1-文件操作-震动采集.mix
new file mode 100644
index 00000000..5b824539
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/40-1-文件操作-震动采集.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtaXhnb19taW5pCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9sZWQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwpmcm9tIG1peHB5IGltcG9ydCBtYXRoX21hcApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CgoKcHJpbnQob3MubGlzdGRpcigpKQp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDEsMSkKICAgICAgICBmID0gb3BlbignL2FjYy50eHQnLCAndycpCiAgICAgICAgZm9yIHggaW4gcmFuZ2UoMCwgMTAwLCAxKToKICAgICAgICAgICAgZCA9ICd7fSx7fSx7fScuZm9ybWF0KG9uYm9hcmRfYWNjLmFjY2VsZXJhdGlvbigpWzBdLCBvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKVsxXSwgb25ib2FyZF9hY2MuYWNjZWxlcmF0aW9uKClbMl0pCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDcsIGludCgobWF0aF9tYXAob25ib2FyZF9hY2Muc3RyZW5ndGgoKSwgMCwgMTAsIDcsIDApKSksIC0xKToKICAgICAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludCgxMSksIGludChpKSwgMSkKICAgICAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9sZWZ0KDEpCiAgICAgICAgICAgIGYud3JpdGUoZCkKICAgICAgICAgICAgZi53cml0ZShjaHIoMTApKQogICAgICAgIGYuY2xvc2UoKQogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDEsMCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/40-2-文件操作-震动重现.mix b/boards/default/micropython_esp32/examples/MixGo/40-2-文件操作-震动重现.mix
new file mode 100644
index 00000000..62b41963
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/40-2-文件操作-震动重现.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtaXhnb19taW5pCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9sZWQKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX2FjYwpmcm9tIG1peHB5IGltcG9ydCBtYXRoX21hcApmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfbWF0cml4CmltcG9ydCB0aW1lCgoKcHJpbnQob3MubGlzdGRpcigpKQp3aGlsZSBUcnVlOgogICAgaWYgbWl4Z29fbWluaS5CMWtleS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDEsMSkKICAgICAgICBmID0gb3BlbignL2FjYy50eHQnLCAndycpCiAgICAgICAgZm9yIHggaW4gcmFuZ2UoMCwgMTAwLCAxKToKICAgICAgICAgICAgZCA9ICd7fSx7fSx7fScuZm9ybWF0KG9uYm9hcmRfYWNjLmFjY2VsZXJhdGlvbigpWzBdLCBvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKVsxXSwgb25ib2FyZF9hY2MuYWNjZWxlcmF0aW9uKClbMl0pCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDcsIGludCgobWF0aF9tYXAob25ib2FyZF9hY2Muc3RyZW5ndGgoKSwgMCwgMTAsIDcsIDApKSksIC0xKToKICAgICAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnBpeGVsKGludCgxMSksIGludChpKSwgMSkKICAgICAgICAgICAgICAgIG9uYm9hcmRfbWF0cml4LnNob3coKQogICAgICAgICAgICBvbmJvYXJkX21hdHJpeC5zaGlmdF9sZWZ0KDEpCiAgICAgICAgICAgIGYud3JpdGUoZCkKICAgICAgICAgICAgZi53cml0ZShjaHIoMTApKQogICAgICAgIGYuY2xvc2UoKQogICAgICAgIG9uYm9hcmRfbGVkLnNldG9ub2ZmKDEsMCkKICAgIGlmIG1peGdvX21pbmkuQjJrZXkud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX2xlZC5zZXRvbm9mZigyLDEpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBmID0gb3BlbignL2FjYy50eHQnLCAncicpCiAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICAgICAgICAgICAgICBzID0gZi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICBwcmludChzLGVuZCA9IiIpCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwX21zKDUwKQogICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIHByaW50KGUpCiAgICAgICAgb25ib2FyZF9sZWQuc2V0b25vZmYoMiwwKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/43-2-智能小车-体感遥控(MEGO).mix b/boards/default/micropython_esp32/examples/MixGo/43-2-智能小车-体感遥控(MEGO).mix
new file mode 100644
index 00000000..64829d6c
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/43-2-智能小车-体感遥控(MEGO).mix
@@ -0,0 +1 @@
+aW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQpmcm9tIG1peGdvX21pbmkgaW1wb3J0IG9uYm9hcmRfYWNjCmZyb20gbWl4Z29fbWluaSBpbXBvcnQgb25ib2FyZF9tYXRyaXgKCgpfRTVfOTFfQkRfRTRfQkJfQTQgPSAnJwpFU1BOb3dfcmFkaW8uc2V0X2NoYW5uZWwoY2hhbm5lbD0xKQpFU1BOb3dfcmFkaW8uYWN0aXZlKFRydWUpCndoaWxlIFRydWU6CiAgICBpZiBvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKVsxXSA8IC0wLjE6CiAgICAgICAgX0U1XzkxX0JEX0U0X0JCX0E0ID0gJ0cnCiAgICBlbGlmIG9uYm9hcmRfYWNjLmFjY2VsZXJhdGlvbigpWzFdID4gMC4xOgogICAgICAgIF9FNV85MV9CRF9FNF9CQl9BNCA9ICdCJwogICAgZWxpZiBvbmJvYXJkX2FjYy5hY2NlbGVyYXRpb24oKVswXSA8IC0wLjE6CiAgICAgICAgX0U1XzkxX0JEX0U0X0JCX0E0ID0gJ0wnCiAgICBlbGlmIG9uYm9hcmRfYWNjLmFjY2VsZXJhdGlvbigpWzBdID4gMC4xOgogICAgICAgIF9FNV85MV9CRF9FNF9CQl9BNCA9ICdSJwogICAgZWxzZToKICAgICAgICBfRTVfOTFfQkRfRTRfQkJfQTQgPSAnUycKICAgIEVTUE5vd19yYWRpby5zZW5kKCJmZmZmZmZmZmZmZmYiLF9FNV85MV9CRF9FNF9CQl9BNCkKICAgIG9uYm9hcmRfbWF0cml4LnNob3dzKF9FNV85MV9CRF9FNF9CQl9BNCxzcGFjZSA9IDAsY2VudGVyID0gVHJ1ZSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/44-1-智能小车-P单巡线(MEGO).mix b/boards/default/micropython_esp32/examples/MixGo/44-1-智能小车-P单巡线(MEGO).mix
new file mode 100644
index 00000000..11820374
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/44-1-智能小车-P单巡线(MEGO).mix
@@ -0,0 +1 @@
+ZnJvbSBtaW5pX2dvIGltcG9ydCBjYXIKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCnRhcmdldCA9IDMwMDAwCmVycm9yID0gMApLUCA9IDAuMDAyClAgPSAwCmNhci5pcl9tb2RlKGNhci5BUykKc3BlZWQgPSAxMDAKd2hpbGUgVHJ1ZToKICAgIGVycm9yID0gY2FyLnBhdHJvbCgpWzFdIC0gdGFyZ2V0CiAgICBQID0gZXJyb3IgKiBLUAogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKGludChlcnJvcikpLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgY2FyLm1vdG9yKGNhci5NT1RPWzBdLCJDQ1ciLChtaW4obWF4KHNwZWVkICsgUCwgLTUwKSwgMTAwKSkpCiAgICBjYXIubW90b3IoY2FyLk1PVE9bMV0sIkNXIiwobWluKG1heChzcGVlZCAtIFAsIC01MCksIDEwMCkpKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/MixGo/44-2-智能小车-P双巡线(MEGO).mix b/boards/default/micropython_esp32/examples/MixGo/44-2-智能小车-P双巡线(MEGO).mix
new file mode 100644
index 00000000..1bf0e492
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/MixGo/44-2-智能小车-P双巡线(MEGO).mix
@@ -0,0 +1 @@
+ZnJvbSBtaW5pX2dvIGltcG9ydCBjYXIKZnJvbSBtaXhnb19taW5pIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCmVycm9yID0gMApLUCA9IDAuMDAzClAgPSAwCnNwZWVkID0gMTAwCmNhci5pcl9tb2RlKGNhci5BUykKd2hpbGUgVHJ1ZToKICAgIGVycm9yID0gY2FyLnBhdHJvbCgpWzFdIC0gY2FyLnBhdHJvbCgpWzJdCiAgICBQID0gZXJyb3IgKiBLUAogICAgb25ib2FyZF9tYXRyaXguc2hvd3Moc3RyKGludChlcnJvcikpLHNwYWNlID0gMCxjZW50ZXIgPSBUcnVlKQogICAgY2FyLm1vdG9yKGNhci5NT1RPWzBdLCJDQ1ciLChtaW4obWF4KHNwZWVkICsgUCwgLTEwMCksIDEwMCkpKQogICAgY2FyLm1vdG9yKGNhci5NT1RPWzFdLCJDVyIsKG1pbihtYXgoc3BlZWQgLSBQLCAtMTAwKSwgMTAwKSkpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/01-1-快速入门-你好世界.mix b/boards/default/micropython_esp32/examples/mPython/01-1-快速入门-你好世界.mix
new file mode 100644
index 00000000..a043fdad
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/01-1-快速入门-你好世界.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfb2xlZC5pbWFnZShIZWFydCkKICAgIG9uYm9hcmRfb2xlZC5zY3JvbGwoJ0hlbGxvLE1peGx5IScpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/01-2-快速入门-你好世界2.mix b/boards/default/micropython_esp32/examples/mPython/01-2-快速入门-你好世界2.mix
new file mode 100644
index 00000000..e0a1dba9
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/01-2-快速入门-你好世界2.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX29sZWQuaW1hZ2Uob25ib2FyZF9tYXRyaXgubWFwX2ludmVydChvbmJvYXJkX21hdHJpeC5IRUFSVCkpCiAgICBvbmJvYXJkX29sZWQuc2Nyb2xsKCdIZWxsbyxNaXhseSEnLHkgPSAwLHNpemUgPSA1LHNwZWVkID01LHNwYWNlID0gMCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/02-1-快速入门-跳动的心.mix b/boards/default/micropython_esp32/examples/mPython/02-1-快速入门-跳动的心.mix
new file mode 100644
index 00000000..3992f5c5
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/02-1-快速入门-跳动的心.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydAoKCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX29sZWQuaW1hZ2UoSGVhcnQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfb2xlZC5pbWFnZShTbWFsbF9oZWFydCkKICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/02-2-快速入门-为你心动.mix b/boards/default/micropython_esp32/examples/mPython/02-2-快速入门-为你心动.mix
new file mode 100644
index 00000000..2a5a9fd5
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/02-2-快速入门-为你心动.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydAoKCm9uYm9hcmRfb2xlZC5zY3JvbGwoJ01peGx5JykKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfb2xlZC5pbWFnZShIZWFydCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9vbGVkLmltYWdlKFNtYWxsX2hlYXJ0KQogICAgdGltZS5zbGVlcCgwLjEpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/03-1-快速入门-心随我动.mix b/boards/default/micropython_esp32/examples/mPython/03-1-快速入门-心随我动.mix
new file mode 100644
index 00000000..6c5d7510
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/03-1-快速入门-心随我动.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX21hdHJpeAoKCndoaWxlIFRydWU6CiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIGVsc2U6CiAgICAgICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/03-2-快速入门-心随我动2.mix b/boards/default/micropython_esp32/examples/mPython/03-2-快速入门-心随我动2.mix
new file mode 100644
index 00000000..5a6eb8b4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/03-2-快速入门-心随我动2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IFNhZApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IFNtYWxsX2hlYXJ0CmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWlsZQoKCndoaWxlIFRydWU6CiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLmlzX3ByZXNzZWQoKSBhbmQgbXB5dGhvbi5idXR0b25fYS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9vbGVkLmltYWdlKFNhZCkKICAgIGVsaWYgbXB5dGhvbi5idXR0b25fYS5pc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9vbGVkLmltYWdlKEhlYXJ0KQogICAgZWxpZiBtcHl0aG9uLmJ1dHRvbl9hLmlzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX29sZWQuaW1hZ2UoU21hbGxfaGVhcnQpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfb2xlZC5pbWFnZShTbWlsZSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/04-1-快速入门-流动的灯.mix b/boards/default/micropython_esp32/examples/mPython/04-1-快速入门-流动的灯.mix
new file mode 100644
index 00000000..ae514425
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/04-1-快速入门-流动的灯.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCAyLCAxKToKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/04-2-快速入门-流动的灯2.mix b/boards/default/micropython_esp32/examples/mPython/04-2-快速入门-流动的灯2.mix
new file mode 100644
index 00000000..d748da73
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/04-2-快速入门-流动的灯2.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX3JnYgppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBmb3IgaSBpbiByYW5nZSgwLCAyLCAxKToKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgICAgICBvbmJvYXJkX3JnYltpXSA9ICgwLCAwLCAyNSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX3JnYi5maWxsKCgwLCAwLCAwKSkKICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIHRpbWUuc2xlZXAoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/05-1-过程控制-双键开关.mix b/boards/default/micropython_esp32/examples/mPython/05-1-过程控制-双键开关.mix
new file mode 100644
index 00000000..89ca69b9
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/05-1-过程控制-双键开关.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CgoKd2hpbGUgVHJ1ZToKICAgIGlmIG1weXRob24uYnV0dG9uX2Eud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX29sZWQuaW1hZ2UoSGVhcnQpCiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9iLndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9vbGVkLmZpbGwoMCkKICAgICAgICBvbmJvYXJkX29sZWQuc2hvdygpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/05-2-过程控制-单键开关.mix b/boards/default/micropython_esp32/examples/mPython/05-2-过程控制-单键开关.mix
new file mode 100644
index 00000000..739a3896
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/05-2-过程控制-单键开关.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CgoKd2hpbGUgVHJ1ZToKICAgIGlmIG1weXRob24uYnV0dG9uX2Eud2FzX3ByZXNzZWQoKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICBvbmJvYXJkX29sZWQuaW1hZ2UoSGVhcnQpCiAgICAgICAgICAgIGlmIChtcHl0aG9uLmJ1dHRvbl9hLndhc19wcmVzc2VkKCkpOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBvbmJvYXJkX29sZWQuZmlsbCgwKQogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93KCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/05-3-过程控制-IPO概念.mix b/boards/default/micropython_esp32/examples/mPython/05-3-过程控制-IPO概念.mix
new file mode 100644
index 00000000..015e02f0
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/05-3-过程控制-IPO概念.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CgoKX0U2Xzk4X0JFX0U3X0E0X0JBID0gRmFsc2UKd2hpbGUgVHJ1ZToKICAgIGlmIG1weXRob24uYnV0dG9uX2Eud2FzX3ByZXNzZWQoKToKICAgICAgICBfRTZfOThfQkVfRTdfQTRfQkEgPSBub3QgX0U2Xzk4X0JFX0U3X0E0X0JBCiAgICBpZiBfRTZfOThfQkVfRTdfQTRfQkE6CiAgICAgICAgb25ib2FyZF9vbGVkLmltYWdlKEhlYXJ0KQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX29sZWQuZmlsbCgwKQogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93KCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/06-1-过程控制-声音采集.mix b/boards/default/micropython_esp32/examples/mPython/06-1-过程控制-声音采集.mix
new file mode 100644
index 00000000..38439fd4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/06-1-过程控制-声音采集.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX3NvdW5kCmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfc291bmQuc291bmRsZXZlbCgpKQogICAgdGltZS5zbGVlcCgwLjAxKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/06-2-过程控制-看见声音.mix b/boards/default/micropython_esp32/examples/mPython/06-2-过程控制-看见声音.mix
new file mode 100644
index 00000000..910c1cf4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/06-2-过程控制-看见声音.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX3NvdW5kCmZyb20gbWl4cHkgaW1wb3J0IG1hdGhfbWFwCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfc291bmQuc291bmRsZXZlbCgpKQogICAgZm9yIHkgaW4gcmFuZ2UoMCwgaW50KChtYXRoX21hcChvbmJvYXJkX3NvdW5kLnNvdW5kbGV2ZWwoKSwgMCwgMzAwMDAsIDAsIDUpKSksIDEpOgogICAgICAgIG9uYm9hcmRfb2xlZC5waXhlbChpbnQoMTI3KSwgaW50KDYzIC0geSksIDEpCiAgICAgICAgb25ib2FyZF9vbGVkLnNob3coKQogICAgb25ib2FyZF9vbGVkLnNoaWZ0X2xlZnQoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/07-1-过程控制-光强采集.mix b/boards/default/micropython_esp32/examples/mPython/07-1-过程控制-光强采集.mix
new file mode 100644
index 00000000..df8f373e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/07-1-过程控制-光强采集.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX2xpZ2h0CmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCmltcG9ydCB0aW1lCgoKd2hpbGUgVHJ1ZToKICAgIHByaW50KG9uYm9hcmRfbGlnaHQuYnJpZ2h0bmVzcygpKQogICAgb25ib2FyZF9vbGVkLnNob3dzKHN0cihpbnQob25ib2FyZF9saWdodC5icmlnaHRuZXNzKCkpKSkKICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/07-2-过程控制-自动补光.mix b/boards/default/micropython_esp32/examples/mPython/07-2-过程控制-自动补光.mix
new file mode 100644
index 00000000..9f00726b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/07-2-过程控制-自动补光.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX2xpZ2h0CmltcG9ydCBtYWNoaW5lCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9yZ2IKCgpfRTVfQkRfOTNfRTVfODlfOERfRTVfODVfODlfRTVfQkNfQkEgPSAwCl9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiA9IDAKd2hpbGUgVHJ1ZToKICAgIF9FNV9CRF85M19FNV84OV84RF9FNV84NV84OV9FNV9CQ19CQSA9IGludChvbmJvYXJkX2xpZ2h0LmJyaWdodG5lc3MoKSkKICAgIHByaW50KF9FNV9CRF85M19FNV84OV84RF9FNV84NV84OV9FNV9CQ19CQSkKICAgIG9uYm9hcmRfb2xlZC5zaG93cyhzdHIoX0U1X0JEXzkzX0U1Xzg5XzhEX0U1Xzg1Xzg5X0U1X0JDX0JBKSkKICAgIF9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiA9IG1pbihtYXgoMjUgLSBfRTVfQkRfOTNfRTVfODlfOERfRTVfODVfODlfRTVfQkNfQkEsIDApLCAyNSkKICAgIG9uYm9hcmRfcmdiLmZpbGwoKF9FOF9BMV9BNV9FNV84NV84OV9FNV9BNF9BN19FNV9CMF84RiwgX0U4X0ExX0E1X0U1Xzg1Xzg5X0U1X0E0X0E3X0U1X0IwXzhGLCBfRThfQTFfQTVfRTVfODVfODlfRTVfQTRfQTdfRTVfQjBfOEYpKQogICAgb25ib2FyZF9yZ2Iud3JpdGUoKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/08-1-过程控制-接近检测.mix b/boards/default/micropython_esp32/examples/mPython/08-1-过程控制-接近检测.mix
new file mode 100644
index 00000000..ad18d7ed
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/08-1-过程控制-接近检测.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZAoKCl9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiA9IDAKd2hpbGUgVHJ1ZToKICAgIF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQiA9IGludChvbmJvYXJkX2Fscy5wc19ubCgpKQogICAgcHJpbnQoX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCKQogICAgb25ib2FyZF9vbGVkLnNjcm9sbChzdHIoX0U2XzhFX0E1X0U4X0JGXzkxX0U4X0I3XzlEX0U3X0E2X0JCKSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/08-2-过程控制-入侵报警.mix b/boards/default/micropython_esp32/examples/mPython/08-2-过程控制-入侵报警.mix
new file mode 100644
index 00000000..23127e66
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/08-2-过程控制-入侵报警.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX2FscwppbXBvcnQgbWFjaGluZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKCgpfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgPSAwCl9FNl85OF9BRl9FNV85MF9BNl9FNl84QV9BNV9FOF9BRF9BNiA9IEZhbHNlCndoaWxlIFRydWU6CiAgICBfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgPSBpbnQob25ib2FyZF9hbHMucHNfbmwoKSkKICAgIHByaW50KF9FNl84RV9BNV9FOF9CRl85MV9FOF9CN185RF9FN19BNl9CQikKICAgIG9uYm9hcmRfb2xlZC5zaG93cyhfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIpCiAgICBfRTZfOThfQUZfRTVfOTBfQTZfRTZfOEFfQTVfRThfQURfQTYgPSBfRTZfOEVfQTVfRThfQkZfOTFfRThfQjdfOURfRTdfQTZfQkIgPiAxMDAwCiAgICBpZiBfRTZfOThfQUZfRTVfOTBfQTZfRTZfOEFfQTVfRThfQURfQTY6CiAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/09-1-输入输出-加速度.mix b/boards/default/micropython_esp32/examples/mPython/09-1-输入输出-加速度.mix
new file mode 100644
index 00000000..1efeec14
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/09-1-输入输出-加速度.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtcHl0aG9uIGltcG9ydCBtb3Rpb24KaW1wb3J0IHRpbWUKCgp3aGlsZSBUcnVlOgogICAgcHJpbnQobW90aW9uLmFjY2VsZXJvbWV0ZXIoKSkKICAgIHRpbWUuc2xlZXAoMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/09-2-输入输出-平衡仪.mix b/boards/default/micropython_esp32/examples/mPython/09-2-输入输出-平衡仪.mix
new file mode 100644
index 00000000..83e99b70
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/09-2-输入输出-平衡仪.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBtb3Rpb24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKaW1wb3J0IHRpbWUKCgp4ID0gNjMKeSA9IDMxCndoaWxlIFRydWU6CiAgICBpZiBtb3Rpb24uYWNjZWxlcm9tZXRlcigpWzBdIDwgLTAuMToKICAgICAgICB4IC09IDEKICAgIGlmIG1vdGlvbi5hY2NlbGVyb21ldGVyKClbMF0gPiAwLjE6CiAgICAgICAgeCArPSAxCiAgICBpZiBtb3Rpb24uYWNjZWxlcm9tZXRlcigpWzFdIDwgLTAuMToKICAgICAgICB5IC09IDEKICAgIGlmIG1vdGlvbi5hY2NlbGVyb21ldGVyKClbMV0gPiAwLjE6CiAgICAgICAgeSArPSAxCiAgICB4ID0gbWluKG1heCh4LCAwKSwgNykKICAgIHkgPSBtaW4obWF4KHksIDApLCA0KQogICAgb25ib2FyZF9vbGVkLmZpbGwoMCkKICAgIG9uYm9hcmRfb2xlZC5zaG93KCkKICAgIG9uYm9hcmRfb2xlZC5waXhlbChpbnQoeCksIGludCh5KSwgMSkKICAgIG9uYm9hcmRfb2xlZC5zaG93KCkKICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/10-1-输入输出-地磁强度.mix b/boards/default/micropython_esp32/examples/mPython/10-1-输入输出-地磁强度.mix
new file mode 100644
index 00000000..dbc1d407
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/10-1-输入输出-地磁强度.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX21ncwppbXBvcnQgdGltZQoKCndoaWxlIFRydWU6CiAgICBwcmludChvbmJvYXJkX21ncy5nZXRzdHJlbmd0aCgpKQogICAgdGltZS5zbGVlcCgxKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/10-2-输入输出-金属探测.mix b/boards/default/micropython_esp32/examples/mPython/10-2-输入输出-金属探测.mix
new file mode 100644
index 00000000..b10dac0b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/10-2-输入输出-金属探测.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX21ncwpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKaW1wb3J0IHRpbWUKaW1wb3J0IG1weXRob24KCgp3aGlsZSBUcnVlOgogICAgaWYgb25ib2FyZF9tZ3MuZ2V0c3RyZW5ndGgoKSA+IDIwMDA6CiAgICAgICAgb25ib2FyZF9tdXNpYy5waXRjaF90aW1lKDQ0MCwgMTAwKQogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93cygnR08nKQogICAgICAgIHRpbWUuc2xlZXAoMSkKICAgIGlmIG1weXRob24uYnV0dG9uX2Eud2FzX3ByZXNzZWQoKToKICAgICAgICBvbmJvYXJkX29sZWQuZmlsbCgwKQogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93KCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/12-1-输入输出-实时时钟.mix b/boards/default/micropython_esp32/examples/mPython/12-1-输入输出-实时时钟.mix
new file mode 100644
index 00000000..e40de6fd
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/12-1-输入输出-实时时钟.mix
@@ -0,0 +1 @@
+aW1wb3J0IG50cHRpbWUKaW1wb3J0IG1hY2hpbmUKaW1wb3J0IHRpbWUKCgpudHB0aW1lLnNldHRpbWUoKDIwMjQsNCwyLDIxLDA0LDQ1LDAsMCkpCndoaWxlIFRydWU6CiAgICBwcmludCh0aW1lLmxvY2FsdGltZSgpKQogICAgdGltZS5zbGVlcCgxKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/12-2-输入输出-实时时钟2.mix b/boards/default/micropython_esp32/examples/mPython/12-2-输入输出-实时时钟2.mix
new file mode 100644
index 00000000..39095237
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/12-2-输入输出-实时时钟2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG50cHRpbWUKaW1wb3J0IHRpbWUKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKCgpudHB0aW1lLnNldHRpbWUoKDIwMjQsNCwyLDIxLDA0LDQ1LDAsMCkpCndoaWxlIFRydWU6CiAgICBteXR1cCA9IHRpbWUubG9jYWx0aW1lKCkKICAgIG9uYm9hcmRfb2xlZC5zaG93cygne306e306e30nLmZvcm1hdChzdHIobXl0dXBbM10pLCBzdHIobXl0dXBbNF0pLCBzdHIobXl0dXBbNV0pKSkKICAgIHRpbWUuc2xlZXAoMC41KQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/13-1-逻辑计算-手速测试.mix b/boards/default/micropython_esp32/examples/mPython/13-1-逻辑计算-手速测试.mix
new file mode 100644
index 00000000..cdbaa964
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/13-1-逻辑计算-手速测试.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1weXRob24KaW1wb3J0IHRpbWUKaW1wb3J0IG1hY2hpbmUKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKCgpfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgPSAwCl9FNl84QV9BQ19FOF9CNV9CN19FNl85N19CNl9FNV84OF9CQiA9IDAKd2hpbGUgVHJ1ZToKICAgIGlmIG1weXRob24uYnV0dG9uX2EuaXNfcHJlc3NlZCgpOgogICAgICAgIF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGlmIChub3QgbXB5dGhvbi5idXR0b25fYS5pc19wcmVzc2VkKCkpOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBfRTZfOEFfQUNfRThfQjVfQjdfRTZfOTdfQjZfRTVfODhfQkIgPSB0aW1lLnRpY2tzX21zKCkKICAgICAgICBwcmludCgoX0U2XzhBX0FDX0U4X0I1X0I3X0U2Xzk3X0I2X0U1Xzg4X0JCIC0gX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCKSkKICAgICAgICBvbmJvYXJkX29sZWQuc2hvd3Moc3RyKChfRTZfOEFfQUNfRThfQjVfQjdfRTZfOTdfQjZfRTVfODhfQkIgLSBfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIpKSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/14-1-逻辑计算-反应测试.mix b/boards/default/micropython_esp32/examples/mPython/14-1-逻辑计算-反应测试.mix
new file mode 100644
index 00000000..7a53a7f1
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/14-1-逻辑计算-反应测试.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZApmcm9tIGluZm9ybWF0aW9fcGljdHVyZSBpbXBvcnQgTGVmdAppbXBvcnQgbXB5dGhvbgppbXBvcnQgbWFjaGluZQoKCl9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IDAKX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gMApfRTlfOTdfQjRfRTlfOUFfOTRfRTZfOTdfQjZfRTlfOTdfQjQgPSAwCndoaWxlIFRydWU6CiAgICB0aW1lLnNsZWVwKChyYW5kb20udW5pZm9ybSgxLCAyKSkpCiAgICBvbmJvYXJkX29sZWQuaW1hZ2UoTGVmdCkKICAgIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiAobXB5dGhvbi5idXR0b25fYS5pc19wcmVzc2VkKCkpOgogICAgICAgICAgICBicmVhawogICAgX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCID0gdGltZS50aWNrc19tcygpCiAgICBvbmJvYXJkX29sZWQuZmlsbCgwKQogICAgb25ib2FyZF9vbGVkLnNob3coKQogICAgX0U5Xzk3X0I0X0U5XzlBXzk0X0U2Xzk3X0I2X0U5Xzk3X0I0ID0gX0U2XzhDXzg5X0U0X0I4XzhCX0U2Xzk3X0I2X0U1Xzg4X0JCIC0gX0U0X0JBX0FFX0U1X0IxXzhGX0U2Xzk3X0I2X0U1Xzg4X0JCCiAgICBwcmludChfRTlfOTdfQjRfRTlfOUFfOTRfRTZfOTdfQjZfRTlfOTdfQjQpCiAgICBvbmJvYXJkX29sZWQuc2hvd3Moc3RyKF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCkpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/14-2-逻辑计算-反应测试2.mix b/boards/default/micropython_esp32/examples/mPython/14-2-逻辑计算-反应测试2.mix
new file mode 100644
index 00000000..6a105448
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/14-2-逻辑计算-反应测试2.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZApmcm9tIGluZm9ybWF0aW9fcGljdHVyZSBpbXBvcnQgTGVmdApmcm9tIGluZm9ybWF0aW9fcGljdHVyZSBpbXBvcnQgUmlnaHQKaW1wb3J0IG1weXRob24KaW1wb3J0IG1hY2hpbmUKZnJvbSBpbmZvcm1hdGlvX3BpY3R1cmUgaW1wb3J0IE5vX2dvCgoKX0U0X0JBX0FFX0U1X0IxXzhGX0U2Xzk3X0I2X0U1Xzg4X0JCID0gMApfRTZfOENfODlfRTRfQjhfOEJfRTZfOTdfQjZfRTVfODhfQkIgPSAwCl9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCA9IDAKX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gMAp3aGlsZSBUcnVlOgogICAgdGltZS5zbGVlcCgocmFuZG9tLnVuaWZvcm0oMSwgMikpKQogICAgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID0gcmFuZG9tLnJhbmRpbnQoMCwgMSkKICAgIGlmIF9FNl85OF9CRV9FN19BNF9CQV9FNV85Ql9CRV9FNV84M184RiA9PSAwOgogICAgICAgIG9uYm9hcmRfb2xlZC5pbWFnZShMZWZ0KQogICAgZWxzZToKICAgICAgICBvbmJvYXJkX29sZWQuaW1hZ2UoUmlnaHQpCiAgICBfRTRfQkFfQUVfRTVfQjFfOEZfRTZfOTdfQjZfRTVfODhfQkIgPSB0aW1lLnRpY2tzX21zKCkKICAgIHdoaWxlIFRydWU6CiAgICAgICAgaWYgKG1weXRob24uYnV0dG9uX2EuaXNfcHJlc3NlZCgpIG9yIG1weXRob24uYnV0dG9uX2EuaXNfcHJlc3NlZCgpKToKICAgICAgICAgICAgYnJlYWsKICAgIGlmIChtcHl0aG9uLmJ1dHRvbl9hLmlzX3ByZXNzZWQoKSBhbmQgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDEpIG9yIChtcHl0aG9uLmJ1dHRvbl9hLmlzX3ByZXNzZWQoKSBhbmQgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1XzlCX0JFX0U1XzgzXzhGID09IDApOgogICAgICAgIF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiA9IHRpbWUudGlja3NfbXMoKQogICAgICAgIG9uYm9hcmRfb2xlZC5maWxsKDApCiAgICAgICAgb25ib2FyZF9vbGVkLnNob3coKQogICAgICAgIF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCA9IF9FNl84Q184OV9FNF9COF84Ql9FNl85N19CNl9FNV84OF9CQiAtIF9FNF9CQV9BRV9FNV9CMV84Rl9FNl85N19CNl9FNV84OF9CQgogICAgICAgIHByaW50KF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCkKICAgICAgICBvbmJvYXJkX29sZWQuc2hvd3Moc3RyKF9FOV85N19CNF9FOV85QV85NF9FNl85N19CNl9FOV85N19CNCkpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfb2xlZC5pbWFnZShOb19nbykK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/17-0-复杂控制-非中断效果.mix b/boards/default/micropython_esp32/examples/mPython/17-0-复杂控制-非中断效果.mix
new file mode 100644
index 00000000..33e47262
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/17-0-复杂控制-非中断效果.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydAppbXBvcnQgbXB5dGhvbgpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfcmdiCgoKd2hpbGUgVHJ1ZToKICAgIG9uYm9hcmRfb2xlZC5pbWFnZShIZWFydCkKICAgIHRpbWUuc2xlZXAoMC41KQogICAgb25ib2FyZF9vbGVkLmltYWdlKFNtYWxsX2hlYXJ0KQogICAgdGltZS5zbGVlcCgwLjUpCiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLndhc19wcmVzc2VkKCk6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMjAsIDIwLCAyMCkpCiAgICAgICAgb25ib2FyZF9yZ2Iud3JpdGUoKQogICAgaWYgbXB5dGhvbi5idXR0b25fYS53YXNfcHJlc3NlZCgpOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/17-2-复杂控制-单键中断.mix b/boards/default/micropython_esp32/examples/mPython/17-2-复杂控制-单键中断.mix
new file mode 100644
index 00000000..75134ad5
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/17-2-复杂控制-单键中断.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfcmdiCgpkZWYgYXR0YWNoSW50ZXJydXB0X2Z1bmMoeCk6CiAgICBnbG9iYWwgX0U2Xzk4X0FGX0U1XzkwX0E2X0U0X0JBX0FFX0U3XzgxX0FGCiAgICBfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUYgPSBub3QgX0U2Xzk4X0FGX0U1XzkwX0E2X0U0X0JBX0FFX0U3XzgxX0FGCiAgICBpZiBfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUY6CiAgICAgICAgb25ib2FyZF9yZ2IuZmlsbCgoMTAsIDEwLCAxMCkpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgb25ib2FyZF9yZ2Iud3JpdGUoKQoKCgpfRTZfOThfQUZfRTVfOTBfQTZfRTRfQkFfQUVfRTdfODFfQUYgPSBGYWxzZQptcHl0aG9uLmJ1dHRvbl9hLmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQp3aGlsZSBUcnVlOgogICAgb25ib2FyZF9vbGVkLmltYWdlKEhlYXJ0KQogICAgdGltZS5zbGVlcCgwLjUpCiAgICBvbmJvYXJkX29sZWQuaW1hZ2UoU21hbGxfaGVhcnQpCiAgICB0aW1lLnNsZWVwKDAuNSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/18-1-复杂控制-定时计时.mix b/boards/default/micropython_esp32/examples/mPython/18-1-复杂控制-定时计时.mix
new file mode 100644
index 00000000..d36234e7
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/18-1-复杂控制-定时计时.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKCmRlZiB0aW1fY2FsbGJhY2sodGltKToKICAgIGdsb2JhbCBfRThfQUVfQTFfRTZfOTdfQjYKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEIKICAgIGlmIF9FNV9CQ184MF9FNV9BN184QjoKICAgICAgICBfRThfQUVfQTFfRTZfOTdfQjYgKz0gMQogICAgb25ib2FyZF9vbGVkLnNob3dzKHN0cihfRThfQUVfQTFfRTZfOTdfQjYpKQoKCgpfRTVfQkNfODBfRTVfQTdfOEIgPSBGYWxzZQpfRThfQUVfQTFfRTZfOTdfQjYgPSAwCnRpbSA9IG1hY2hpbmUuVGltZXIoMCkKdGltLmluaXQocGVyaW9kID0gMTAwLCBtb2RlID0gbWFjaGluZS5UaW1lci5QRVJJT0RJQywgY2FsbGJhY2sgPSB0aW1fY2FsbGJhY2spCndoaWxlIFRydWU6CiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCID0gbm90IF9FNV9CQ184MF9FNV9BN184Qgo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/18-2-复杂控制-循环计时.mix b/boards/default/micropython_esp32/examples/mPython/18-2-复杂控制-循环计时.mix
new file mode 100644
index 00000000..35a43941
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/18-2-复杂控制-循环计时.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKCmRlZiB0aW1fY2FsbGJhY2sodGltKToKICAgIGdsb2JhbCBfRThfQUVfQTFfRTZfOTdfQjYKICAgIGdsb2JhbCBfRTVfQkNfODBfRTVfQTdfOEIKICAgIGlmIF9FNV9CQ184MF9FNV9BN184QjoKICAgICAgICBfRThfQUVfQTFfRTZfOTdfQjYgKz0gMQoKCgpfRTVfQkNfODBfRTVfQTdfOEIgPSBGYWxzZQpfRThfQUVfQTFfRTZfOTdfQjYgPSAwCnRpbSA9IG1hY2hpbmUuVGltZXIoMCkKdGltLmluaXQocGVyaW9kID0gMTAwLCBtb2RlID0gbWFjaGluZS5UaW1lci5QRVJJT0RJQywgY2FsbGJhY2sgPSB0aW1fY2FsbGJhY2spCndoaWxlIFRydWU6CiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U1X0JDXzgwX0U1X0E3XzhCID0gbm90IF9FNV9CQ184MF9FNV9BN184QgogICAgaWYgbXB5dGhvbi5idXR0b25fYS53YXNfcHJlc3NlZCgpIGFuZCBub3QgX0U1X0JDXzgwX0U1X0E3XzhCOgogICAgICAgIF9FOF9BRV9BMV9FNl85N19CNiA9IDAKICAgIG9uYm9hcmRfb2xlZC5zaG93cyhzdHIoX0U4X0FFX0ExX0U2Xzk3X0I2KSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/19-1-复杂控制-多线程.mix b/boards/default/micropython_esp32/examples/mPython/19-1-复杂控制-多线程.mix
new file mode 100644
index 00000000..1f834913
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/19-1-复杂控制-多线程.mix
@@ -0,0 +1 @@
+aW1wb3J0IF90aHJlYWQKaW1wb3J0IG1weXRob24KZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLndhc19wcmVzc2VkKCk6CiAgICAgICAgX0U5XzlGX0IzX0U0X0I5XzkwID0gbm90IF9FOV85Rl9CM19FNF9COV85MAogICAgb25ib2FyZF9vbGVkLmltYWdlKEhlYXJ0KQogICAgdGltZS5zbGVlcCgwLjEpCiAgICBvbmJvYXJkX29sZWQuaW1hZ2UoU21hbGxfaGVhcnQpCiAgICB0aW1lLnNsZWVwKDAuMSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/19-2-复杂控制-多线程与中断.mix b/boards/default/micropython_esp32/examples/mPython/19-2-复杂控制-多线程与中断.mix
new file mode 100644
index 00000000..146a2ab2
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/19-2-复杂控制-多线程与中断.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1weXRob24KaW1wb3J0IF90aHJlYWQKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKZGVmIGF0dGFjaEludGVycnVwdF9mdW5jKHgpOgogICAgZ2xvYmFsIF9FOV85Rl9CM19FNF9COV85MAogICAgX0U5XzlGX0IzX0U0X0I5XzkwID0gbm90IF9FOV85Rl9CM19FNF9COV85MAoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQptcHl0aG9uLmJ1dHRvbl9hLmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX29sZWQuaW1hZ2UoSGVhcnQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfb2xlZC5pbWFnZShTbWFsbF9oZWFydCkKICAgIHRpbWUuc2xlZXAoMC4xKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/20-1-复杂控制-异常.mix b/boards/default/micropython_esp32/examples/mPython/20-1-复杂控制-异常.mix
new file mode 100644
index 00000000..ef5b4ffc
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/20-1-复杂控制-异常.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1weXRob24KaW1wb3J0IF90aHJlYWQKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX29sZWQKZnJvbSBleHByZXNzaW9uX3BpY3R1cmUgaW1wb3J0IEhlYXJ0CmltcG9ydCB0aW1lCmZyb20gZXhwcmVzc2lvbl9waWN0dXJlIGltcG9ydCBTbWFsbF9oZWFydApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBhdHRhY2hJbnRlcnJ1cHRfZnVuYyh4KToKICAgIGdsb2JhbCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIF9FOV85Rl9CM19FNF9COV85MCA9IG5vdCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIGlmIG5vdCBfRTlfOUZfQjNfRTRfQjlfOTA6CiAgICAgICAgb25ib2FyZF9tdXNpYy5zdG9wKCkKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQptcHl0aG9uLmJ1dHRvbl9hLmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX29sZWQuaW1hZ2UoSGVhcnQpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIG9uYm9hcmRfb2xlZC5pbWFnZShTbWFsbF9oZWFydCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgX0U5Xzk0Xzk5X0U4X0FGX0FGX0U1XzhGXzk4X0U5Xzg3XzhGID0gbm90IF9FOV85NF85OV9FOF9BRl9BRl9FNV84Rl85OF9FOV84N184Rgo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/20-2-复杂控制-异常处理.mix b/boards/default/micropython_esp32/examples/mPython/20-2-复杂控制-异常处理.mix
new file mode 100644
index 00000000..be227409
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/20-2-复杂控制-异常处理.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG1weXRob24KaW1wb3J0IF90aHJlYWQKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX21hdHJpeAppbXBvcnQgdGltZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKCmRlZiBhdHRhY2hJbnRlcnJ1cHRfZnVuYyh4KToKICAgIGdsb2JhbCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIF9FOV85Rl9CM19FNF9COV85MCA9IG5vdCBfRTlfOUZfQjNfRTRfQjlfOTAKICAgIGlmIG5vdCBfRTlfOUZfQjNfRTRfQjlfOTA6CiAgICAgICAgb25ib2FyZF9tdXNpYy5zdG9wKCkKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U5XzlGX0IzX0U0X0I5XzkwCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGlmIF9FOV85Rl9CM19FNF9COV85MDoKICAgICAgICAgICAgb25ib2FyZF9tdXNpYy5wbGF5KG9uYm9hcmRfbXVzaWMuREFEQURBRFVNKQoKCgpfRTlfOUZfQjNfRTRfQjlfOTAgPSBGYWxzZQptcHl0aG9uLmJ1dHRvbl9hLmlycShoYW5kbGVyID0gYXR0YWNoSW50ZXJydXB0X2Z1bmMsIHRyaWdnZXIgPSBtYWNoaW5lLlBpbi5JUlFfUklTSU5HKQpfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGVzdFRocmVhZCwgKCkpCndoaWxlIFRydWU6CiAgICBvbmJvYXJkX21hdHJpeC5zaG93cyhvbmJvYXJkX21hdHJpeC5IRUFSVCkKICAgIHRpbWUuc2xlZXAoMC4xKQogICAgb25ib2FyZF9tYXRyaXguc2hvd3Mob25ib2FyZF9tYXRyaXguSEVBUlRfU01BTEwpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIHRyeToKICAgICAgICBfRTlfOTRfOTlfRThfQUZfQUZfRTVfOEZfOThfRTlfODdfOEYgPSBub3QgX0U5Xzk0Xzk5X0U4X0FGX0FGX0U1XzhGXzk4X0U5Xzg3XzhGCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgcGFzcwo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/23-1-蓝牙通讯-主机模式.mix b/boards/default/micropython_esp32/examples/mPython/23-1-蓝牙通讯-主机模式.mix
new file mode 100644
index 00000000..6ef16813
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/23-1-蓝牙通讯-主机模式.mix
@@ -0,0 +1 @@
+aW1wb3J0IGJsZV9jZW50cmFsCmltcG9ydCBtcHl0aG9uCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCmltcG9ydCBtYWNoaW5lCgpkZWYgYmxlX21ldGhvZChkYXRhKToKICAgIHByaW50KGRhdGEpCgoKCmJsZV9jID0gYmxlX2NlbnRyYWwuQkxFU2ltcGxlQ2VudHJhbCgpCmJsZV9jLnJlY3YoYmxlX21ldGhvZCkKd2hpbGUgVHJ1ZToKICAgIGlmIGJsZV9jLmlzX2Nvbm5lY3RlZCgpOgogICAgICAgIGlmIG1weXRob24uYnV0dG9uX2Eud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgYmxlX2Muc2VuZCgndGVzdCcpCiAgICAgICAgb25ib2FyZF9vbGVkLnNob3dzKCdPSycpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93cygnPT0nKQogICAgICAgIHRyeToKICAgICAgICAgICAgYmxlX2MuY29ubmVjdChuYW1lPSdNaXhseV9TbGF2ZScpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICBwYXNzCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/23-1-蓝牙通讯-从机模式.mix b/boards/default/micropython_esp32/examples/mPython/23-1-蓝牙通讯-从机模式.mix
new file mode 100644
index 00000000..02c4e213
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/23-1-蓝牙通讯-从机模式.mix
@@ -0,0 +1 @@
+aW1wb3J0IGJsZV9wZXJpcGhlcmFsCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCmltcG9ydCBtcHl0aG9uCmltcG9ydCBtYWNoaW5lCgpkZWYgYmxlX21ldGhvZChkYXRhKToKICAgIHByaW50KGRhdGEpCgoKCmJsZV94ID0gYmxlX3BlcmlwaGVyYWwuQkxFU2ltcGxlUGVyaXBoZXJhbCgnTWl4bHlfU2xhdmUnKQpibGVfeC5yZWN2KGJsZV9tZXRob2QpCndoaWxlIFRydWU6CiAgICBpZiBibGVfeC5pc19jb25uZWN0ZWQoKToKICAgICAgICBvbmJvYXJkX29sZWQuc2hvd3MoJ09LJykKICAgICAgICBpZiBtcHl0aG9uLmJ1dHRvbl9hLndhc19wcmVzc2VkKCk6CiAgICAgICAgICAgIGJsZV94LnNlbmQoJ0HmjInplK7mjInkuIsnKQogICAgICAgIGlmIG1weXRob24uYnV0dG9uX2Iud2FzX3ByZXNzZWQoKToKICAgICAgICAgICAgYmxlX3guc2VuZCgnQuaMiemUruaMieS4iycpCiAgICBlbHNlOgogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93cygnPT0nKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/24-1-无线广播-通讯测试.mix b/boards/default/micropython_esp32/examples/mPython/24-1-无线广播-通讯测试.mix
new file mode 100644
index 00000000..abd544f2
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/24-1-无线广播-通讯测试.mix
@@ -0,0 +1 @@
+aW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQppbXBvcnQgbXB5dGhvbgpoYW5kbGVfbGlzdD1bXQppbXBvcnQgbWFjaGluZQpkZWYgRVNQTm93X3JhZGlvX3JlY3YobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgcHJpbnQoRVNQTm93X3JhZGlvX21zZykKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdiBpbiBoYW5kbGVfbGlzdDoKICAgIGhhbmRsZV9saXN0LmFwcGVuZChFU1BOb3dfcmFkaW9fcmVjdikKRVNQTm93X3JhZGlvLnJlY3ZfY2IoaGFuZGxlX2xpc3QpCgpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZApkZWYgRVNQTm93X3JhZGlvX3JlY3ZfX0xFRlQobWFjLEVTUE5vd19yYWRpb19tc2cpOgogICAgb25ib2FyZF9vbGVkLnNob3dzKCc8LS0tJykKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdl9fTEVGVCBpbiBoYW5kbGVfbGlzdDoKICAgIGhhbmRsZV9saXN0LmFwcGVuZChFU1BOb3dfcmFkaW9fcmVjdl9fTEVGVCkKRVNQTm93X3JhZGlvLnJlY3ZfY2IoaGFuZGxlX2xpc3QpCgpkZWYgRVNQTm93X3JhZGlvX3JlY3ZfX1JJR0hUKG1hYyxFU1BOb3dfcmFkaW9fbXNnKToKICAgIG9uYm9hcmRfb2xlZC5zaG93cygnLS0+JykKCmlmIG5vdCBFU1BOb3dfcmFkaW9fcmVjdl9fUklHSFQgaW4gaGFuZGxlX2xpc3Q6CiAgICBoYW5kbGVfbGlzdC5hcHBlbmQoRVNQTm93X3JhZGlvX3JlY3ZfX1JJR0hUKQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIGlmIG1weXRob24uYnV0dG9uX2Eud2FzX3ByZXNzZWQoKToKICAgICAgICBFU1BOb3dfcmFkaW8uc2VuZCgiZmZmZmZmZmZmZmZmIiwnTEVGVCcpCiAgICBpZiBtcHl0aG9uLmJ1dHRvbl9iLndhc19wcmVzc2VkKCk6CiAgICAgICAgRVNQTm93X3JhZGlvLnNlbmQoImZmZmZmZmZmZmZmZiIsJ1JJR0hUJykK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/24-2-无线广播-防丢检测.mix b/boards/default/micropython_esp32/examples/mPython/24-2-无线广播-防丢检测.mix
new file mode 100644
index 00000000..e775de3a
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/24-2-无线广播-防丢检测.mix
@@ -0,0 +1 @@
+aW1wb3J0IHRpbWUKaW1wb3J0IHJhZGlvCkVTUE5vd19yYWRpbz1yYWRpby5FU1BOb3coKQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbXVzaWMKaGFuZGxlX2xpc3Q9W10KZGVmIEVTUE5vd19yYWRpb19yZWN2KG1hYyxFU1BOb3dfcmFkaW9fbXNnKToKICAgIGdsb2JhbCBsYXN0bXNndGltZQogICAgb25ib2FyZF9vbGVkLnNob3dzKCdPTicpCiAgICBsYXN0bXNndGltZSA9IHRpbWUudGlja3NfbXMoKQoKaWYgbm90IEVTUE5vd19yYWRpb19yZWN2IGluIGhhbmRsZV9saXN0OgogICAgaGFuZGxlX2xpc3QuYXBwZW5kKEVTUE5vd19yYWRpb19yZWN2KQpFU1BOb3dfcmFkaW8ucmVjdl9jYihoYW5kbGVfbGlzdCkKCgoKbGFzdG1zZ3RpbWUgPSB0aW1lLnRpY2tzX21zKCkKRVNQTm93X3JhZGlvLnNldF9jaGFubmVsKGNoYW5uZWw9MTApCkVTUE5vd19yYWRpby5hY3RpdmUoVHJ1ZSkKd2hpbGUgVHJ1ZToKICAgIHRpbWUuc2xlZXAoMikKICAgIEVTUE5vd19yYWRpby5zZW5kKCJmZmZmZmZmZmZmZmYiLHN0cih0aW1lLnRpY2tzX21zKCkpKQogICAgaWYgdGltZS50aWNrc19tcygpIC0gbGFzdG1zZ3RpbWUgPiAxMDAwMDoKICAgICAgICBvbmJvYXJkX29sZWQuc2hvd3MoJ0xPU1QnKQogICAgICAgIG9uYm9hcmRfbXVzaWMucGxheShvbmJvYXJkX211c2ljLlJJTkdUT05FKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/29-1-物联网-简单数据定时上报.mix b/boards/default/micropython_esp32/examples/mPython/29-1-物联网-简单数据定时上报.mix
new file mode 100644
index 00000000..06adfbb4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/29-1-物联网-简单数据定时上报.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQppbXBvcnQgdGltZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbGlnaHQKCgptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKb25ib2FyZF9vbGVkLnNob3dzKCdXTycpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKb25ib2FyZF9vbGVkLnNob3dzKCdNTycpCndoaWxlIFRydWU6CiAgICB0aW1lLnNsZWVwKDUpCiAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICflhYnnhacnLCBvbmJvYXJkX2xpZ2h0LmJyaWdodG5lc3MoKSkKICAgIG9uYm9hcmRfb2xlZC5zaG93cyhzdHIob25ib2FyZF9saWdodC5icmlnaHRuZXNzKCkpKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/29-2-物联网-复杂数据定时上报.mix b/boards/default/micropython_esp32/examples/mPython/29-2-物联网-复杂数据定时上报.mix
new file mode 100644
index 00000000..7d5deefc
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/29-2-物联网-复杂数据定时上报.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQppbXBvcnQgdGltZQppbXBvcnQgbWl4cHkKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX2xpZ2h0CmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9zb3VuZApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfYWNjCgoKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCm9uYm9hcmRfb2xlZC5zaG93cygnV08nKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCm9uYm9hcmRfb2xlZC5zaG93cygnTU8nKQp3aGlsZSBUcnVlOgogICAgdGltZS5zbGVlcCg1KQogICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn546v5aKDJywgbWl4cHkuZm9ybWF0X3N0cih7IuWFieeFpyI6b25ib2FyZF9saWdodC5icmlnaHRuZXNzKCksICLlo7Dpn7MiOm9uYm9hcmRfc291bmQuc291bmRsZXZlbCgpLCAi6ZyH5YqoIjpvbmJvYXJkX2FjYy5zdHJlbmd0aCgpfSkpCg==
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/30-1-物联网-简单数据按需上报.mix b/boards/default/micropython_esp32/examples/mPython/30-1-物联网-简单数据按需上报.mix
new file mode 100644
index 00000000..12ccba7f
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/30-1-物联网-简单数据按需上报.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdApmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQppbXBvcnQgdGltZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbGlnaHQKCgptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKb25ib2FyZF9vbGVkLnNob3dzKCdXTycpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKb25ib2FyZF9vbGVkLnNob3dzKCdNTycpCndoaWxlIFRydWU6CiAgICB0aW1lLnNsZWVwKDUpCiAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICflhYnnhacnLCBvbmJvYXJkX2xpZ2h0LmJyaWdodG5lc3MoKSkKICAgIG9uYm9hcmRfb2xlZC5zaG93cyhzdHIob25ib2FyZF9saWdodC5icmlnaHRuZXNzKCkpKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/30-2-物联网-高级数据按需上报.mix b/boards/default/micropython_esp32/examples/mPython/30-2-物联网-高级数据按需上报.mix
new file mode 100644
index 00000000..5dcc625f
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/30-2-物联网-高级数据按需上报.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX2FjYwpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfbGlnaHQKZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX3NvdW5kCmltcG9ydCBtaXhpb3QKaW1wb3J0IG1hY2hpbmUKZnJvbSB1YmluYXNjaWkgaW1wb3J0IGhleGxpZnkKaW1wb3J0IF90aHJlYWQKaW1wb3J0IHRpbWUKaW1wb3J0IG1peHB5CgpkZWYgdGVzdFRocmVhZCgpOgogICAgZ2xvYmFsIF9FOV85Q184N19FNV84QV9BOAogICAgZ2xvYmFsIF9FNV84NV84OV9FN184NV9BNwogICAgZ2xvYmFsIF9FNV9BM19CMF9FOV85Rl9CMwogICAgd2hpbGUgVHJ1ZToKICAgICAgICBtcXR0X2NsaWVudC5wdWJsaXNoKE1RVFRfVVNSX1BSSiArICfnjq/looMnLCBtaXhweS5mb3JtYXRfc3RyKHsi5YWJ54WnIjpfRTVfODVfODlfRTdfODVfQTcsICLlo7Dpn7MiOl9FNV9BM19CMF9FOV85Rl9CMywgIumch+WKqCI6X0U5XzlDXzg3X0U1XzhBX0E4fSkpCiAgICAgICAgdGltZS5zbGVlcCg1KQoKCgpfRTlfOUNfODdfRTVfOEFfQTggPSBvbmJvYXJkX2FjYy5zdHJlbmd0aCgpCl9FNV84NV84OV9FN184NV9BNyA9IG9uYm9hcmRfbGlnaHQuYnJpZ2h0bmVzcygpCl9FNV9BM19CMF9FOV85Rl9CMyA9IG9uYm9hcmRfc291bmQuc291bmRsZXZlbCgpCm1peGlvdC53bGFuX2Nvbm5lY3QoJ2Z1aHVhMycsJzEyMzQ1Njc4OTAnKQpNUVRUX1VTUl9QUkogPSAiTWl4SU8vNE9HNzgxMU8vZGVmYXVsdC8iCm1xdHRfY2xpZW50ID0gbWl4aW90LmluaXRfTVFUVF9jbGllbnQoJ21peGlvLm1peGx5LmNuJywgIk1peElPX3B1YmxpYyIsICJNaXhJT19wdWJsaWMiLCBNUVRUX1VTUl9QUkopCl90aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh0ZXN0VGhyZWFkLCAoKSkKX0U5XzlDXzg3X0U1XzhBX0E4ID0gb25ib2FyZF9hY2Muc3RyZW5ndGgoKQp3aGlsZSBUcnVlOgogICAgX0U5XzlDXzg3X0U1XzhBX0E4ID0gb25ib2FyZF9hY2Muc3RyZW5ndGgoKQogICAgX0U1Xzg1Xzg5X0U3Xzg1X0E3ID0gb25ib2FyZF9saWdodC5icmlnaHRuZXNzKCkKICAgIF9FNV9BM19CMF9FOV85Rl9CMyA9IG9uYm9hcmRfc291bmQuc291bmRsZXZlbCgpCiAgICB0aW1lLnNsZWVwKDAuMSkKICAgIGlmIF9FOV85Q184N19FNV84QV9BOCA+IDU6CiAgICAgICAgbXF0dF9jbGllbnQucHVibGlzaChNUVRUX1VTUl9QUkogKyAn5Y2x6ZmpJywgJ+Wkp+mch+WKqCcpCiAgICAgICAgdGltZS5zbGVlcCgxKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/31-1-物联网-单主题数据订阅.mix b/boards/default/micropython_esp32/examples/mPython/31-1-物联网-单主题数据订阅.mix
new file mode 100644
index 00000000..1737e9ed
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/31-1-物联网-单主题数据订阅.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZApmcm9tIGV4cHJlc3Npb25fcGljdHVyZSBpbXBvcnQgSGVhcnQKCmRlZiBtZXRob2QoY2xpZW50LCB0b3BpYywgbXNnKToKICAgIGlmIG1zZyA9PSAnMSc6CiAgICAgICAgb25ib2FyZF9vbGVkLmltYWdlKEhlYXJ0KQogICAgaWYgbXNnID09ICcwJzoKICAgICAgICBvbmJvYXJkX29sZWQuZmlsbCgwKQogICAgICAgIG9uYm9hcmRfb2xlZC5zaG93KCkKCgoKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCfkuq7lsY8nLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+S6ruWxjycpCndoaWxlIFRydWU6CiAgICBtcXR0X2NsaWVudC5jaGVja19tc2coKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/31-1-物联网-单主题数据订阅2.mix b/boards/default/micropython_esp32/examples/mPython/31-1-物联网-单主题数据订阅2.mix
new file mode 100644
index 00000000..a517305a
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/31-1-物联网-单主题数据订阅2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQppbXBvcnQgX3RocmVhZAppbXBvcnQgdGltZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfb2xlZAoKZGVmIG1ldGhvZChjbGllbnQsIHRvcGljLCBtc2cpOgogICAgZ2xvYmFsIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COQogICAgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5ID0gbXNnCgpkZWYgdGVzdFRocmVhZCgpOgogICAgZ2xvYmFsIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COQogICAgd2hpbGUgVHJ1ZToKICAgICAgICBvbmJvYXJkX29sZWQuc2Nyb2xsKF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSkKCgoKX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5ID0gJ01peGx5JwptaXhpb3Qud2xhbl9jb25uZWN0KCdmdWh1YTMnLCcxMjM0NTY3ODkwJykKTVFUVF9VU1JfUFJKID0gIk1peElPLzRPRzc4MTFPL2RlZmF1bHQvIgptcXR0X2NsaWVudCA9IG1peGlvdC5pbml0X01RVFRfY2xpZW50KCdtaXhpby5taXhseS5jbicsICJNaXhJT19wdWJsaWMiLCAiTWl4SU9fcHVibGljIiwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zZXRfY2FsbGJhY2soJ+aYvuekuuWGheWuuScsbWV0aG9kLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnN1YnNjcmliZShNUVRUX1VTUl9QUkogKyAn5pi+56S65YaF5a65JykKX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRlc3RUaHJlYWQsICgpKQp3aGlsZSBUcnVlOgogICAgbXF0dF9jbGllbnQuY2hlY2tfbXNnKCkKICAgIHRpbWUuc2xlZXBfbXMoNTAwKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/32-1-物联网-多主题数据订.mix b/boards/default/micropython_esp32/examples/mPython/32-1-物联网-多主题数据订.mix
new file mode 100644
index 00000000..1395f62e
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/32-1-物联网-多主题数据订.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQppbXBvcnQgX3RocmVhZAppbXBvcnQgdGltZQpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfcmdiCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCgpkZWYgbWV0aG9kMihjbGllbnQsIHRvcGljLCBtc2cpOgogICAgaWYgbXNnID09ICcxJzoKICAgICAgICBvbmJvYXJkX3JnYi5maWxsKCgyNSwgMjUsIDI1KSkKICAgICAgICBvbmJvYXJkX3JnYi53cml0ZSgpCiAgICBpZiBtc2cgPT0gJzAnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5CiAgICB3aGlsZSBUcnVlOgogICAgICAgIG9uYm9hcmRfb2xlZC5zY3JvbGwoX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5KQoKZGVmIG1ldGhvZChjbGllbnQsIHRvcGljLCBtc2cpOgogICAgZ2xvYmFsIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COQogICAgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5ID0gbXNnCgoKCl9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSA9ICdNaXhseScKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCfmmL7npLrlhoXlrrknLG1ldGhvZCwgTVFUVF9VU1JfUFJKKQptcXR0X2NsaWVudC5zdWJzY3JpYmUoTVFUVF9VU1JfUFJKICsgJ+aYvuekuuWGheWuuScpCm1xdHRfY2xpZW50LnNldF9jYWxsYmFjaygn5Lqu54GvJyxtZXRob2QyLCBNUVRUX1VTUl9QUkopCm1xdHRfY2xpZW50LnN1YnNjcmliZShNUVRUX1VTUl9QUkogKyAn5Lqu54GvJykKX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRlc3RUaHJlYWQsICgpKQp3aGlsZSBUcnVlOgogICAgbXF0dF9jbGllbnQuY2hlY2tfbXNnKCkKICAgIHRpbWUuc2xlZXBfbXMoNTAwKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/32-2-物联网-多主题数据订2.mix b/boards/default/micropython_esp32/examples/mPython/32-2-物联网-多主题数据订2.mix
new file mode 100644
index 00000000..b1ca8049
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/32-2-物联网-多主题数据订2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1peGlvdAppbXBvcnQgbWFjaGluZQpmcm9tIHViaW5hc2NpaSBpbXBvcnQgaGV4bGlmeQppbXBvcnQgX3RocmVhZAppbXBvcnQgdGltZQppbXBvcnQganNvbgpmcm9tIG1weXRob24gaW1wb3J0IG9uYm9hcmRfcmdiCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCgpkZWYgbWV0aG9kKGNsaWVudCwgdG9waWMsIG1zZyk6CiAgICBnbG9iYWwgbXlkaWN0CiAgICBnbG9iYWwgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5CiAgICBteWRpY3QgPSBkaWN0KGpzb24ubG9hZHMobXNnKSkKICAgIF9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSA9IG15ZGljdFsn5pi+56S65YaF5a65J10KICAgIGlmIG15ZGljdFsn5Lqu54GvJ10gPT0gJzEnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDI1LCAyNSwgMjUpKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKICAgIGlmIG15ZGljdFsn5Lqu54GvJ10gPT0gJzAnOgogICAgICAgIG9uYm9hcmRfcmdiLmZpbGwoKDAsIDAsIDApKQogICAgICAgIG9uYm9hcmRfcmdiLndyaXRlKCkKCmRlZiB0ZXN0VGhyZWFkKCk6CiAgICBnbG9iYWwgX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5CiAgICB3aGlsZSBUcnVlOgogICAgICAgIG9uYm9hcmRfb2xlZC5zY3JvbGwoX0U2Xzk4X0JFX0U3X0E0X0JBX0U1Xzg2Xzg1X0U1X0FFX0I5KQoKCgpteWRpY3Q9IHt9Cl9FNl85OF9CRV9FN19BNF9CQV9FNV84Nl84NV9FNV9BRV9COSA9ICdNaXhseScKbWl4aW90LndsYW5fY29ubmVjdCgnZnVodWEzJywnMTIzNDU2Nzg5MCcpCk1RVFRfVVNSX1BSSiA9ICJNaXhJTy80T0c3ODExTy9kZWZhdWx0LyIKbXF0dF9jbGllbnQgPSBtaXhpb3QuaW5pdF9NUVRUX2NsaWVudCgnbWl4aW8ubWl4bHkuY24nLCAiTWl4SU9fcHVibGljIiwgIk1peElPX3B1YmxpYyIsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc2V0X2NhbGxiYWNrKCdqc29u5raI5oGvJyxtZXRob2QsIE1RVFRfVVNSX1BSSikKbXF0dF9jbGllbnQuc3Vic2NyaWJlKE1RVFRfVVNSX1BSSiArICdqc29u5raI5oGvJykKX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRlc3RUaHJlYWQsICgpKQp3aGlsZSBUcnVlOgogICAgbXF0dF9jbGllbnQuY2hlY2tfbXNnKCkKICAgIHRpbWUuc2xlZXBfbXMoNTAwKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/37-1-文件操作-列出文件.mix b/boards/default/micropython_esp32/examples/mPython/37-1-文件操作-列出文件.mix
new file mode 100644
index 00000000..4804465b
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/37-1-文件操作-列出文件.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtYXRoCgoKcHJpbnQob3MubGlzdGRpcigpKQpwcmludChvcy5nZXRjd2QoKSkKcyA9IG9zLmxpc3RkaXIoKQpmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDEpOgogICAgcHJpbnQoc1tpXSkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/37-2-文件操作-列出文件2.mix b/boards/default/micropython_esp32/examples/mPython/37-2-文件操作-列出文件2.mix
new file mode 100644
index 00000000..8ce634c5
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/37-2-文件操作-列出文件2.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKaW1wb3J0IG9zCmltcG9ydCBtYXRoCmZyb20gbXB5dGhvbiBpbXBvcnQgb25ib2FyZF9vbGVkCgoKcHJpbnQob3MubGlzdGRpcigpKQpwcmludChvcy5nZXRjd2QoKSkKcyA9IG9zLmxpc3RkaXIoKQpmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDEpOgogICAgb25ib2FyZF9vbGVkLnNjcm9sbChzW2ldKQo=
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/38-1-文件操作-文件读写.mix b/boards/default/micropython_esp32/examples/mPython/38-1-文件操作-文件读写.mix
new file mode 100644
index 00000000..d20fce91
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/38-1-文件操作-文件读写.mix
@@ -0,0 +1 @@
+aW1wb3J0IG1hY2hpbmUKCgpmID0gb3BlbigndGVzdC50eHQnLCAndycpCmZvciBpIGluIHJhbmdlKDAsIDEwMCwgMSk6CiAgICBmLndyaXRlKHN0cihpKSkKICAgIGYud3JpdGUoY2hyKDEzKSkKZi5jbG9zZSgpCmYgPSBvcGVuKCd0ZXN0LnR4dCcsICdyJykKcyA9IGYucmVhZGxpbmUoKQp3aGlsZSBzOgogICAgcHJpbnQocyxlbmQgPSIiKQogICAgcyA9IGYucmVhZGxpbmUoKQpmLmNsb3NlKCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/mPython/38-2-文件操作-文件读写2.mix b/boards/default/micropython_esp32/examples/mPython/38-2-文件操作-文件读写2.mix
new file mode 100644
index 00000000..be0b1874
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/mPython/38-2-文件操作-文件读写2.mix
@@ -0,0 +1 @@
+ZnJvbSBtcHl0aG9uIGltcG9ydCBvbmJvYXJkX3NvdW5kCmltcG9ydCB0aW1lCmltcG9ydCBtYWNoaW5lCgoKZiA9IG9wZW4oJ3Rlc3QuYmluJywgJ3cnKQpmb3IgaSBpbiByYW5nZSgwLCAxMDAsIDEpOgogICAgZi53cml0ZShzdHIob25ib2FyZF9zb3VuZC5zb3VuZGxldmVsKCkpKQogICAgZi53cml0ZShjaHIoMTMpKQogICAgdGltZS5zbGVlcF9tcygxMCkKZi5jbG9zZSgpCmYgPSBvcGVuKCd0ZXN0LmJpbicsICdyJykKcyA9IGYucmVhZGxpbmUoKQp3aGlsZSBzOgogICAgcHJpbnQocyxlbmQgPSIiKQogICAgcyA9IGYucmVhZGxpbmUoKQpmLmNsb3NlKCkK
\ No newline at end of file
diff --git a/boards/default/micropython_esp32/examples/map.json b/boards/default/micropython_esp32/examples/map.json
new file mode 100644
index 00000000..1424f7b4
--- /dev/null
+++ b/boards/default/micropython_esp32/examples/map.json
@@ -0,0 +1,526 @@
+{
+ "MixGo": {
+ "01-1-快速入门-你好世界.mix": {
+ "__file__": true,
+ "__name__": "01-1-快速入门-你好世界.mix"
+ },
+ "01-2-快速入门-你好世界2.mix": {
+ "__file__": true,
+ "__name__": "01-2-快速入门-你好世界2.mix"
+ },
+ "02-1-快速入门-跳动的心.mix": {
+ "__file__": true,
+ "__name__": "02-1-快速入门-跳动的心.mix"
+ },
+ "02-2-快速入门-为你心动.mix": {
+ "__file__": true,
+ "__name__": "02-2-快速入门-为你心动.mix"
+ },
+ "03-1-快速入门-心随我动.mix": {
+ "__file__": true,
+ "__name__": "03-1-快速入门-心随我动.mix"
+ },
+ "03-2-快速入门-心随我动2.mix": {
+ "__file__": true,
+ "__name__": "03-2-快速入门-心随我动2.mix"
+ },
+ "04-1-快速入门-流动的灯.mix": {
+ "__file__": true,
+ "__name__": "04-1-快速入门-流动的灯.mix"
+ },
+ "04-2-快速入门-流动的灯2.mix": {
+ "__file__": true,
+ "__name__": "04-2-快速入门-流动的灯2.mix"
+ },
+ "04-2-快速入门-流动的灯3.mix": {
+ "__file__": true,
+ "__name__": "04-2-快速入门-流动的灯3.mix"
+ },
+ "04-2-快速入门-流动的灯4.mix": {
+ "__file__": true,
+ "__name__": "04-2-快速入门-流动的灯4.mix"
+ },
+ "04-2-快速入门-流动的灯5.mix": {
+ "__file__": true,
+ "__name__": "04-2-快速入门-流动的灯5.mix"
+ },
+ "05-1-过程控制-双键开关.mix": {
+ "__file__": true,
+ "__name__": "05-1-过程控制-双键开关.mix"
+ },
+ "05-2-快速入门-单键开关2.mix": {
+ "__file__": true,
+ "__name__": "05-2-快速入门-单键开关2.mix"
+ },
+ "05-2-过程控制-单键开关.mix": {
+ "__file__": true,
+ "__name__": "05-2-过程控制-单键开关.mix"
+ },
+ "05-3-过程控制-IPO概念.mix": {
+ "__file__": true,
+ "__name__": "05-3-过程控制-IPO概念.mix"
+ },
+ "06-1-过程控制-声音采集.mix": {
+ "__file__": true,
+ "__name__": "06-1-过程控制-声音采集.mix"
+ },
+ "06-2-过程控制-看见声音.mix": {
+ "__file__": true,
+ "__name__": "06-2-过程控制-看见声音.mix"
+ },
+ "07-1-过程控制-光强采集.mix": {
+ "__file__": true,
+ "__name__": "07-1-过程控制-光强采集.mix"
+ },
+ "07-2-过程控制-自动补光.mix": {
+ "__file__": true,
+ "__name__": "07-2-过程控制-自动补光.mix"
+ },
+ "08-1-过程控制-接近检测.mix": {
+ "__file__": true,
+ "__name__": "08-1-过程控制-接近检测.mix"
+ },
+ "08-2-过程控制-入侵报警.mix": {
+ "__file__": true,
+ "__name__": "08-2-过程控制-入侵报警.mix"
+ },
+ "09-1-输入输出-加速度.mix": {
+ "__file__": true,
+ "__name__": "09-1-输入输出-加速度.mix"
+ },
+ "09-2-输入输出-平衡仪.mix": {
+ "__file__": true,
+ "__name__": "09-2-输入输出-平衡仪.mix"
+ },
+ "10-1-输入输出-地磁强度.mix": {
+ "__file__": true,
+ "__name__": "10-1-输入输出-地磁强度.mix"
+ },
+ "10-2-输入输出-金属探测.mix": {
+ "__file__": true,
+ "__name__": "10-2-输入输出-金属探测.mix"
+ },
+ "11-1-输入输出-点阵控制.mix": {
+ "__file__": true,
+ "__name__": "11-1-输入输出-点阵控制.mix"
+ },
+ "11-2-输入输出-光标控制.mix": {
+ "__file__": true,
+ "__name__": "11-2-输入输出-光标控制.mix"
+ },
+ "12-1-输入输出-实时时钟.mix": {
+ "__file__": true,
+ "__name__": "12-1-输入输出-实时时钟.mix"
+ },
+ "12-2-输入输出-实时时钟2.mix": {
+ "__file__": true,
+ "__name__": "12-2-输入输出-实时时钟2.mix"
+ },
+ "13-1-逻辑计算-手速测试.mix": {
+ "__file__": true,
+ "__name__": "13-1-逻辑计算-手速测试.mix"
+ },
+ "13-2-逻辑计算-手速测试2.mix": {
+ "__file__": true,
+ "__name__": "13-2-逻辑计算-手速测试2.mix"
+ },
+ "14-1-逻辑计算-反应测试.mix": {
+ "__file__": true,
+ "__name__": "14-1-逻辑计算-反应测试.mix"
+ },
+ "14-2-逻辑计算-反应测试2.mix": {
+ "__file__": true,
+ "__name__": "14-2-逻辑计算-反应测试2.mix"
+ },
+ "15-1-逻辑计算-简单打地鼠.mix": {
+ "__file__": true,
+ "__name__": "15-1-逻辑计算-简单打地鼠.mix"
+ },
+ "15-2-逻辑计算-计时打地鼠.mix": {
+ "__file__": true,
+ "__name__": "15-2-逻辑计算-计时打地鼠.mix"
+ },
+ "16-1-逻辑计算-开始打地鼠.mix": {
+ "__file__": true,
+ "__name__": "16-1-逻辑计算-开始打地鼠.mix"
+ },
+ "16-2-逻辑计算-循环打地鼠.mix": {
+ "__file__": true,
+ "__name__": "16-2-逻辑计算-循环打地鼠.mix"
+ },
+ "17-0-复杂控制-非中断效果.mix": {
+ "__file__": true,
+ "__name__": "17-0-复杂控制-非中断效果.mix"
+ },
+ "17-2-复杂控制-单键中断.mix": {
+ "__file__": true,
+ "__name__": "17-2-复杂控制-单键中断.mix"
+ },
+ "18-1-复杂控制-定时计时.mix": {
+ "__file__": true,
+ "__name__": "18-1-复杂控制-定时计时.mix"
+ },
+ "18-2-复杂控制-循环计时.mix": {
+ "__file__": true,
+ "__name__": "18-2-复杂控制-循环计时.mix"
+ },
+ "19-1-复杂控制-多线程.mix": {
+ "__file__": true,
+ "__name__": "19-1-复杂控制-多线程.mix"
+ },
+ "19-2-复杂控制-多线程与中断.mix": {
+ "__file__": true,
+ "__name__": "19-2-复杂控制-多线程与中断.mix"
+ },
+ "20-1-复杂控制-异常.mix": {
+ "__file__": true,
+ "__name__": "20-1-复杂控制-异常.mix"
+ },
+ "20-2-复杂控制-异常处理.mix": {
+ "__file__": true,
+ "__name__": "20-2-复杂控制-异常处理.mix"
+ },
+ "23-1-蓝牙通讯-主机模式.mix": {
+ "__file__": true,
+ "__name__": "23-1-蓝牙通讯-主机模式.mix"
+ },
+ "23-1-蓝牙通讯-从机模式.mix": {
+ "__file__": true,
+ "__name__": "23-1-蓝牙通讯-从机模式.mix"
+ },
+ "23-2 蓝牙键鼠-蓝牙翻页.mix": {
+ "__file__": true,
+ "__name__": "23-2 蓝牙键鼠-蓝牙翻页.mix"
+ },
+ "23-2-蓝牙键鼠-无线蓝牙鼠标.mix": {
+ "__file__": true,
+ "__name__": "23-2-蓝牙键鼠-无线蓝牙鼠标.mix"
+ },
+ "23-2-蓝牙键鼠-无线键盘.mix": {
+ "__file__": true,
+ "__name__": "23-2-蓝牙键鼠-无线键盘.mix"
+ },
+ "24-1-无线广播-通讯测试.mix": {
+ "__file__": true,
+ "__name__": "24-1-无线广播-通讯测试.mix"
+ },
+ "24-2-无线广播-防丢检测.mix": {
+ "__file__": true,
+ "__name__": "24-2-无线广播-防丢检测.mix"
+ },
+ "29-1-物联网-简单数据定时上报.mix": {
+ "__file__": true,
+ "__name__": "29-1-物联网-简单数据定时上报.mix"
+ },
+ "29-2-物联网-复杂数据定时上报.mix": {
+ "__file__": true,
+ "__name__": "29-2-物联网-复杂数据定时上报.mix"
+ },
+ "30-1-物联网-简单数据按需上报.mix": {
+ "__file__": true,
+ "__name__": "30-1-物联网-简单数据按需上报.mix"
+ },
+ "30-2-物联网-高级数据按需上报.mix": {
+ "__file__": true,
+ "__name__": "30-2-物联网-高级数据按需上报.mix"
+ },
+ "31-1-物联网-单主题数据订阅.mix": {
+ "__file__": true,
+ "__name__": "31-1-物联网-单主题数据订阅.mix"
+ },
+ "31-1-物联网-单主题数据订阅2.mix": {
+ "__file__": true,
+ "__name__": "31-1-物联网-单主题数据订阅2.mix"
+ },
+ "32-1-物联网-多主题数据订.mix": {
+ "__file__": true,
+ "__name__": "32-1-物联网-多主题数据订.mix"
+ },
+ "32-2-物联网-多主题数据订2.mix": {
+ "__file__": true,
+ "__name__": "32-2-物联网-多主题数据订2.mix"
+ },
+ "33-1-课堂互动-自由签到.mix": {
+ "__file__": true,
+ "__name__": "33-1-课堂互动-自由签到.mix"
+ },
+ "33-2-课堂互动-按需签到.mix": {
+ "__file__": true,
+ "__name__": "33-2-课堂互动-按需签到.mix"
+ },
+ "34-1-课堂互动-一人抢答.mix": {
+ "__file__": true,
+ "__name__": "34-1-课堂互动-一人抢答.mix"
+ },
+ "34-2-课堂互动-多人抢答.mix": {
+ "__file__": true,
+ "__name__": "34-2-课堂互动-多人抢答.mix"
+ },
+ "35-1-课堂互动-单选答题.mix": {
+ "__file__": true,
+ "__name__": "35-1-课堂互动-单选答题.mix"
+ },
+ "35-2-课堂互动-多选答题.mix": {
+ "__file__": true,
+ "__name__": "35-2-课堂互动-多选答题.mix"
+ },
+ "36-1-课堂互动-点名答题.mix": {
+ "__file__": true,
+ "__name__": "36-1-课堂互动-点名答题.mix"
+ },
+ "36-2-课堂互动-多人点答.mix": {
+ "__file__": true,
+ "__name__": "36-2-课堂互动-多人点答.mix"
+ },
+ "37-1-文件操作-列出文件.mix": {
+ "__file__": true,
+ "__name__": "37-1-文件操作-列出文件.mix"
+ },
+ "37-2-文件操作-列出文件2.mix": {
+ "__file__": true,
+ "__name__": "37-2-文件操作-列出文件2.mix"
+ },
+ "38-1-文件操作-文件读写.mix": {
+ "__file__": true,
+ "__name__": "38-1-文件操作-文件读写.mix"
+ },
+ "38-2-文件操作-文件读写2.mix": {
+ "__file__": true,
+ "__name__": "38-2-文件操作-文件读写2.mix"
+ },
+ "39-1-文件操作-录音采集.mix": {
+ "__file__": true,
+ "__name__": "39-1-文件操作-录音采集.mix"
+ },
+ "39-2-文件操作-录音重现.mix": {
+ "__file__": true,
+ "__name__": "39-2-文件操作-录音重现.mix"
+ },
+ "40-1-文件操作-震动采集.mix": {
+ "__file__": true,
+ "__name__": "40-1-文件操作-震动采集.mix"
+ },
+ "40-2-文件操作-震动重现.mix": {
+ "__file__": true,
+ "__name__": "40-2-文件操作-震动重现.mix"
+ },
+ "43-2-智能小车-体感遥控(MEGO).mix": {
+ "__file__": true,
+ "__name__": "43-2-智能小车-体感遥控(MEGO).mix"
+ },
+ "44-1-智能小车-P单巡线(MEGO).mix": {
+ "__file__": true,
+ "__name__": "44-1-智能小车-P单巡线(MEGO).mix"
+ },
+ "44-2-智能小车-P双巡线(MEGO).mix": {
+ "__file__": true,
+ "__name__": "44-2-智能小车-P双巡线(MEGO).mix"
+ },
+ "__file__": false,
+ "__name__": "MixGo"
+ },
+ "mPython": {
+ "01-1-快速入门-你好世界.mix": {
+ "__file__": true,
+ "__name__": "01-1-快速入门-你好世界.mix"
+ },
+ "01-2-快速入门-你好世界2.mix": {
+ "__file__": true,
+ "__name__": "01-2-快速入门-你好世界2.mix"
+ },
+ "02-1-快速入门-跳动的心.mix": {
+ "__file__": true,
+ "__name__": "02-1-快速入门-跳动的心.mix"
+ },
+ "02-2-快速入门-为你心动.mix": {
+ "__file__": true,
+ "__name__": "02-2-快速入门-为你心动.mix"
+ },
+ "03-1-快速入门-心随我动.mix": {
+ "__file__": true,
+ "__name__": "03-1-快速入门-心随我动.mix"
+ },
+ "03-2-快速入门-心随我动2.mix": {
+ "__file__": true,
+ "__name__": "03-2-快速入门-心随我动2.mix"
+ },
+ "04-1-快速入门-流动的灯.mix": {
+ "__file__": true,
+ "__name__": "04-1-快速入门-流动的灯.mix"
+ },
+ "04-2-快速入门-流动的灯2.mix": {
+ "__file__": true,
+ "__name__": "04-2-快速入门-流动的灯2.mix"
+ },
+ "05-1-过程控制-双键开关.mix": {
+ "__file__": true,
+ "__name__": "05-1-过程控制-双键开关.mix"
+ },
+ "05-2-过程控制-单键开关.mix": {
+ "__file__": true,
+ "__name__": "05-2-过程控制-单键开关.mix"
+ },
+ "05-3-过程控制-IPO概念.mix": {
+ "__file__": true,
+ "__name__": "05-3-过程控制-IPO概念.mix"
+ },
+ "06-1-过程控制-声音采集.mix": {
+ "__file__": true,
+ "__name__": "06-1-过程控制-声音采集.mix"
+ },
+ "06-2-过程控制-看见声音.mix": {
+ "__file__": true,
+ "__name__": "06-2-过程控制-看见声音.mix"
+ },
+ "07-1-过程控制-光强采集.mix": {
+ "__file__": true,
+ "__name__": "07-1-过程控制-光强采集.mix"
+ },
+ "07-2-过程控制-自动补光.mix": {
+ "__file__": true,
+ "__name__": "07-2-过程控制-自动补光.mix"
+ },
+ "08-1-过程控制-接近检测.mix": {
+ "__file__": true,
+ "__name__": "08-1-过程控制-接近检测.mix"
+ },
+ "08-2-过程控制-入侵报警.mix": {
+ "__file__": true,
+ "__name__": "08-2-过程控制-入侵报警.mix"
+ },
+ "09-1-输入输出-加速度.mix": {
+ "__file__": true,
+ "__name__": "09-1-输入输出-加速度.mix"
+ },
+ "09-2-输入输出-平衡仪.mix": {
+ "__file__": true,
+ "__name__": "09-2-输入输出-平衡仪.mix"
+ },
+ "10-1-输入输出-地磁强度.mix": {
+ "__file__": true,
+ "__name__": "10-1-输入输出-地磁强度.mix"
+ },
+ "10-2-输入输出-金属探测.mix": {
+ "__file__": true,
+ "__name__": "10-2-输入输出-金属探测.mix"
+ },
+ "12-1-输入输出-实时时钟.mix": {
+ "__file__": true,
+ "__name__": "12-1-输入输出-实时时钟.mix"
+ },
+ "12-2-输入输出-实时时钟2.mix": {
+ "__file__": true,
+ "__name__": "12-2-输入输出-实时时钟2.mix"
+ },
+ "13-1-逻辑计算-手速测试.mix": {
+ "__file__": true,
+ "__name__": "13-1-逻辑计算-手速测试.mix"
+ },
+ "14-1-逻辑计算-反应测试.mix": {
+ "__file__": true,
+ "__name__": "14-1-逻辑计算-反应测试.mix"
+ },
+ "14-2-逻辑计算-反应测试2.mix": {
+ "__file__": true,
+ "__name__": "14-2-逻辑计算-反应测试2.mix"
+ },
+ "17-0-复杂控制-非中断效果.mix": {
+ "__file__": true,
+ "__name__": "17-0-复杂控制-非中断效果.mix"
+ },
+ "17-2-复杂控制-单键中断.mix": {
+ "__file__": true,
+ "__name__": "17-2-复杂控制-单键中断.mix"
+ },
+ "18-1-复杂控制-定时计时.mix": {
+ "__file__": true,
+ "__name__": "18-1-复杂控制-定时计时.mix"
+ },
+ "18-2-复杂控制-循环计时.mix": {
+ "__file__": true,
+ "__name__": "18-2-复杂控制-循环计时.mix"
+ },
+ "19-1-复杂控制-多线程.mix": {
+ "__file__": true,
+ "__name__": "19-1-复杂控制-多线程.mix"
+ },
+ "19-2-复杂控制-多线程与中断.mix": {
+ "__file__": true,
+ "__name__": "19-2-复杂控制-多线程与中断.mix"
+ },
+ "20-1-复杂控制-异常.mix": {
+ "__file__": true,
+ "__name__": "20-1-复杂控制-异常.mix"
+ },
+ "20-2-复杂控制-异常处理.mix": {
+ "__file__": true,
+ "__name__": "20-2-复杂控制-异常处理.mix"
+ },
+ "23-1-蓝牙通讯-主机模式.mix": {
+ "__file__": true,
+ "__name__": "23-1-蓝牙通讯-主机模式.mix"
+ },
+ "23-1-蓝牙通讯-从机模式.mix": {
+ "__file__": true,
+ "__name__": "23-1-蓝牙通讯-从机模式.mix"
+ },
+ "24-1-无线广播-通讯测试.mix": {
+ "__file__": true,
+ "__name__": "24-1-无线广播-通讯测试.mix"
+ },
+ "24-2-无线广播-防丢检测.mix": {
+ "__file__": true,
+ "__name__": "24-2-无线广播-防丢检测.mix"
+ },
+ "29-1-物联网-简单数据定时上报.mix": {
+ "__file__": true,
+ "__name__": "29-1-物联网-简单数据定时上报.mix"
+ },
+ "29-2-物联网-复杂数据定时上报.mix": {
+ "__file__": true,
+ "__name__": "29-2-物联网-复杂数据定时上报.mix"
+ },
+ "30-1-物联网-简单数据按需上报.mix": {
+ "__file__": true,
+ "__name__": "30-1-物联网-简单数据按需上报.mix"
+ },
+ "30-2-物联网-高级数据按需上报.mix": {
+ "__file__": true,
+ "__name__": "30-2-物联网-高级数据按需上报.mix"
+ },
+ "31-1-物联网-单主题数据订阅.mix": {
+ "__file__": true,
+ "__name__": "31-1-物联网-单主题数据订阅.mix"
+ },
+ "31-1-物联网-单主题数据订阅2.mix": {
+ "__file__": true,
+ "__name__": "31-1-物联网-单主题数据订阅2.mix"
+ },
+ "32-1-物联网-多主题数据订.mix": {
+ "__file__": true,
+ "__name__": "32-1-物联网-多主题数据订.mix"
+ },
+ "32-2-物联网-多主题数据订2.mix": {
+ "__file__": true,
+ "__name__": "32-2-物联网-多主题数据订2.mix"
+ },
+ "37-1-文件操作-列出文件.mix": {
+ "__file__": true,
+ "__name__": "37-1-文件操作-列出文件.mix"
+ },
+ "37-2-文件操作-列出文件2.mix": {
+ "__file__": true,
+ "__name__": "37-2-文件操作-列出文件2.mix"
+ },
+ "38-1-文件操作-文件读写.mix": {
+ "__file__": true,
+ "__name__": "38-1-文件操作-文件读写.mix"
+ },
+ "38-2-文件操作-文件读写2.mix": {
+ "__file__": true,
+ "__name__": "38-2-文件操作-文件读写2.mix"
+ },
+ "__file__": false,
+ "__name__": "mPython"
+ }
+}
diff --git a/boards/default_src/micropython_esp32/.npmignore b/boards/default_src/micropython_esp32/.npmignore
new file mode 100644
index 00000000..21ab2a3e
--- /dev/null
+++ b/boards/default_src/micropython_esp32/.npmignore
@@ -0,0 +1,3 @@
+node_modules
+build
+origin
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/blocks/esp32_profile.js b/boards/default_src/micropython_esp32/blocks/esp32_profile.js
new file mode 100644
index 00000000..1335e635
--- /dev/null
+++ b/boards/default_src/micropython_esp32/blocks/esp32_profile.js
@@ -0,0 +1,170 @@
+import { Profile } from 'mixly';
+
+const pins = {};
+
+pins["MixGo"] = {
+ description: "MicroPython[ESP32 MixGo]",
+ digital_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
+ digital: [["pin0", "pin0"], ["pin2", "pin2"], ["pin4", "pin4"], ["pin5", "pin5"], ["pin12", "pin12"], ["pin13", "pin13"], ["pin14", "pin14"], ["pin15", "pin15"], ["pin16", "pin16"], ["pin17", "pin17"], ["pin18", "pin18"], ["pin19", "pin19"], ["pin21", "pin21"], ["pin22", "pin22"], ["pin23", "pin23"], ["pin25", "pin25"], ["pin26", "pin26"], ["pin27", "pin27"], ["pin32", "pin32"], ["pin33", "pin33"], ["pin34", "pin34"], ["pin35", "pin35"], ["pin36", "pin36"], ["pin39", "pin39"]],
+ input_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["39", "39"]],
+ output_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ pwm_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"]],
+ pwm: [["pwm0", "pwm0"], ["pwm2", "pwm2"], ["pwm4", "pwm4"], ["pwm5", "pwm5"], ["pwm12", "pwm12"], ["pwm13", "pwm13"], ["pwm14", "pwm14"], ["pwm15", "pwm15"], ["pwm16", "pwm16"], ["pwm17", "pwm17"], ["pwm18", "pwm18"], ["pwm19", "pwm19"], ["pwm20", "pwm20"], ["pwm21", "pwm21"], ["pwm22", "pwm22"], ["pwm23", "pwm23"], ["pwm25", "pwm25"], ["pwm26", "pwm26"], ["pwm27", "pwm27"], ["pwm32", "pwm32"]],
+ analog_pin: [["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ analog: [["adc32", "adc32"], ["adc33", "adc33"], ["adc34", "adc34"], ["adc35", "adc35"], ["adc36", "adc36"], ["adc37", "adc37"], ["adc38", "adc38"], ["adc39", "adc39"]],
+ espnow_channel: Profile.generate(['1-13']),
+ haskylens_model: Profile.generate(['0-4']),
+ dac_pin: [["25", "25"], ["26", "26"]],
+ dac: [["dac25", "dac25"], ["dac26", "dac26"]],
+ touch: [["tc0", "tc0"], ["tc2", "tc2"], ["tc4", "tc4"], ["tc12", "tc12"], ["tc13", "tc13"], ["tc14", "tc14"], ["tc15", "tc15"], ["tc27", "tc27"], ["tc32", "tc32"], ["tc33", "tc33"]],
+ touch_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ button: [["A", "button_a"], ["B", "button_b"]],
+ axis: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"]],
+ exlcdh: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
+ exlcdv: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
+ brightness: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"]],
+ tts_voice: Profile.generate(['0-16']),
+ tts_builtin_music: Profile.generate(['0-47']),
+ tts_bgmusic: Profile.generate(['0-15']),
+ builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["SILLY", "onboard_matrix.SILLY"], ["FABULOUS", "onboard_matrix.FABULOUS"], ["SURPRISED", "onboard_matrix.SURPRISED"], ["ASLEEP", "onboard_matrix.ASLEEP"], ["ANGRY", "onboard_matrix.ANGRY"], ["CONFUSED", "onboard_matrix.CONFUSED"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["onboard_music_QUAVERS", "onboard_matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "onboard_matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "onboard_matrix.onboard_music_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.SWORD"]],
+ builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
+ imglist: [["ALL_CLOCKS", "onboard_matrix.ALL_CLOCKS"], ["ALL_ARROWS", "onboard_matrix.ALL_ARROWS"]],
+ playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["ENTERTAINER", "onboard_music.ENTERTAINER"], ["PRELUDE", "onboard_music.PRELUDE"], ["ODE", "onboard_music.ODE"], ["NYAN", "onboard_music.NYAN"], ["RINGTONE", "onboard_music.RINGTONE"], ["FUNK", "onboard_music.FUNK"], ["BLUES", "onboard_music.BLUES"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["WEDDING", "onboard_music.WEDDING"], ["FUNERAL", "onboard_music.FUNERAL"], ["PUNCHLINE", "onboard_music.PUNCHLINE"], ["PYTHON", "onboard_music.PYTHON"], ["BADDY", "onboard_music.BADDY"], ["CHASE", "onboard_music.CHASE"], ["BA_DING", "onboard_music.BA_DING"], ["WAWAWAWAA", "onboard_music.WAWAWAWAA"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
+ playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
+ tone_notes: [
+ ["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
+ ["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
+ ["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
+ ],
+ serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
+ radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
+ radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
+ one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
+ digital_dot: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]],
+};
+
+pins["MixGo PE"] = {
+ description: "MicroPython[ESP32 MixGo PE]",
+ digital_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["7", "7"], ["8", "8"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ digital: [["pin0", "pin0"], ["pin2", "pin2"], ["pin4", "pin4"], ["pin5", "pin5"], ["pin7", "pin7"], ["pin8", "pin8"], ["pin12", "pin12"], ["pin13", "pin13"], ["pin14", "pin14"], ["pin15", "pin15"], ["pin19", "pin19"], ["pin20", "pin20"], ["pin21", "pin21"], ["pin22", "pin22"], ["pin25", "pin25"], ["pin26", "pin26"], ["pin27", "pin27"], ["pin32", "pin32"], ["pin33", "pin33"], ["pin34", "pin34"], ["pin35", "pin35"], ["pin36", "pin36"], ["pin37", "pin37"], ["pin38", "pin38"], ["pin39", "pin39"]],
+ input_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["7", "7"], ["8", "8"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ output_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["7", "7"], ["8", "8"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ pwm_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["7", "7"], ["8", "8"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ pwm: [["pwm0", "pwm0"], ["pwm2", "pwm2"], ["pwm4", "pwm4"], ["pwm5", "pwm5"], ["pwm7", "pwm7"], ["pwm8", "pwm8"], ["pwm12", "pwm12"], ["pwm13", "pwm13"], ["pwm14", "pwm14"], ["pwm15", "pwm15"], ["pwm19", "pwm19"], ["pwm20", "pwm20"], ["pwm21", "pwm21"], ["pwm22", "pwm22"], ["pwm25", "pwm25"], ["pwm26", "pwm26"], ["pwm27", "pwm27"], ["pwm32", "pwm32"], ["pwm33", "pwm33"]],
+ espnow_channel: Profile.generate(['1-13']),
+ haskylens_model: Profile.generate(['0-4']),
+ analog_pin: [["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ analog: [["adc32", "adc32"], ["adc33", "adc33"], ["adc34", "adc34"], ["adc35", "adc35"], ["adc36", "adc36"], ["adc37", "adc37"], ["adc38", "adc38"], ["adc39", "adc39"]],
+ dac_pin: [["25", "25"], ["26", "26"]],
+ dac: [["dac25", "dac25"], ["dac26", "dac26"]],
+ touch: [["tc0", "tc0"], ["tc2", "tc2"], ["tc4", "tc4"], ["tc12", "tc12"], ["tc13", "tc13"], ["tc14", "tc14"], ["tc15", "tc15"], ["tc27", "tc27"], ["tc32", "tc32"], ["tc33", "tc33"]],
+ touch_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ button: [["A", "button_a"], ["B", "button_b"]],
+ axis: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"]],
+ exlcdh: Profile.generate(['0-7']),
+ exlcdv: Profile.generate(['0-4']),
+ brightness: Profile.generate(['0-9']),
+ tts_voice: Profile.generate(['0-16']),
+ tts_builtin_music: Profile.generate(['0-47']),
+ tts_bgmusic: Profile.generate(['0-15']),
+ builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["SILLY", "onboard_matrix.SILLY"], ["FABULOUS", "onboard_matrix.FABULOUS"], ["SURPRISED", "onboard_matrix.SURPRISED"], ["ASLEEP", "onboard_matrix.ASLEEP"], ["ANGRY", "onboard_matrix.ANGRY"], ["CONFUSED", "onboard_matrix.CONFUSED"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["MUSIC_QUAVERS", "onboard_matrix.MUSIC_QUAVERS"], ["MUSIC_QUAVER", "onboard_matrix.MUSIC_QUAVER"], ["MUSIC_CROTCHET", "onboard_matrix.MUSIC_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.SWORD"]],
+ builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
+ imglist: [["ALL_CLOCKS", "onboard_matrix.ALL_CLOCKS"], ["ALL_ARROWS", "onboard_matrix.ALL_ARROWS"]],
+ playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["ENTERTAINER", "onboard_music.ENTERTAINER"], ["PRELUDE", "onboard_music.PRELUDE"], ["ODE", "onboard_music.ODE"], ["NYAN", "onboard_music.NYAN"], ["RINGTONE", "onboard_music.RINGTONE"], ["FUNK", "onboard_music.FUNK"], ["BLUES", "onboard_music.BLUES"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["WEDDING", "onboard_music.WEDDING"], ["FUNERAL", "onboard_music.FUNERAL"], ["PUNCHLINE", "onboard_music.PUNCHLINE"], ["PYTHON", "onboard_music.PYTHON"], ["BADDY", "onboard_music.BADDY"], ["CHASE", "onboard_music.CHASE"], ["BA_DING", "onboard_music.BA_DING"], ["WAWAWAWAA", "onboard_music.WAWAWAWAA"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
+ playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
+ tone_notes: [
+ ["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
+ ["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
+ ["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
+ ],
+ serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
+ radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
+ radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
+ one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
+ digital_dot: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]],
+};
+
+pins["ESP32 Generic(4MB)"] = {
+ description: "MicroPython[ESP32 Generic]",
+ digital_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ digital: [["pin0", "pin0"], ["pin2", "pin2"], ["pin4", "pin4"], ["pin5", "pin5"], ["pin6", "pin6"], ["pin7", "pin7"], ["pin8", "pin8"], ["pin9", "pin9"], ["pin10", "pin10"], ["pin11", "pin11"], ["pin12", "pin12"], ["pin13", "pin13"], ["pin14", "pin14"], ["pin15", "pin15"], ["pin16", "pin16"], ["pin17", "pin17"], ["pin18", "pin18"], ["pin19", "pin19"], ["pin20", "pin20"], ["pin21", "pin21"], ["pin22", "pin22"], ["pin23", "pin23"], ["pin25", "pin25"], ["pin26", "pin26"], ["pin27", "pin27"], ["pin32", "pin32"], ["pin33", "pin33"], ["pin34", "pin34"], ["pin35", "pin35"], ["pin36", "pin36"], ["pin37", "pin37"], ["pin38", "pin38"], ["pin39", "pin39"]],
+ input_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["7", "7"], ["8", "8"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ output_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["7", "7"], ["8", "8"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ pwm_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["5", "5"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["16", "16"], ["17", "17"], ["18", "18"], ["19", "19"], ["20", "20"], ["21", "21"], ["22", "22"], ["23", "23"], ["25", "25"], ["26", "26"], ["27", "27"], ["32", "32"]],
+ pwm: [["pwm0", "pwm0"], ["pwm2", "pwm2"], ["pwm4", "pwm4"], ["pwm5", "pwm5"], ["pwm12", "pwm12"], ["pwm13", "pwm13"], ["pwm14", "pwm14"], ["pwm15", "pwm15"], ["pwm16", "pwm16"], ["pwm17", "pwm17"], ["pwm18", "pwm18"], ["pwm19", "pwm19"], ["pwm20", "pwm20"], ["pwm21", "pwm21"], ["pwm22", "pwm22"], ["pwm23", "pwm23"], ["pwm25", "pwm25"], ["pwm26", "pwm26"], ["pwm27", "pwm27"], ["pwm32", "pwm32"]],
+ analog_pin: [["32", "32"], ["33", "33"], ["34", "34"], ["35", "35"], ["36", "36"], ["37", "37"], ["38", "38"], ["39", "39"]],
+ analog: [["adc32", "adc32"], ["adc33", "adc33"], ["adc34", "adc34"], ["adc35", "adc35"], ["adc36", "adc36"], ["adc37", "adc37"], ["adc38", "adc38"], ["adc39", "adc39"]],
+ espnow_channel: Profile.generate(['1-13']),
+ haskylens_model: Profile.generate(['0-4']),
+ dac_pin: [["25", "25"], ["26", "26"]],
+ dac: [["dac25", "dac25"], ["dac26", "dac26"]],
+ touch: [["tc0", "tc0"], ["tc2", "tc2"], ["tc4", "tc4"], ["tc12", "tc12"], ["tc13", "tc13"], ["tc14", "tc14"], ["tc15", "tc15"], ["tc27", "tc27"], ["tc32", "tc32"], ["tc33", "tc33"]],
+ touch_pin: [["0", "0"], ["2", "2"], ["4", "4"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"], ["27", "27"], ["32", "32"], ["33", "33"]],
+ button: [["A", "button_a"], ["B", "button_b"]],
+ axis: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"]],
+ exlcdh: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
+ exlcdv: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
+ brightness: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"]],
+ tts_voice: Profile.generate(['0-16']),
+ tts_builtin_music: Profile.generate(['0-47']),
+ tts_bgmusic: Profile.generate(['0-15']),
+ builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["SILLY", "onboard_matrix.SILLY"], ["FABULOUS", "onboard_matrix.FABULOUS"], ["SURPRISED", "onboard_matrix.SURPRISED"], ["ASLEEP", "onboard_matrix.ASLEEP"], ["ANGRY", "onboard_matrix.ANGRY"], ["CONFUSED", "onboard_matrix.CONFUSED"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["onboard_music_QUAVERS", "onboard_matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "onboard_matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "onboard_matrix.onboard_music_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.SWORD"]],
+ builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
+ imglist: [["ALL_CLOCKS", "onboard_matrix.ALL_CLOCKS"], ["ALL_ARROWS", "onboard_matrix.ALL_ARROWS"]],
+ playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["ENTERTAINER", "onboard_music.ENTERTAINER"], ["PRELUDE", "onboard_music.PRELUDE"], ["ODE", "onboard_music.ODE"], ["NYAN", "onboard_music.NYAN"], ["RINGTONE", "onboard_music.RINGTONE"], ["FUNK", "onboard_music.FUNK"], ["BLUES", "onboard_music.BLUES"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["WEDDING", "onboard_music.WEDDING"], ["FUNERAL", "onboard_music.FUNERAL"], ["PUNCHLINE", "onboard_music.PUNCHLINE"], ["PYTHON", "onboard_music.PYTHON"], ["BADDY", "onboard_music.BADDY"], ["CHASE", "onboard_music.CHASE"], ["BA_DING", "onboard_music.BA_DING"], ["WAWAWAWAA", "onboard_music.WAWAWAWAA"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
+ playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
+ tone_notes: [
+ ["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
+ ["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
+ ["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
+ ],
+ serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
+ radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
+ radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
+ one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
+ digital_dot: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]],
+};
+
+pins["mPython"] = {
+ description: "MicroPython[ESP32 Generic]",
+ digital_pin: [["p0", "33"], ["p1", "32"], ["p2", "35"], ["p5", "0"], ["p6", "16"], ["p7", "17"], ["p8", "26"], ["p9", "25"], ["p11", "2"], ["p13", "18"], ["p14", "19"], ["p15", "21"], ["p16", "5"], ["p19", "22"], ["p20", "23"]],
+ digital: [["pin0", "pin33"], ["pin1", "pin32"], ["pin2", "pin35"], ["pin5", "pin0"], ["pin6", "pin16"], ["pin7", "pin17"], ["pin8", "pin26"], ["pin9", "pin25"], ["pin11", "pin2"], ["pin13", "pin18"], ["pin14", "pin19"], ["pin15", "pin21"], ["pin16", "pin5"], ["pin19", "pin22"], ["pin20", "pin23"]],
+ input_pin: [["p0", "33"], ["p1", "32"], ["p2", "35"], ["p5", "0"], ["p6", "16"], ["p7", "17"], ["p8", "26"], ["p9", "25"], ["p11", "2"], ["p13", "18"], ["p14", "19"], ["p15", "21"], ["p16", "5"], ["p19", "22"], ["p20", "23"]],
+ output_pin: [["p0", "33"], ["p1", "32"], ["p5", "0"], ["p6", "16"], ["p7", "17"], ["p8", "26"], ["p9", "25"], ["p11", "2"], ["p13", "18"], ["p14", "19"], ["p15", "21"], ["p16", "5"], ["p19", "22"], ["p20", "23"]],
+ pwm_pin: [["p0", "33"], ["p1", "32"], ["p5", "0"], ["p6", "16"], ["p7", "17"], ["p8", "26"], ["p9", "25"], ["p11", "2"], ["p13", "18"], ["p14", "19"], ["p15", "21"], ["p16", "5"], ["p19", "22"], ["p20", "23"]],
+ pwm: [["pwm0", "pwm33"], ["pwm1", "pwm32"], ["pwm5", "pwm0"], ["pwm6", "pwm16"], ["pwm7", "pwm17"], ["pwm8", "pwm26"], ["pwm9", "pwm25"], ["pwm11", "pwm2"], ["pwm13", "pwm18"], ["pwm14", "pwm19"], ["pwm15", "pwm21"], ["pwm16", "pwm5"], ["pwm19", "pwm22"], ["pwm20", "pwm23"]],
+ espnow_channel: Profile.generate(['1-13']),
+ haskylens_model: Profile.generate(['0-4']),
+ analog_pin: [["p0", "33"], ["p1", "32"], ["p2", "35"], ["p3", "34"], ["p4", "39"], ["p10", "36"]],
+ analog: [["adc0", "adc33"], ["adc1", "adc32"], ["adc2", "adc35"], ["adc3", "adc34"], ["adc4", "adc39"], ["adc10", "adc36"]],
+ dac_pin: [["p8", "26"], ["p9", "25"]],
+ dac: [["dac8", "dac26"], ["dac9", "dac25"]],
+ touch_mpython: [["p", "p"], ["y", "y"], ["t", "t"], ["h", "h"], ["o", "o"], ["n", "n"]],
+ touch: [["tc0", "tc33"], ["tc1", "tc32"], ["tc5", "tc0"], ["tc11", "tc2"], ["tc23", "tc27"], ["tc24", "tc14"], ["tc25", "tc12"], ["tc26", "tc13"], ["tc27", "tc15"], ["tc28", "tc4"]],
+ touch_pin: [["p0", "33"], ["p1", "32"], ["p5", "0"], ["p11", "2"], ["p23", "27"], ["p24", "14"], ["p25", "12"], ["p26", "13"], ["p27", "15"], ["p28", "4"]],
+ button: [["A", "button_a"], ["B", "button_b"]],
+ axis: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"]],
+ exlcdh: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], ["10", "10"], ["11", "11"], ["12", "12"], ["13", "13"], ["14", "14"], ["15", "15"]],
+ exlcdv: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"]],
+ brightness: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"]],
+ tts_voice: Profile.generate(['0-16']),
+ tts_builtin_music: Profile.generate(['0-47']),
+ tts_bgmusic: Profile.generate(['0-15']),
+ builtinimg: [["HEART", "onboard_matrix.HEART"], ["HEART_SMALL", "onboard_matrix.HEART_SMALL"], ["HAPPY", "onboard_matrix.HAPPY"], ["SAD", "onboard_matrix.SAD"], ["SMILE", "onboard_matrix.SMILE"], ["SILLY", "onboard_matrix.SILLY"], ["FABULOUS", "onboard_matrix.FABULOUS"], ["SURPRISED", "onboard_matrix.SURPRISED"], ["ASLEEP", "onboard_matrix.ASLEEP"], ["ANGRY", "onboard_matrix.ANGRY"], ["CONFUSED", "onboard_matrix.CONFUSED"], ["NO", "onboard_matrix.NO"], ["YES", "onboard_matrix.YES"], ["LEFT_ARROW", "onboard_matrix.LEFT_ARROW"], ["RIGHT_ARROW", "onboard_matrix.RIGHT_ARROW"], ["DRESS", "onboard_matrix.DRESS"], ["TRANSFORMERS", "onboard_matrix.TRANSFORMERS"], ["SCISSORS", "onboard_matrix.SCISSORS"], ["EXIT", "onboard_matrix.EXIT"], ["TREE", "onboard_matrix.TREE"], ["PACMAN", "onboard_matrix.PACMAN"], ["TARGET", "onboard_matrix.TARGET"], ["TSHIRT", "onboard_matrix.TSHIRT"], ["ROLLERSKATE", "onboard_matrix.ROLLERSKATE"], ["DUCK", "onboard_matrix.DUCK"], ["HOUSE", "onboard_matrix.HOUSE"], ["TORTOISE", "onboard_matrix.TORTOISE"], ["BUTTERFLY", "onboard_matrix.BUTTERFLY"], ["STICKFIGURE", "onboard_matrix.STICKFIGURE"], ["GHOST", "onboard_matrix.GHOST"], ["PITCHFORK", "onboard_matrix.PITCHFORK"], ["onboard_music_QUAVERS", "onboard_matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "onboard_matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "onboard_matrix.onboard_music_CROTCHET"], ["COW", "onboard_matrix.COW"], ["RABBIT", "onboard_matrix.RABBIT"], ["SQUARE_SMALL", "onboard_matrix.SQUARE_SMALL"], ["SQUARE", "onboard_matrix.SQUARE"], ["DIAMOND_SMALL", "onboard_matrix.DIAMOND_SMALL"], ["DIAMOND", "onboard_matrix.DIAMOND"], ["CHESSBOARD", "onboard_matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "onboard_matrix.TRIANGLE_LEFT"], ["TRIANGLE", "onboard_matrix.TRIANGLE"], ["SNAKE", "onboard_matrix.SNAKE"], ["UMBRELLA", "onboard_matrix.UMBRELLA"], ["SKULL", "onboard_matrix.SKULL"], ["GIRAFFE", "onboard_matrix.GIRAFFE"], ["SWORD", "onboard_matrix.SWORD"]],
+ builtinimg_extern: [["HEART", "matrix32x12.Matrix.HEART"], ["HEART_SMALL", "matrix32x12.Matrix.HEART_SMALL"], ["HAPPY", "matrix32x12.Matrix.HAPPY"], ["SAD", "matrix32x12.Matrix.SAD"], ["SMILE", "matrix32x12.Matrix.SMILE"], ["SILLY", "matrix32x12.Matrix.SILLY"], ["FABULOUS", "matrix32x12.Matrix.FABULOUS"], ["SURPRISED", "matrix32x12.Matrix.SURPRISED"], ["ASLEEP", "matrix32x12.Matrix.ASLEEP"], ["ANGRY", "matrix32x12.Matrix.ANGRY"], ["CONFUSED", "matrix32x12.Matrix.CONFUSED"], ["NO", "matrix32x12.Matrix.NO"], ["YES", "matrix32x12.Matrix.YES"], ["LEFT_ARROW", "matrix32x12.Matrix.LEFT_ARROW"], ["RIGHT_ARROW", "matrix32x12.Matrix.RIGHT_ARROW"], ["DRESS", "matrix32x12.Matrix.DRESS"], ["TRANSFORMERS", "matrix32x12.Matrix.TRANSFORMERS"], ["SCISSORS", "matrix32x12.Matrix.SCISSORS"], ["EXIT", "matrix32x12.Matrix.EXIT"], ["TREE", "matrix32x12.Matrix.TREE"], ["PACMAN", "matrix32x12.Matrix.PACMAN"], ["TARGET", "matrix32x12.Matrix.TARGET"], ["TSHIRT", "matrix32x12.Matrix.TSHIRT"], ["ROLLERSKATE", "matrix32x12.Matrix.ROLLERSKATE"], ["DUCK", "matrix32x12.Matrix.DUCK"], ["HOUSE", "matrix32x12.Matrix.HOUSE"], ["TORTOISE", "matrix32x12.Matrix.TORTOISE"], ["BUTTERFLY", "matrix32x12.Matrix.BUTTERFLY"], ["STICKFIGURE", "matrix32x12.Matrix.STICKFIGURE"], ["GHOST", "matrix32x12.Matrix.GHOST"], ["PITCHFORK", "matrix32x12.Matrix.PITCHFORK"], ["onboard_music_QUAVERS", "matrix32x12.Matrix.onboard_music_QUAVERS"], ["onboard_music_QUAVER", "matrix32x12.Matrix.onboard_music_QUAVER"], ["onboard_music_CROTCHET", "matrix32x12.Matrix.onboard_music_CROTCHET"], ["COW", "matrix32x12.Matrix.COW"], ["RABBIT", "matrix32x12.Matrix.RABBIT"], ["SQUARE_SMALL", "matrix32x12.Matrix.SQUARE_SMALL"], ["SQUARE", "matrix32x12.Matrix.SQUARE"], ["DIAMOND_SMALL", "matrix32x12.Matrix.DIAMOND_SMALL"], ["DIAMOND", "matrix32x12.Matrix.DIAMOND"], ["CHESSBOARD", "matrix32x12.Matrix.CHESSBOARD"], ["TRIANGLE_LEFT", "matrix32x12.Matrix.TRIANGLE_LEFT"], ["TRIANGLE", "matrix32x12.Matrix.TRIANGLE"], ["SNAKE", "matrix32x12.Matrix.SNAKE"], ["UMBRELLA", "matrix32x12.Matrix.UMBRELLA"], ["SKULL", "matrix32x12.Matrix.SKULL"], ["GIRAFFE", "matrix32x12.Matrix.GIRAFFE"], ["SWORD", "matrix32x12.Matrix.SWORD"]],
+ imglist: [["ALL_CLOCKS", "onboard_matrix.ALL_CLOCKS"], ["ALL_ARROWS", "onboard_matrix.ALL_ARROWS"]],
+ playlist: [["DADADADUM", "onboard_music.DADADADUM"], ["ENTERTAINER", "onboard_music.ENTERTAINER"], ["PRELUDE", "onboard_music.PRELUDE"], ["ODE", "onboard_music.ODE"], ["NYAN", "onboard_music.NYAN"], ["RINGTONE", "onboard_music.RINGTONE"], ["FUNK", "onboard_music.FUNK"], ["BLUES", "onboard_music.BLUES"], ["BIRTHDAY", "onboard_music.BIRTHDAY"], ["WEDDING", "onboard_music.WEDDING"], ["FUNERAL", "onboard_music.FUNERAL"], ["PUNCHLINE", "onboard_music.PUNCHLINE"], ["PYTHON", "onboard_music.PYTHON"], ["BADDY", "onboard_music.BADDY"], ["CHASE", "onboard_music.CHASE"], ["BA_DING", "onboard_music.BA_DING"], ["WAWAWAWAA", "onboard_music.WAWAWAWAA"], ["JUMP_UP", "onboard_music.JUMP_UP"], ["JUMP_DOWN", "onboard_music.JUMP_DOWN"], ["POWER_UP", "onboard_music.POWER_UP"], ["POWER_DOWN", "onboard_music.POWER_DOWN"]],
+ playlist_extern: [["DADADADUM", "DADADADUM"], ["ENTERTAINER", "ENTERTAINER"], ["PRELUDE", "PRELUDE"], ["ODE", "ODE"], ["NYAN", "NYAN"], ["RINGTONE", "RINGTONE"], ["FUNK", "FUNK"], ["BLUES", "BLUES"], ["BIRTHDAY", "BIRTHDAY"], ["WEDDING", "WEDDING"], ["FUNERAL", "FUNERAL"], ["PUNCHLINE", "PUNCHLINE"], ["PYTHON", "PYTHON"], ["BADDY", "BADDY"], ["CHASE", "CHASE"], ["BA_DING", "BA_DING"], ["WAWAWAWAA", "WAWAWAWAA"], ["JUMP_UP", "JUMP_UP"], ["JUMP_DOWN", "JUMP_DOWN"], ["POWER_UP", "POWER_UP"], ["POWER_DOWN", "POWER_DOWN"]],
+ tone_notes: [
+ ["NOTE_C3", "131"], ["NOTE_D3", "147"], ["NOTE_E3", "165"], ["NOTE_F3", "175"], ["NOTE_G3", "196"], ["NOTE_A3", "220"], ["NOTE_B3", "247"],
+ ["NOTE_C4", "262"], ["NOTE_D4", "294"], ["NOTE_E4", "330"], ["NOTE_F4", "349"], ["NOTE_G4", "392"], ["NOTE_A4", "440"], ["NOTE_B4", "494"],
+ ["NOTE_C5", "523"], ["NOTE_D5", "587"], ["NOTE_E5", "659"], ["NOTE_F5", "698"], ["NOTE_G5", "784"], ["NOTE_A5", "880"], ["NOTE_B5", "988"]
+ ],
+ serial_pin: [["pin0", "0"], ["pin1", "1"], ["pin2", "2"], ["pin8", "8"], ["pin12", "12"], ["pin13", "13"], ["pin14", "14"], ["pin15", "15"], ["pin16", "16"]],
+ radio_power: [['0', '0'], ['1', '1'], ['2', '2'], ['3', '3'], ['4', '4'], ['5', '5'], ['6', '6'], ['7', '7']],
+ radio_datarate: [["1Mbit", "RATE_1MBIT"], ["250Kbit", "RATE_250KBIT"], ["2Mbit", "RATE_2MBIT"]],
+ one_more: [["ONE_SHOT", "ONE_SHOT"], ["PERIODIC", "PERIODIC"]],
+ digital_dot: [["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]],
+};
+
+export default pins;
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/blocks/pins.js b/boards/default_src/micropython_esp32/blocks/pins.js
new file mode 100644
index 00000000..4a536910
--- /dev/null
+++ b/boards/default_src/micropython_esp32/blocks/pins.js
@@ -0,0 +1,401 @@
+import * as Blockly from 'blockly/core';
+import { Profile } from 'mixly';
+
+const PINS_HUE = 230;
+
+export const pins_digital = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.digital), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_digital_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.digital_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_input_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.input_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_output_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.output_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_mpython_touch = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.touch_mpython), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+
+export const espnow_channel = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.espnow_channel), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const haskylens_model = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.haskylens_model), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pwm_input = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.pwm_input), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const analog_input = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.analog_input), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pwm_output = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.pwm_output), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const analog_output = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.analog_output), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const i2c_A_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.i2c_A_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const i2c_B_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.i2c_B_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+
+export const spi_A_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.spi_A_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const spi_B_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.spi_B_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const spi_C_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.spi_C_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const spi_D_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.spi_D_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_analog = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.analog), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_analog_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.analog_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_dac = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.dac), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_dac_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.dac_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_button = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.button), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_pwm = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.pwm), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_pwm_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.pwm_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_touch_pin = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.touch_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_touch = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.touch), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_serial = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.serial_pin), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_builtinimg = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.builtinimg), 'PIN');
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+export const pins_builtinimg_extern = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.builtinimg_extern), 'PIN');
+ this.setOutput(true, "esp32_image");
+ }
+};
+
+export const pins_imglist = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.imglist), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_playlist = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.playlist), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_playlist_extern = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.playlist_extern), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_exlcdh = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.exlcdh), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_exlcdv = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.exlcdv), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_axis = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.axis), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+export const pins_brightness = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.brightness), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_tts_voice = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.tts_voice), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_tts_builtin_music = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.tts_builtin_music), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_tts_bgmusic = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.tts_bgmusic), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_tone_notes = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.tone_notes), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_radio_power = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.radio_power), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_radio_datarate = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.radio_datarate), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
+
+export const pins_one_more = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.one_more), 'PIN');
+ this.setOutput(true);
+ }
+};
+
+export const pins_digital_dot = {
+ init: function () {
+ this.setColour(PINS_HUE);
+ this.appendDummyInput("")
+ .appendField(new Blockly.FieldDropdown(Profile.default.digital_dot), 'PIN');
+ this.setOutput(true, Number);
+ }
+};
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/css/color_esp32_mixgo.css b/boards/default_src/micropython_esp32/css/color_esp32_mixgo.css
new file mode 100644
index 00000000..9d7b2efc
--- /dev/null
+++ b/boards/default_src/micropython_esp32/css/color_esp32_mixgo.css
@@ -0,0 +1,362 @@
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(1) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/inout.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(1) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/inout2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(2) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/ctrl.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(2) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/ctrl2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(3) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/math.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(3) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/math2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(4) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/logic.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(4) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/logic2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(5) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/text.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(5) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/text2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(6) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/list3.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(6) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/list4.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(7) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/tuple.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(7) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/tuple2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(8) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/dict.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(8) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/dict2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(9) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/set.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(9) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/set2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(10) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/var.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(10) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/var2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(11) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/func.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(11) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/func2.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(12) > div.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/port.png') no-repeat;
+ background-size: 100% auto;
+}
+div.blocklyToolboxDiv > div.blocklyToolboxContents > div:nth-child(12) > div.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/port2.png') no-repeat;
+ background-size: 100% auto;
+}
+
+
+#catOnBoardSensor.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/sensor_onboard.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardSensor.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/sensor_new2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardActuator.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/actuator_onboard.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardActuator.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/actuator_new2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardDisplay.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/display_onboard.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardDisplay.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/display_new2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardOled.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/display_onboard.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnBoardOled.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/display_new2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catPE_G1.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/act.png') no-repeat;
+ background-size: 100% auto;
+}
+#catPE_G1.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/act2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catExternSensor.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/sensor_extern.png') no-repeat;
+ background-size: 100% auto;
+}
+#catExternSensor.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/sensor_new2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catExternActuator.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/actuator_extern.png') no-repeat;
+ background-size: 100% auto;
+}
+#catExternActuator.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/actuator_new2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catMatrix.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/Matrix.png') no-repeat;
+ background-size: 100% auto;
+}
+#catMatrix.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/Matrix2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOLED.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/oled.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOLED.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/oled2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catTFT.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/oled.png') no-repeat;
+ background-size: 100% auto;
+}
+#catTFT.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/oled2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catLCD.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/oled.png') no-repeat;
+ background-size: 100% auto;
+}
+#catLCD.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/oled2.png') no-repeat;
+ background-size: 100% auto;
+}
+#cat4Digitdisplay.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/4Digitdisplay.png') no-repeat;
+ background-size: 100% auto;
+}
+#cat4Digitdisplay.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/4Digitdisplay2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catAIsensor.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/image.png') no-repeat;
+ background-size: 100% auto;
+}
+#catAIsensor.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/image2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catAIsensor2.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/image.png') no-repeat;
+ background-size: 100% auto;
+}
+#catAIsensor2.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/image2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catFile.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/file.png') no-repeat;
+ background-size: 100% auto;
+}
+#catFile.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/file2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBLE.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBLE.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catIR.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catIR.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catI2C.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catI2C.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catSPI.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catSPI.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catRadio.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catRadio.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOneWire.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOneWire.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catESPNow.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catESPNow.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catLora.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catLora.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catNetwork.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/net3.png') no-repeat;
+ background-size: 100% auto;
+}
+#catNetwork.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/net2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnenet.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/onenet.png') no-repeat;
+ background-size: 100% auto;
+}
+#catOnenet.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/onenet2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBlynk.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/blynk.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBlynk.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/blynk2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catMixIO.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/mixio.png') no-repeat;
+ background-size: 100% auto;
+}
+#catMixIO.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/mixio2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catAIOT.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/ai.png') no-repeat;
+ background-size: 100% auto;
+}
+#catAIOT.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/ai2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catweather.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/weather.png') no-repeat;
+ background-size: 100% auto;
+}
+#catweather.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/weather2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catFactory.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/factory3.png') no-repeat;
+ background-size: 100% auto;
+}
+#catFactory.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/factory4.png') no-repeat;
+ background-size: 100% auto;
+}
+#catCommunicate.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/requests.png') no-repeat;
+ background-size: 100% auto;
+}
+#catCommunicate.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/requests2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBLEC.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBLEC.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBLEKM.blocklyTreeRow > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni.png') no-repeat;
+ background-size: 100% auto;
+}
+#catBLEKM.blocklyTreeRow.blocklyTreeSelected > div.blocklyTreeRowContentContainer > span.blocklyTreeIcon{
+ background:url('../../../../common/media/mark/comuni2.png') no-repeat;
+ background-size: 100% auto;
+}
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/export.js b/boards/default_src/micropython_esp32/export.js
new file mode 100644
index 00000000..ee8b52d4
--- /dev/null
+++ b/boards/default_src/micropython_esp32/export.js
@@ -0,0 +1,9 @@
+import MicropythonESP32Pins from './blocks/esp32_profile';
+import * as MicropythonESP32PinsBlocks from './blocks/pins';
+import * as MicropythonESP32PinsGenerators from './generators/pins';
+
+export {
+ MicropythonESP32Pins,
+ MicropythonESP32PinsBlocks,
+ MicropythonESP32PinsGenerators
+};
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/generators/pins.js b/boards/default_src/micropython_esp32/generators/pins.js
new file mode 100644
index 00000000..3346a7c4
--- /dev/null
+++ b/boards/default_src/micropython_esp32/generators/pins.js
@@ -0,0 +1,39 @@
+export const pins_digital = function (_, generator) {
+ var code = this.getFieldValue('PIN');
+ return [code, generator.ORDER_ATOMIC];
+}
+
+export const pins_button = pins_digital;
+export const pins_digital_pin = pins_digital;
+export const pins_input_pin = pins_digital;
+export const pins_output_pin = pins_digital;
+export const pins_analog_pin = pins_digital;
+export const pins_analog = pins_digital;
+export const pins_pwm_pin = pins_digital;
+export const pins_pwm = pins_digital;
+export const espnow_channel = pins_digital;
+export const haskylens_model = pins_digital;
+export const pins_mpython_touch = pins_digital;
+export const pins_dac_pin = pins_digital;
+export const pins_dac = pins_digital;
+export const pins_touch_pin = pins_digital;
+export const pins_touch = pins_digital;
+export const pins_interrupt = pins_digital;
+export const pins_serial = pins_digital;
+export const pins_builtinimg = pins_digital;
+export const pins_builtinimg_extern = pins_digital;
+export const pins_imglist = pins_digital;
+export const pins_playlist = pins_digital;
+export const pins_playlist_extern = pins_digital;
+export const pins_axis = pins_digital;
+export const pins_exlcdh = pins_digital;
+export const pins_exlcdv = pins_digital;
+export const pins_brightness = pins_digital;
+export const pins_tts_voice = pins_digital;
+export const pins_tts_builtin_music = pins_digital;
+export const pins_tts_bgmusic = pins_digital;
+export const pins_tone_notes = pins_digital;
+export const pins_radio_power = pins_digital;
+export const pins_radio_datarate = pins_digital;
+export const pins_one_more = pins_digital;
+export const pins_digital_dot = pins_digital;
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/index.js b/boards/default_src/micropython_esp32/index.js
new file mode 100644
index 00000000..e865436e
--- /dev/null
+++ b/boards/default_src/micropython_esp32/index.js
@@ -0,0 +1,162 @@
+import * as Blockly from 'blockly/core';
+import { Profile } from 'mixly';
+
+import {
+ PythonVariablesBlocks,
+ PythonControlBlocks,
+ PythonMathBlocks,
+ PythonTextBlocks,
+ PythonListsBlocks,
+ PythonDictsBlocks,
+ PythonLogicBlocks,
+ PythonStorageBlocks,
+ PythonProceduresBlocks,
+ PythonTupleBlocks,
+ PythonSetBlocks,
+ PythonHtmlBlocks,
+ PythonUtilityBlocks,
+ PythonVariablesGenerators,
+ PythonControlGenerators,
+ PythonMathGenerators,
+ PythonTextGenerators,
+ PythonListsGenerators,
+ PythonDictsGenerators,
+ PythonLogicGenerators,
+ PythonStorageGenerators,
+ PythonProceduresGenerators,
+ PythonTupleGenerators,
+ PythonSetGenerators,
+ PythonHtmlGenerators,
+ PythonUtilityGenerators,
+ Procedures,
+ Variables,
+ Python
+} from '@mixly/python';
+
+import {
+ MicroPythonActuatorExternBlocks,
+ MicroPythonActuatorOnBoardBlocks,
+ MicroPythonAISensorBlocks,
+ MicroPythonAIBlocks,
+ MicroPythonBlynkBlocks,
+ MicroPythonCommunicateBlocks,
+ MicroPythonDisplayExternBlocks,
+ MicroPythonDisplayOnBoardBlocks,
+ MicroPythonFactoryBlocks,
+ MicroPythonInputBlocks,
+ MicroPythonIotBlocks,
+ MicroPythonNetworkBlocks,
+ MicroPythonPeG1Blocks,
+ MicroPythonSensorExternBlocks,
+ MicroPythonSensorOnBoardBlocks,
+ MicroPythonSerialBlocks,
+ MicroPythonSystemBlocks,
+ MicroPythonWeatherBlocks,
+ MicroPythonActuatorExternGenerators,
+ MicroPythonActuatorOnBoardGenerators,
+ MicroPythonAISensorGenerators,
+ MicroPythonAIGenerators,
+ MicroPythonBlynkGenerators,
+ MicroPythonCommunicateGenerators,
+ MicroPythonDisplayExternGenerators,
+ MicroPythonDisplayOnBoardGenerators,
+ MicroPythonFactoryGenerators,
+ MicroPythonInputGenerators,
+ MicroPythonIotGenerators,
+ MicroPythonNetworkGenerators,
+ MicroPythonPeG1Generators,
+ MicroPythonSensorExternGenerators,
+ MicroPythonSensorOnBoardGenerators,
+ MicroPythonSerialGenerators,
+ MicroPythonSystemGenerators,
+ MicroPythonWeatherGenerators
+} from '@mixly/micropython';
+
+import {
+ MicropythonESP32Pins,
+ MicropythonESP32PinsBlocks,
+ MicropythonESP32PinsGenerators
+} from './';
+
+import './css/color_esp32_mixgo.css';
+
+Object.assign(Blockly.Variables, Variables);
+Object.assign(Blockly.Procedures, Procedures);
+Blockly.Python = Python;
+Blockly.generator = Python;
+
+Profile.default = {};
+Object.assign(Profile, MicropythonESP32Pins);
+Object.assign(Profile.default, MicropythonESP32Pins['ESP32 Generic']);
+
+Object.assign(
+ Blockly.Blocks,
+ PythonVariablesBlocks,
+ PythonControlBlocks,
+ PythonMathBlocks,
+ PythonTextBlocks,
+ PythonListsBlocks,
+ PythonDictsBlocks,
+ PythonLogicBlocks,
+ PythonStorageBlocks,
+ PythonProceduresBlocks,
+ PythonTupleBlocks,
+ PythonSetBlocks,
+ PythonHtmlBlocks,
+ PythonUtilityBlocks,
+ MicroPythonInputBlocks,
+ MicroPythonSystemBlocks,
+ MicroPythonSerialBlocks,
+ MicroPythonCommunicateBlocks,
+ MicroPythonIotBlocks,
+ MicroPythonWeatherBlocks,
+ MicroPythonAISensorBlocks,
+ MicroPythonSensorOnBoardBlocks,
+ MicroPythonSensorExternBlocks,
+ MicroPythonPeG1Blocks,
+ MicroPythonNetworkBlocks,
+ MicroPythonAIBlocks,
+ MicroPythonActuatorOnBoardBlocks,
+ MicroPythonActuatorExternBlocks,
+ MicroPythonDisplayOnBoardBlocks,
+ MicroPythonDisplayExternBlocks,
+ MicroPythonFactoryBlocks,
+ MicroPythonBlynkBlocks,
+ MicropythonESP32PinsBlocks
+);
+
+Object.assign(
+ Blockly.Python.forBlock,
+ PythonVariablesGenerators,
+ PythonControlGenerators,
+ PythonMathGenerators,
+ PythonTextGenerators,
+ PythonListsGenerators,
+ PythonDictsGenerators,
+ PythonLogicGenerators,
+ PythonStorageGenerators,
+ PythonProceduresGenerators,
+ PythonTupleGenerators,
+ PythonSetGenerators,
+ PythonHtmlGenerators,
+ PythonUtilityGenerators,
+ MicroPythonInputGenerators,
+ MicroPythonSystemGenerators,
+ MicroPythonSerialGenerators,
+ MicroPythonCommunicateGenerators,
+ MicroPythonIotGenerators,
+ MicroPythonWeatherGenerators,
+ MicroPythonAISensorGenerators,
+ MicroPythonSensorOnBoardGenerators,
+ MicroPythonSensorExternGenerators,
+ MicroPythonPeG1Generators,
+ MicroPythonNetworkGenerators,
+ MicroPythonAIGenerators,
+ MicroPythonActuatorOnBoardGenerators,
+ MicroPythonActuatorExternGenerators,
+ MicroPythonDisplayOnBoardGenerators,
+ MicroPythonDisplayExternGenerators,
+ MicroPythonFactoryGenerators,
+ MicroPythonBlynkGenerators,
+ MicropythonESP32PinsGenerators
+);
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/jsconfig.json b/boards/default_src/micropython_esp32/jsconfig.json
new file mode 100644
index 00000000..1e4522a1
--- /dev/null
+++ b/boards/default_src/micropython_esp32/jsconfig.json
@@ -0,0 +1,18 @@
+{
+ "compilerOptions": {
+ "experimentalDecorators": true,
+ "baseUrl": "./",
+ "paths": {
+ "@mixly/python": [
+ "../python"
+ ],
+ "@mixly/micropython": [
+ "../micropython"
+ ]
+ }
+ },
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
+}
\ No newline at end of file
diff --git a/boards/default_src/micropython_esp32/origin/build/Generic_ESP32-v1.23.0.bin b/boards/default_src/micropython_esp32/origin/build/Generic_ESP32-v1.23.0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..35232a8026820778a3498ca74ef21b05f6e5caac
GIT binary patch
literal 1716000
zcmeFadq5Lsx<5V%5JDJRKuf*Q?TChpMH|s7Qo95%s8w64m0If_2{4gZATbGo7Ed#=
z3&Gk`z-|TC{ce($71_F?y=h%f!ELGS+TFI>v%R{d?y|LaRFFIK`#duV7pvX#J?H!1
zFKpk;%zJs>=l#6T?S1DR_sd}A?XQKX_1`h{r^sWTR7f{EMod#rV3Rk~9J#e>_SQBDQ6j6Ba^ictas842|A^RslXyK*i=Ws8 zE~e*T%DA!~X0o1fc{o=Dm!QK0&NE1(yUeXIz+l?nb2BWr0ooIdhvM^!NcZq6#+dXt^ZhBv>mtEt(Z^$BzANG@|S@|6=!&+U!wQ?XAF6?TKR zPjp*4o$lXPgg)Rrve;1)!8+MsHVE`CDcNySr7i8 H*86$k6m9kq7jM|V0L_Lv7NPR#Lh zQGZc%XLrg^3pccPh;E&oovvR@%!HOiE6YDYugdbz#f)!6e;fWgai_-Lr2bpcu_e-C z lQ+fmHKM!Fm9j#$po80n7n>( 0+hY(?e%{jz8Blii{69p2os0e)QrEvZ|gr7W9}BlQyw5bq}1NS zWNG^9*D$9vE#X5Rb}06UD6mxAdR`=ct2ILl$3bpfVW*GW_>PO@yE3d=H53yrWtM50 zT@g*bY$?a>ijeCJ4NA|$ZTjWs>(%$!5T`PTO>{WsI?r5W=R3CVZGTyGzBO *!X9%5e+zNHN5X$reT_)2 (!bpOe4$(`(e;jg|Dx__VUKYwemtd~Z1L(NB3?5#R6vdR_F;o{zXoyJ#r0~L*H zIXx)nQkDcCd-T;&SuE8G_naJ+CE=;bF7c70h8p1oqS>Ra`gH_*t6q%s**RIq%fw5c zb#~N6ShjN)4^X}B>gq#-JvZ*VRaqX(P`ex01=+Acvb7?{E{v=Cj%M&nV(CM+>Kr|M zM9iECuR2Q)ZxS2FHB~3+;e-Z14eF}>^iZc(jbo~x94za@gDcGYaTR8ooveqzj-LLq zKJUk!D8WE1rPOYFm}EPIia|DvTB<+Dzl~i`(G%x57*f@!`2FPSM+akGk!WT&D%`F} zM|rwT(P?68+zPKUNZ2&!cF(<%dUN#TU{+He!mOIaVO;2byJP>Z)+-|0|MLD&c7}I3 z<6W*e`tYDr&46G-_ ?N zH`M>`2l V!}XsPJ(CC9f2BM{_Hqw9x!o&zq6ga# z_|50t?H+#{K|7eJmVSsg15-V1&@+ATXzU=o?Gxd9tW}lV>C NTX`r*^%d9ISdOL~7?g66|;~WPe?oE7D!ZVGiR`ZeWw+ zO2fikY*dY#aU|~b@gTfEfEEesxrCb}d7}q1nuO64N;oT4X?$}Y+ycbG_|Xl{GvBgN z>_-(RI9A!JVpdH)SQq9z^Cj}?RDI$`&A~d2^UT+5)Rlz4fmI(J$qLh4eibBqJOEqJ zv>U?T>~^^k6**#0Q#I;u>-z)j*;AoqeZpU;*75ml*pxrA6K94sH8wXV>~&Y}b;L&a zXl{MeU-t~vJv85!k7-=xg)Kf!xjz5Pc{%MQhO=_9ZszRA`6Y)#`9aZbY-T5BC+w2i z35-)Yu13i^Tu={gr}DWJcuHiQm$G2vj|_O42HGxg>^NaBQ7-G68FEVp+=hDwx5mv} znfAT#+X2VjUT0{8erdWs&z)^_w;3a|w={c0Zv<6nX2r4FE7R-07hUPq?txR9st>&_ z`v>0nuk?4mb+>)z_S6lueHUp`3 $41D4rf1iHMD~kjA& jCk0P&fzdq^oeu`@@zyGZpAFQhYho336Se=4)QRT1R>@9` z3k$2wsd;nor9=g*c5uPeg`}SoSq;~)>sLy>-tKO)fAiJha9zW$Z+3Wt6vu*?vP UuBn6Loip8TrC@LhBDD9iuw;k%;l{E zo+SgqR0)ev#_68a;Zn>$KDqtBMBvvlalmuefbK7xFo`NiqRViZUCz@Yvo2ESa?~6V zGhNM9`_n5HJiuy%JEU3~VJ=; Fw{>yX#_15mm_}AzD>nl{hpWs)ql|-Q1}z6qlwOC%$8Wy z$CCbUjihlsm*RCZ!g#4zBSiVG6Qrve)rE+GvfetiZ|*q9gq=!+;|KEFTd9*z`#qY0 zb4uYH@lbXNwe*e&(GwNg*CjOG@Am``=-=m5-J*`05FMqc|AUnOr+$yv50q3F#ptdO z{i1Zs5_e(f<_Z5PboFOvcGao@*1nr=2jAcN2KNnJTQ2ppw-O){92Y1{__CkXJg64_ zNe|Uu_3wW=v$DBXZ7GKxty8Zws=g8t^)bRHR8BV^)6Lt#r-C4+`;~|>HNpp!bvRUe zBc!(cPZBoJ`FcUwK8}HcRslhh1IWD7&0+Ad?%>RXy z;g>|JtWRE>G2CP4qt`3=7o;&)_j_LN=gxEIg3HMf>VQ+NqW+jvw!7c+D&ZkKPVH6S zqny`^SzG$`uW`ibp5pf1N^J NK)Uuvv zHnyZEl1={N0_%7pSm%ml*RU%_?DwyfY*g%f*>RJi*jTzIYS@WDscQEw2bb-e^M$dv z!T8GtTb}M`)$g5~Fuzt-G)L8hJ?c-l!{|4#ZC?f9dYo-))HQt-)OND@ K z-Br~!E14;-){8!U63Y9%M?OPkETL|5*HPT+TR%0)t4&{^^+}VjOn9Wf>}#pMKSz2v zn%Y06b=i(lj}7XA-l|5TeMs#o=*QKiLFj^OrN(2DpPT&8#{Q$)tFm&gYO+awKKgI{ z!>u; x|{&OnJ8=TPF2RWko z Xc;48LNQk>z;>yj&5N1L57_O zGd<#qXE coDoX*w1Z+|+b-Pjf7dpdpNNaTqI@ce`{W{7UtI^53todoEpjMnqV1 zw(neU5{r;d_Y8-eotgua+aD!eQ}uho`=Mzq@(AY%%+r^ZLTEpN&*$=!u*ee+D};}z zaLTSq1)ET5IIQ5E;-Rhe-wYjBzO6Z|z*-JErPQux4k=DV9#*hZ>h}%DX#IUq3FW?& zSWkB!yJ%nP Vt5RmF1bL`1#9`MwyC{Iln?KBrr;FIDMuGw&osW{{f0m$v^&WHo#~!>ViC z2lm(GoQ`2{sElMo*%0s_#0GnnAqRh_RLx;(V_8kzY@vY$2eWmMuI&pIE`^Tk!cum3 zZdo5^Y<9c58q4+iE{Cp*SrR!IbS`++4R0$Yi+O-rjO2LT3Sl2*xgsrks=T|TtWRGe zQJ9~Z*+m{p*EJX nB{l(_q9CU z=h@#UETcvjrq<4OMK2FaQB^90r~4XIyBl#im=bs3#k$$&4NC35QJW|GTK>Jy^F*JJ zI?`r+SgEQqa>{or>mE0%4inz#OoMW#GS(CF+>ElG<2O5Yz5a5_E!qtt`;$|e4{vTM z>hn1Ibl*h^i9|&5XiWX1qI(OMHA7MV0Q$Lb^M|1=d3~OeKGhYGfpVR8laLB_Y5)QJ zYlQa?oUoOiF#JmFkEp(bZW&;ygMfJU$;gPt$od^5 ec9hd zMx2WjG}M@4hqob|+BcXpire-*r)j^J pi*?+jxOtLe0tjnEbu=Jzs+@g3g>G2DB(nkGd6CD%b63` z`n`Bt<#DxZ;)&SG J6* zg=JEf=7#&Uecq)^`-?*^L!rhvkv$&DE+?I xEi zsBebGYIDVJb~xkXqK_*hJY4&OWVGTmd{bj&qsO%+L9+%$>frF$%-Hkg;}|q--y}wV zJm8AYY6x*DjOs})Ax^C+y@- wrcmu_TwS~1ZTW*Yez3Ub^QYB*AvnQt9Ymv2qOx-B=RZ1{q0Z>)7RQ7#vb`q z#A@Qfh`nfb?AN6`J^$NeBs#3h$u4TN> zTo9h54B BkI<4t#w|vBgvG7599M0$Ro# z7F!{U41yihZ~vtjUh>b-x2DXodV(Pe71O4jQlO*yUyECx>y6d~*C(J8&l|l!gQq@P zKclvA4n!*0-^r9yiX9&Q0GK-!r240LIEa5*oH9rCHR{$+Cj!Tbz&avu%o7ab{Gv4E zzeqY^3>sG(>q@RuR7NH!QX&y|U#Qrts$Jw-lhG%#eXN=do1fa|jg33_%*WiErrKPW zjXag4$7Fs }K5trhSYUP}j#)`dP!H3m`>~QYiR~KSg(ri3_%y{Akp|Y2q zgn~MCId&15YCKMqd|fLv0=yWQ=)IwskA-E{1jgc+OWylz^Itb&Q=$YnM<4AyeKrK( zwRee42P1_Y)a4-syXq7<-TF>Zuo82%>bObW)g`?!7I^ZSXj4VX+gi{&)zaG#Dilz| z>Vn?=6}xvGQd{2$j^B3yl?V{vK~Zi#)$lzF#@@E3NXLKN#4OS`9Tz;gy~qAIC|vA8 z4Z+as$k&JFD?8Fj2uI^;fN~?yp1f>)nPBU!w)O7bRk5I0F!wqhb5xvAs_tMS1kU-P zV_Ab*F!jz)P`0Kr!kXTSXVmyz)}U #x z*8vBxFD0TnskiDW$G+oLQ>XT3gaL<|2E{vdiv4@{rG!*Z?^X4PWheCV^QYCf_Cf}y zj_-{|EOBKB7NcciuV+$ktbrK}{x%4)$$r9?)nKX2ObzeNpm2YxrZ?lV$WG4qBjjFS zywm5Gg*_3n=B ouV$XZfcDo2s>}?bL-0!JE!{mHO)q-iA@x4P`!R<-yPE0DdoX&2 z;I~6gDfTzEPs0X6^cHD>676L&U*}+44lCQwiq7ftS ^zLh+mn#C*HKbB^$vB%Tgqx(At+>(a*P~j^Xc(-Hj zwx(kaz?a1CZq!DAdi0Eb@aWUAf2aD@ww|N5p8YjDu^F-NBsL*x5Y^Nv$_DoDYkn)8 zowD!u3N{>paan)U3+e2n5>yGp9+88ye{ {xCl+*#B_G&R?)~cV(sEbRXF5tTdDgtop%p(|s#E$){r~ z6;5SHt)e1v8irCaUs=A3aZU}*TF&x+B=ie lKLO4s2*Y zL$z{xJllJKO*_?_sk)`3W@>PB9qbuZ4a1h|^6~3~u;kC07*f{fZb)C2x}thk&*K%I zSv{3g_y4@&l^ealqft@T+xT;7(<8HXYSqtm*xQL-AMDyXkk6k+H$787RJ1JX@fdnC z+d1JaiKkG8ac%uHpKl(jRh-griA^6mThe+w5A+D9sho|=`776ojSQyN6K!G+ht&TQ zY-d}7_XH1=)K5UHp{$u2;xq)Y6CD-0%A>CIL)DHtuCC>q_gzzK4V7V~<7*W=N?nF2 zbt_$PKZeKWWIQi6DDd{^mb+iie35HEB4%yq&uAB2v)P*+Rh_K5s&rRvwd<&5doxoK zsV~XhlTv$MbXc%=Y7o3De{Sed >TGUpWJCJy6P54Q{|D%;bd`TAHcV-~4CEj_wF0Zcw$~0sf%7vekVkQy`}@l3 zpDEcJuOurkwM>T(o?I#Du_MrA&uW;W`|aMWyQi>|UE>{%isL~QuO!Fa6s7$Q4SRgc zU%Ne>-NFVMTC7LeAm9~RIJzY}5-hw-+2yMsyjWGfbO&_h^d}wc&8((*$1X>e9WN*A zK8Ian+30xYbPE?=kDjC5`FlV7y!Ya_s>8wUFNr-DVRp9k)e6qnhbrH#YhhzvN>HA5 zGat5md*dmU{#mY`UixL--E-cpxN?X3^F!TjMf$e3;N#T|E$38k2lEY7yy423&ySBk z2a^0L>AB0*g01rXyI{ehSE! w7($L+1u@TzMG8|qA9!OD76T!w~H`yu=j#@ zsycc 7n&Will=AH$c82zI3}1>#rRP*_o9|g6v|qut?D~lase*SZbKD3j8f$K5ydP&C zth=`+Ua{}RY0=Lp>dS}l+8Pe9C;r0CEjzkBJG#%QgpaRC(;r+O&v@gN@a_BVcrT|_ zQRB|GzQOH#`i1A7(e5IEin=}4?pA!1h|9q`V|0TeI!M6_RJ6I ^Im(+WgQd;c=)d&xJ5cHT%}mSP-JaDnfJW+9^*QZxvwJW_2+oApDGz&p z!piQQ!I@RTapTo-)0E{IjIgY`GHQX+73EpheRNqjMQr&LBYG2}T2^#7Ho85uedEoK zlJj6Xnxt*1;hdv)c3+*7@`IeYKggMVbxzX>MRQ|>yu0Klp2)8BXCzAf$CaH#XKi?m zC%s*)$&W*JO+pmAqYZBXrR}#GiB%~N3)QiC<562WXtG?P*LPZ$&`#D0ic)LorzU^A z^s=!ge^SPBXt|*5UV!Cd*7)x{O!rZhjE&64v=;R!Y^I^HH({C|2H)e+{wr7KbpIfy z^9MN{SLbw$0Y)Ys#Xjx_h9;(==baOgW!teE=i7qpq2VM<^LiLR0Mw3hyg$fsJFcq3 z?%+m%^R;7lWRA^C&QJ8k=d}=?tV3a$nbYH@WnP&x{kdo4t~@8NSk_@uA~JpRLZlYu zYgHOx8#iY;mT=ldqOb0eEBb5HoqkJ)ulz_chAnurbfj`T`^Kc&@y2jVkeosN$yC zugpov%$$(*3?12lY {L`5rJx=pKPQy!V((IaiTJ!+~e?b&>RYAw4tc}v?f NbIoTh?!tzLWua_96o?&{d)Qh^xxp6a`N znIl<5j_M1xu2?q>xHjbj6P-73CSV=mcI*ir+2 v6-xroh(&7I`v9(qXL`m@<@HV^f9}~JeKVT#Tl{O=)HS(@;f7B0h^LdZT*Tc zs&RJ+%eoFL_tns3)UIbstDe3I0Z8?YSJ>N-b0X|$=#?^hr(7F;`qMMb5PqzoE6L7O zh6~Cot7w5-r> D>X!|&k4bNy3*(oaQZxEi}b$RRcXhc|1&*<+$7pplGh6`nf zm29VzWk7H8u+^kDWN3>>9m^^&-1-Hv3e&>~?{#@Tm0FDj-t%FXe saM`;UFnjGSX0z0Xq7VUb$(fwkTvkNOENoFVjd!d;PocqQwU z(JQVBAN6*{rCHcp^HDQih}6_GSdM^3r3UL$S)LAcu~EozsU79P@+mbr|C! WYiHEiU$Q6Pq^Ku9o4|V;ix-}R}cHb5f26(8echW`y4jvmX3|;il~WBx4R-L#_5JCRqXqU zO<*T^J#F+JkzG!=`qoP#n?Nf=>VE<8<4j;2kKYuRupusGTHM4tghiBzZ7J+MSu9Uk z-%wcgpQa77Ls8pf>ymHjX#aAMb~5I5dFFKqCK@gO=}>i|)GCp&SSG~XJUK4@)~p8x zH-@px&?UB**-C`(yH&KM2!q4Mm-mWLaBwDV8xt?pQ@e!eM8liNRJ;{}{a3s<;T)ZK zU4a)y$oIY1;`YFPMsi7=C>Au-AW?edOf>Ln;p|{_RG0TT5*$}p_#85-x~Cj-IN=7W zx*#mP1{X+MU#I6nr&I}5JZdVe40C&(?Y$zq;-AS1Hqq13Sth@sJNC&L*p5s((Im^i zY)|n%=I^2)Q7Khh9=RzlJ|u3w(s=VY?8JAA?JF4L&C2>y;-Xk4>wV@}tn#JXf*X?S zyXXZ{+yrIDE=KrUr{~YaM6EjJ3BLqMkKV>t{m(c!xYFx33g-#vq;YJF{P;I|e9yg~ zT_rz%OwTx2^ql kyY p_k Zuu>dic;i^t<0xy}Yx^<#jm!i%W3&Y~R+IojKB0 zGv14MPY*d<7+khX=Qizi7$f#j(BKNK@%Y??b2Fj8o(%o+P-9dy&U;SQJ|$WB&>FAb zmxNX)cj}zvBpbp=;@plWCSZ1O{J_sNQ4OOosKY;2sq#^6C$lTk;b=!~7zBT99HL`m zBF;v}(Hm7ZjKfhboF|*C_*8w``~2xoAB~Gr CtrJWQ6;9ulpIN5JmI2 zQ&ayNF{!ew$Gv~AqawY^b-H4Hbo>56EDb|CJt3XKERqxXtj_G<&N7NITtN|airp@p zmcv73kd$*6p@Rf@kibz3DYN^6+VbRVi>vwRQsr|mReyY0_IH?Kd0;qB86Dpze0v$S z;h*Bu%iHnV1slQNiN>gZRR8I+_pt0A^)KT9W<=(1(z%m5u2F~TXxh{i>~;rh|6L>_ z3tLDpuG{~Cw<=h^k3)>rbSho=h 5%@?sR#N!x!lsg`0$57u>b{X-7)4*s4M4|XHw)Ht_-RujYv$l(Dyh~9L zDsMt~ESK@_@Un>A8qBf2YC>VqUBP=2$@_2Ja@iXn?5;Vl$39BxH 2;vnHQmE4Nj$jjd O (ym_b?FVSR7cixiL J+q7&2=HjvfR#Vx64hg{=G`=r(^s6pAi65F96v-$}#?Zh^n#7%?3Q z>MSd%=SyPix3oW5?Y!tIk@;AF5lHqvtUB+yYzSGGW<1p}ao;OJ#71&L@Uf|k&U)UG z+l-Tjhn1V>PCKr6TUGzE_%lt`D}%a{=DSODC8u4A>|^OOe&aalF8M`N_G``cFT&JG z2Y98}pV9q+!y(74#y*|VvF3Hjj*=b2xExEc#$ltf)WLc_y~!9U{FGe44x?pl^X7dp zei>@U@}dJH7Zy+fPFtSsI~_ub4IC{gNFo(+IwbgBxS`sDgRv%5hC@i|@ znRjug@{KohfmW@0^io;PKBC92fPVph>!ld^cwP2MpI$fl!Y8LjfyT$7*Ir3e+`k=` zU?KWabqw`}7ykIy_CEMhnUN>ytGem;1oa6uwN$ekNnhn}H`FD)^v3&`Mp3Q2G!TyR z2KCV!FGBrrD;@fS?)Ax*MUqg`^2#t_;9@m%sT{`$@OUf%FW3}1Kh0zLvXsX3lggeX zmA#txaN-?|kG4r)TpX*iezo-c*To%=)lSBdwG+zLO^miiWN$tC$;Fm;E_(iW@!fYW zF1&Q!BjU@pe@;-AKfpLDBA3M~Gwvo9zNFz)(swJpwCms^{}~eozw&WD9@ndO=RT-f z=}P{Ce$i{q);IL6v@R4{FD~1@y7~;sD4h6TJJ>1IG)y aTsqrs zuX5WfQf2qwb|~`WSJ3Ksc;hoCG*jv_@B)6G02>jk)(7K4_rbWg+<*t)AARrqXC(Rt z{C$DZU&Ob$T}Zu1!5T4b1=5n>j 6`S&z|%rUXWDWk@%h(+F+2E{_cGF- zMfy(nEE0XQP2Y9Xciu_({`N5bbhyq%N ze<{f-={s}!H#O;7?^Ulcdcvm=-^nxRYY*<}`(66J{q^U))uMQ#m;l^ wAUArOZmo zY`?RY-a97Yy`y{<3`gSXZ|VJX2EVljYZgKD2#7zaW^0E?$K?`wokxC!^Mn s3XD@A@`p$^CWNtOF*^Z9(@C|C64ia1RiDr}^#$-fB((UT{W6*h@m*ZXdNM%P+3 z>W%90A$mZM8|aE2AM{ E~5`GBKSh|*dYAAT6dw zMkR8UD{bc!9lBb1*@f5zn+wV(N34_TSNY*>%JlRxE3!t43Jkd(QMd-%Ho6cZ<>{ zzbkZPF@mL(u$&5sXK5kT=1CVvFOxJlY%V)rGK^S9`wQFCnEHY4nVR2Eu3tw;O%y#d zMPWP Fb`_qlZRqG-*ubbC?4|O&; mvBol-)h#xj_^z zQ8uInCw4)l{+y@^V%QH$QbISDR=FZeK73D5iCz!6#*uAs>7nc^zfrAU!hp5%_kHtF zzngIj6O0qJ&flpVyCZ5mz=XqTWE}Qj8Y2;()8=Y5gKs^rP~Xxz2@Ggw_q5N&oaN@Y zGY_UrKq2-J2}NvRIwm;J3^`1@Fyc3;jj>VLn!pHO3^|OEH3^JsA{`uTPw&H&?N+p5 zp=#vZmI<{A&-o$8V>dOsuuUA1?c%@(j#4k6EQC@ntY@29m1Enk_N9GCKN>= =T-Y4yGtu|01feMuQ%<-y_E`)vpdo?^j%5^nTSBg;bv$@_pio&FwZU zJe=wNB4B}4%IFYPXc~%<_x+C^8NyCDYRC)Aa75s~XY$px>SMnX#{@;k4i7&I-l1yu z5PK);;nQOGP}@nGY~22zp@p;qj=NtCo&Ot61#W*yS@gDrI>U4Akk65idi7HMls{8H z;@yQOhuD>9Q>%XW$sxZFm7b5eA3gSogI;EM85A5Xr!IWsXs(OErv>uJq>+TbgPfmr zoWrR+X}I$63LY6Vx}?$XIMAVe2(8|=jnEy}Ru^%;o@tY5(C4^t?zdzQQ^irnp|WqK zY_uF^2Z7}X#=|d#q-s7M)zurv0z~?YIoH0@Eo2QH8s5v+KGq$#;U`zNM0(#Eavm9s zb!#eiv$5{bas|VBjaw8kcs; (^yH}=pP&3R^kjgJZQpBM4W7-~rvV#D2Mn}r0b<{RHpZV1*x zIy^Q}k7Mm=Jvaa}xm`te=GGz4twUv(gb(QZZC`! )Y|8$?H}l;rB@IK4=ZYMz+JKz|JjR=KEmr;anUyS zO6!XHR#;rjm(WMd!Yb8&(ao>!tG+xaTpnyD>*d9CI}=0PFTCh@>_ylRpC&wrY}bQF zzs9H1cQj)^Zg~0ophR!$2ZNZkoqcCQkN#t@xucj>H#c{F8~&bKwe5*nHQ~YCb<-RT zO>K=;H5yfpCd7e%LZgn$(S&+6>Z$`eM 4SDR3Q4UvAo2$yJ*3_uOPy#Dd zqYlqevrHYG(r_3RUiA$yfHmrI{?Z#4sUzglSaqahi301aswMc~R8fzQ6>!EeO3$qG z+@*P7_beG J@aIw5uevdtFAaKL8Wi&6xdcG`V}0%K(MJrz zQObjJwz%!W5xST5d<5p`;lY?y2v3CPD6>$(hI-@Z#M6`#ejc;ZXnf#%+B~km!!H}! zk9&Wn(SFifs5!eqDtV`u{VhA0U(+YJ2U|RYj#s>nMkglv38ELVSnqyBNJ=S5xi@KI zNy-B;JtZkqo$d)GDYM)E)=ja(lY^e>LGr2dseY`R$-t25(8M_!k89B58brjRlM5$j zzeLCK_%|UB&Nn_~>naw!oaAin6}2Bz?Xp47PO3efYOAo*InTog<%5X=O}~0UHD0xG z2~Qa(h91Ld(cS!&UQ~A~rjv=#9DQVv!wVN_jZnQ^`sWJBcsGPO722cQ2J!hQ+=}1W zyNIH^X hBrWlisTiIZ$J;uQt1qXLGk|iB7@aJeh?A@u! z$_mNaui(GL$2p%)u0Kly%NX>m9E>?Ad?$bS$sdQ6(f+g7vuY4}rM=LLlUDVg_Tqe- zGJmV~uf16_g0*i_yOcps+Mv)zt?EzqWbL50W(c~TR_#>bfFa_wR%s4q4SMDdTE3tU z(1ib@${BRZ0g>s~y+A&^1l(>{3%3vY-s`)+3UVLw;)NZ)cpWE
HsR2=3(^$k zII*{>$v*t9{TAtidbQ*2n;a)^awOigxirCXB!r#hs0hKCtvZfea2@v!3}qeHbP}`2 zRbf{qks~|yE=!GTS65Yq{GRl`VKshS^izA6`*-+sKKP3-Z^qLZ$~sOz39FmWOlW## z0+%#_4O7v^sxUAh2LWow&x7&FoNr%=a|ClW!ButGqo7@Pt~xkE+J5KuPSD9WznG9& zr{LlzpwtqpkpAHxPKt1 ysfdB#l1Of;I5C|af|2qU4GZjjv3XAD%hAG-+ z`@yOj k$lN$=@#jyZEDOHD=O-0_j%9_kUhCs+3{SUSP1MXPC*%HsdwvqdXPm zD#nQaFS;>}@$mK6W2eNP9<{nXBKOdSy>lL#|6teO$Cd`30tf^U2p|wZAb>ysfdB#l z1Of;I5C|X;Kp=oX0D%Ak0R#dF1P}-y5I`V+KmdUN0s#a92m}xaAP_(xfIt9&00IF7 z0tf^U2p|wZAb>ysfdB#l1Of;I5C|X;Kp=oX0D%Ak0R#dF1P}-y5I`V+KmdUN0s#a9 z2m}xaAP_(xfIt9&00IF70tf^U2p|wZAb>ysfdB#l1Of;I5C|X;Kp=oX0D%Ak0R#dF z1P}-y5I`V+KmdUN0s#a92m}xaAP_(xfIt9&00IF70tf^U2p|wZAb>ysfdB#l1Of;I z5C|X;Kp=oX0D%Ak0R#dF1P}-y5I`V+KmdUN0s#a92m}xaAP_(xfWZF@fiFXqw=?6_ z`tKO}Q{*vEDx@2Z(Wez$3}TY+fBUym(f^~L*>h6o=u&6T_LIxtbGT$3{!6|?%G!3v ztmIkA{?Z>_LuZsEPrvopo#lIr&K^4V^~Q@kzgcwT<<7*{{-mzjGd-{Ghb{hhIk}eN zO*Xs1Y6qDq59#illU%rhOVAb+CvsX_D!010z;4PlTY1i4v7o$A |BY-p3fChKQpB^ zwqlFLY_-pldy{w?+t=cJKKEhHo^P;oi|@TBW5u#f8Ecj U=N#-72zJptTfBGt}$ZY3~=HjBfB+drr zz%~YEH-nO$w-y-+xY>8;q}pa%uBo8FU^iQ3y32~K#oTH>&tx~)O+aF))oQk;a*GK* znkCL+C^F^7gQ)~2aTdp{z;h)yzSRI7y7SVjFM8 Kd*5)>KZL$1UG+-FoR3OMxj@hSF4IG+PU$`_y3`uffY=bD@Rsv6~9{RF3|% zHvD(pK7IfwDg(*u*I%1CbH$PjnY54okMXk_;zx3isoW+v+NRB$rOo@%Hipt`w)wGf zEFRMbF?Llyx99QOZl^gl7w|NX>xv#OGM5xFi|$>*Ea7vCH* t7QTBiV$|1|`Y|d^qZQjg7Ot{hcy3zTI)+|k52{nRTNwlTs zdqy%OK2{V-rK|ZuvvoU{S6pZrRtmo&0nE)N8 AF$(QV(*Sbcwd_ zUZU%}muUL#?- M4c)I=v~(F&lJ1w@vt;;w@xANrxnIs-IxIaj5yeIM zuwO7Rv#5 0-0RYR=_tHnVkf zHUlx@t=3`-{7ar)G6!Zj9vJ1tnd@{Q`eWtfycZjC^LZ}MWRtxJd97T^%7ZtNB$H$i z {8#EOVac5tp09C>SeCTSYogn`~`B|6&a%|57R{5(fL&O{#A=sn`}0z54tBmzT9M& zo~3~fGw0*Omub#7<(TX;Zo~Bb#75)dCz=nUqw`16rS@<_!xSYvM`bLw=$4plm{ZGa z-!<8Ho#VUC^ L+- 8m-z zHh60iM8qX9dfST(g{E8%Vg=D4i|uoX*PxYd=ZH71fG?7765w-JnieI(`TD#f!-OFw zfSa_LcED$9OA!`X5{XfJfz7zdke9c~Vm22b7L*0Qu-Injau5)bfI%N}wsYEI{Mvcj zEX{S=5NX7Ca>E?nUcwVU#T*4WqZ<4B%!Q?}gO}^{h*)e)BUvLi6&SWd$NiX&je*wQ zyLi)@rE8b2$y&N;_0rY%u6YoT%U0ZbkK{|B$5unpW?r7qQf{XI#=MQU78ooxIY^b} zd8BmMhcCe#p<8Cj?JJ}^`4_sMDc`NRf3cKrf@|9(&6;oC$MSfOnZhDojx#0GWh$~1 z+Yzf_(lI}1&dVk(!B}9}Y$GPuC;GUs+H*Hi&_jGkaxj**t-xH8Tk!Cv-0isqyp7vN zb^|f3nJX|@H}grH#cZ>gNWf^sMpX6>Zcg$_#Kom{guN6t=Fr61>}HFF&y!^N8hy=4 zrcnBtO=PMzgLRXIx0)>Zn{w^ef@|@M;gZ?p5rdQIwQZ8xm`ix;CUeoITm+?e-NosA zOcokUMVssf+r$2`kBv9i(((p^DjWYFkG&S7Q>Y!SP&N_S1V6sgILFdmBSq&RY_ysS zf7pUyhycyUj2SbQu32;M8eF+_3X`#X@#BnH<%o3-^+piR %Kq6>qLv*fz zbp}i~{Gq(ixPR5!Ot{nnUW(!fzZ~icYYJ0Q9$!k~Hg#KKHQDW$Mrq+yWG 7yMdsqoSoX;# z1qv;zyyU2@5+J_0y+(Tq?c_C$w1$x@+O{JgER T%D6oH}@n9UZ7 znzf}GA2Njy3C#N@@?)dCkPphK%qCir&a!Mr_l*CRbb+!~XFiz9*~~^e3@??DNA%HS z?pd{l+d=`qyf{rFGj*5NBH5Yy3FriEaS~UEwdGyft*}`zA?CchXs-hO81k?Lc$k+> z8^aWt(SgleY(;oRe3*(r%#_Djpl@VPsV?QyGX@RgP_Ui6nq+dv)@O9Hr2jEmP?|+P z7qakxL0Xunas?$O%Pbpjx0!PvHe2ioi5z|@GNf$;k{h0aFv(hibE?H($441q)(SX~ z@-NQ)rb?3MvG!c9ixE=jc+L7_ZPn }`LC6Z I#li>AsIMkcn>4b%-cv#?KI&J^V>_z);!Kn!ZuQm%CY>%teb7HOJ>@<8LlQd z7L>uK@Z4q-WSw{)?xPS !EJB*B(=wIm|E!6prIv7sX2L7@e#CuW~v zmMu=jgu|&I5`?m$VxD|Qp$Xlg4s;M(6h(XqXTuJSUCPyP_n2qVKHuz_IZ%;@v3E%A zlgB(!vz&s5Iol4ol%A!KN6sKcU$)rq6y$L3PT9L^Er`1{(n^&>d|J%GOJizbIwb;$ zj0RzDDYh)Mxrke>SQO#UXehAJ%|h+gpVIUF6u(O@F+rLg2qGCca+HXJZ1%)d4a0F6 zw0{(<-5Q%Dbt26ejTweQyH&D9KD{v)!I@%4ZL~Rvn8`qTeXX)wY)TdIrHnae3&ewq z*V^LYGf99AoV^%D91Kzcb~MnQWDQykVUyK{M2I3FUt5a7h6`v++O1$L&jc$s9A8tM zh^3+}Nt$>VEx8T?0BH$qlw)1A_0hzn*|%GGnJ?-9wiA6MNc(-Xp@vOdtlME7<+xo6 z^`+1qOIqSV8jz2eUp0NZxE$7ag~Kt)Rdr &eeRxH%v+oT9*n+eKdHX6ye4@cb$ zwUlTi QJ;O3_@`-v%i@c$&5A #t+u_Gd&Os?3HNAZr0WW6Ytm*U &1G5kTPcf{UWFMqO65aiDOg_y|Q86~i@JHa%RZ`Ui-xcd6>^;kH zKm%ooycz>(&V2KSL6X6P$u;Gg>;;gyEqJwp%|Y_bP-=-k@>EbQpYqBrvE;=5IBhHg zD%no(1xBCcCBDpgc{6>+S5`~pkx=BrwC0&M(_0pLZN!j8lht 6MvJ=?P@n%E;^XtIRkf!*1g#0E3h>@~aX! zXg-g|ODe;dU@XWBLG66SP$ )z_Nv@z-x%mdk7x v~uxAkB57a=biLb zQq!Vh1ZQ%Ij|q9N4}8cmgS@7{S{4j;i~|7!TpbDDF!;p(4|ymwT(28q;<_Ay*216O z^>0KoCpV8@YRuTYtjKIDU9W|l$?L2i0D!vWxFxP=#ajZK2nc )4(&FsqkxlSP4dtGG6ox|_ro|0 zrjAKMlII5-uCmx+{tJ0~zBx~t3weWOCTvSCVpZ}e(iP2^h0+~{x)sJ1f5k<#l#@1e zhQ&dur?vTEfWXWCZ6PG&|D)|)m)l5^e9zo(YciX6z;v5Nsy-q`N>w##bxE@z0E##Q z0W<)LRXsMFO_8985pM;My7cAjE9`sjJFM;R?;epCAd#ecc4WoML}Xk&JUl%77E_ee z`tI$A!@rSKoePfGp%+P!$8)|-Y_r-(lGG#$Y08EXSS43n8*k-YsEQ|n%j94axL;SF zIOo@Rf5f3gSrRh_5L>LI1>6DKQ|t+h`qvF1y$+pFcx_fzub=g{MT-g>R>CPRK#bl& zGaAn_KKaNYs1g|;e(Grqn13r}x0lQ6tg9n`x#HKaXhqE9Pp=x!f6ULri?5eAI`Pn8 zL}bHi8#xEVxONKpB5TICocC;OUR-}QI{?+aoPIPv=CF;5AP9JMa!-;!K7P26Q2*g? zulW0tpyY07jGOGsf8pr+^nCVSzkgcXz*DkEJHi@1y?*_=p>NH0Ye#20e{YY{UZ-#G zyJ@%InIuhrGGg)$)9$XGqfzr0JtvcXy4BvXZ+hR}wjY-MEd4=0?ES}(=U}pzw)UDs zmDT%x6Aepv?+^N&_&yj~CoIq4P|2QuXhr?~usQ6e!|~hr?XaV2!?$7cS=#AOI-}vJ z>$*>?>rm;%GWt#8b5D$Uo~vxS{rhKy`bhhEvQ#!pOZU4!ciQRxpq=+MuQuybD4zc= z_h+E~@9cK_lkFe<`TUtbUnu>+KUf~U^D%pW!FQiIo &NS#PXW# zXL@pouvoj_j`Ta-LDIs|CJpen_rY+28l~Bzko_KY{&>(Gnf|LK(jg%}d^&7N((ZJI z;~xJbZ}x6#nF+tgEw$Soby3l5h39s7J`2z1*eam=xS7%u 3-y~jgORJ}{P(D{OTo6~(|2i!fIz47b9b!g-e5dA zAhp@rvpn7Ya5Q*Bu5r@o_TOpX9eUI0j@#W4@BP8f!7ktWOz=DV4T9Jcy^}pBYR2js z4Eux0_+SV?I>XLLN+g$m?Lhc=*AgIar{x{i?{;@wOtL(029va_I{4o0cPHIuulpy4 zq~GI7(}wHsgW=H9yZfE?;6M`%rf#K&&9_2E-nZlXZm;=<%G%vlbE0qdo8ESJfAM!g zH>Mwsy2@mE>>UizybcF_&B< h4&Z9n?Gr^NwU`*wFCMjdmSiFyE$npUGJTrJ3^@LvvJbhO^q1v1RSLGTS8Z! z6aBG*?A;a#zv-d pcZi zrGMP%jK+I5i0 S>4{-OO?-Omp{Db5gNF$xs z?@qrp`eg`p!{RRO9|&bF-(-O4Tp^Vqw$VqWv^j=8B%*iFe4EekZf%BlTMzc$8 l-W?(A{ar}s>wb9eHzyE}B AN!$Cs-}(V;wD;kQ=P$m0Vej4H_Lh)T>2Jq>da?EWcK-e% ze}D1A_P7tGDIatA;$OG7^7m){KAQAiJfk+{IsD;=tu58t?Z;)94EKEsdD6Yz!DzqP zZ!t#wX1g1Wn;J2{2fZFRV9&jSp*=M|rE8@RAu@)ctwAr<#I$-{5vEd_>Bp&K!rwu! zm$nConizXmod>-!>T}zOhll&g@NhKfhXpu9#bhFO Cu^$Fl6) zg>Tx)z3d*_f$|JmZ`1Z0)6?6#1`yN76R6!jd3Gm}-i!gG@@cOa57He- %W2U4RQ!#t$H^YkxHssL zvnt B^Ay}hVKq$#2d%wfvmF=L X@t;&hxicf7W zkpt6Hn~R>>Tn+-^wP*G|Bz+jWm>d9m)p~&CFz4C8NhQg HmSZ-4V|o{RVPM1K+8lf!NsZen|Dr%SrO zZx`O55 (G%v2)g!G)0hq7W2%f*XQXqC;9LV zYh7fU)06lexqa4-S%FE5WFONbA>!=H+C{mJQEh_dhzVIOjiZ`95l($ZiD>VpJxBHp zW~D*zntq;Q1}-ZD^a{`3ry9L*<>>t)y}3G1WM_EIJRcoj+1XT2j(Pkx-DHB)K!4cP z7<%e`o=R1&JiN<7^3>ixr3l}#C?s75WGVV-On@$rzowZ5aEdl1euvpk!=X>OFQbW5 z^<(})f1j)#glq9>eL`knzj=zt(%hw`-`<>sE+y}u9c5#De{_3- GbF#MSOUP5vbBoKH9g?KT|xWvNhAU+bNnB(>uSvvMmN%gix2Hw5iKh ztUM|uHS(SY)Ct!m#iyi#yhmM4YHB|FjR@U `B`$Kh4770yD)SZL^Y zI 4t> zg&-n{01JSp^z!-*z>ZzNc6@dHRkAgzAYIxWJyq7wi6^4b`Pbxler)_OPve7+=U=bE zLlY7pMo*4!=h5UUkuoRRo}ElZrqI(&r`L;f{zv^M)6*mDLiN Bs!Jp5g?%Tk8upD^#1vSY3 =6>5qA{>E%Bc~`8*b~#1ett}cf<43*?e)sLbm*}U{ra8nP;i>JiMD3 zN_h9x<9Xy*lDR5{?=oeZ@_r@p0?%7R;!}u>wW0H+ld=RegI_&OBO)(0d+2TK8B~jU zM-&FF=lh4FiwhCS518s6otP%gYzg!`tS9>>d +rr Kg`t6VoB?o&yOw)@S3^qKk!`0s% zZhBuJyJhVd_4VHoTfN-ER$2b;ju&aEJ*+dQH`+5;b%L?i6WRa+Kj s<2;r17`3O~G3h K5E`7pn_6&_(PaVDy0Hr-(# zviI9d`=xg+em&8X`qR X5^(CuhzPG%>kW`9TL zfPjAcy45p1mlFYLr*Q|+`|RY4@|`+{&SY=m+fFjOIMNo!6QR4Tu#Tj+=eHY{@I2)Y z5H48H_C??F-;uIf8W2uz7kt;6As?NaT^-+uD9o Ho`f*Qm4iF1r(H4#9Nk!rW)JrDxs_&8-qmS6TAVRMUM)KhbIe(^EE6v%K$&s59| z`>DMPGqub?DEm!)%(vJpgSa}QbbrD &u7+;tE-PkAeI`7EawIL zRixn;NAr)VESXIumpTiQ&Y1+UuPTEw(#jf3!S65ngU_CU1Pi^-E^aSS`U4D8hn~QL zo}o%VhUz=rCyx>7i<2Lci<4vioEOIK#Wpscw#V=^K7wa7ftPJeD)TRmMehNX^{%z8 zCq7_B8yen$9e !S~p#7s}<&-3QOo*x~lFFu~y++KWiAhIQ7bcA t)3H8z)Ht*$)Btzc*i*EYW|VuXIr(Ga6xe|0R0n;f3QRH zBLD`Xafv44=C2m!2bEmgtYA-}!v%<{foYVHhm;|fI0&AZtmPVAV6^4XiAMc~2-^8o z#E{L(EIRbgNy3(e5MSpGjw T5m1QcmmRl|A7wLAtIO&C4TVAP9OZf`jCxzenl6ZZ;HlU*5+b6 zxn4X=u366f8Lsg(T;plDb{*_WaH2@AzoJRSbHG{SdGaf#iHLA>*vKP>q76d?NY5+A zq9=bsGu}U^SR>JwBYbkF$(-FxJ8I !i+oyZ`Q5TS7s@&VtU${P0zd^ZjkHsoU;BulFy#myhoQy z&vR~P(m6c3umx7zm~sx8#yi;)as$W4Hw@0hfis?}tqur vUQ}*Y# z*N`M%eo8ZR5qr;juqL;9*ungX3A|X3ghPqgaXoPY*Avq%{f0KWor}F2Ef7xV;P2dx ztm)!Ao3y>#k(2MC-$58D6Ma}ex PqCo;-epz#c-x%Q4a4 zg#~<<6Aqjmt0 >Xf uEIo(oY SiH@u7M zh-5nXB-y6Q*ba-m9HPTC9LBYtbWTTpC>Dut*>77b@%N47wT17uu-^6!qABO(&(L*5 zahadS=h=yEs-IyDKO_B3!xuZ >IcJ4rg6|7Z)h!r6y!@StZa3 zVpq~R4P`P--n0BV(Zo8%dgt$Y#nuOU6w^5KTbg;`g?=~}r5tIh*^YU&_EkO;@$&vF zMsCGCNIiw@VM!k)E@r(8GyWo4E2CH#6j{hFooZlcAm&O&n7r0yO(`R%o5**E^x-}^u! z7VN_aN<^=|l=YOJ10AgyObl26^2LnhMsRX0`S{cHAYD7(_?jG>eUX12n?IbH5+`aa z7J4Vo&+tP| w2B8%T8;yJqfnz*bNxhJl_>ZiqO3H)9r3spLNO%N$b-We>ykSU(c zky*l=1~Dscr^Xlh$ -36Lu#-`mb}k{T6mBKSS~J>Eh@do|p5ZS@81Y3&dWs! 2Pp{%Og_lFfaUhG zdU`+LiR?Ti{zv8Ef5e06&tS$gig4it!hX+FCqUx`R7U%Im@Vzqv*TR8E(>m}7rmW7 z=j1mKuvcI3=X5 4unl(81)w_5`+n0iZug2rLdC>S%WT zU#{mOls}yxUA#XzGMf35CMV`$VBr;7Bu$Ix6MMHmIV9<~Rsb*jgWj4A^%qNrx4z*d z? zk?oX=AE%J98ofT)T~qi zH2K_kKr4$h=LQSP@b0}(n;hk{akzBG+nimAw(=b`Q;OxC7wQA)vvgPs;u~fCo_(>x zR>n1MX_|F~I?uy6vM!P4fZ-YXcp1iyCxZ3EYeYYH<@4d)N>fg0+4#j!#6F2cvRXo? z$d`41_pD*P=dhR;V1a3xwL342e_j}W_DbL91z60NU@ rX9J$stwS<}?BY1cE0 z-G zG9@_<2BBLcIvYzu%Vad7v<>=f`*&5|SR7;hhavU_a6}(!POJrgCV@8e1$qHlj{bs@ zGX#ef1nv!4!Uu0C(Nd`V1%AX5Hn2A@Tk_j}0sv6KC}aaib=P*uMGYn$-wjS38_y>DWsp zq(5m$V@L7qozt5C4BsRTir+aKUY+A)c6F(gCymEmc=Orm!-r3pfc)#`bCSMO{XPi# zDfJCXZc09Bi07NDj;Jrptk7*Wn{S@=$-ZCaj-bWQ4bGMNUR73OGoJxk6+&sma?B&J zi}3^b?-;_xYThQw2Xp!T*8bjK63(Y`SrRC%zl)cltjC!npEUXYO{KyBi{(O+mo%SE z_+(XzhzM#48Cf(QX$&HR5f+bRzVE*-&8^m!E6yc8k7Z<52oRfCk7ajo&~0NDpW%Xj zQ!LSwK3>V2!E_h_-|3(%_Zutu opfU6BpmJ>px$uV=!kCyrWA8ZWl? z&-k_dqf#~B&m8C6?@e?&j$0Ce`0nZs$f_~7@{^cL2nwi9IHQ|Q$N5JIsu~ZeTCf9$ z5f%H);~H=04TopYwm1HzfqjGN-7yI~Xic zIJ<_+;u;DFW@jN}P4Wks>aZug3UV0Qh>Bj@3rK#c?bw{bG>7aDmgem^b05>}*OH_6 z=Rl}+_R$Upr(uUF+wmgEkKAu_xljLdjPWl2?97a>T95tOog*>te*Wy~?)OQuz4`3< z=2nt?ziAKGfgneD(`q%gpA+wtZ~Hpy4DGD5;rTbdaDrPLDV(AQMcvR@Z^INQ?_*VF z_mj~qqI3c&0vIijgGhNLr#UF2_ M$5PPVvCMktY7}cfT=a+89x(BtzU$MPOA7H#BZ60qxZEhwxP! zE!)q`zUzsnX!p=6n=Q`%>A@=^RY}gF5CUSYbSPKx=o$S0Uo2z;CM$5AWwf2gp4-l2 z2mQBwEV0c~cI*3};S?Biu&-AhY=|)!mi>Jb8}JDZ2IFz_O($t~#+dTrqS9@r!I$98 zWDmcmLOSj&2NN0i+ZX?~gNdxCyFqMo)NQ6qiIx^CU#g@z?r*0UE2o3q=#r6G+Cjhb z^U%Cm(n<4;r^Px#7c8H@<0&=XZ%*9r#?oWnV5e(oShfaxX*^r#zuLwFC!GuiDaCs| ze3zQz&X3 3yYT{}$GWg;#w%f&IxjRUsZ^b@oOJE?LQ8$Beu>#Ax z+@R)-{Qb@w^HfNgnuCs~wY%@|`oPe8=a=+PozWon0hgOpZcf8V69a0`yENpa)!NVd zMM3>G|1?>V0~J;c?hZS0@|uhW!(T95KNz(-W@Ij)W#8qy)frC=L^y@157{@LV*$^; zWalTGIsnP~NnBNW6LZNO>CO=phN07JS;&r{XtqVJ7Zb)Tj7usp-V#DSgxF vrJq_Lx;JXip~FC^M~zctLd%oaF0ct z&r0(hbLML!d|PS(9QHD$p@g)!_VEg6o6l9OU+ynEP?onik~zuB>ybNZ#FV9a@XVOt zMhA}KgRtBYORIpL(yIof^yN8GT4^9!52TH7`xxwJ-LkYeI40PBkMZ+_w3g_q%Hr;k z`84jgE4z}AzC0YImAay`OC%GYDmgHvxa74pZFraR7|JuqeI)cf_A`)mD^sdi>#>jz zAGEal&eOu)D8Dp1^TzT;hZ39@GGA1c&(aGUi_)uLuk_^s58sx@%kSkZ32Cb^cx&5l z9A 9OA7!HzJ%>WFDpX`!8d6OYgo z=Nx&HkzNH7rLUk6X)F8c@NH{cwRS`Ln!2sbaEBc?uq*|5__yFERKj1?`NQfo&{w6e zR29-IyAZyuf>U+<>zca$wHj1bS6(KY@}+bm7x<66$7Z>mIPb-_bt=*P6w{az93R=D zD$-eN!5P%cte|TsQ(kSJw?KIechshxidd%EBqcZ?u0UUD5%Q6+Dox1F?wk>+nAY0s zKxZRGg{LPkNZVr*&k`*yY*;Z-X@y=I|EDzeH!-#1ReH@4j4=O{K7xygWyLd_Co3+y z1@b3 `ZDyC7RSl9Ze`=|5zgkgv{{ W9j-`Gz-aWGgKV8cFy3JMZqD zY4GmuMjvdIEwCYqGSKOpcWqV 3Mm-3xM+ye0;G$%)M zsMPmXvoCf+Ugl}1IqKn!YtG$;Z|-Sc_^5AXO!oGd**oPcr1g6EFAffHhAZ?p0xxr5 z4&QS3N@0>#owrdQf|v#mf}pmbk>*}lq|Zu^M84Z*Gc>PAuM79U&WMl-5kr*MLhZAh z4@XR~aVnnou!+CFxMPL39 +t2{^| O8sec4t}E}s#Kv8TuWFZU~^YnLzf zL%$0EvwqlC5b!Dx)jT~`lx^YO?h*mD{7Vbg(v~ {cnH! zzXa?5@#GJ${+%F-;G6!;Hu(SffB*0OaeFZS0byN#&=6!5Rn$K7TuRfYM(_tL%Z1JF zSF&Um-)3?vY@$ti6vg7|huJ7B$z JSWN@QBPQTzUMK9aejWhvHhe$(4Oxk zz{Lz75ghVn6e-<5q B=3iky2oH{}e{;Gmm9L8ChrEHD~* zg02)p0ux?qG*ZFXXps9iqUs0LLP`Haz%bpBq6q7*%QO8OZN_xmY>FRZy82~trps}o zJF!>~3(v+u78d^QylsN4he*?P^#(M`Vp7-VHT1ey-Zw(sp=X^1G{hwxVK@?Zp<;vZ zteDfq*nTk&z783ni)p6F2S)g~m_|*0E}32;MhQG|ofqJronp1BfRF+FrVF!p>gHBT z;CYOz!zD)LJUFGBU#YwkFr-p|V^^V?{vviMipRa)`ZB1Ff+Yj8?1oofUygA~cjx24 z3IuodIFjP1vd-YwE&KslAx-A%8?z(#Hs9my_x1I45(XqKFp3H3lkl8jK?GBPgbp`{ zP(fL%y+^@;EI*h&E8eEQ87yRsh2ldR>uB*G3elHBKEfE9+qsp3yk=(GF?S)a!da}% z_Ze)_I4f{ep)2?sO(Jqu N2KSx>Ol|FezDG7WJRVq_F}zm!Z6=ouKCxeeq}{p^(Z1?HQ{B`TQ{d z8RIpA=Gge>I_!v7iXpLX!Nxoc8y|Np%w=dn{lo_W2TlDR@1#JzY~}#=?L7@Ge^41Y zcVr(x5_v5In+9Jz)D51fu7-Riw5eow08qi5`?K;a?axZ8+MngQx=`eO5Z`^|?K&V7 zjg+8W_q26>#4QwT+`&GEsEM~0PQmu{=!fM$&;Xl}48|DINGAAXJ0l>=8h8ph!1)W_ zb-ch4xN(&* X1Eapg>M<9e9jae XE@vK0hqYqXKJ??zxtup$@?eD^V&1QmIN4#WHL;g37Ggf_ags~d&Gzlu}@u(ZV zstB7ezh3NExahzlj64X>O)|_0Uil#D6P!F7%j54ielP2s`GOGM;FYs^u`qKf^E<_+ zRix=To2aQmtMY{l2Baws^$2}J>#9h$YVxCYeJDJZLs=ZI6s2)#i_2x`jYs8i$m#s{ z`Vr%M5DNwxs9BVSlE(g^b#;mNDlTd_*)%L=%i4A2z5o~R3p%^GxqkWdDL0`$Jb9Y@ z=Jiic6_@4pKRx)#Ei@X7`SGjYgdr&|fMQ2){^vqDJqLM{y~$+wbekaR&$hN2gSWZ{ z>?hUJz<=oU)o }R2jD8mEC5ZxhJEvD{^4nW#Z$5*LtMddUj8Y8CVJ zgQ3waLBLpnA=lS)J$w4;8Fd`^Qed5%-W)gV297Yo9vp}^-Q%_E)d^;Q{d?o_U;mB` zlI&dhLAk%meJ1NKwgj6*>OQ+=BOp{jm@!xhdOX6knavMF9@o@=WsMgNA$!4ORCslK z#_q)cxKqMt^+rcQI_Lr)HQ# 6RT(Fqf3+ s }f@Qpu!U|jd8;@u6bmJ+@8~5`cQD(;hWSh6$FMcWYRuOlc&+|tdyNPa_ji8vRil`&JtTlUInh!*&(8$W zkVl;@>})N2j8ycVx}S=CcsVU@7B4NXsO=nfba<)tZw 6~=ILxE4nHke2bO6-}cYt$0GTU_IAYp^Cd;i$Fe9Us3XQmGGNmG(p5#%2V^lbVUr zbak0I)M=lW?RtEU5JXMQZq(Bc<^5>CC*}n_K02N55(x 0dFu9XIYNRm)XQ%uC{GJCWiCa$ z2gI{Da(tU!B5n!auvtVN sRd>YnS_FL| =Mk3U5en zM27Rz)JzAHRPp2(@WmBz*l>)BXJo_&W}uhea)F}SfJ3sUJHZp><07#rJ=9Lrq$|I& zExfzC6|v(KQ%*g ?>UgEZ|^z#zh}Rc1McyW2L(7j@@OS8J{H{k3hF2%iMG5%6oR^{j$`afEsP3m zy5>*sG2V%D+e8}>E39ue)uMgK2kbXd1nsFfYs4_KI47y9k(@$%r$3oStc7h}^c0y? zth85_4~CVKvivFB-Gs6x#qg;Kyk<5}K^{^yw8TBekP8wjO?|-b*JzV_iSxS }-ne*ucWyrLg8o}PtmO^- zthcdg451<>mCqcq)n|(jG&H^o6n1YQ#Ka@`DIccfEC5NL1G|fDtOwtiS->pf5lz1u z>Jli;0)i+wo-n{;2{~TIcWphAJF6`YV6#(l+B*_qk&x(Zc`>_wiZ7q}ZQFP9UrxD{ zi4ZONEidfiTp-hk$4X1a{mC{m#jg=uphOB=siOD+;qEPJ;l~bs =Nvha*7 zMNBu+7ikp-0f>WUO|wOOm=K3ZF>2(hrFL~U?3pju?428aZGrGDE**Wl;Pw 7AV1yEuImXyfL_)62 zr@G5cCm8IL<-S1A!qeIg?~Br8Sl-1o^R6QV`B^&(SrDk6V8LXhIv2Bp*}Gi6&jGr# zhW7nef(IF`pA)RW b08}?momHY|J$!&<^ zfG&vm4<3`y;z`)PcVcN8lJZ(Q?+UbG?}UQ0#S*>=pOmgn=ou#{98{8cV9^?i?*=oj z*bBeKjc4yR4-SgtuYZ3k8u65;@v=O_67wYfpRKj*`ZHZLiHGaWOqZyb_R-x)qt+n! zbKbIIg3BZ*Ddm^EgxrNuexMqAR%g5qQ-}>gsJslb@!N-55bMiSH?xvIWZN(&u-GN> z7C4ZxpXKoebS8zFVQv(q4EiZYM0zBiwCb^c^}EZ0<#2P67nDoB2y7bc9w1uSql! zj%`J`r&g`O(!_moH5Ytxxu~v! %|x@zFIC!fk|K{~A0W7rPS z_He6JMl`KzUCt_c8}b&$z^0im`-bv)AT7zuEVsuFY}ks`_`MI3c)0vBR9Q?nB(!#e zW0;rmYoN>dJxwDQDKF+*u7ubLPgy6+P_adLi^AOcCS|MN0}EhCG~JGW^$?eW*~4F# zE6K-&Y$DGXRYW!vc$5gf 9!LInH zm>utL6?KC3imv&HR4AOqg|P*$bfGp+i)Eu{AjiClp7M82?BfEfk695WFajsh;49AMgtv0mfHMa6}AZ>9FcV8zl9Cta66_Fy*fI?d>i8 znT$_g!7J8;d&TC_1mN4}a{kNE_Q=#bu(8wm6Guygx-OV>L6_v;k>=WZV>K43j&lf% zN{NkphXLMah@cb +Inz(k^&!m_V#zuDE;plJFl_ zZk=?QD&6#xmz*i*7ERCt#Dqk d-sMFU5eRik{d`BoI&>aM@L~cqG{P5RT@I>xUY_nr&alOMP h$UcZ+XP{|u6GlUZx=fIZ~f94DBRmx zz#8GYd^yL46WxKVm%hlqmb4v(SIU!;?$ZH_J_e~k^6$K}$>OO-I1W@;F@Q`|q`+^A zdKqD1ZQ5&Qq~?CT+Vz}y2%qByj$gJ`Ht;`1&*|qp`G>||ECJ&|ikcf~U5?&!;IqBU z^-kQ*67BDv2&hw{G!X6~iTk)EF@|gpE^nZ=ZpBmT=&ISLzU+QH0!Og0T*I!#8SAuI z7-65r2Co1+K`PfY#r!h(@<@uvQ~eH<$8|P)KRvwNpxI#U^E%%9(9lhlQK@QoT>?G! z1y;ES%u?O5MYxaQKnT7OOavIG0`NNM%D&nJX^QdQGlUNJdAR}|KAz~iGI `_}UU#iPycE{a{OUEnQ-mC1f+GA(wG({bW12*vHaCTQ zd~ ;pl-gHEyX-MWO%_c z &*I$ouNqn4#YyCmJ;lgx z5Md$zwR&aCW8_-16vPee=Lj`{QGRVfY4W)PMDR z`7^u?L4`ndVGGsSd0LVsrreD 3Q0|1B< `k5?EyBwr0Rd{W6@?E*CrRcyb*>{U)$BTi>63vFD5PFNtnrFaB-BA2lyAOMD7P zEBd(WHoWY*$W_HLNsJ>Q39t<#t1Q=KcMK$C5wRqvhnmt5ttXDLqV1{T%e-tXPHrVQ zZoIY%H(p
m}g}09A (Rv6LMK zV(03|Q`t<_{4TK9DU74Ia%K0FE#1Ti;rfFMHlh?Apgqw8`k7sZa1R$cNXh^PgS{v5 zWEzr@fnZ2O9PRMjc A6vHkxVYQm!IJ>XP8SF|23YFRntya?JhmnAo6myYYa2(NfD`?^V5Sf{* z{LZAUKnF&Y3 o2JLu`&t-U2(dSWg zgjt;3-pKSO2B6D1L#-u~M1-1IH?X`|FQIo7XP6#eaPV77n|`AG)ijI{=*Lnz<}SVl z*pIZUMszkjhqX)>pXQ3BKK~lN2+w0W%9rcnM;l|AM^bjG)|v2S7?!XG5ge*ZaRX}9 z`8nYZC&TsoMxidQBncIyfsmxf@1H<7^XeWiz5^d*1%G>;lT+@?xVXS*Nnop*lVk3{ zTj6r?JWgBtnfprBS{9Fwa49|J4iWD8`FsSWh6#JTjr?&we ry*(Ko>`ijd)zH?`x?&jIGeVv-0H1a__b^W^dnl z5#$1bJjW58Pp2m@8}ny^+Sd2ynH$bJxLe840k|Z))XgQr7GTi*9=x$kYIooIUGlje zL=m63ff6NTHJp8Z0TRY&;OB{9MHQsh;D-8;ULDUXp}VFGJHAiM@vIsn)|9hrEVTpS zI3Cw40{4eszH^jVHwTV=-`1AaOH^Llol8{%T+>f)Z&5S0^8TPX7`MkQM>FUa6m-E4 z=b#ZdY!cy-yR>ZcMMQWTcfhsn>pC4>F;d-yDmZCR-qfHm!B5@qCmbb85U$*FLq U3q^B@C3S9 zbw!9;`7%D4W0ub$Gpa4^d)FyhCowGiAfseK$4;%^yKy?QCG01i+xr9JISqe1{}j3# zXv$36brmdy%LSE!Qxfx8ykn0sx{VFb{If1q0e>5hjlPWudr0V&R%=A~kr6RVn#1o( zYjNvN8tmI@xo#)9h01ph#;M(*y{7hxc{17=`)!N<4kGFuVUJ%AyF4VN&P56*z_FUO zyod*ib^Xvr7jl|1&Xs)?`)nCke7;PP-!S+pC`z%^n)Y0EEl~tGO^|*uow`{>Vhf4# zzk5=s #|7D *H{iaO%DWJ%t+ zEZ5CL1wCDGB3R75=WFST2{s$Pc#Q8v>#+us$fZvFe!Pk?w9Ky1Vu% Y+% znq6gp?2vfrCR;P*Z{%l98qHpD#D$F7Z)ev(CbP>8N#gMz;Zi;RJzQ)cZA+33ObpDo z#Jni5qoGe5Ec^8KL`VGOkU(FGhM;J!+3)7ies+kRsbr1A&a6neY%FEm9NNv2k_zF< zb`}IVW=dx&K~XVCi0 idk>2a zqMN)Vdz3-L^(}Az3^O-9rAh`<0r!z@Oen%k_9Vv4q*-prAPE-6M_N=eOS!0}wGugD z`+}(m`<(S9>vKiB4;P+4Q={UaSeGAj1v4S}q)BxfBF|n^_i#*DE*(cp77C%2nsN%V zKhIRF=Htyt90`Pk9)RQ$4^8bOnaL^OBR &-g^_a5Q zC~t;XFK{csdu?ZSiypC %P?^h9U zmc}fVOL-M^!cL4nn2Nru>6BQ0W?B-s$1w8Bv07J))tg-d6weQ)IUi &f(AT1`CDUPP|1EFyKc+L%s&np`mOC1e{1MnvRVJqMG}gJrQzLm7%nix z2^XIPdXc&LOR5DF4fY{1oh?`#o*%O;GZoStTV37p$f#iToMVo{Wn~C2CET%PE$Uiv zh_8UTm8J832YFSY*a!NTjVIEFY(Sx(7E8&bC+}wj@R#2 wqa0V~k~dZbi)uA-zCNes80COrf<(yo~K-`;eR6 z+}Yk7gN=X^L3JNmsp(@@Mhv= zv{(HE+k@u|OW+=TRhgFKNj|!YHpCMU(020AA#Pd9N)OaULJRJB5=Q~4HCkwf?P4#^ zu{!4ZDvxy*yW_Af@8PA4s<{|i5&r;%VYrwPyFq;DRpZa1AHex3e;hD$`}57_*`GrT zCr4Rg-Mj`lV!YI<@hDUz%ZNwnL!aRDvC|bWiTJTn4+p>C)wfbjeSh#-Vh^YL(bfbb z)zE>O_MPt%^C6pOfn7C(!2}&%97a<3RM(d*C| BaLJXoMsGuN`+i?6byM_6MF zz?FbO>KcbpHy2Cg#qP!FnMU;Bp1 s-TT$~+Nn2OySBa}*uR9K|0>0VWp?^g#F&3#BOR-GR;yCN6;s4_N2;ak; z39H`E)o-UtaDB@?uIR7w%g8;nYoM#^tMW%v6~wt>M?5 {vs@MuG=8t4v~c}-!&KimA28Ai)nOc&3m> LK~D!jaU>hJF*55N{m^<`8i#vKXtB%2x@NxPc+@46QG_#I zY1V7nSGoKk6&kuDzsmqUtU`eb6JsfGI12HhKuP%DFtkjE7Kd>c4wY!sJ@G)}z$VG< zp1+}tiHA(l6zr3}rL1o6b)&EB5OSX}+EGNyOPmsDgoA?wy*Zhxfd4 fwq%~8El+lN1ma!&kVX86)NU3TeCX!a}*30sWu+L7o42qR8CbzcC)Tu zD`V5~Lh*k5-qpOC+I~2%DKizswYmUUJWiP_slXdq |BqxhLN<4NP jLjd z<=z|TDC~mMP>aWpjHlbkan-=KR6YRZF1~pJ+0P<6G>5%jPC|o?HNox7%-W15ZNH2| zse*}&0J3VLc;y5qOy(oX2XJvT57KfyWjbMXXqw|<%*3i3ph=HL6KDpQ<_6coy3c~P zvCPpm+YMC0v(>dZnJW^VdaBxS3Jhh4+Uv#m|GG199Gfqz&`M4I3+&^xe%%DMe7vcG zYs3+aFP=*>gbilEkOy6j%7kgW!E8G+>NS1A7b6Ifb&ez6Pi!F!qpm;YvUrLq7?Jzk zdg*(&>s}lg@A}Pc2jBAL3ToP4rDx1u)gk;_>bUt5j^GX1fX5%-NN1f!ilA8F-gp?V z=||Wz+>Hnt2J(tQx@kN!YU0!&o*HZFfvcS3wKOAyBjU{9mPCD$tiV2O{jYze@ESYp zh@-M>()JXtw=a>PI$T1YaP$eg0+W|UBsce >iQ@gLM;CY6lOK3@#*3mcPIU-P@F6v7T z=DWvYyl+u=fz7l6U9eMs#<$Ic0fp*y`Oq(+*4nX63iL2^tAdxP))`feDWCe#y4bgC z0t?CMoFi=={>D8(xWBq?%lliIeUr916ZK?UUP;iSek^WI>e>$)5cV%NKB>*&WyO-i zBIP%VN1*atH`f^-QP>sAmE3>7()>KqW|u}y@1p`$Q5R#nJV~F2UED1KpM7uM?1nmK zu62*TbA;t&h;kcwE%+c24MB<6lA?$*#sc?)r3YlWN4?=3dUSq#t0;YC0Mx+pz4rMf z(P7;jeqI(d*3@0#A@1FuvdmV#ddBi-6$NI*#4vHEsKs~9UR<-n-U4xp^v@w%GlslO zR#iY_=jY%j%@$d9re4`yYcLYn`uc1>V}<`e^iO&$$!Rjc-LFn9t6U6L+$n3y8((nY znx1g>D3-+kZF(ZJ&ni4?A?YUsD;PY|<%-<(-0Hn8V^3wdxVM`zSZY$7$i{1(l`*`g z@8+L`-d9%RoR31Vxs@7{gnO%7s(ESGtQu47TNsg|kRY8YZZ@VIf_*^@(y$Q}1R&LL zigmg_Rj82_LUgGctc=dxxR3rpxfR(7S0F`pv14asxvTnWVFVCW6hu|3Lb59hA%M-q z)j9EH5tEawG5D^J!0F5augfG))*dIf$6C2M;-qK90l+8y_U0>o1hM=kCjcDeb>e@O zorG)W*5^iapk`+7oLimGYbN%t^4bSwh+>RRq)Ah3*BGH6Y+NuBf|h17BY9RSgQ)}kmR~h5alTDnmZM1|Z&B!4Tr}$kSuw^iPnwD4iOOfEqFn5kjVShJ zeap4;o0-1+gXQmRzNY_YX3tiG7&T>m?Dc3_H>Y-{F~gpkfm{1!9?eLQ696s3A~H(y z#Q`hBGXJL4F9C>`$)pcd?RYo8xOwaf=kMzJOSq2)_p$c-onC{GA6~o$KFZJa<=m;w zMR@njzu(z!*!AW}|Mv4zwfLiUI`1Y8ZcFWq_X>sX=-WP*-75DW4CSt|o2kq_^9$Uz z_lmz$2ZL<6v?1QnKkb0+?z? bv?dw9_+f* z2A8=P0bA3i8af;`H0=W}?cD7R4)5$|p>vteL6%&;Cq pBnqZMu+WcHz!Lmf<*3b+Eev#*r!N?Kj_L?*Gw6^K0w&Ph$ zEh}(VsdWawEKitEH%t~&+1rZz=0}qE6;>AFeowf>zF|p%AlUh0ckiru{wMs zoS%*r;hciI9CR_54%OP#MB0SSf?siCqUg|4O&>pB+d-w6dksGNn9e-f?7j0VG~h}L zHT_W(!TaR5amv0TD#0RjD(bdA+&8b x%MHqfGbEap>AfE#!#RIUn_H?X4`Kin-4FNJv^UF9{=;Aw`^v#q}&0RMd_$jIYpd zS*wOhs3RCJ)YcJU#Z5Ya%L?Ud`VPF($*9>Mrw8LsI{KL# AU;5Jic!)&rweofDt+kokw_wW+ Ke5qB>52wTV|58tpm++57Ys(!wqJ6JaUTiZAzux`a* z>hTL)ESFlfQ*$aK!wB0FZH)T^Zdn$&+V74B9#LU&w~pNqlo`-{Gv>OSX**?lV)d0# zKA>Z+#XLqQs;et>PX9Q&ZdgAophHHmYR2pBqtm@_`(eq|w4V+CKJB+}FD|}@_!EJX z$n~X$O9ot9%rcJ=fWcD5L%zRGY-ydcRtW83_Y*4AUe39&3c|{(#rKM}_g|`S3`=O_ zIG<@yE8RKR-R+FhX0Q9EpYAvN2hE;|WhXyJ>mb=G{tKNprT`)M2Xu~@2)STUw4Gf6 zcJHpeHtq}G*pJbFS3klHga|m%ETi*-&9f2a6UDs=5xHt`yA^zg-9^N !a~`9nOyuWUV>wJqZydOrnlh0WQG2mlRdZk6uc)89yB+a+`);oaIIO2P+#GPG zg$qzQMK;T2Tys zC>a5954hQx!_-irP)(Vxa~T^2E(2AF{0pN>LfznWs@3UY2qNWq2y5-Pwhy=~ZYqw> zHicmHYzg=1w<%CUq$8ufj|A#==UuneN&ACz)R`QN`aH%5y~!h{M$sHu3RoXS3sDP2 zX<9AVoybBj_@#$c(!_1-MP|FD3lS#yJ5d4hmKoJ^tkem z3nhvaFdIVM7y|9{ODJSkS0tgX-u}l3M-9F-Su+~u`1V>RDASV|H*;~KlZL=oxeiP> z6toyz+6=K$6a@ToO=#k*8(|6a;4~F|usY<{8-#moxp$N=%O)j%u>dF@Feya1jsz*n z>&mt~#_Y64t ;)V1vGq?$I_Y% z4!C-F-06=8BgtiNu5{DMe0qB3Juao4FQ-ZMp5He!v9eKBY0wV!v5j&Co2SG!xWO`{ zc$=q0$hT8h%vQI)t*LZ~dv)|zcND8DQ?SKrJhF9$2rNDR%E@HO7%$>w8Q #(n@FB}$O6qR%$wx5+XLBTRyNiIO|5FWrq2d*b7|LNC`f=} zr|&FVLJcofQ>FxG8+6Kq={7$2%-rLFyKM;bAv~?AOIZ{pq6Fod{6^d4Fup=Fs^`;8 zAig1gH(d9|b)J%O-w6wBBke{M-Gj6UOVbP0kNfO%s&dCS^I{;4P_kzHf>+e%7C}%4 zW54`L8h_XYbyF6Q#lki1AzAP+9>oGR`H=*CTYduIuNJ6>9k;}Ma~abQ-l4yY>o|xq za WaSF)k(olVpRzr@v+>;aFd!?a=Q!&RxLLwyQ7U f9&u^-qMF^J=4f$0b$Sm^=L@*M78 NJ(rm; zy?zRpoTxgd#1tp`Dt;39T3at)i{|Rb#*X1Irs%R|&D$%i@h=atrdtD#{JZ z`K%JOs1}1S^stgQ)6iuk>y4}l+^(Q6T-Z$9@ 1ev-z`Sa-Zk_#rW2bs+;Op8H(OM|nqmD@j=>SisP zV%Zg!PSxB8`3OCgtX2gq%%20!>MqlRcC6bLhTmNHy0QIZV}HlvW*^zDUzk6CRfK%| z5GBZ&=qgCVG!!i_JF%Y2mLx!;VoaWKc2%GRmFq#M?rWCuaD^E{10SL>7m@2nqH#hf z!?@#Edu1Nb+skhJ3wIpEfDsnM6R$#sXF*8W zxAGilWSS|ddjMew!^S>n3;~#%8=$WqFe}Dtv;I(V&ZosV@CY!DEbb>)oI=Ypsd6RU zGrSPU*@-@KX@_{T=!Y)Zr_BZnNbkYhb#@_lTOzs=7r;twHilS0#YrpTLm37Y?U|pH zj!p0c_iygNLiOGwf9T5%Vg|cxGVaf1yoo%3vSGo=&UbS4ffwvCxuFNc%w-44iuowj zkr8J{hbr8P`H^$Gmu6AOcUS!^!pPqeC09QC?=uFsrmVH~jb)pxm??}w<3zvjm_X994z#)VD* 0ZC1@)x)Q^Ik%hyee*X9F4OsEIUPoq27Kls_~?vxV3p1ap>UbjUvG2bT@(G)Hl z+-yD=dL$%}%yUR>>fvzEri56uF`xxzyBH>d8#vp(*s?y$N< uHBm_erOvmi% zP<;ocsECUL=c`5NiKlAw9Nl~{4i`KB`OjrFVf$cz|Cc}i*+%=}QhL_lfK3D^Q8i)m zrE2tUd$?ZXR{?iG1k>XgJPf$;t93)OJD)8+X6Rw}c?v-dkIQ%xQ8;NAF4l{Q?<&%) zjxwJZvwOVr{(hIH{C#JKd(=3VwRE3a%CGQDJ=5rLXQI43dmVpH!Y5A)KgPY5j%o={ z9o3QpE~-<4o=TX!*-9r{X|MCH)6;kRy mqOb!YSrAp!s7+@ 3^ zVXJTR!yWA@H+_Wm?cM7cH`UMW6w@Q+SDy>-&*M8+gLFoeuqT}i^VMm;>BPCp-UVm- zL4Dagg@iCqA+OC*_FgU*<|mX>B=s&m+(%%bXRF!T<7QOrGXnoq68ZG1@=P1)pvB=i zzM97UQg=mF`oR0$&|H5wtK1LZMlJ{rYF>D-J&?OV7awN~TCJVNj$AL8(->DgyDr7V zvIJWX7r3v=W6J#HN Yna$*kfjM&W)-Bnl@8<4htaEb`cCA 3^EkV*Pk!d+f}}=cA8P?qcxh7rI92JMGFLVpP6=R IBy)KW!ZJhBbBc!77joY7GPRvZ0+PN+GzT1L1|} z+6`(7(dCN%N4gg8dy$(9`cH519{G_+9nTg_drco>8)D-^uoL%aZ){m0d<(#^9M?_e zr}+J!FY5b^#BO?db^GDWu5l@yUTVktd49!=NrFHC0R(~PE=|x~7}Cx9XcW|XfxRzR zm43F(p}sF `oka2_1F6Ry;;6tjFy9X_`x7g97Kc;nqMzb(^4$odV@GiG`p zV4M~35b@z+!9s)#+BRf@&^VU^=Q+*)xELJxj<&`Y%|eyJ$LHbzHB2H=e2$=nI>yK( z?I<{vW*uZK7U85&GKOwbyHXDBHoL~(>3#6l)9{a$?Hvxi`R{K39Tw2-v^jcX<&-C; zaUIV@%#G?OrFZ{iJWovT4<_mE;Gi!ishBoC7!C)ci7`(xU3|^pV3OsFZNX;^2mNuW z-uR8pbtOMuz2oknzmg8Y&C;x2+@Cz&bN(&%LFvsN?#v`-Y466Vwt)yggB5AYt1Fnh zK